Lines 6-12
use t::lib::Mocks;
Link Here
|
6 |
use C4::Context; |
6 |
use C4::Context; |
7 |
use C4::Branch; |
7 |
use C4::Branch; |
8 |
|
8 |
|
9 |
use Test::More tests => 49; |
9 |
use Test::More tests => 52; |
10 |
use MARC::Record; |
10 |
use MARC::Record; |
11 |
use C4::Biblio; |
11 |
use C4::Biblio; |
12 |
use C4::Items; |
12 |
use C4::Items; |
Lines 59-66
foreach (1..$borrowers_count) {
Link Here
|
59 |
|
59 |
|
60 |
my $biblionumber = $bibnum; |
60 |
my $biblionumber = $bibnum; |
61 |
|
61 |
|
62 |
my @branches = GetBranchesLoop(); |
62 |
my $branches = GetBranchesLoop(); |
63 |
my $branch = $branches[0][0]{value}; |
63 |
my $branch = $branches->[0]{value}; |
64 |
|
64 |
|
65 |
# Create five item level holds |
65 |
# Create five item level holds |
66 |
foreach my $borrowernumber ( @borrowernumbers ) { |
66 |
foreach my $borrowernumber ( @borrowernumbers ) { |
Lines 222-228
$dbh->do(
Link Here
|
222 |
); |
222 |
); |
223 |
|
223 |
|
224 |
# make sure some basic sysprefs are set |
224 |
# make sure some basic sysprefs are set |
225 |
t::lib::Mocks::mock_preference('ReservesControlBranch', 'homebranch'); |
225 |
t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary'); |
226 |
t::lib::Mocks::mock_preference('item-level_itypes', 1); |
226 |
t::lib::Mocks::mock_preference('item-level_itypes', 1); |
227 |
|
227 |
|
228 |
# if IndependentBranches is OFF, a CPL patron can reserve an MPL item |
228 |
# if IndependentBranches is OFF, a CPL patron can reserve an MPL item |
Lines 310-319
ModReserve({ reserve_id => $reserveid2, rank => 'del' });
Link Here
|
310 |
$reserve3 = GetReserve( $reserveid3 ); |
310 |
$reserve3 = GetReserve( $reserveid3 ); |
311 |
is( $reserve3->{priority}, 1, "After ModReserve, the 3rd reserve becomes the first on the waiting list" ); |
311 |
is( $reserve3->{priority}, 1, "After ModReserve, the 3rd reserve becomes the first on the waiting list" ); |
312 |
|
312 |
|
|
|
313 |
ok( defined( ( CheckReserves($itemnumber) )[1] ), "Hold can be trapped for damaged item with AllowHoldsOnDamagedItems enabled" ); |
314 |
|
313 |
ModItem({ damaged => 1 }, $item_bibnum, $itemnumber); |
315 |
ModItem({ damaged => 1 }, $item_bibnum, $itemnumber); |
|
|
316 |
CancelReserve({reserve_id => $reserveid3}); |
314 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 1 ); |
317 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 1 ); |
315 |
ok( CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'OK', "Patron can reserve damaged item with AllowHoldsOnDamagedItems enabled" ); |
318 |
ok( CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'OK', "Patron can reserve damaged item with AllowHoldsOnDamagedItems enabled" ); |
316 |
ok( defined( ( CheckReserves($itemnumber) )[1] ), "Hold can be trapped for damaged item with AllowHoldsOnDamagedItems enabled" ); |
|
|
317 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 0 ); |
319 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 0 ); |
318 |
ok( CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'damaged', "Patron cannot reserve damaged item with AllowHoldsOnDamagedItems disabled" ); |
320 |
ok( CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'damaged', "Patron cannot reserve damaged item with AllowHoldsOnDamagedItems disabled" ); |
319 |
ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for damaged item with AllowHoldsOnDamagedItems disabled" ); |
321 |
ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for damaged item with AllowHoldsOnDamagedItems disabled" ); |
Lines 329-351
AddReserve(
Link Here
|
329 |
'', |
331 |
'', |
330 |
1, |
332 |
1, |
331 |
); |
333 |
); |
|
|
334 |
my ($bibnum2, $title2, $bibitemnum2) = create_helper_biblio('CANNOT'); |
335 |
my ($item_bibnum2, $item_bibitemnum2, $itemnumber2) = AddItem({ homebranch => $branch, holdingbranch => $branch, itype => 'CANNOT' } , $bibnum2); |
332 |
ok( |
336 |
ok( |
333 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'tooManyReserves', |
337 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber2) eq 'tooManyReserves', |
334 |
"cannot request item if policy that matches on item-level item type forbids it" |
338 |
"cannot request item if policy that matches on item-level item type forbids it" |
335 |
); |
339 |
); |
336 |
ModItem({ itype => 'CAN' }, $item_bibnum, $itemnumber); |
340 |
ModItem({ itype => 'CAN' }, $item_bibnum2, $itemnumber2); |
337 |
ok( |
341 |
ok( |
338 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'OK', |
342 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber2) eq 'OK', |
339 |
"can request item if policy that matches on item type allows it" |
343 |
"can request item if policy that matches on item type allows it" |
340 |
); |
344 |
); |
341 |
|
345 |
|
342 |
t::lib::Mocks::mock_preference('item-level_itypes', 0); |
346 |
t::lib::Mocks::mock_preference('item-level_itypes', 0); |
343 |
ModItem({ itype => undef }, $item_bibnum, $itemnumber); |
347 |
ModItem({ itype => undef }, $item_bibnum2, $itemnumber2); |
344 |
ok( |
348 |
ok( |
345 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'tooManyReserves', |
349 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber2) eq 'tooManyReserves', |
346 |
"cannot request item if policy that matches on bib-level item type forbids it (bug 9532)" |
350 |
"cannot request item if policy that matches on bib-level item type forbids it (bug 9532)" |
347 |
); |
351 |
); |
348 |
|
352 |
|
|
|
353 |
is(CanBookBeReserved($borrowernumbers[0], $bibnum), 'alreadyReserved'); |
354 |
|
355 |
C4::Context->set_preference('maxreserves', 1); |
356 |
ok(CanBookBeReserved($borrowernumbers[0], $biblionumber) eq 'tooManyReserves'); |
357 |
|
358 |
C4::Context->set_preference('maxreserves', 0); |
359 |
t::lib::Mocks::mock_preference('IndependentBranches', 1); |
360 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 0); |
361 |
ok(CanBookBeReserved($borrowernumbers[0], $foreign_bibnum) eq 'none_available'); |
349 |
|
362 |
|
350 |
# Test branch item rules |
363 |
# Test branch item rules |
351 |
|
364 |
|
Lines 427-436
sub create_helper_biblio {
Link Here
|
427 |
my $itemtype = shift; |
440 |
my $itemtype = shift; |
428 |
my $bib = MARC::Record->new(); |
441 |
my $bib = MARC::Record->new(); |
429 |
my $title = 'Silence in the library'; |
442 |
my $title = 'Silence in the library'; |
430 |
$bib->append_fields( |
443 |
if (C4::Context->preference('marcflavour') eq 'UNIMARC') { |
431 |
MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), |
444 |
$bib->append_fields( |
432 |
MARC::Field->new('245', ' ', ' ', a => $title), |
445 |
MARC::Field->new('700', ' ', '0', a => 'Moffat, Steven'), |
433 |
MARC::Field->new('942', ' ', ' ', c => $itemtype), |
446 |
MARC::Field->new('200', ' ', ' ', a => $title), |
434 |
); |
447 |
MARC::Field->new('099', ' ', ' ', t => $itemtype), |
435 |
return ($bibnum, $title, $bibitemnum) = AddBiblio($bib, ''); |
448 |
); |
|
|
449 |
} else { |
450 |
$bib->append_fields( |
451 |
MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), |
452 |
MARC::Field->new('245', ' ', ' ', a => $title), |
453 |
MARC::Field->new('942', ' ', ' ', c => $itemtype), |
454 |
); |
455 |
} |
456 |
|
457 |
return AddBiblio($bib, ''); |
436 |
} |
458 |
} |
437 |
- |
|
|