From 87b162a71f5e46aa37ecb34082da1e9d73b5cf4d Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 20 Mar 2019 11:46:38 +0000 Subject: [PATCH] Bug 22547: Add tests for C4::Overdues->UpdateFine Add tests for UpdateFine, in particular testing the functionality of MaxFine. Signed-off-by: Martin Renvoize --- t/db_dependent/Overdues.t | 99 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/t/db_dependent/Overdues.t b/t/db_dependent/Overdues.t index 30ca44401b..ba0e164f41 100644 --- a/t/db_dependent/Overdues.t +++ b/t/db_dependent/Overdues.t @@ -6,11 +6,17 @@ use Test::More tests => 16; use C4::Context; use Koha::Database; use Koha::Libraries; + +use t::lib::Mocks; +use t::lib::TestBuilder; + use_ok('C4::Overdues'); can_ok('C4::Overdues', 'GetOverdueMessageTransportTypes'); can_ok('C4::Overdues', 'GetBranchcodesWithOverdueRules'); my $schema = Koha::Database->new->schema; +my $builder = t::lib::TestBuilder->new; + $schema->storage->txn_begin; my $dbh = C4::Context->dbh; @@ -121,3 +127,96 @@ $dbh->do(q| @overdue_branches = C4::Overdues::GetBranchcodesWithOverdueRules(); is_deeply( \@overdue_branches, ['CPL', 'MPL'] , 'If only 2 specific rules exist, 2 branches should be returned' ); + +$schema->storage->txn_rollback; + +subtest 'UpdateFine tests' => sub { + + plan tests => 8; + + $schema->storage->txn_begin; + + t::lib::Mocks::mock_preference( 'MaxFine', '100' ); + + my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); + my $item1 = $builder->build_sample_item(); + my $item2 = $builder->build_sample_item(); + my $checkout1 = $builder->build_object( + { + class => 'Koha::Checkouts', + value => { itemnumber => $item1->itemnumber } + } + ); + my $checkout2 = $builder->build_object( + { + class => 'Koha::Checkouts', + value => { itemnumber => $item2->itemnumber } + } + ); + + UpdateFine( + { + issue_id => $checkout1->issue_id, + itemnumber => $item1->itemnumber, + borrowernumber => $patron->borrowernumber, + amount => '0', + due => $checkout1->date_due + } + ); + + my $fines = Koha::Account::Lines->search( + { borrowernumber => $patron->borrowernumber } ); + is( $fines->count, 0, "No fine added when amount is 0" ); + + UpdateFine( + { + issue_id => $checkout1->issue_id, + itemnumber => $item1->itemnumber, + borrowernumber => $patron->borrowernumber, + amount => '50', + due => $checkout1->date_due + } + ); + + $fines = Koha::Account::Lines->search( + { borrowernumber => $patron->borrowernumber } ); + is( $fines->count, 1, "Fine added when amount is greater than 0" ); + my $fine = $fines->next; + is( $fine->amount, '50', "Fine amount correctly set to 50" ); + + UpdateFine( + { + issue_id => $checkout1->issue_id, + itemnumber => $item1->itemnumber, + borrowernumber => $patron->borrowernumber, + amount => '80', + due => $checkout1->date_due + } + ); + + $fines = Koha::Account::Lines->search( + { borrowernumber => $patron->borrowernumber } ); + is( $fines->count, 1, "Existing fine updated" ); + $fine = $fines->next; + is( $fine->amount, '80', "Fine amount correctly updated to 80" ); + + UpdateFine( + { + issue_id => $checkout2->issue_id, + itemnumber => $item2->itemnumber, + borrowernumber => $patron->borrowernumber, + amount => '30', + due => $checkout2->date_due + } + ); + + $fines = Koha::Account::Lines->search( + { borrowernumber => $patron->borrowernumber }, + { order_by => { 'ASC' => 'accountlines_id' } } + ); + is( $fines->count, 2, "New fine added for second checkout" ); + is( $fines->next->amount, '80', "First fine amount unchanged" ); + is( $fines->next->amount, '20', "Second fine capped at '20' by MaxFine" ); + + $schema->storage->txn_rollback; +}; -- 2.20.1