9 use t::lib::TestBuilder;
11 use Test::More tests => 5;
13 use_ok('C4::Reserves');
15 my $schema = Koha::Database->new->schema;
16 $schema->storage->txn_begin;
17 my $builder = t::lib::TestBuilder->new();
19 t::lib::Mocks::mock_preference('ExpireReservesOnHolidays', 0);
20 # Waiting reservers could be canceled only if ExpireReservesMaxPickUpDelay is set to "allow", see bug 19260
21 t::lib::Mocks::mock_preference('ExpireReservesMaxPickUpDelay', 1);
23 my $today = dt_from_string();
24 my $reserve_reservedate = $today->clone;
25 $reserve_reservedate->subtract(days => 30);
27 my $reserve1_expirationdate = $today->clone;
28 $reserve1_expirationdate->add(days => 1);
31 my $reserve1 = $builder->build({
34 reservedate => $reserve_reservedate,
35 expirationdate => $reserve1_expirationdate,
36 cancellationdate => undef,
42 CancelExpiredReserves();
43 my $r1 = Koha::Holds->find($reserve1->{reserve_id});
44 ok($r1, 'Reserve 1 should not be canceled.');
46 my $reserve2_expirationdate = $today->clone;
47 $reserve2_expirationdate->subtract(days => 1);
50 my $reserve2 = $builder->build({
53 reservedate => $reserve_reservedate,
54 expirationdate => $reserve2_expirationdate,
55 cancellationdate => undef,
61 CancelExpiredReserves();
62 my $r2 = Koha::Holds->find($reserve2->{reserve_id});
63 is($r2, undef,'reserve 2 should be canceled.');
65 # Reserve expired on holiday
66 my $reserve3 = $builder->build({
69 reservedate => $reserve_reservedate,
70 expirationdate => $reserve2_expirationdate,
72 cancellationdate => undef,
78 Koha::Caches->get_instance()->flush_all();
79 my $holiday = $builder->build({
80 source => 'SpecialHoliday',
84 month => $today->month,
86 title => 'My holiday',
91 CancelExpiredReserves();
92 my $r3 = Koha::Holds->find($reserve3->{reserve_id});
93 ok($r3,'Reserve 3 should not be canceled.');
95 t::lib::Mocks::mock_preference('ExpireReservesOnHolidays', 1);
96 CancelExpiredReserves();
97 $r3 = Koha::Holds->find($reserve3->{reserve_id});
98 is($r3, undef,'Reserve 3 should be canceled.');
100 $schema->storage->txn_rollback;