From eb30397dab5139f805792a10f76bea8a1b5939d5 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 16 Mar 2020 17:19:22 +0100 Subject: [PATCH] Bug 24881: [19.11.x] Try to fix random failure from Circulation.t This is a follow-up of bug 22917. https://bugs.koha-community.org/show_bug.cgi?id=25531 --- t/db_dependent/Circulation.t | 68 ++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index 60baf49701..9b53952774 100755 --- a/t/db_dependent/Circulation.t +++ b/t/db_dependent/Circulation.t @@ -1742,14 +1742,15 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub { $rule->store(); # Patron cannot issue item_1, they have overdues - my $five_days_ago = dt_from_string->subtract( days => 5 ); - my $ten_days_ago = dt_from_string->subtract( days => 10 ); + my $now = dt_from_string; + my $five_days_ago = $now->clone->subtract( days => 5 ); + my $ten_days_ago = $now->clone->subtract( days => 10 ); AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue AddIssue( $patron, $item_2->{barcode}, $ten_days_ago ) ; # Add another overdue t::lib::Mocks::mock_preference( 'CumulativeRestrictionPeriods', '0' ); - AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, dt_from_string ); + AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, $now ); my $debarments = Koha::Patron::Debarments::GetDebarments( { borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); is( scalar(@$debarments), 1 ); @@ -1758,20 +1759,20 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub { # Same for the others my $expected_expiration = output_pref( { - dt => dt_from_string->add( days => ( 5 - 1 ) * 2 ), + dt => $now->clone->add( days => ( 5 - 1 ) * 2 ), dateformat => 'sql', dateonly => 1 } ); is( $debarments->[0]->{expiration}, $expected_expiration ); - AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, dt_from_string ); + AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, $now ); $debarments = Koha::Patron::Debarments::GetDebarments( { borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); is( scalar(@$debarments), 1 ); $expected_expiration = output_pref( { - dt => dt_from_string->add( days => ( 10 - 1 ) * 2 ), + dt => $now->clone->add( days => ( 10 - 1 ) * 2 ), dateformat => 'sql', dateonly => 1 } @@ -1785,26 +1786,26 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub { AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue AddIssue( $patron, $item_2->{barcode}, $ten_days_ago ) ; # Add another overdue - AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, dt_from_string ); + AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, $now ); $debarments = Koha::Patron::Debarments::GetDebarments( { borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); is( scalar(@$debarments), 1 ); $expected_expiration = output_pref( { - dt => dt_from_string->add( days => ( 5 - 1 ) * 2 ), + dt => $now->clone->add( days => ( 5 - 1 ) * 2 ), dateformat => 'sql', dateonly => 1 } ); is( $debarments->[0]->{expiration}, $expected_expiration ); - AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, dt_from_string ); + AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, $now ); $debarments = Koha::Patron::Debarments::GetDebarments( { borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); is( scalar(@$debarments), 1 ); $expected_expiration = output_pref( { - dt => dt_from_string->add( days => ( 5 - 1 ) * 2 + ( 10 - 1 ) * 2 ), + dt => $now->clone->add( days => ( 5 - 1 ) * 2 + ( 10 - 1 ) * 2 ), dateformat => 'sql', dateonly => 1 } @@ -1846,10 +1847,11 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { ); $rule->store(); - my $five_days_ago = dt_from_string->subtract( days => 5 ); + my $now = dt_from_string; + my $five_days_ago = $now->clone->subtract( days => 5 ); # We want to charge 2 days every day, without grace # With 5 days of overdue: 5 * Z - my $expected_expiration = dt_from_string->add( days => ( 5 * 2 ) / 1 ); + my $expected_expiration = $now->clone->add( days => ( 5 * 2 ) / 1 ); test_debarment_on_checkout( { item => $item_1, @@ -1863,7 +1865,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { # We want to charge 2 days every 2 days, without grace # With 5 days of overdue: (5 * 2) / 2 $rule->suspension_chargeperiod(2)->store; - $expected_expiration = dt_from_string->add( days => floor( 5 * 2 ) / 2 ); + $expected_expiration = $now->clone->add( days => floor( 5 * 2 ) / 2 ); test_debarment_on_checkout( { item => $item_1, @@ -1879,6 +1881,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { $rule->suspension_chargeperiod(3)->store; $rule->firstremind(1)->store; $expected_expiration = dt_from_string->add( days => floor( ( ( 5 - 1 ) / 3 ) * 2 ) ); + $expected_expiration = $now->clone->add( days => floor( ( ( 5 - 1 ) / 3 ) * 2 ) ); test_debarment_on_checkout( { item => $item_1, @@ -1899,7 +1902,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { # Adding a holiday 2 days ago my $calendar = C4::Calendar->new(branchcode => $library->{branchcode}); - my $two_days_ago = dt_from_string->subtract( days => 2 ); + my $two_days_ago = $now->clone->subtract( days => 2 ); $calendar->insert_single_holiday( day => $two_days_ago->day, month => $two_days_ago->month, @@ -1908,7 +1911,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { description => 'holidayDesc 2 days ago' ); # With 5 days of overdue, only 4 (x finedays=2) days must charged (one was an holiday) - $expected_expiration = dt_from_string->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) ); + $expected_expiration = $now->clone->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) ); test_debarment_on_checkout( { item => $item_1, @@ -1920,7 +1923,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { ); # Adding a holiday 2 days ahead, with finesCalendar=noFinesWhenClosed it should be skipped - my $two_days_ahead = dt_from_string->add( days => 2 ); + my $two_days_ahead = $now->clone->add( days => 2 ); $calendar->insert_single_holiday( day => $two_days_ahead->day, month => $two_days_ahead->month, @@ -1930,7 +1933,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { ); # Same as above, but we should skip D+2 - $expected_expiration = dt_from_string->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) + 1 ); + $expected_expiration = $now->clone->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) + 1 ); test_debarment_on_checkout( { item => $item_1, @@ -1966,8 +1969,8 @@ subtest 'AddReturn + suspension_chargeperiod' => sub { item => $item_1, library => $library, patron => $patron, - return_date => dt_from_string->add(days => 5), - expiration_date => dt_from_string->add(days => 5 + (5 * 2 - 1) ), + return_date => $now->clone->add(days => 5), + expiration_date => $now->clone->add(days => 5 + (5 * 2 - 1) ), } ); @@ -2064,9 +2067,9 @@ subtest 'AddReturn | is_overdue' => sub { $rule->store(); my $now = dt_from_string; - my $one_day_ago = dt_from_string->subtract( days => 1 ); - my $five_days_ago = dt_from_string->subtract( days => 5 ); - my $ten_days_ago = dt_from_string->subtract( days => 10 ); + my $one_day_ago = $now->clone->subtract( days => 1 ); + my $five_days_ago = $now->clone->subtract( days => 5 ); + my $ten_days_ago = $now->clone->subtract( days => 10 ); $patron = Koha::Patrons->find( $patron->{borrowernumber} ); # No return date specified, today will be used => 10 days overdue charged @@ -2805,8 +2808,9 @@ subtest 'CanBookBeIssued | is_overdue' => sub { .10, 1 ); - my $five_days_go = output_pref({ dt => dt_from_string->add( days => 5 ), dateonly => 1}); - my $ten_days_go = output_pref({ dt => dt_from_string->add( days => 10), dateonly => 1 }); + my $now = dt_from_string; + my $five_days_go = output_pref({ dt => $now->clone->add( days => 5 ), dateonly => 1}); + my $ten_days_go = output_pref({ dt => $now->clone->add( days => 10), dateonly => 1 }); my $library = $builder->build( { source => 'Branch' } ); my $patron = $builder->build_object( { class => 'Koha::Patrons', value => { categorycode => $patron_category->{categorycode} } } ); @@ -3170,7 +3174,8 @@ subtest 'AddRenewal and AddIssuingCharge tests' => sub { $context = Test::MockModule->new('C4::Context'); $context->mock( userenv => { branch => undef, interface => 'CRON'} ); #Test statistical logging of renewal via cron (atuo_renew) - $date = output_pref( { dt => dt_from_string(), dateonly => 1, dateformat => 'iso' } ); + my $now = dt_from_string; + $date = output_pref( { dt => $now, dateonly => 1, dateformat => 'iso' } ); $old_log_size = Koha::ActionLogs->count( \%params_renewal ); my $sth = $dbh->prepare("SELECT COUNT(*) FROM statistics WHERE itemnumber = ? AND branch = ?"); $sth->execute($item->id, $library->id); @@ -3250,9 +3255,10 @@ subtest 'Incremented fee tests' => sub { is( $item->effective_itemtype, $itemtype->id, "Itemtype set correctly for item" ); - my $dt_from = dt_from_string(); - my $dt_to = dt_from_string()->add( days => 7 ); - my $dt_to_renew = dt_from_string()->add( days => 13 ); + my $now = dt_from_string; + my $dt_from = $now->clone; + my $dt_to = $now->clone->add( days => 7 ); + my $dt_to_renew = $now->clone->add( days => 13 ); # Daily Tests t::lib::Mocks::mock_preference( 'finesCalendar', 'ignoreCalendar' ); @@ -3350,8 +3356,8 @@ subtest 'Incremented fee tests' => sub { is( $itemtype->rentalcharge_hourly, '0.25', 'Hourly rental charge stored and retreived correctly' ); - $dt_to = dt_from_string()->add( hours => 168 ); - $dt_to_renew = dt_from_string()->add( hours => 312 ); + $dt_to = $now->clone->add( hours => 168 ); + $dt_to_renew = $now->clone->add( hours => 312 ); t::lib::Mocks::mock_preference( 'finesCalendar', 'ignoreCalendar' ); $issue = @@ -3443,7 +3449,7 @@ subtest 'CanBookBeIssued & RentalFeesCheckoutConfirmation' => sub { my ( $issuingimpossible, $needsconfirmation ); my $dt_from = dt_from_string(); - my $dt_due = dt_from_string()->add( days => 3 ); + my $dt_due = $dt_from->clone->add( days => 3 ); $itemtype->rentalcharge(1)->store; ( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode, $dt_due, undef, undef, undef ); -- 2.20.1