Bug 20144: [sql_modes] Set default value for biblio.datecreated in tests
[koha.git] / t / db_dependent / Overdues.t
1 #!/usr/bin/perl;
2
3 use Modern::Perl;
4 use Test::More tests => 16;
5
6 use C4::Context;
7 use Koha::Libraries;
8 use_ok('C4::Overdues');
9 can_ok('C4::Overdues', 'GetOverdueMessageTransportTypes');
10 can_ok('C4::Overdues', 'GetBranchcodesWithOverdueRules');
11
12 my $dbh = C4::Context->dbh;
13 $dbh->{AutoCommit} = 0;
14 $dbh->{RaiseError} = 1;
15
16 $dbh->do(q|DELETE FROM letter|);
17 $dbh->do(q|DELETE FROM message_queue|);
18 $dbh->do(q|DELETE FROM message_transport_types|);
19 $dbh->do(q|DELETE FROM overduerules|);
20 $dbh->do(q|DELETE FROM overduerules_transport_types|);
21
22 $dbh->do(q|
23     INSERT INTO message_transport_types( message_transport_type ) VALUES ('email'), ('phone'), ('print'), ('sms')
24 |);
25
26 $dbh->do(q|
27     INSERT INTO overduerules ( overduerules_id, branchcode, categorycode ) VALUES
28     (1, 'CPL', 'PT'),
29     (2, 'CPL', 'YA'),
30     (3, '', 'PT'),
31     (4, '', 'YA')
32 |);
33
34 $dbh->do(q|INSERT INTO overduerules_transport_types (overduerules_id, letternumber, message_transport_type) VALUES
35     (1, 1, 'email'),
36     (1, 2, 'sms'),
37     (1, 3, 'email'),
38     (2, 3, 'print'),
39     (3, 1, 'email'),
40     (3, 2, 'email'),
41     (3, 2, 'sms'),
42     (3, 3, 'sms'),
43     (3, 3, 'email'),
44     (3, 3, 'print'),
45     (4, 2, 'sms')
46 |);
47
48 my $mtts;
49
50 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('CPL', 'PT');
51 is( $mtts, undef, 'GetOverdueMessageTransportTypes: returns undef if no letternumber given' );
52
53 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('CPL', undef, 1);
54 is( $mtts, undef, 'GetOverdueMessageTransportTypes: returns undef if no categorycode given' );
55
56 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('CPL');
57 is( $mtts, undef, 'GetOverdueMessageTransportTypes: returns undef if no letternumber and categorycode given' );
58
59 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('CPL', 'PT', 1);
60 is_deeply( $mtts, ['email'], 'GetOverdueMessageTransportTypes: first overdue is by email for PT (CPL)' );
61
62 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('CPL', 'PT', 2);
63 is_deeply( $mtts, ['sms'], 'GetOverdueMessageTransportTypes: second overdue is by sms for PT (CPL)' );
64
65 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('CPL', 'PT', 3);
66 is_deeply( $mtts, ['email'], 'GetOverdueMessageTransportTypes: third overdue is by email for PT (CPL)' );
67
68 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('', 'PT', 1);
69 is_deeply( $mtts, ['email'], 'GetOverdueMessageTransportTypes: first overdue is by email for PT (default)' );
70
71 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('', 'PT', 2);
72 is_deeply( $mtts, ['email', 'sms'], 'GetOverdueMessageTransportTypes: second overdue is by email and sms for PT (default)' );
73
74 $mtts = C4::Overdues::GetOverdueMessageTransportTypes('', 'PT', 3);
75 is_deeply( $mtts, ['print', 'sms', 'email'], 'GetOverdueMessageTransportTypes: third overdue is by print, sms and email for PT (default). With print in first.' );
76
77 # Test GetBranchcodesWithOverdueRules
78 $dbh->do(q|DELETE FROM overduerules|);
79 $dbh->do(q|
80     INSERT INTO overduerules
81         ( branchcode,categorycode, delay1,letter1,debarred1, delay2,letter2,debarred2, delay3,letter3,debarred3 )
82         VALUES
83         ( '', '', 1, 'LETTER_CODE1', 1, 5, 'LETTER_CODE2', 1, 10, 'LETTER_CODE3', 1 )
84 |);
85
86 my @branchcodes = map { $_->branchcode } Koha::Libraries->search;
87
88 my @overdue_branches = C4::Overdues::GetBranchcodesWithOverdueRules();
89 is_deeply( [ sort @overdue_branches ], [ sort @branchcodes ], 'If a default rule exists, all branches should be returned' );
90
91 $dbh->do(q|
92     INSERT INTO overduerules
93         ( branchcode,categorycode, delay1,letter1,debarred1, delay2,letter2,debarred2, delay3,letter3,debarred3 )
94         VALUES
95         ( 'CPL', '', 1, 'LETTER_CODE1', 1, 5, 'LETTER_CODE2', 1, 10, 'LETTER_CODE3', 1 )
96 |);
97
98 @overdue_branches = C4::Overdues::GetBranchcodesWithOverdueRules();
99 is_deeply( [ sort @overdue_branches ], [ sort @branchcodes ], 'If a default rule exists and a specific rule exists, all branches should be returned' );
100
101 $dbh->do(q|DELETE FROM overduerules|);
102 $dbh->do(q|
103     INSERT INTO overduerules
104         ( branchcode,categorycode, delay1,letter1,debarred1, delay2,letter2,debarred2, delay3,letter3,debarred3 )
105         VALUES
106         ( 'CPL', '', 1, 'LETTER_CODE1', 1, 5, 'LETTER_CODE2', 1, 10, 'LETTER_CODE3', 1 )
107 |);
108
109 @overdue_branches = C4::Overdues::GetBranchcodesWithOverdueRules();
110 is_deeply( \@overdue_branches, ['CPL'] , 'If only a specific rule exist, only 1 branch should be returned' );
111
112 $dbh->do(q|DELETE FROM overduerules|);
113 $dbh->do(q|
114     INSERT INTO overduerules
115         ( branchcode,categorycode, delay1,letter1,debarred1, delay2,letter2,debarred2, delay3,letter3,debarred3 )
116         VALUES
117         ( 'CPL', '', 1, 'LETTER_CODE1_CPL', 1, 5, 'LETTER_CODE2_CPL', 1, 10, 'LETTER_CODE3_CPL', 1 ),
118         ( 'MPL', '', 1, 'LETTER_CODE1_MPL', 1, 5, 'LETTER_CODE2_MPL', 1, 10, 'LETTER_CODE3_MPL', 1 )
119 |);
120
121 @overdue_branches = C4::Overdues::GetBranchcodesWithOverdueRules();
122 is_deeply( \@overdue_branches, ['CPL', 'MPL'] , 'If only 2 specific rules exist, 2 branches should be returned' );