Bug 20489: Prevent DB user login
[koha.git] / t / db_dependent / Patron / Borrower_Debarments.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use C4::Context;
6 use C4::Members;
7 use Koha::Database;
8 use Koha::Patrons;
9
10 use t::lib::TestBuilder;
11
12 use Test::More tests => 31;
13
14 use_ok('Koha::Patron::Debarments');
15
16 my $schema = Koha::Database->schema;
17 $schema->storage->txn_begin;
18 my $builder = t::lib::TestBuilder->new;
19 my $dbh = C4::Context->dbh;
20
21 my $library = $builder->build({
22     source => 'Branch',
23 });
24
25 my $patron_category = $builder->build({ source => 'Category' });
26 my $borrowernumber = AddMember(
27     firstname =>  'my firstname',
28     surname => 'my surname',
29     categorycode => $patron_category->{categorycode},
30     branchcode => $library->{branchcode},
31 );
32
33 my $success = AddDebarment({
34     borrowernumber => $borrowernumber,
35     expiration => '9999-06-10',
36     type => 'MANUAL',
37     comment => 'Test 1',
38 });
39 is( $success, 1, "AddDebarment returned true" );
40
41
42 my $debarments = GetDebarments({ borrowernumber => $borrowernumber });
43 is( @$debarments, 1, "GetDebarments returns 1 debarment" );
44 is( $debarments->[0]->{'type'}, 'MANUAL', "Correctly stored 'type'" );
45 is( $debarments->[0]->{'expiration'}, '9999-06-10', "Correctly stored 'expiration'" );
46 is( $debarments->[0]->{'comment'}, 'Test 1', "Correctly stored 'comment'" );
47
48
49 $success = AddDebarment({
50     borrowernumber => $borrowernumber,
51     comment => 'Test 2',
52 });
53
54 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
55 is( @$debarments, 2, "GetDebarments returns 2 debarments" );
56 is( $debarments->[1]->{'type'}, 'MANUAL', "Correctly stored 'type'" );
57 is( $debarments->[1]->{'expiration'}, undef, "Correctly stored debarrment with no expiration" );
58 is( $debarments->[1]->{'comment'}, 'Test 2', "Correctly stored 'comment'" );
59
60
61 ModDebarment({
62     borrower_debarment_id => $debarments->[1]->{'borrower_debarment_id'},
63     comment => 'Test 3',
64     expiration => '9998-06-10',
65 });
66 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
67 is( $debarments->[1]->{'comment'}, 'Test 3', "ModDebarment functions correctly" );
68
69 my $patron = Koha::Patrons->find( $borrowernumber )->unblessed;
70 is( $patron->{'debarred'}, '9999-06-10', "Field borrowers.debarred set correctly" );
71 is( $patron->{'debarredcomment'}, "Test 1\nTest 3", "Field borrowers.debarredcomment set correctly" );
72
73
74 AddUniqueDebarment({
75     borrowernumber => $borrowernumber,
76     type           => 'OVERDUES'
77 });
78 $debarments = GetDebarments({
79     borrowernumber => $borrowernumber,
80     type => 'OVERDUES',
81 });
82 is( @$debarments, 1, "GetDebarments returns 1 OVERDUES debarment" );
83 is( $debarments->[0]->{'type'}, 'OVERDUES', "AddOverduesDebarment created new debarment correctly" );
84
85 AddUniqueDebarment({
86     borrowernumber => $borrowernumber,
87     expiration => '9999-11-09',
88     type => 'OVERDUES'
89 });
90 $debarments = GetDebarments({
91     borrowernumber => $borrowernumber,
92     type => 'OVERDUES',
93 });
94 is( @$debarments, 1, "GetDebarments returns 1 OVERDUES debarment after running AddOverduesDebarment twice" );
95 is( $debarments->[0]->{'expiration'}, '9999-11-09', "AddOverduesDebarment updated OVERDUES debarment correctly" );
96
97
98 my $delUniqueDebarment = DelUniqueDebarment({
99 });
100 is( $delUniqueDebarment, undef, "DelUniqueDebarment without the arguments 'borrowernumber' and 'type' returns undef" );
101 $debarments = GetDebarments({
102     borrowernumber => $borrowernumber,
103     type => 'OVERDUES',
104 });
105 is( @$debarments, 1, "DelUniqueDebarment without the arguments 'borrowernumber' and 'type' does not delete the debarment" );
106
107 $delUniqueDebarment = DelUniqueDebarment({
108     borrowernumber => $borrowernumber,
109 });
110 is( $delUniqueDebarment, undef, "DelUniqueDebarment without the argument 'type' returns undef" );
111 $debarments = GetDebarments({
112     borrowernumber => $borrowernumber,
113     type => 'OVERDUES',
114 });
115 is( @$debarments, 1, "DelUniqueDebarment without the argument 'type' does not delete the debarment" );
116
117 $delUniqueDebarment = DelUniqueDebarment({
118     type => 'OVERDUES'
119 });
120 is( $delUniqueDebarment, undef, "DelUniqueDebarment without the argument 'borrowernumber' returns undef" );
121 $debarments = GetDebarments({
122     borrowernumber => $borrowernumber,
123     type => 'OVERDUES',
124 });
125 is( @$debarments, 1, "DelUniqueDebarment without the argument 'borrowerumber' does not delete the debarment" );
126
127 $delUniqueDebarment = DelUniqueDebarment({
128     borrowernumber => $borrowernumber,
129     type => 'SUSPENSION',
130 });
131 is( $delUniqueDebarment, undef, "DelUniqueDebarment with wrong arguments returns undef" );
132 $debarments = GetDebarments({
133     borrowernumber => $borrowernumber,
134     type => 'OVERDUES',
135 });
136 is( @$debarments, 1, "DelUniqueDebarment with wrong arguments does not delete the debarment" );
137
138 $delUniqueDebarment = DelUniqueDebarment({
139     borrowernumber => $borrowernumber,
140     type => 'OVERDUES',
141 });
142 is( $delUniqueDebarment, 1, "DelUniqueDebarment returns 1" );
143 $debarments = GetDebarments({
144     borrowernumber => $borrowernumber,
145     type => 'OVERDUES',
146 });
147 is( @$debarments, 0, "DelUniqueDebarment functions correctly" );
148
149
150 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
151 foreach my $d ( @$debarments ) {
152     DelDebarment( $d->{'borrower_debarment_id'} );
153 }
154 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
155 is( @$debarments, 0, "DelDebarment functions correctly" );
156
157 $dbh->do(q|UPDATE borrowers SET debarred = '1970-01-01'|);
158 is( Koha::Patrons->find( $borrowernumber )->is_debarred, undef, 'A patron with a debarred date in the past is not debarred' );
159
160 $dbh->do(q|UPDATE borrowers SET debarred = NULL|);
161 is( Koha::Patrons->find( $borrowernumber )->is_debarred, undef, 'A patron without a debarred date is not debarred' );
162
163 $dbh->do(q|UPDATE borrowers SET debarred = '9999-12-31'|); # Note: Change this test before the first of January 10000!
164 is( Koha::Patrons->find( $borrowernumber )->is_debarred, '9999-12-31', 'A patron with a debarred date in the future is debarred' );