Bug 10298: Followup: Adapt existing code
[koha.git] / t / db_dependent / Circulation_issuingrules.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use Test::More tests => 7;
6 use Test::MockModule;
7 use DBI;
8 use DateTime;
9
10 my $contextmodule = new Test::MockModule('C4::Context');
11 $contextmodule->mock('_new_dbh', sub {
12     my $dbh = DBI->connect( 'DBI:Mock:', '', '' )
13     || die "Cannot create handle: $DBI::errstr\n";
14     return $dbh
15 });
16
17 use_ok('C4::Circulation');
18
19 my $dbh = C4::Context->dbh();
20
21 my $issuelength = 10;
22 my $renewalperiod = 5;
23 my $lengthunit = 'days';
24
25 my $expected = {
26     issuelength => $issuelength,
27     renewalperiod => $renewalperiod,
28     lengthunit => $lengthunit
29 };
30
31 my $default = {
32     issuelength => 21,
33     renewalperiod => 21,
34     lengthunit => 'days'
35 };
36
37 my $loanlength;
38 my $mock_undef = [
39     []
40 ];
41
42 my $mock_loan_length = [
43     ['issuelength', 'renewalperiod', 'lengthunit'],
44     [$issuelength, $renewalperiod, $lengthunit]
45 ];
46
47 my $categorycode = 'B';
48 my $itemtype = 'MX';
49 my $branchcode = 'FPL';
50
51 #=== GetLoanLength
52 $dbh->{mock_add_resultset} = $mock_loan_length;
53 $loanlength = C4::Circulation::GetLoanLength($categorycode, $itemtype, $branchcode);
54 is_deeply($loanlength, $expected, 'first matches');
55
56 $dbh->{mock_add_resultset} = $mock_undef;
57 $loanlength = C4::Circulation::GetLoanLength($categorycode, $itemtype, $branchcode);
58 is_deeply($loanlength, $default, 'none matches');
59
60 #=== CalcDateDue
61
62 #Set syspref ReturnBeforeExpiry = 1 and useDaysMode = 'Days'
63 $contextmodule->mock('preference', sub {
64     my ($self, $syspref) = @_;
65     given ( $syspref ) {
66         when ("ReturnBeforeExpiry"){ return 1; }
67         when ("useDaysMode"){ return 'Days'; }
68         default{ return; }
69     }
70 });
71
72 my $dateexpiry = '2013-01-01';
73
74 my $borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
75 my $start_date = DateTime->new({year => 2013, month => 2, day => 9});
76 $dbh->{mock_add_resultset} = $mock_loan_length;
77 my $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
78 is($date, $dateexpiry . 'T23:59:00', 'date expiry');
79
80 $dbh->{mock_add_resultset} = $mock_loan_length;
81 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
82
83
84 #Set syspref ReturnBeforeExpiry = 1 and useDaysMode != 'Days'
85 $contextmodule->mock('preference', sub {
86     my ($self, $syspref) = @_;
87     given ( $syspref ) {
88         when ("ReturnBeforeExpiry"){ return 1; }
89         when ("useDaysMode"){ return 'noDays'; }
90         default{ return; }
91     }
92 });
93
94 $borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
95 $start_date = DateTime->new({year => 2013, month => 2, day => 9});
96 $dbh->{mock_add_resultset} = $mock_loan_length;
97 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
98 is($date, $dateexpiry . 'T23:59:00', 'date expiry');
99
100 $dbh->{mock_add_resultset} = $mock_loan_length;
101 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
102
103
104 #Set syspref ReturnBeforeExpiry = 0 and useDaysMode = 'Days'
105 $contextmodule->mock('preference', sub {
106     my ($self, $syspref) = @_;
107     given ( $syspref ) {
108         when ("ReturnBeforeExpiry"){ return 0; }
109         when ("useDaysMode"){ return 'Days'; }
110         default{ return; }
111     }
112 });
113
114 $borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
115 $start_date = DateTime->new({year => 2013, month => 2, day => 9});
116 $dbh->{mock_add_resultset} = $mock_loan_length;
117 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
118 is($date, '2013-02-' . (9 + $issuelength) . 'T23:59:00', "date expiry ( 9 + $issuelength )");
119
120 $dbh->{mock_add_resultset} = $mock_loan_length;
121 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
122 is($date, '2013-02-' . (9 + $renewalperiod) . 'T23:59:00', "date expiry ( 9 + $renewalperiod )");