use Modern::Perl;
-use Test::More tests => 20;
+use Test::More tests => 35;
+
use MARC::Record;
use DateTime::Duration;
use Koha::DateUtils;
+use Data::Dumper;
BEGIN {
use_ok('C4::Reserves');
}
diag("\nCreating biblio instance for testing.");
my $bib = MARC::Record->new();
my $title = 'Silence in the library';
-$bib->append_fields(
- MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
- MARC::Field->new('245', ' ', ' ', a => $title),
-);
+if( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
+ $bib->append_fields(
+ MARC::Field->new('600', '', '1', a => 'Moffat, Steven'),
+ MARC::Field->new('200', '', '', a => $title),
+ );
+}
+else {
+ $bib->append_fields(
+ MARC::Field->new('100', '', '', a => 'Moffat, Steven'),
+ MARC::Field->new('245', '', '', a => $title),
+ );
+}
my ($bibnum, $bibitemnum);
($bibnum, $title, $bibitemnum) = AddBiblio($bib, '');
is($status, "Reserved", "CheckReserves Test 1");
+ok(exists($reserve->{reserve_id}), 'CheckReserves() include reserve_id in its response');
+
($status, $reserve, $all_reserves) = CheckReserves($itemnumber);
is($status, "Reserved", "CheckReserves Test 2");
barcode => 'bug10272_FPL'
} , $bibnum2);
+# Ensure that priorities are numbered correcly when a hold is moved to waiting
+# (bug 11947)
+$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum2));
+AddReserve('RPL', $requesters{'RPL'}, $bibnum2,
+ $constraint, $bibitems, 1, $resdate, $expdate, $notes,
+ $title, $checkitem, $found);
+AddReserve('FPL', $requesters{'FPL'}, $bibnum2,
+ $constraint, $bibitems, 2, $resdate, $expdate, $notes,
+ $title, $checkitem, $found);
+AddReserve('CPL', $requesters{'CPL'}, $bibnum2,
+ $constraint, $bibitems, 3, $resdate, $expdate, $notes,
+ $title, $checkitem, $found);
+ModReserveAffect($itemnum_cpl, $requesters{'RPL'}, 0);
+
+# Now it should have different priorities.
+my $title_reserves = GetReservesFromBiblionumber({biblionumber => $bibnum2});
+# Sort by reserve number in case the database gives us oddly ordered results
+my @reserves = sort { $a->{reserve_id} <=> $b->{reserve_id} } @$title_reserves;
+is($reserves[0]{priority}, 0, 'Item is correctly waiting');
+is($reserves[1]{priority}, 1, 'Item is correctly priority 1');
+is($reserves[2]{priority}, 2, 'Item is correctly priority 2');
+
+
+$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum2));
AddReserve('RPL', $requesters{'RPL'}, $bibnum2,
$constraint, $bibitems, 1, $resdate, $expdate, $notes,
$title, $checkitem, $found);
my $letter = ReserveSlip('CPL', $requesters{'CPL'}, $bibnum);
ok(defined($letter), 'can successfully generate hold slip (bug 10949)');
+# 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);
+$resdate= dt_from_string();
+$resdate->add_duration(DateTime::Duration->new(days => 2));
+$resdate=output_pref($resdate);
+AddReserve('CPL', $requesters{'CPL'}, $bibnum,
+ $constraint, $bibitems, 1, $resdate, $expdate, $notes,
+ $title, $checkitem, $found);
+my @results= GetReservesFromItemnumber($itemnumber);
+is(defined $results[3]?1:0, 0, 'GetReservesFromItemnumber does not return a future next available hold');
+# 9788b: GetReservesFromItemnumber does not return future item level hold
+$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
+AddReserve('CPL', $requesters{'CPL'}, $bibnum,
+ $constraint, $bibitems, 1, $resdate, $expdate, $notes,
+ $title, $itemnumber, $found); #item level hold
+@results= GetReservesFromItemnumber($itemnumber);
+is(defined $results[3]?1:0, 0, 'GetReservesFromItemnumber does not return a future item level hold');
+# 9788c: GetReservesFromItemnumber returns future wait (confirmed future hold)
+ModReserveAffect( $itemnumber, $requesters{'CPL'} , 0); #confirm hold
+@results= GetReservesFromItemnumber($itemnumber);
+is(defined $results[3]?1:0, 1, 'GetReservesFromItemnumber returns a future wait (confirmed future hold)');
+# End of tests for bug 9788
+
+# 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,
+ $constraint, $bibitems, $p, $resdate, $expdate, $notes,
+ $title, $checkitem, $found);
+$p = C4::Reserves::CalculatePriority($bibnum2);
+is($p, 5, 'CalculatePriority should now return priority 5');
+#some tests on bibnum
+$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
+$p = C4::Reserves::CalculatePriority($bibnum);
+is($p, 1, 'CalculatePriority should now return priority 1');
+#add a new reserve and confirm it to waiting
+AddReserve('CPL', $requesters{'CPL'}, $bibnum,
+ $constraint, $bibitems, $p, $resdate, $expdate, $notes,
+ $title, $itemnumber, $found);
+$p = C4::Reserves::CalculatePriority($bibnum);
+is($p, 2, 'CalculatePriority should now return priority 2');
+ModReserveAffect( $itemnumber, $requesters{'CPL'} , 0);
+$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,
+ $constraint, $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);
+$resdate= dt_from_string();
+$resdate->add_duration(DateTime::Duration->new(days => 1));
+AddReserve('CPL', $requesters{'CPL'}, $bibnum,
+ $constraint, $bibitems, $p, output_pref($resdate), $expdate, $notes,
+ $title, $checkitem, $found);
+$p = C4::Reserves::CalculatePriority($bibnum);
+is($p, 2, 'CalculatePriority should now still return priority 2');
+#calc priority with future resdate
+$p = C4::Reserves::CalculatePriority($bibnum, $resdate);
+is($p, 3, 'CalculatePriority should now return priority 3');
+# End of tests for bug 8918
+
$dbh->rollback;
sub count_hold_print_messages {