@@ -, +, @@ $ kshell k$ prove t/db_dependent/Koha/Hold.t --- t/db_dependent/Koha/Hold.t | 95 +++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) --- a/t/db_dependent/Koha/Hold.t +++ a/t/db_dependent/Koha/Hold.t @@ -19,11 +19,13 @@ use Modern::Perl; -use Test::More tests => 3; +use Test::More tests => 4; use Test::Exception; use Test::MockModule; +use Test::Warn; +use t::lib::Mocks; use t::lib::TestBuilder; use Koha::Libraries; @@ -198,3 +200,94 @@ subtest 'is_pickup_location_valid() tests' => sub { $schema->storage->txn_rollback; }; + +subtest 'cancel() tests' => sub { + + plan tests => 12; + + $schema->storage->txn_begin; + + my $get_prepared_letter_called; + + # Mock GetPreparedLetter so it raises a warning we can look for + # and returns undef, so no call to EnqueueLetter happens + my $mocked_letter = Test::MockModule->new("C4::Letters"); + $mocked_letter->mock( 'GetPreparedLetter', sub { + $get_prepared_letter_called = 1; + return; + }); + + my $hold = $builder->build_object( + { + class => 'Koha::Holds', + value => { + cancellationdate => undef, + priority => 1, + cancellation_reason => undef, + } + } + ); + + # leave this things out of the test + t::lib::Mocks::mock_preference( 'ExpireReservesMaxPickUpDelayCharge', 0 ); + t::lib::Mocks::mock_preference( 'HoldsLog', 0 ); + + $hold = $builder->build_object( + { + class => 'Koha::Holds', + value => { + cancellationdate => undef, + priority => 1, + cancellation_reason => undef, + } + } + ); + + $get_prepared_letter_called = 0; + $hold->cancel({ cancellation_reason => 'Some reason' }); + ok( !$get_prepared_letter_called, 'GetPreparedLetter not called' ); + + isnt( $hold->cancellationdate, undef, 'cancellationdate gets set to the passed value' ); + is( $hold->priority, 0, 'priority gets set to 0' ); + is( $hold->cancellation_reason, 'Some reason', 'cancellation_reason is set to the passed value' ); + + $hold = $builder->build_object( + { + class => 'Koha::Holds', + value => { + cancellationdate => undef, + priority => 1, + cancellation_reason => undef, + } + } + ); + + $get_prepared_letter_called = 0; + $hold->cancel({ cancellation_reason => 'Some reason', notify_patron => 1 }); + ok( $get_prepared_letter_called, 'GetPreparedLetter called if notify_patron and cancellation_reason passed' ); + + isnt( $hold->cancellationdate, undef, 'cancellationdate gets set to the passed value' ); + is( $hold->priority, 0, 'priority gets set to 0' ); + is( $hold->cancellation_reason, 'Some reason', 'cancellation_reason is set to the passed value' ); + + $hold = $builder->build_object( + { + class => 'Koha::Holds', + value => { + cancellationdate => undef, + priority => 1, + cancellation_reason => undef, + } + } + ); + + $get_prepared_letter_called = 0; + $hold->cancel({ notify_patron => 1 }); + ok( $get_prepared_letter_called, 'GetPreparedLetter called if notify_patron passed' ); + + isnt( $hold->cancellationdate, undef, 'cancellationdate gets set to the passed value' ); + is( $hold->priority, 0, 'priority gets set to 0' ); + is( $hold->cancellation_reason, undef, 'cancellation_reason not passed' ); + + $schema->storage->txn_rollback; +}; --