Browse Source
This patch adds some unit tests for CalcDateDue and GetLoanLength Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> All tests and QA script pass. Tests done: - Checked update works correctly for existing circulation rules. - Adding, deleting and overwriting circulation rules works. - Renewals work for different circulation rules and changes to the holiday calendar. Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>3.12.x
Jonathan Druart
11 years ago
committed by
Jared Camins-Esakov
3 changed files with 145 additions and 18 deletions
@ -0,0 +1,123 @@ |
|||
#!/usr/bin/perl |
|||
|
|||
use Modern::Perl; |
|||
|
|||
use t::lib::Mocks::Context; |
|||
use Test::More tests => 7; |
|||
use Test::MockModule; |
|||
use DBI; |
|||
use DateTime; |
|||
|
|||
my $contextmodule = new Test::MockModule('C4::Context'); |
|||
$contextmodule->mock('_new_dbh', sub { |
|||
my $dbh = DBI->connect( 'DBI:Mock:', '', '' ) |
|||
|| die "Cannot create handle: $DBI::errstr\n"; |
|||
return $dbh |
|||
}); |
|||
|
|||
use_ok('C4::Circulation'); |
|||
|
|||
my $dbh = C4::Context->dbh(); |
|||
|
|||
my $issuelength = 10; |
|||
my $renewalperiod = 5; |
|||
my $lengthunit = 'days'; |
|||
|
|||
my $expected = { |
|||
issuelength => $issuelength, |
|||
renewalperiod => $renewalperiod, |
|||
lengthunit => $lengthunit |
|||
}; |
|||
|
|||
my $default = { |
|||
issuelength => 21, |
|||
renewalperiod => 21, |
|||
lengthunit => 'days' |
|||
}; |
|||
|
|||
my $loanlength; |
|||
my $mock_undef = [ |
|||
[] |
|||
]; |
|||
|
|||
my $mock_loan_length = [ |
|||
['issuelength', 'renewalperiod', 'lengthunit'], |
|||
[$issuelength, $renewalperiod, $lengthunit] |
|||
]; |
|||
|
|||
my $categorycode = 'B'; |
|||
my $itemtype = 'MX'; |
|||
my $branchcode = 'FPL'; |
|||
|
|||
#=== GetLoanLength |
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
$loanlength = C4::Circulation::GetLoanLength($categorycode, $itemtype, $branchcode); |
|||
is_deeply($loanlength, $expected, 'first matches'); |
|||
|
|||
$dbh->{mock_add_resultset} = $mock_undef; |
|||
$loanlength = C4::Circulation::GetLoanLength($categorycode, $itemtype, $branchcode); |
|||
is_deeply($loanlength, $default, 'none matches'); |
|||
|
|||
#=== CalcDateDue |
|||
|
|||
#Set syspref ReturnBeforeExpiry = 1 and useDaysMode = 'Days' |
|||
$contextmodule->mock('preference', sub { |
|||
my ($self, $syspref) = @_; |
|||
given ( $syspref ) { |
|||
when ("ReturnBeforeExpiry"){ return 1; } |
|||
when ("useDaysMode"){ return 'Days'; } |
|||
default{ return; } |
|||
} |
|||
}); |
|||
|
|||
my $dateexpiry = '2013-01-01'; |
|||
|
|||
my $borrower = {categorycode => 'B', dateexpiry => $dateexpiry}; |
|||
my $start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
my $date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower ); |
|||
is($date, $dateexpiry . 'T23:59:00', 'date expiry'); |
|||
|
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
|||
|
|||
|
|||
#Set syspref ReturnBeforeExpiry = 1 and useDaysMode != 'Days' |
|||
$contextmodule->mock('preference', sub { |
|||
my ($self, $syspref) = @_; |
|||
given ( $syspref ) { |
|||
when ("ReturnBeforeExpiry"){ return 1; } |
|||
when ("useDaysMode"){ return 'noDays'; } |
|||
default{ return; } |
|||
} |
|||
}); |
|||
|
|||
$borrower = {categorycode => 'B', dateexpiry => $dateexpiry}; |
|||
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower ); |
|||
is($date, $dateexpiry . 'T23:59:00', 'date expiry'); |
|||
|
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
|||
|
|||
|
|||
#Set syspref ReturnBeforeExpiry = 0 and useDaysMode = 'Days' |
|||
$contextmodule->mock('preference', sub { |
|||
my ($self, $syspref) = @_; |
|||
given ( $syspref ) { |
|||
when ("ReturnBeforeExpiry"){ return 0; } |
|||
when ("useDaysMode"){ return 'Days'; } |
|||
default{ return; } |
|||
} |
|||
}); |
|||
|
|||
$borrower = {categorycode => 'B', dateexpiry => $dateexpiry}; |
|||
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower ); |
|||
is($date, '2013-02-' . (9 + $issuelength) . 'T23:59:00', "date expiry ( 9 + $issuelength )"); |
|||
|
|||
$dbh->{mock_add_resultset} = $mock_loan_length; |
|||
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
|||
is($date, '2013-02-' . (9 + $renewalperiod) . 'T23:59:00', "date expiry ( 9 + $renewalperiod )"); |
Loading…
Reference in new issue