use Modern::Perl;
-use Test::More tests => 71;
+use Test::More tests => 73;
+use Test::Warn;
use MARC::Record;
use DateTime::Duration;
is($status, "Reserved", "CheckReserves Test 3");
my $ReservesControlBranch = C4::Context->preference('ReservesControlBranch');
-C4::Context->set_preference( 'ReservesControlBranch', 'ItemHomeLibrary' );
+t::lib::Mocks::mock_preference( 'ReservesControlBranch', 'ItemHomeLibrary' );
ok(
'ItemHomeLib' eq GetReservesControlBranch(
{ homebranch => 'ItemHomeLib' },
{ branchcode => 'PatronHomeLib' }
), "GetReservesControlBranch returns item home branch when set to ItemHomeLibrary"
);
-C4::Context->set_preference( 'ReservesControlBranch', 'PatronLibrary' );
+t::lib::Mocks::mock_preference( 'ReservesControlBranch', 'PatronLibrary' );
ok(
'PatronHomeLib' eq GetReservesControlBranch(
{ homebranch => 'ItemHomeLib' },
{ branchcode => 'PatronHomeLib' }
), "GetReservesControlBranch returns patron home branch when set to PatronLibrary"
);
-C4::Context->set_preference( 'ReservesControlBranch', $ReservesControlBranch );
+t::lib::Mocks::mock_preference( 'ReservesControlBranch', $ReservesControlBranch );
###
### Regression test for bug 10272
categorycode => 'PT',
surname => 'borrower from CPL',
);
+for my $i ( 2 .. 5 ) {
+ $requesters{"CPL$i"} = AddMember(
+ branchcode => 'CPL',
+ categorycode => 'PT',
+ surname => 'borrower $i from CPL',
+ );
+}
$requesters{'FPL'} = AddMember(
branchcode => 'FPL',
categorycode => 'PT',
$title, $checkitem, $found);
# Ensure that the item's home library controls hold policy lookup
-C4::Context->set_preference( 'ReservesControlBranch', 'ItemHomeLibrary' );
+t::lib::Mocks::mock_preference( 'ReservesControlBranch', 'ItemHomeLibrary' );
my $messages;
# Return the CPL item at FPL. The hold that should be triggered is
# Return the FPL item at FPL. The hold that should be triggered is
# the one placed by the RPL patron, as that patron is first in line
# and RPL imposes no restrictions on whose holds its items can fill.
+
+# Ensure that the preference 'LocalHoldsPriority' is not set (Bug 15244):
+t::lib::Mocks::mock_preference( 'LocalHoldsPriority', '' );
+
(undef, $messages, undef, undef) = AddReturn('bug10272_FPL', 'FPL');
is( $messages->{ResFound}->{borrowernumber},
$requesters{'RPL'},
# Test 9761b: Add a reserve with future date, CheckReserve should not return it
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
-C4::Context->set_preference('AllowHoldDateInFuture', 1);
+t::lib::Mocks::mock_preference('AllowHoldDateInFuture', 1);
$resdate= dt_from_string();
$resdate->add_duration(DateTime::Duration->new(days => 4));
$resdate=output_pref($resdate);
# Test 9761d: Check ResFound message of AddReturn for future hold
# Note that AddReturn is in Circulation.pm, but this test really pertains to reserves; AddReturn uses the ConfirmFutureHolds pref when calling CheckReserves
# In this test we do not need an issued item; it is just a 'checkin'
-C4::Context->set_preference('ConfirmFutureHolds', 0);
+t::lib::Mocks::mock_preference('ConfirmFutureHolds', 0);
(my $doreturn, $messages)= AddReturn('97531','CPL');
is($messages->{ResFound}//'', '', 'AddReturn does not care about future reserve when ConfirmFutureHolds is off');
-C4::Context->set_preference('ConfirmFutureHolds', 3);
+t::lib::Mocks::mock_preference('ConfirmFutureHolds', 3);
($doreturn, $messages)= AddReturn('97531','CPL');
is(exists $messages->{ResFound}?1:0, 0, 'AddReturn ignores future reserve beyond ConfirmFutureHolds days');
-C4::Context->set_preference('ConfirmFutureHolds', 7);
+t::lib::Mocks::mock_preference('ConfirmFutureHolds', 7);
($doreturn, $messages)= AddReturn('97531','CPL');
is(exists $messages->{ResFound}?1:0, 1, 'AddReturn considers future reserve within ConfirmFutureHolds days');
# Tests for bug 9788: Does GetReservesFromItemnumber return a future wait?
# 9788a: GetReservesFromItemnumber does not return future next available hold
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
-C4::Context->set_preference('ConfirmFutureHolds', 2);
-C4::Context->set_preference('AllowHoldDateInFuture', 1);
+t::lib::Mocks::mock_preference('ConfirmFutureHolds', 2);
+t::lib::Mocks::mock_preference('AllowHoldDateInFuture', 1);
$resdate= dt_from_string();
$resdate->add_duration(DateTime::Duration->new(days => 2));
$resdate=output_pref($resdate);
is(defined $results[3]?1:0, 1, 'GetReservesFromItemnumber returns a future wait (confirmed future hold)');
# End of tests for bug 9788
+$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
# Tests for CalculatePriority (bug 8918)
my $p = C4::Reserves::CalculatePriority($bibnum2);
is($p, 4, 'CalculatePriority should now return priority 4');
$resdate=undef;
-AddReserve('CPL', $requesters{'CPL'}, $bibnum2,
+AddReserve('CPL', $requesters{'CPL2'}, $bibnum2,
$bibitems, $p, $resdate, $expdate, $notes,
$title, $checkitem, $found);
$p = C4::Reserves::CalculatePriority($bibnum2);
$p = C4::Reserves::CalculatePriority($bibnum);
is($p, 1, 'CalculatePriority should now return priority 1');
#add another biblio hold, no resdate
-AddReserve('CPL', $requesters{'CPL'}, $bibnum,
+AddReserve('CPL', $requesters{'CPL2'}, $bibnum,
$bibitems, $p, $resdate, $expdate, $notes,
$title, $checkitem, $found);
$p = C4::Reserves::CalculatePriority($bibnum);
is($p, 2, 'CalculatePriority should now return priority 2');
#add another future hold
-C4::Context->set_preference('AllowHoldDateInFuture', 1);
+t::lib::Mocks::mock_preference('AllowHoldDateInFuture', 1);
$resdate= dt_from_string();
$resdate->add_duration(DateTime::Duration->new(days => 1));
-AddReserve('CPL', $requesters{'CPL'}, $bibnum,
+AddReserve('CPL', $requesters{'CPL3'}, $bibnum,
$bibitems, $p, output_pref($resdate), $expdate, $notes,
$title, $checkitem, $found);
$p = C4::Reserves::CalculatePriority($bibnum);
is($p, 3, 'CalculatePriority should now return priority 3');
# End of tests for bug 8918
+# Test for bug 5144
+warning_is {
+ $reserve_id = AddReserve('CPL', $requesters{'CPL3'}, $bibnum,
+ $bibitems, $p, output_pref($resdate), $expdate, $notes,
+ $title, $checkitem, $found)
+} "AddReserve: borrower $requesters{CPL3} already has a hold for biblionumber $bibnum";
+is( $reserve_id, undef, 'Attempt to add a second reserve on a given record for the same patron fails.' );
+
# Tests for cancel reserves by users from OPAC.
$dbh->do('DELETE FROM reserves', undef, ($bibnum));
AddReserve('CPL', $requesters{'CPL'}, $item_bibnum,
####### Testing Bug 13113 - Prevent juvenile/children from reserving ageRestricted material >>>
####
-C4::Context->set_preference( 'AgeRestrictionMarker', 'FSK|PEGI|Age|K' );
+t::lib::Mocks::mock_preference( 'AgeRestrictionMarker', 'FSK|PEGI|Age|K' );
#Reserving an not-agerestricted Biblio by a Borrower with no dateofbirth is tested previously.
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
my ( undef, undef, $bz14464_fines ) = GetMemberIssuesAndFines( $borrowernumber );
-ok( !$bz14464_fines, 'Bug 14464 - No fines at beginning' );
+is( !$bz14464_fines || $bz14464_fines==0, 1, 'Bug 14464 - No fines at beginning' );
# First, test cancelling a reserve when there's no charge configured.
t::lib::Mocks::mock_preference('ExpireReservesMaxPickUpDelayCharge', 0);
CancelReserve({ reserve_id => $bz14464_reserve, charge_cancel_fee => 1 });
( undef, undef, $bz14464_fines ) = GetMemberIssuesAndFines( $borrowernumber );
-ok( !$bz14464_fines, 'Bug 14464 - No fines after cancelling reserve with no charge configured' );
+is( !$bz14464_fines || $bz14464_fines==0, 1, 'Bug 14464 - No fines after cancelling reserve with no charge configured' );
# Then, test cancelling a reserve when there's no charge desired.
t::lib::Mocks::mock_preference('ExpireReservesMaxPickUpDelayCharge', 42);
CancelReserve({ reserve_id => $bz14464_reserve });
( undef, undef, $bz14464_fines ) = GetMemberIssuesAndFines( $borrowernumber );
-ok( !$bz14464_fines, 'Bug 14464 - No fines after cancelling reserve with no charge desired' );
+is( !$bz14464_fines || $bz14464_fines==0, 1, 'Bug 14464 - No fines after cancelling reserve with no charge desired' );
# Finally, test cancelling a reserve when there's a charge desired and configured.
$bz14464_reserve = AddReserve(
# tests for MoveReserve in relation to ConfirmFutureHolds (BZ 14526)
# hold from A pos 1, today, no fut holds: MoveReserve should fill it
$dbh->do('DELETE FROM reserves', undef, ($bibnum));
-C4::Context->set_preference('ConfirmFutureHolds', 0);
-C4::Context->set_preference('AllowHoldDateInFuture', 1);
+t::lib::Mocks::mock_preference('ConfirmFutureHolds', 0);
+t::lib::Mocks::mock_preference('AllowHoldDateInFuture', 1);
AddReserve('CPL', $borrowernumber, $item_bibnum,
$bibitems, 1, undef, $expdate, $notes, $title, $checkitem, '');
MoveReserve( $itemnumber, $borrowernumber );
is( $status, 'Reserved', 'MoveReserve did not fill future hold');
$dbh->do('DELETE FROM reserves', undef, ($bibnum));
# hold from A pos 1, tomorrow, fut holds=2: MoveReserve should fill it
-C4::Context->set_preference('ConfirmFutureHolds', 2);
+t::lib::Mocks::mock_preference('ConfirmFutureHolds', 2);
AddReserve('CPL', $borrowernumber, $item_bibnum,
$bibitems, 1, $resdate, $expdate, $notes, $title, $checkitem, '');
MoveReserve( $itemnumber, $borrowernumber );