|
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 => 32; |
9 |
use Test::More tests => 43; |
| 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 54-61
foreach (1..$borrowers_count) {
Link Here
|
| 54 |
|
54 |
|
| 55 |
my $biblionumber = $bibnum; |
55 |
my $biblionumber = $bibnum; |
| 56 |
|
56 |
|
| 57 |
my @branches = GetBranchesLoop(); |
57 |
my $branches = GetBranchesLoop(); |
| 58 |
my $branch = $branches[0][0]{value}; |
58 |
my $branch = $branches->[0]{value}; |
| 59 |
|
59 |
|
| 60 |
# Create five item level holds |
60 |
# Create five item level holds |
| 61 |
foreach my $borrowernumber ( @borrowernumbers ) { |
61 |
foreach my $borrowernumber ( @borrowernumbers ) { |
|
Lines 205-229
t::lib::Mocks::mock_preference('item-level_itypes', 1);
Link Here
|
| 205 |
|
205 |
|
| 206 |
# if IndependentBranches is OFF, a CPL patron can reserve an MPL item |
206 |
# if IndependentBranches is OFF, a CPL patron can reserve an MPL item |
| 207 |
t::lib::Mocks::mock_preference('IndependentBranches', 0); |
207 |
t::lib::Mocks::mock_preference('IndependentBranches', 0); |
|
|
208 |
my ($canitembereserved, $reasons) = CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber); |
| 208 |
ok( |
209 |
ok( |
| 209 |
CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber), |
210 |
$canitembereserved, |
| 210 |
'CPL patron allowed to reserve MPL item with IndependentBranches OFF (bug 2394)' |
211 |
'CPL patron allowed to reserve MPL item with IndependentBranches OFF (bug 2394)' |
| 211 |
); |
212 |
); |
|
|
213 |
is($reasons, undef); |
| 212 |
|
214 |
|
| 213 |
# if IndependentBranches is OFF, a CPL patron cannot reserve an MPL item |
215 |
# if IndependentBranches is OFF, a CPL patron cannot reserve an MPL item |
| 214 |
t::lib::Mocks::mock_preference('IndependentBranches', 1); |
216 |
t::lib::Mocks::mock_preference('IndependentBranches', 1); |
| 215 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 0); |
217 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 0); |
|
|
218 |
($canitembereserved, $reasons) = CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber); |
| 216 |
ok( |
219 |
ok( |
| 217 |
! CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber), |
220 |
! $canitembereserved, |
| 218 |
'CPL patron NOT allowed to reserve MPL item with IndependentBranches ON ... (bug 2394)' |
221 |
'CPL patron NOT allowed to reserve MPL item with IndependentBranches ON ... (bug 2394)' |
| 219 |
); |
222 |
); |
|
|
223 |
ok($reasons->{wrongbranch}); |
| 220 |
|
224 |
|
| 221 |
# ... unless canreservefromotherbranches is ON |
225 |
# ... unless canreservefromotherbranches is ON |
| 222 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 1); |
226 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 1); |
|
|
227 |
($canitembereserved, $reasons) = CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber); |
| 223 |
ok( |
228 |
ok( |
| 224 |
CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber), |
229 |
$canitembereserved, |
| 225 |
'... unless canreservefromotherbranches is ON (bug 2394)' |
230 |
'... unless canreservefromotherbranches is ON (bug 2394)' |
| 226 |
); |
231 |
); |
|
|
232 |
is($reasons, undef); |
| 227 |
|
233 |
|
| 228 |
# Regression test for bug 11336 |
234 |
# Regression test for bug 11336 |
| 229 |
($bibnum, $title, $bibitemnum) = create_helper_biblio(); |
235 |
($bibnum, $title, $bibitemnum) = create_helper_biblio(); |
|
Lines 288-304
ModReserve({ reserve_id => $reserveid2, rank => 'del' });
Link Here
|
| 288 |
$reserve3 = GetReserve( $reserveid3 ); |
294 |
$reserve3 = GetReserve( $reserveid3 ); |
| 289 |
is( $reserve3->{priority}, 1, "After ModReserve, the 3rd reserve becomes the first on the waiting list" ); |
295 |
is( $reserve3->{priority}, 1, "After ModReserve, the 3rd reserve becomes the first on the waiting list" ); |
| 290 |
|
296 |
|
| 291 |
ModItem({ damaged => 1 }, $item_bibnum, $itemnumber); |
|
|
| 292 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 1 ); |
297 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 1 ); |
| 293 |
ok( CanItemBeReserved( $borrowernumbers[0], $itemnumber), "Patron can reserve damaged item with AllowHoldsOnDamagedItems enabled" ); |
|
|
| 294 |
ok( defined( ( CheckReserves($itemnumber) )[1] ), "Hold can be trapped for damaged item with AllowHoldsOnDamagedItems enabled" ); |
298 |
ok( defined( ( CheckReserves($itemnumber) )[1] ), "Hold can be trapped for damaged item with AllowHoldsOnDamagedItems enabled" ); |
|
|
299 |
|
| 300 |
CancelReserve({reserve_id => $reserveid3}); |
| 301 |
ModItem({ damaged => 1 }, $item_bibnum, $itemnumber); |
| 302 |
($canitembereserved, $reasons) = CanItemBeReserved($borrowernumbers[0], $itemnumber); |
| 303 |
ok( $canitembereserved, "Patron can reserve damaged item with AllowHoldsOnDamagedItems enabled" ); |
| 304 |
is($reasons, undef); |
| 305 |
|
| 295 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 0 ); |
306 |
C4::Context->set_preference( 'AllowHoldsOnDamagedItems', 0 ); |
| 296 |
ok( !CanItemBeReserved( $borrowernumbers[0], $itemnumber), "Patron cannot reserve damaged item with AllowHoldsOnDamagedItems disabled" ); |
307 |
($canitembereserved, $reasons) = CanItemBeReserved($borrowernumbers[0], $itemnumber); |
|
|
308 |
ok( !$canitembereserved, "Patron cannot reserve damaged item with AllowHoldsOnDamagedItems disabled" ); |
| 309 |
ok($reasons->{damaged}); |
| 297 |
ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for damaged item with AllowHoldsOnDamagedItems disabled" ); |
310 |
ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for damaged item with AllowHoldsOnDamagedItems disabled" ); |
| 298 |
|
311 |
|
| 299 |
# Regression test for bug 9532 |
312 |
# Regression test for bug 9532 |
| 300 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('CANNOT'); |
313 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('CANNOT'); |
| 301 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL', itype => 'CANNOT' } , $bibnum); |
314 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL', itype => 'CANNOT' } , $bibnum); |
|
|
315 |
($canitembereserved) = CanItemBeReserved( $borrowernumbers[0], $itemnumber); |
| 316 |
ok( |
| 317 |
!$canitembereserved, |
| 318 |
"cannot request item if policy that matches on item-level item type forbids it" |
| 319 |
); |
| 320 |
ModItem({ itype => 'CAN' }, $item_bibnum, $itemnumber); |
| 321 |
($canitembereserved, $reasons) = CanItemBeReserved( $borrowernumbers[0], $itemnumber); |
| 322 |
ok( |
| 323 |
$canitembereserved, |
| 324 |
"can request item if policy that matches on item type allows it" |
| 325 |
); |
| 326 |
|
| 302 |
AddReserve( |
327 |
AddReserve( |
| 303 |
$branch, |
328 |
$branch, |
| 304 |
$borrowernumbers[0], |
329 |
$borrowernumbers[0], |
|
Lines 307-338
AddReserve(
Link Here
|
| 307 |
'', |
332 |
'', |
| 308 |
1, |
333 |
1, |
| 309 |
); |
334 |
); |
| 310 |
ok( |
|
|
| 311 |
!CanItemBeReserved( $borrowernumbers[0], $itemnumber), |
| 312 |
"cannot request item if policy that matches on item-level item type forbids it" |
| 313 |
); |
| 314 |
ModItem({ itype => 'CAN' }, $item_bibnum, $itemnumber); |
| 315 |
ok( |
| 316 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber), |
| 317 |
"can request item if policy that matches on item type allows it" |
| 318 |
); |
| 319 |
|
335 |
|
| 320 |
t::lib::Mocks::mock_preference('item-level_itypes', 0); |
336 |
t::lib::Mocks::mock_preference('item-level_itypes', 0); |
| 321 |
ModItem({ itype => undef }, $item_bibnum, $itemnumber); |
337 |
ModItem({ itype => undef }, $item_bibnum, $itemnumber); |
|
|
338 |
($canitembereserved) = CanItemBeReserved( $borrowernumbers[0], $itemnumber); |
| 322 |
ok( |
339 |
ok( |
| 323 |
!CanItemBeReserved( $borrowernumbers[0], $itemnumber), |
340 |
!$canitembereserved, |
| 324 |
"cannot request item if policy that matches on bib-level item type forbids it (bug 9532)" |
341 |
"cannot request item if policy that matches on bib-level item type forbids it (bug 9532)" |
| 325 |
); |
342 |
); |
| 326 |
|
343 |
|
|
|
344 |
my $canbookbereserved; |
| 345 |
($canbookbereserved, $reasons) = CanBookBeReserved($borrowernumbers[0], $bibnum); |
| 346 |
ok(!$canbookbereserved); |
| 347 |
ok($reasons->{alreadyreserved}); |
| 348 |
|
| 349 |
C4::Context->set_preference('maxreserves', 1); |
| 350 |
($canbookbereserved, $reasons) = CanBookBeReserved($borrowernumbers[0], $biblionumber); |
| 351 |
ok(!$canbookbereserved); |
| 352 |
ok($reasons->{maxreserves}); |
| 353 |
|
| 354 |
C4::Context->set_preference('maxreserves', 0); |
| 355 |
t::lib::Mocks::mock_preference('IndependentBranches', 1); |
| 356 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 0); |
| 357 |
($canbookbereserved, $reasons) = CanBookBeReserved($borrowernumbers[0], $foreign_bibnum); |
| 358 |
ok(!$canbookbereserved); |
| 359 |
ok($reasons->{noholdableitems}); |
| 360 |
|
| 361 |
|
| 327 |
# Helper method to set up a Biblio. |
362 |
# Helper method to set up a Biblio. |
| 328 |
sub create_helper_biblio { |
363 |
sub create_helper_biblio { |
| 329 |
my $itemtype = shift; |
364 |
my $itemtype = shift; |
| 330 |
my $bib = MARC::Record->new(); |
365 |
my $bib = MARC::Record->new(); |
| 331 |
my $title = 'Silence in the library'; |
366 |
my $title = 'Silence in the library'; |
| 332 |
$bib->append_fields( |
367 |
if (C4::Context->preference('marcflavour') eq 'UNIMARC') { |
| 333 |
MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), |
368 |
$bib->append_fields( |
| 334 |
MARC::Field->new('245', ' ', ' ', a => $title), |
369 |
MARC::Field->new('600', '', '1', a => 'Moffat, Steven'), |
| 335 |
MARC::Field->new('942', ' ', ' ', c => $itemtype), |
370 |
MARC::Field->new('200', '', '', a => $title), |
| 336 |
); |
371 |
MARC::Field->new('099', '', '', t => $itemtype), |
|
|
372 |
); |
| 373 |
} else { |
| 374 |
$bib->append_fields( |
| 375 |
MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), |
| 376 |
MARC::Field->new('245', ' ', ' ', a => $title), |
| 377 |
MARC::Field->new('942', ' ', ' ', c => $itemtype), |
| 378 |
); |
| 379 |
} |
| 337 |
return ($bibnum, $title, $bibitemnum) = AddBiblio($bib, ''); |
380 |
return ($bibnum, $title, $bibitemnum) = AddBiblio($bib, ''); |
| 338 |
} |
381 |
} |
| 339 |
- |
|
|