Bug 14310 [QA Followup] - Adapt existing code to use new methods
[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 use t::lib::Mocks;
10
11 BEGIN {
12     t::lib::Mocks::mock_dbh;
13 }
14
15 use_ok('C4::Circulation');
16
17 my $dbh = C4::Context->dbh();
18
19 my $issuelength = 10;
20 my $renewalperiod = 5;
21 my $lengthunit = 'days';
22
23 my $expected = {
24     issuelength => $issuelength,
25     renewalperiod => $renewalperiod,
26     lengthunit => $lengthunit
27 };
28
29 my $default = {
30     issuelength => 21,
31     renewalperiod => 21,
32     lengthunit => 'days'
33 };
34
35 my $loanlength;
36 my $mock_undef = [
37     []
38 ];
39
40 my $mock_loan_length = [
41     ['issuelength', 'renewalperiod', 'lengthunit'],
42     [$issuelength, $renewalperiod, $lengthunit]
43 ];
44
45 my $categorycode = 'B';
46 my $itemtype = 'MX';
47 my $branchcode = 'FPL';
48
49 #=== GetLoanLength
50 $dbh->{mock_add_resultset} = $mock_loan_length;
51 $loanlength = C4::Circulation::GetLoanLength($categorycode, $itemtype, $branchcode);
52 is_deeply($loanlength, $expected, 'first matches');
53
54 $dbh->{mock_add_resultset} = $mock_undef;
55 $loanlength = C4::Circulation::GetLoanLength($categorycode, $itemtype, $branchcode);
56 is_deeply($loanlength, $default, 'none matches');
57
58 #=== CalcDateDue
59
60 #Set syspref ReturnBeforeExpiry = 1 and useDaysMode = 'Days'
61 t::lib::Mocks::mock_preference('ReturnBeforeExpiry', 1);
62 t::lib::Mocks::mock_preference('useDaysMode', 'Days');
63
64 my $dateexpiry = '2013-01-01';
65
66 my $borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
67 my $start_date = DateTime->new({year => 2013, month => 2, day => 9});
68 $dbh->{mock_add_resultset} = $mock_loan_length;
69 my $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
70 is($date, $dateexpiry . 'T23:59:00', 'date expiry');
71 $dbh->{mock_add_resultset} = $mock_loan_length;
72 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
73
74
75 #Set syspref ReturnBeforeExpiry = 1 and useDaysMode != 'Days'
76 t::lib::Mocks::mock_preference('ReturnBeforeExpiry', 1);
77 t::lib::Mocks::mock_preference('useDaysMode', 'noDays');
78
79 $borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
80 $start_date = DateTime->new({year => 2013, month => 2, day => 9});
81 $dbh->{mock_add_resultset} = $mock_loan_length;
82 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
83 is($date, $dateexpiry . 'T23:59:00', 'date expiry');
84
85 $dbh->{mock_add_resultset} = $mock_loan_length;
86 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
87
88
89 #Set syspref ReturnBeforeExpiry = 0 and useDaysMode = 'Days'
90 t::lib::Mocks::mock_preference('ReturnBeforeExpiry', 0);
91 t::lib::Mocks::mock_preference('useDaysMode', 'Days');
92
93 $borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
94 $start_date = DateTime->new({year => 2013, month => 2, day => 9});
95 $dbh->{mock_add_resultset} = $mock_loan_length;
96 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
97 is($date, '2013-02-' . (9 + $issuelength) . 'T23:59:00', "date expiry ( 9 + $issuelength )");
98
99 $dbh->{mock_add_resultset} = $mock_loan_length;
100 $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
101 is($date, '2013-02-' . (9 + $renewalperiod) . 'T23:59:00', "date expiry ( 9 + $renewalperiod )");