Koha/t/db_dependent/Circulation/_CalculateAndUpdateFine.t
David Gustafsson f726558510
Bug 32496: Reduce unnecessary unblessings of objects in Circulation.pm
Refactor the most performance critical subroutines in Circulation.pm
to take objects instead of unblessed ones to reduce unnecessary
unblessings and generally clean up the code.

To test:

1) Ensure the following tests all pass:
  t/db_dependent/Circulation.t
  t/db_dependent/Circulation/CalcDateDue.t
  t/db_dependent/Circulation/CheckIfIssuedToPatron.t
  t/db_dependent/Circulation/GetPendingOnSiteCheckouts.t
  t/db_dependent/Circulation/GetTopIssues.t
  t/db_dependent/Circulation/IsItemIssued.t
  t/db_dependent/Circulation/MarkIssueReturned.t
  t/db_dependent/Circulation/ReturnClaims.t
  t/db_dependent/Circulation/Returns.t
  t/db_dependent/Circulation/SwitchOnSiteCheckouts.t
  t/db_dependent/Circulation/TooMany.t
  t/db_dependent/Circulation/dateexpiry.t
  t/db_dependent/Circulation/issue.t
  t/db_dependent/Circulation/maxsuspensiondays.t
  t/db_dependent/Circulation/transferbook.t
  t/db_dependent/Circulation_holdsqueue.t
  t/db_dependent/DecreaseLoanHighHolds.t
  t/db_dependent/Holds/DisallowHoldIfItemsAvailable.t
  t/db_dependent/Holds/RevertWaitingStatus.t
  t/db_dependent/ILSDI_Services.t
  t/db_dependent/Illrequests.t
  t/db_dependent/Koha/Account/Line.t
  t/db_dependent/Koha/Biblio.t
  t/db_dependent/Koha/Items.t
  t/db_dependent/Koha/Object.t
  t/db_dependent/Koha/Patrons.t
  t/db_dependent/Koha/Pseudonymization.t
  t/db_dependent/Koha/Template/Plugin/CirculationRules.t
  t/db_dependent/Letters/TemplateToolkit.t
  t/db_dependent/Members/GetAllIssues.t
  t/db_dependent/Members/IssueSlip.t
  t/db_dependent/Patron/Borrower_Discharge.t
  t/db_dependent/Patron/Borrower_PrevCheckout.t
  t/db_dependent/SIP/ILS.t
  t/db_dependent/Holds.t
  t/db_dependent/Holds/LocalHoldsPriority.t
  t/db_dependent/Holds/HoldFulfillmentPolicy.t
  t/db_dependent/Holds/HoldItemtypeLimit.t
  t/db_dependent/Reserves/GetReserveFee.t
  t/db_dependent/api/v1/return_claims.t
  t/db_dependent/api/v1/biblios.t
  t/db_dependent/api/v1/checkouts.t
  t/db_dependent/Reserves.t
  t/db_dependent/HoldsQueue.t
  t/db_dependent/selenium/regressions.t
  t/db_dependent/Koha/Plugins/Circulation_hooks.t
  t/db_dependent/Koha/Plugins/Recall_hooks.t
  t/db_dependent/Koha/Recalls.t
  t/db_dependent/Koha/Recall.t
  t/db_dependent/Circulation/_CalculateAndUpdateFine.t

Sponsored-by: Gothenburg University Library

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2023-09-22 10:52:39 -03:00

137 lines
4.1 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright University of Helsinki 2020
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use Test::More tests => 1;
use Koha::Database;
use Koha::DateUtils qw( dt_from_string );
use Koha::CirculationRules;
use C4::Circulation;
use t::lib::TestBuilder;
use t::lib::Mocks;
my $schema = Koha::Database->schema;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new();
my $branch = $builder->build({
source => 'Branch',
});
my $branch2 = $builder->build({
source => 'Branch',
});
my $category = $builder->build({
source => 'Category',
});
my $patron = $builder->build_object({
class => 'Koha::Patrons',
value => {
categorycode => $category->{categorycode},
branchcode => $branch->{branchcode},
},
});
my $biblio = $builder->build_sample_biblio({ branchcode => $branch->{branchcode} });
my $item = $builder->build_sample_item({
biblionumber => $biblio->biblionumber,
homebranch => $branch->{branchcode},
holdingbranch => $branch2->{branchcode},
});
Koha::CirculationRules->search()->delete();
subtest 'HomeOrHoldingBranch is used' => sub {
plan tests => 2;
# Homebranch rule with fine
Koha::CirculationRules->set_rules(
{
itemtype => undef,
categorycode => undef,
branchcode => $branch->{branchcode},
rules => {
fine => '1.00',
lengthunit => 'days',
finedays => 0,
chargeperiod => 1,
}
}
);
# Holdingbranch rule without fine
Koha::CirculationRules->set_rules(
{
itemtype => undef,
categorycode => undef,
branchcode => $branch2->{branchcode},
rules => {
fine => '0.00',
lengthunit => 'days',
finedays => 0,
chargeperiod => 1,
}
}
);
t::lib::Mocks::mock_preference('finesMode', 'production');
t::lib::Mocks::mock_preference('CircControl', 'ItemHomeLibrary');
t::lib::Mocks::mock_preference('HomeOrHoldingBranch', 'holdingbranch');
t::lib::Mocks::mock_userenv({ branchcode => $branch->{branchcode} });
my $issue = C4::Circulation::AddIssue( $patron, $item->barcode, dt_from_string() );
# Returning loan 1 day after due date
my $return_date = dt_from_string()->add( days => 1 )->set( hour => 23, minute => 59, second => 0 );
C4::Circulation::_CalculateAndUpdateFine(
{
borrower => $patron->unblessed,
issue => $issue,
item => $item->unblessed,
return_date => $return_date,
}
);
my $fines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber });
is($fines->total_outstanding, 0, "Fine is not accrued for holdingbranch");
t::lib::Mocks::mock_preference('HomeOrHoldingBranch', 'homebranch');
C4::Circulation::_CalculateAndUpdateFine(
{
borrower => $patron->unblessed,
issue => $issue,
item => $item->unblessed,
return_date => $return_date,
}
);
$fines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber });
is($fines->total_outstanding, 1, "Fine is accrued for homebranch");
};
$schema->storage->txn_rollback;