Bug 2720 - Overdues which debar automatically should undebar automatically when returned
[koha_fer] / t / db_dependent / Borrower_Debarments.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use C4::Context;
7 use C4::Members;
8
9 use Test::More tests => 18;
10
11 BEGIN {
12     use FindBin;
13     use lib $FindBin::Bin;
14     use_ok('Koha::Borrower::Debarments');
15 }
16
17 # Get a borrower with no current debarments
18 my $dbh   = C4::Context->dbh;
19 my $query = "
20     SELECT b.borrowernumber FROM borrowers b
21     LEFT JOIN borrower_debarments bd ON ( b.borrowernumber = bd.borrowernumber )
22     WHERE b.debarred IS NULL AND b.debarredcomment IS NULL AND bd.borrowernumber IS NULL
23     LIMIT 1
24 ";
25 my $sth = $dbh->prepare($query);
26 $sth->execute;
27 my ($borrowernumber) = $sth->fetchrow_array();
28 diag("Using borrowernumber: $borrowernumber");
29
30
31 my $success = AddDebarment({
32     borrowernumber => $borrowernumber,
33     expiration => '9999-06-10',
34     type => 'MANUAL',
35     comment => 'Test 1',
36 });
37 ok( $success, "AddDebarment returned true" );
38
39
40 my $debarments = GetDebarments({ borrowernumber => $borrowernumber });
41 ok( @$debarments == 1, "GetDebarments returns 1 debarment" );
42 ok( $debarments->[0]->{'type'} eq 'MANUAL', "Correctly stored 'type'" );
43 ok( $debarments->[0]->{'expiration'} eq '9999-06-10', "Correctly stored 'expiration'" );
44 ok( $debarments->[0]->{'comment'} eq 'Test 1', "Correctly stored 'comment'" );
45
46
47 $success = AddDebarment({
48     borrowernumber => $borrowernumber,
49     comment => 'Test 2',
50 });
51
52 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
53 ok( @$debarments == 2, "GetDebarments returns 2 debarments" );
54 ok( $debarments->[1]->{'type'} eq 'MANUAL', "Correctly stored 'type'" );
55 ok( !$debarments->[1]->{'expiration'}, "Correctly stored debarrment with no expiration" );
56 ok( $debarments->[1]->{'comment'} eq 'Test 2', "Correctly stored 'comment'" );
57
58
59 ModDebarment({
60     borrower_debarment_id => $debarments->[1]->{'borrower_debarment_id'},
61     comment => 'Test 3',
62     expiration => '9998-06-10',
63 });
64 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
65 ok( $debarments->[1]->{'comment'} eq 'Test 3', "ModDebarment functions correctly" );
66
67
68 my $borrower = GetMember( borrowernumber => $borrowernumber );
69 ok( $borrower->{'debarred'} eq '9999-06-10', "Field borrowers.debarred set correctly" );
70 ok( $borrower->{'debarredcomment'} eq "Test 1\nTest 3", "Field borrowers.debarredcomment set correctly" );
71
72
73 AddUniqueDebarment({
74     borrowernumber => $borrowernumber,
75     type           => 'OVERDUES'
76 });
77 $debarments = GetDebarments({
78     borrowernumber => $borrowernumber,
79     type => 'OVERDUES',
80 });
81 ok( @$debarments == 1, "GetDebarments returns 1 OVERDUES debarment" );
82 ok( $debarments->[0]->{'type'} eq 'OVERDUES', "AddOverduesDebarment created new debarment correctly" );
83
84 AddUniqueDebarment({
85     borrowernumber => $borrowernumber,
86     expiration => '9999-11-09',
87     type => 'OVERDUES'
88 });
89 $debarments = GetDebarments({
90     borrowernumber => $borrowernumber,
91     type => 'OVERDUES',
92 });
93 ok( @$debarments == 1, "GetDebarments returns 1 OVERDUES debarment after running AddOverduesDebarment twice" );
94 ok( $debarments->[0]->{'expiration'} eq '9999-11-09', "AddOverduesDebarment updated OVERDUES debarment correctly" );
95
96
97 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
98 foreach my $d ( @$debarments ) {
99     DelDebarment( $d->{'borrower_debarment_id'} );
100 }
101 $debarments = GetDebarments({ borrowernumber => $borrowernumber });
102 ok( @$debarments == 0, "DelDebarment functions correctly" )