Bugzilla – Attachment 194484 Details for
Bug 27208
Add a configurable time delay feature to hold notice templates
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 27208: Unit tests
Bug-27208-Unit-tests.patch (text/plain), 7.66 KB, created by
Kevin Carnes
on 2026-03-05 08:11:44 UTC
(
hide
)
Description:
Bug 27208: Unit tests
Filename:
MIME Type:
Creator:
Kevin Carnes
Created:
2026-03-05 08:11:44 UTC
Size:
7.66 KB
patch
obsolete
>From 9c0c454206dea38ff4f0ae5327c088054f72975c Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?Bj=C3=B6rn=20Nyl=C3=A9n?= <bjorn.nylen@ub.lu.se> >Date: Tue, 14 Dec 2021 08:35:04 +0000 >Subject: [PATCH] Bug 27208: Unit tests > >This commit adds unit test for changes in C4/Letters.pm and C4/Reserves.pm >--- > t/db_dependent/Letters.t | 37 +++++++++++- > t/db_dependent/Reserves.t | 118 +++++++++++++++++++++++++++++++++++++- > 2 files changed, 152 insertions(+), 3 deletions(-) > >diff --git a/t/db_dependent/Letters.t b/t/db_dependent/Letters.t >index f248a07f7f5..56714663af3 100755 >--- a/t/db_dependent/Letters.t >+++ b/t/db_dependent/Letters.t >@@ -19,7 +19,7 @@ > > use Modern::Perl; > use File::Basename qw(dirname); >-use Test::More tests => 105; >+use Test::More tests => 111; > use Test::NoWarnings; > > use Test::MockModule; >@@ -168,7 +168,8 @@ is( > t::lib::Dates::compare( $messages->[0]->{updated_on}, $messages->[0]->{time_queued} ), 0, > 'Time status changed equals time queued when created in message_queue table' > ); >-is( $messages->[0]->{failure_code}, '', 'Failure code for successful message correctly empty' ); >+is( $messages->[0]->{failure_code}, '', 'Failure code for successful message correctly empty' ); >+is( $messages->[0]->{delay_until}, undef, 'Delay until should be undef if not set' ); > > # Setting time_queued to something else than now > my $yesterday = dt_from_string->subtract( days => 1 ); >@@ -227,6 +228,38 @@ isnt( > ); > is( dt_from_string( $messages->[0]->{time_queued} ), $yesterday, 'Time queued remains inmutable' ); > >+# Delayed message >+my $tomorrow = dt_from_string()->add( days => 1 ); >+my $delay_message = { >+ borrowernumber => $borrowernumber, >+ message_transport_type => 'email', >+ to_address => 'to@example', >+ from_address => 'from@example.com', >+ delay_until => $tomorrow, >+}; >+$delay_message->{letter} = { >+ content => 'I am waiting', >+ title => 'Patience is great', >+ metadata => 'metadata', >+ code => 'TEST_MESSAGE', >+ content_type => 'text/plain', >+}; >+ >+my $delayed_message_id = C4::Letters::EnqueueLetter($delay_message); >+ >+my $delay_until = Koha::Notice::Messages->find($delayed_message_id)->delay_until; >+is( dt_from_string($delay_until), $tomorrow, 'Delay_until is properly set' ); >+ >+my $delayed_messages_processed = C4::Letters::SendQueuedMessages(); >+is( $delayed_messages_processed, 0, 'Message not processed if delay_until is set in the future' ); >+ >+Koha::Notice::Messages->find($delayed_message_id)->delay_until($yesterday)->store; >+warning_like { $delayed_messages_processed = C4::Letters::SendQueuedMessages(); } >+qr|Fake send_or_die|, >+ "SendQueuedMessages is using the mocked send_or_die routine"; >+is( $delayed_messages_processed, 1, 'Message processed if delay_until is set in the past' ); >+Koha::Notice::Messages->find($delayed_message_id)->delete; >+ > # ResendMessage > my $resent = C4::Letters::ResendMessage( $messages->[0]->{message_id} ); > $message = C4::Letters::GetMessage( $messages->[0]->{message_id} ); >diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t >index 3b952ebb811..ed358f8f10f 100755 >--- a/t/db_dependent/Reserves.t >+++ b/t/db_dependent/Reserves.t >@@ -17,7 +17,7 @@ > > use Modern::Perl; > >-use Test::More tests => 69; >+use Test::More tests => 70; > use Test::NoWarnings; > use Test::MockModule; > use Test::Warn; >@@ -1466,6 +1466,122 @@ subtest 'ModReserveAffect logging' => sub { > like( $log->info, qr{$expected}, 'Timestamp logged is the current one' ); > }; > >+subtest 'ModReserveAffect delayed notice' => sub { >+ >+ plan tests => 4; >+ >+ my $wants_hold_and_email = { >+ wants_digest => '0', >+ transports => { >+ email => 'HOLD', >+ }, >+ letter_code => 'HOLD' >+ }; >+ >+ my $mp = Test::MockModule->new('C4::Members::Messaging'); >+ >+ $mp->mock( "GetMessagingPreferences", $wants_hold_and_email ); >+ >+ $dbh->do('DELETE FROM letter'); >+ $dbh->do('DELETE FROM reserves'); >+ $dbh->do('DELETE FROM message_queue'); >+ >+ my $email_hold_notice = $builder->build( >+ { >+ source => 'Letter', >+ value => { >+ message_transport_type => 'email', >+ branchcode => '', >+ code => 'HOLD', >+ module => 'reserves', >+ lang => 'default', >+ } >+ } >+ ); >+ >+ my $hold_borrower = $builder->build( >+ { >+ source => 'Borrower', >+ value => { >+ email => 'ac@b.com', >+ } >+ } >+ )->{borrowernumber}; >+ >+ my $hold = C4::Reserves::AddReserve( >+ { >+ branchcode => $item->homebranch, >+ borrowernumber => $hold_borrower, >+ biblionumber => $item->biblionumber, >+ } >+ ); >+ t::lib::Mocks::mock_preference( 'PickupNoticeDelayMode', 'off' ); >+ t::lib::Mocks::mock_preference( 'PickupNoticeDelayDuration', 1 ); >+ >+ # No delay allowed >+ my $tomorrow = dt_from_string()->add( days => 1 ); >+ ModReserveAffect( $item->itemnumber, $hold_borrower, 0, $hold, undef, undef, $tomorrow ); >+ my $delay_until = $schema->resultset('MessageQueue')->search( >+ { >+ letter_code => 'HOLD', >+ message_transport_type => 'email', >+ borrowernumber => $hold_borrower, >+ }, >+ { order_by => { -desc => 'message_id' } } >+ )->next()->delay_until(); >+ is( $delay_until, undef, "No notice delay if PickupNoticeDelayMode is off even if delay is passed" ); >+ >+ $dbh->do('DELETE FROM message_queue'); >+ $dbh->do('DELETE FROM reserves'); >+ $hold = C4::Reserves::AddReserve( >+ { >+ branchcode => $item->homebranch, >+ borrowernumber => $hold_borrower, >+ biblionumber => $item->biblionumber, >+ } >+ ); >+ >+ t::lib::Mocks::mock_preference( 'PickupNoticeDelayMode', 'fixed' ); >+ my $more_than_hour = dt_from_string()->add( minutes => 61 ); >+ my $less_than_hour = dt_from_string()->add( minutes => 59 ); >+ ModReserveAffect( $item->itemnumber, $hold_borrower, 0, $hold, undef, undef, undef ); >+ $delay_until = $schema->resultset('MessageQueue')->search( >+ { >+ letter_code => 'HOLD', >+ message_transport_type => 'email', >+ borrowernumber => $hold_borrower, >+ }, >+ { order_by => { -desc => 'message_id' } } >+ )->next()->delay_until(); >+ cmp_ok( >+ dt_from_string($delay_until)->epoch, ">=", $less_than_hour->epoch, >+ "1h fixed delay_until is bigger than 59 min." >+ ); >+ cmp_ok( dt_from_string($delay_until), "<=", $more_than_hour, "1h fixed delay_until is less than 61 min." ); >+ >+ $dbh->do('DELETE FROM message_queue'); >+ $dbh->do('DELETE FROM reserves'); >+ $hold = C4::Reserves::AddReserve( >+ { >+ branchcode => $item->homebranch, >+ borrowernumber => $hold_borrower, >+ biblionumber => $item->biblionumber, >+ } >+ ); >+ >+ t::lib::Mocks::mock_preference( 'PickupNoticeDelayMode', 'staff' ); >+ ModReserveAffect( $item->itemnumber, $hold_borrower, 0, $hold, undef, undef, $tomorrow ); >+ $delay_until = $schema->resultset('MessageQueue')->search( >+ { >+ letter_code => 'HOLD', >+ message_transport_type => 'email', >+ borrowernumber => $hold_borrower, >+ }, >+ { order_by => { -desc => 'message_id' } } >+ )->next()->delay_until(); >+ is( dt_from_string($delay_until), $tomorrow, "Delay_until is same as set in function call" ); >+}; >+ > sub count_hold_print_messages { > my $message_count = $dbh->selectall_arrayref( > q{ >-- >2.43.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 27208
:
128387
|
128388
|
128389
|
128390
|
128587
|
128588
|
128589
|
128590
|
128948
|
128949
|
128950
|
128951
|
194480
|
194481
|
194482
|
194483
| 194484