Koha/t/db_dependent/Circulation/GetTopIssues.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

133 lines
3.8 KiB
Perl
Executable file

#!/usr/bin/perl
# 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 => 14;
use Test::MockModule;
use t::lib::Mocks;
use t::lib::TestBuilder;
use C4::Context;
use C4::Circulation qw( AddIssue GetTopIssues );
use C4::Biblio qw( GetMarcFromKohaField AddBiblio );
use C4::Items;
use Koha::Database;
use Koha::Patrons;
my $schema = Koha::Database->new()->schema();
my $dbh = $schema->storage->dbh;
my $builder = t::lib::TestBuilder->new();
# Start transaction
$schema->storage->txn_begin();
my $itemtype = $builder->build({ source => 'Itemtype' })->{ itemtype };
my $category = $builder->build({ source => 'Category' })->{ categorycode };
my $branch_1 = $builder->build({ source => 'Branch' });
my $branch_2 = $builder->build({ source => 'Branch' });
my $c4_context = Test::MockModule->new('C4::Context');
$c4_context->mock('userenv', sub {
{ branch => $branch_1->{ branchcode } }
});
t::lib::Mocks::mock_preference('item-level_itypes', '0');
my $biblionumber = create_biblio('Test 1', $itemtype);
Koha::Item->new({
biblionumber => $biblionumber,
barcode => 'GTI_BARCODE_001',
homebranch => $branch_1->{ branchcode },
ccode => 'GTI_CCODE',
})->store;
$biblionumber = create_biblio('Test 2', $itemtype);
Koha::Item->new({
biblionumber => $biblionumber,
barcode => 'GTI_BARCODE_002',
homebranch => $branch_2->{ branchcode },
})->store;
my $borrowernumber = Koha::Patron->new({
userid => 'gti.test',
categorycode => $category,
branchcode => $branch_1->{ branchcode }
})->store->borrowernumber;
my $borrower = Koha::Patrons->find( $borrowernumber );
AddIssue($borrower, 'GTI_BARCODE_001');
AddIssue($borrower, 'GTI_BARCODE_002');
#
# Start of tests
#
my @issues = GetTopIssues({count => 10, itemtype => $itemtype});
is(scalar @issues, 2);
is($issues[0]->{title}, 'Test 1');
is($issues[1]->{title}, 'Test 2');
@issues = GetTopIssues({count => 1, itemtype => $itemtype});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 1');
@issues = GetTopIssues({count => 10, branch => $branch_2->{ branchcode }});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 2');
@issues = GetTopIssues({count => 10, ccode => 'GTI_CCODE'});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 1');
@issues = GetTopIssues({count => 10, itemtype => $itemtype, newness => 1});
is(scalar @issues, 2);
is($issues[0]->{title}, 'Test 1');
is($issues[1]->{title}, 'Test 2');
$dbh->do(q{
UPDATE biblio
SET datecreated = DATE_SUB(datecreated, INTERVAL 2 DAY)
WHERE biblionumber = ?
}, undef, $biblionumber);
@issues = GetTopIssues({count => 10, itemtype => $itemtype, newness => 1});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 1');
#
# End of tests
#
$schema->storage->txn_rollback();
sub create_biblio {
my ($title, $itemtype) = @_;
my ($title_tag, $title_subfield) = GetMarcFromKohaField( 'biblio.title' );
my ($it_tag, $it_subfield) = GetMarcFromKohaField( 'biblioitems.itemtype' );
my $record = MARC::Record->new();
$record->append_fields(
MARC::Field->new($title_tag, ' ', ' ', $title_subfield => $title),
MARC::Field->new($it_tag, ' ', ' ', $it_subfield => $itemtype),
);
my ($biblionumber) = AddBiblio($record, '');
return $biblionumber;
}