Lines 18-36
Link Here
|
18 |
use Modern::Perl; |
18 |
use Modern::Perl; |
19 |
|
19 |
|
20 |
use DateTime; |
20 |
use DateTime; |
21 |
use Time::HiRes qw/gettimeofday/; |
21 |
use Time::HiRes qw/gettimeofday time/; |
|
|
22 |
use Test::More tests => 2; |
22 |
use C4::Members; |
23 |
use C4::Members; |
23 |
use Koha::DateUtils; |
24 |
use Koha::DateUtils; |
24 |
use t::lib::TestBuilder; |
25 |
use t::lib::TestBuilder; |
25 |
use Test::More tests => 1; |
26 |
use t::lib::Mocks qw( mock_preference ); |
26 |
|
27 |
|
|
|
28 |
my $builder = t::lib::TestBuilder->new(); |
27 |
subtest 'Tests for CanBookBeIssued related to dateexpiry' => sub { |
29 |
subtest 'Tests for CanBookBeIssued related to dateexpiry' => sub { |
28 |
plan tests => 4; |
30 |
plan tests => 4; |
29 |
date_expiry(); |
31 |
can_book_be_issued(); |
|
|
32 |
}; |
33 |
subtest 'Tests for CalcDateDue related to dateexpiry' => sub { |
34 |
plan tests => 4; |
35 |
calc_date_due(); |
30 |
}; |
36 |
}; |
31 |
|
37 |
|
32 |
sub date_expiry { |
38 |
sub can_book_be_issued { |
33 |
my $builder = t::lib::TestBuilder->new(); |
|
|
34 |
my $item = $builder->build( { source => 'Item' } ); |
39 |
my $item = $builder->build( { source => 'Item' } ); |
35 |
my $patron = $builder->build( |
40 |
my $patron = $builder->build( |
36 |
{ source => 'Borrower', |
41 |
{ source => 'Borrower', |
Lines 66-68
sub date_expiry {
Link Here
|
66 |
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is tomorrow' ); |
71 |
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is tomorrow' ); |
67 |
|
72 |
|
68 |
} |
73 |
} |
69 |
- |
74 |
|
|
|
75 |
sub calc_date_due { |
76 |
t::lib::Mocks::mock_preference( 'ReturnBeforeExpiry', 1 ); |
77 |
|
78 |
# this triggers the compare between expiry and due date |
79 |
|
80 |
my $patron = $builder->build( { source => 'Borrower' } ); |
81 |
my $item = $builder->build( { source => 'Item' } ); |
82 |
my $branch = $builder->build( { source => 'Branch' } ); |
83 |
my $today = dt_from_string(); |
84 |
|
85 |
# first test with empty expiry date |
86 |
# note that this expiry date will never lead to an issue btw !! |
87 |
$patron->{dateexpiry} = '0000-00-00'; |
88 |
my $d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron ); |
89 |
is( ref $d eq "DateTime" && $d->mdy() =~ /^\d+/, 1, "CalcDateDue with expiry 0000-00-00" ); |
90 |
|
91 |
# second test expiry date==today |
92 |
my $d2 = output_pref( { dt => $today, dateonly => 1, dateformat => 'sql' } ); |
93 |
$patron->{dateexpiry} = $d2; |
94 |
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron ); |
95 |
is( ref $d eq "DateTime" && DateTime->compare( $d->truncate( to => 'day' ), $today->truncate( to => 'day' ) ) == 0, 1, "CalcDateDue with expiry today" ); |
96 |
|
97 |
# third test expiry date tomorrow |
98 |
my $dur = DateTime::Duration->new( days => 1 ); |
99 |
my $tomorrow = $today->clone->add_duration($dur); |
100 |
$d2 = output_pref( { dt => $tomorrow, dateonly => 1, dateformat => 'sql' } ); |
101 |
$patron->{dateexpiry} = $d2; |
102 |
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron ); |
103 |
is( ref $d eq "DateTime" && $d->mdy() =~ /^\d+/, 1, "CalcDateDue with expiry tomorrow" ); |
104 |
|
105 |
# fourth test far future |
106 |
$patron->{dateexpiry} = '9876-12-31'; |
107 |
my $t1 = time; |
108 |
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron ); |
109 |
my $t2 = time; |
110 |
is( ref $d eq "DateTime" && $t2 - $t1 < 1, 1, "CalcDateDue with expiry in year 9876 in " . sprintf( "%6.4f", $t2 - $t1 ) . " seconds." ); |
111 |
} |