From c805facf575f19e57ba09fe40b132384ff9f3f8d Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Thu, 7 Oct 2021 13:13:20 +0000
Subject: [PATCH] Bug 29062: Unit tests

---
 t/db_dependent/Circulation.t | 61 ++++++++++++++++++++++++++++++++++--
 1 file changed, 59 insertions(+), 2 deletions(-)

diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t
index e054c74ab5..2862ea9cf8 100755
--- a/t/db_dependent/Circulation.t
+++ b/t/db_dependent/Circulation.t
@@ -18,7 +18,7 @@
 use Modern::Perl;
 use utf8;
 
-use Test::More tests => 55;
+use Test::More tests => 56;
 use Test::Exception;
 use Test::MockModule;
 use Test::Deep qw( cmp_deeply );
@@ -33,12 +33,13 @@ use t::lib::TestBuilder;
 
 use C4::Accounts;
 use C4::Calendar qw( new insert_single_holiday insert_week_day_holiday delete_holiday );
-use C4::Circulation qw( AddIssue AddReturn CanBookBeRenewed GetIssuingCharges AddRenewal GetSoonestRenewDate GetLatestAutoRenewDate LostItem GetUpcomingDueIssues CanBookBeIssued AddIssuingCharge ProcessOfflinePayment transferbook updateWrongTransfer );
+use C4::Circulation qw( AddIssue AddReturn CanBookBeRenewed GetIssuingCharges AddRenewal GetSoonestRenewDate GetLatestAutoRenewDate LostItem GetUpcomingDueIssues CanBookBeIssued AddIssuingCharge MarkIssueReturned ProcessOfflinePayment transferbook updateWrongTransfer );
 use C4::Biblio;
 use C4::Items qw( ModItemTransfer );
 use C4::Log;
 use C4::Reserves qw( AddReserve ModReserve ModReserveCancelAll ModReserveAffect CheckReserves GetOtherReserves );
 use C4::Overdues qw( CalcFine UpdateFine get_chargeable_units );
+use C4::Members::Messaging qw( SetMessagingPreference );
 use Koha::DateUtils;
 use Koha::Database;
 use Koha::Items;
@@ -51,6 +52,7 @@ use Koha::Subscriptions;
 use Koha::Account::Lines;
 use Koha::Account::Offsets;
 use Koha::ActionLogs;
+use Koha::Notice::Messages;
 
 sub set_userenv {
     my ( $library ) = @_;
@@ -4916,6 +4918,61 @@ subtest "updateWrongTransfer tests" => sub {
     is( $original_transfer->cancellation_reason, 'WrongTransfer', "Original transfer cancellation reason is 'WrongTransfer'");
 };
 
+subtest "SendCirculationAlert" => sub {
+    plan tests => 2;
+
+    # Setup branch, borrowr, and notice
+    my $library = $builder->build_object({ class => 'Koha::Libraries' });
+    set_userenv( $library->unblessed);
+    my $patron = $builder->build_object({ class => 'Koha::Patrons' });
+    C4::Members::Messaging::SetMessagingPreference({
+        borrowernumber => $patron->id,
+        message_transport_types => ['email'],
+        message_attribute_id => 5
+    });
+    my $item = $builder->build_sample_item();
+    my $checkin_notice = $builder->build_object({
+        class => 'Koha::Notice::Templates',
+        value =>{
+            module => 'circulation',
+            code => 'CHECKIN',
+            branchcode => $library->branchcode,
+            name => 'Test Checkin',
+            is_html => 0,
+            content => "Checkins:\n----\n[% biblio.title %]-[% old_checkout.issue_id %]\n----Thank you.",
+            message_transport_type => 'email',
+            lang => 'default'
+        }
+    })->store;
+
+    # Checkout an item, mark it returned, generate a notice
+    my $issue_1 = AddIssue( $patron->unblessed, $item->barcode);
+    MarkIssueReturned( $patron->borrowernumber, $item->itemnumber, undef, 0, { skip_record_index => 1} );
+    C4::Circulation::SendCirculationAlert({
+        type => 'CHECKIN',
+        item => $item->unblessed,
+        borrower => $patron->unblessed,
+        branch => $library->branchcode,
+        issue => $issue_1
+    });
+    my $notice = Koha::Notice::Messages->find({ borrowernumber => $patron->id, letter_code => 'CHECKIN' });
+    is($notice->content,"Checkins:\n".$item->biblio->title."-".$issue_1->id."\nThank you.", 'Letter generated with expected output on first checkin' );
+
+    # Checkout an item, mark it returned, generate a notice
+    my $issue_2 = AddIssue( $patron->unblessed, $item->barcode);
+    MarkIssueReturned( $patron->borrowernumber, $item->itemnumber, undef, 0, { skip_record_index => 1} );
+    C4::Circulation::SendCirculationAlert({
+        type => 'CHECKIN',
+        item => $item->unblessed,
+        borrower => $patron->unblessed,
+        branch => $library->branchcode,
+        issue => $issue_2
+    });
+    $notice->discard_changes();
+    is($notice->content,"Checkins:\n".$item->biblio->title."-".$issue_1->id."\n".$item->biblio->title."-".$issue_2->id."\nThank you.", 'Letter appended with expected output on second checkin' );
+
+};
+
 $schema->storage->txn_rollback;
 C4::Context->clear_syspref_cache();
 $branches = Koha::Libraries->search();
-- 
2.20.1