use Modern::Perl;
-use Test::More tests => 51;
+use Test::More tests => 53;
use Data::Dumper;
use C4::Calendar;
my $bibitems = undef;
my $priority = 1;
# Make a reserve
-AddReserve ( $borrower_branchcode, $borrowernumber, $biblionumber, $bibitems, $priority );
+AddReserve(
+ {
+ branchcode => $borrower_branchcode,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => $priority,
+ }
+);
# $resdate, $expdate, $notes, $title, $checkitem, $found
$dbh->do("UPDATE reserves SET reservedate = DATE_SUB( reservedate, INTERVAL 1 DAY )");
undef, join( ',', $library_B, $library_A, $library_C ) );
$dbh->do( "UPDATE systempreferences SET value = 0 WHERE variable = 'RandomizeHoldsQueueWeight'" );
-my $reserve_id = AddReserve ( $library_C, $borrowernumber, $biblionumber, '', 1 );
+my $reserve_id = AddReserve(
+ {
+ branchcode => $library_C,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} });
is( @$holds_queue, 1, "Bug 14297 - Holds Queue building ignoring holds where pickup & home branch don't match and item is not from le");
VALUES ($biblionumber, $biblioitemnumber, '$library_A', '$library_A', 0, 0, 0, 0, NULL, '$itemtype')
");
-$reserve_id = AddReserve ( $library_B, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_B,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} });
is( @$holds_queue, 0, "Bug 15062 - Holds queue with Transport Cost Matrix will transfer item even if transfers disabled");
);
# Home branch matches pickup branch
-$reserve_id = AddReserve( $library_A, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_A,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Hold where pickup branch matches home branch targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Holding branch matches pickup branch
-$reserve_id = AddReserve( $library_B, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_B,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 0, "Hold where pickup ne home, pickup eq home not targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Neither branch matches pickup branch
-$reserve_id = AddReserve( $library_C, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_C,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 0, "Hold where pickup ne home, pickup ne holding not targeted" );
);
# Home branch matches pickup branch
-$reserve_id = AddReserve( $library_A, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_A,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 0, "Hold where pickup eq home, pickup ne holding not targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Holding branch matches pickup branch
-$reserve_id = AddReserve( $library_B, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_B,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Hold where pickup ne home, pickup eq holding targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Neither branch matches pickup branch
-$reserve_id = AddReserve( $library_C, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_C,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 0, "Hold where pickup ne home, pickup ne holding not targeted" );
);
# Home branch matches pickup branch
-$reserve_id = AddReserve( $library_A, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_A,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Hold where pickup eq home, pickup ne holding targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Holding branch matches pickup branch
-$reserve_id = AddReserve( $library_B, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_B,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Hold where pickup ne home, pickup eq holding targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Neither branch matches pickup branch
-$reserve_id = AddReserve( $library_C, $borrowernumber, $biblionumber, '', 1 );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_C,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Hold where pickup ne home, pickup ne holding targeted" );
);
# Home branch matches pickup branch
-$reserve_id = AddReserve( $library_A, $borrowernumber, $biblionumber, '', 1, undef, undef, undef, undef, undef, undef, $wrong_itemtype );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_A,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ itemtype => $wrong_itemtype,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 0, "Item with incorrect itemtype not targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Holding branch matches pickup branch
-$reserve_id = AddReserve( $library_A, $borrowernumber, $biblionumber, '', 1, undef, undef, undef, undef, undef, undef, $right_itemtype );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_A,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ itemtype => $right_itemtype,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Item with matching itemtype is targeted" );
Koha::Holds->find( $reserve_id )->cancel;
# Neither branch matches pickup branch
-$reserve_id = AddReserve( $library_A, $borrowernumber, $biblionumber, '', 1, undef, undef, undef, undef, undef, undef, undef );
+$reserve_id = AddReserve(
+ {
+ branchcode => $library_A,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ priority => 1,
+ }
+);
+
C4::HoldsQueue::CreateQueue();
$holds_queue = $dbh->selectall_arrayref( "SELECT * FROM tmp_holdsqueue", { Slice => {} } );
is( @$holds_queue, 1, "Item targeted when hold itemtype is not set" );
}
);
- my $reserve_id =
- AddReserve( $branch2->branchcode, $other_patron->borrowernumber,
- $biblio->biblionumber, '', 1, undef, undef, undef, undef, undef, undef, undef );
- my $reserve_id2 =
- AddReserve( $item->homebranch, $local_patron->borrowernumber,
- $biblio->biblionumber, '', 2, undef, undef, undef, undef, undef, undef, undef );
+ my $reserve_id = AddReserve(
+ {
+ branchcode => $branch2->branchcode,
+ borrowernumber => $other_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 1,
+ }
+ );
+ my $reserve_id2 = AddReserve(
+ {
+ branchcode => $item->homebranch,
+ borrowernumber => $local_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 2,
+ }
+ );
C4::HoldsQueue::CreateQueue();
}
);
- my $reserve_id =
- AddReserve( $branch2->branchcode, $other_patron->borrowernumber,
- $biblio->biblionumber, '', 1, undef, undef, undef, undef, $item->id, undef, undef );
- my $reserve_id2 =
- AddReserve( $item->homebranch, $local_patron->borrowernumber,
- $biblio->biblionumber, '', 2, undef, undef, undef, undef, $item->id, undef, undef );
+ my $reserve_id = AddReserve(
+ {
+ branchcode => $branch2->branchcode,
+ borrowernumber => $other_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 1,
+ itemnumber => $item->id,
+ }
+ );
+ my $reserve_id2 = AddReserve(
+ {
+ branchcode => $item->homebranch,
+ borrowernumber => $local_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 2,
+ itemnumber => $item->id,
+ }
+ );
C4::HoldsQueue::CreateQueue();
}
);
- my $reserve_id =
- AddReserve( $branch2->branchcode, $other_patron->borrowernumber,
- $biblio->biblionumber, '', 1, undef, undef, undef, undef, undef, undef, undef );
+ my $reserve_id = AddReserve(
+ {
+ branchcode => $branch2->branchcode,
+ borrowernumber => $other_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 1,
+ }
+ );
+ my $reserve_id2 = AddReserve(
+ {
+ branchcode => $item->homebranch,
+ borrowernumber => $local_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 2,
+ itemnumber => $item->id,
+ }
+ );
+
+ C4::HoldsQueue::CreateQueue();
+
+ my $queue_rs = $schema->resultset('TmpHoldsqueue');
+ my $q = $queue_rs->next;
+ is( $queue_rs->count(), 1,
+ "Hold queue contains one hold" );
+ is(
+ $q->borrowernumber,
+ $local_patron->borrowernumber,
+ "We should pick the local hold over the next available"
+ );
+};
+
+subtest "Test Local Holds Priority - Get correct item for item level hold" => sub {
+ plan tests => 3;
+
+ Koha::Biblios->delete();
+ t::lib::Mocks::mock_preference( 'LocalHoldsPriority', 1 );
+ t::lib::Mocks::mock_preference( 'LocalHoldsPriorityPatronControl', 'PickupLibrary' );
+ t::lib::Mocks::mock_preference( 'LocalHoldsPriorityItemControl', 'homebranch' );
+ my $branch = $builder->build_object( { class => 'Koha::Libraries' } );
+ my $branch2 = $builder->build_object( { class => 'Koha::Libraries' } );
+ my $local_patron = $builder->build_object(
+ {
+ class => "Koha::Patrons",
+ value => {
+ branchcode => $branch->branchcode
+ }
+ }
+ );
+ my $other_patron = $builder->build_object(
+ {
+ class => "Koha::Patrons",
+ value => {
+ branchcode => $branch2->branchcode
+ }
+ }
+ );
+ my $biblio = $builder->build_sample_biblio();
+
+ my $item1 = $builder->build_sample_item(
+ {
+ biblionumber => $biblio->biblionumber,
+ library => $branch->branchcode,
+ }
+ );
+ my $item2 = $builder->build_sample_item(
+ {
+ biblionumber => $biblio->biblionumber,
+ library => $branch->branchcode,
+ }
+ );
+ my $item3 = $builder->build_sample_item(
+ {
+ biblionumber => $biblio->biblionumber,
+ library => $branch->branchcode,
+ }
+ );
+
my $reserve_id2 =
- AddReserve( $item->homebranch, $local_patron->borrowernumber,
- $biblio->biblionumber, '', 2, undef, undef, undef, undef, $item->id, undef, undef );
+ AddReserve(
+ {
+ branchcode => $item2->homebranch,
+ borrowernumber => $local_patron->borrowernumber,
+ biblionumber => $biblio->biblionumber,
+ priority => 2,
+ itemnumber => $item2->id,
+ }
+ );
+
C4::HoldsQueue::CreateQueue();
$local_patron->borrowernumber,
"We should pick the local hold over the next available"
);
+ is( $q->itemnumber->id, $item2->id, "Got the correct item for item level local holds priority" );
};
subtest "Test Local Holds Priority - Ensure no duplicate requests in holds queue (Bug 18001)" => sub {
$dbh->do("DELETE FROM tmp_holdsqueue");
$dbh->do("DELETE FROM hold_fill_targets");
$dbh->do("DELETE FROM reserves");
- $dbh->do("DELETE FROM issuingrules");
$dbh->do("DELETE FROM circulation_rules");
Koha::Biblios->delete();
}
);
- $reserve_id =
- AddReserve( $item1->homebranch, $patron->borrowernumber, $biblio->id, '',
- 1, undef, undef, undef, undef, undef, undef, undef );
+ $reserve_id = AddReserve(
+ {
+ branchcode => $item1->homebranch,
+ borrowernumber => $patron->borrowernumber,
+ biblionumber => $biblio->id,
+ priority => 1
+ }
+ );
C4::HoldsQueue::CreateQueue();
};
+subtest "Item level holds info is preserved (Bug 25738)" => sub {
+
+ plan tests => 3;
+
+ $dbh->do("DELETE FROM tmp_holdsqueue");
+ $dbh->do("DELETE FROM hold_fill_targets");
+ $dbh->do("DELETE FROM reserves");
+ $dbh->do("DELETE FROM circulation_rules");
+
+ my $library = $builder->build_object({ class => 'Koha::Libraries' });
+ my $patron_1 = $builder->build_object(
+ {
+ class => "Koha::Patrons",
+ value => {
+ branchcode => $library->branchcode
+ }
+ }
+ );
+
+ my $patron_2 = $builder->build_object(
+ {
+ class => "Koha::Patrons",
+ value => {
+ branchcode => $library->branchcode
+ }
+ }
+ );
+
+ my $biblio = $builder->build_sample_biblio();
+ my $item_1 = $builder->build_sample_item(
+ {
+ biblionumber => $biblio->biblionumber,
+ library => $library->branchcode,
+ }
+ );
+ my $item_2 = $builder->build_sample_item(
+ {
+ biblionumber => $biblio->biblionumber,
+ library => $library->branchcode,
+ }
+ );
+
+ # Add item-level hold for patron_1
+ my $reserve_id_1 = AddReserve(
+ {
+ branchcode => $library->branchcode,
+ borrowernumber => $patron_1->borrowernumber,
+ biblionumber => $biblio->id,
+ itemnumber => $item_1->itemnumber,
+ priority => 1
+ }
+ );
+
+ my $reserve_id_2 = AddReserve(
+ {
+ branchcode => $library->branchcode,
+ borrowernumber => $patron_2->borrowernumber,
+ biblionumber => $biblio->id,
+ priority => 2
+ }
+ );
+
+ C4::HoldsQueue::CreateQueue();
+
+ my $queue_rs = $schema->resultset('TmpHoldsqueue');
+
+ is( $queue_rs->count(), 2, "Hold queue contains two holds" );
+
+ my $queue_line_1 = $queue_rs->next;
+ is( $queue_line_1->item_level_request, 1, 'Request is correctly advertised as item-level' );
+
+ my $queue_line_2 = $queue_rs->next;
+ is( $queue_line_2->item_level_request, 0, 'Request is correctly advertised as biblio-level' );
+
+};
+
subtest 'Trivial test for UpdateTransportCostMatrix' => sub {
plan tests => 1;
my $recs = [