Lines 325-332
subtest 'CanItemBeReserved' => sub {
Link Here
|
325 |
|
325 |
|
326 |
delete_all_rules(); |
326 |
delete_all_rules(); |
327 |
|
327 |
|
328 |
my $itemtype_can = $builder->build({source => "Itemtype"})->{itemtype}; |
328 |
my $itemtype_can = $builder->build({source => "Itemtype"})->{itemtype}; |
329 |
my $itemtype_cant = $builder->build({source => "Itemtype"})->{itemtype}; |
329 |
my $itemtype_cant = $builder->build({source => "Itemtype"})->{itemtype}; |
|
|
330 |
my $itemtype_cant_record = $builder->build({source => "Itemtype"})->{itemtype}; |
330 |
|
331 |
|
331 |
$dbh->do( |
332 |
$dbh->do( |
332 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed, holds_per_record) VALUES (?, ?, ?, ?, ?)}, {}, |
333 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed, holds_per_record) VALUES (?, ?, ?, ?, ?)}, {}, |
Lines 338-344
subtest 'CanItemBeReserved' => sub {
Link Here
|
338 |
); |
339 |
); |
339 |
$dbh->do( |
340 |
$dbh->do( |
340 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed, holds_per_record) VALUES (?, ?, ?, ?, ?)}, {}, |
341 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed, holds_per_record) VALUES (?, ?, ?, ?, ?)}, {}, |
341 |
'*', '*', 'CANNOT_RECORD', 0, 0 |
342 |
'*', '*', $itemtype_cant_record, 0, 0 |
342 |
); |
343 |
); |
343 |
|
344 |
|
344 |
subtest 'noReservesAllowed' => sub { |
345 |
subtest 'noReservesAllowed' => sub { |
Lines 346-382
subtest 'CanItemBeReserved' => sub {
Link Here
|
346 |
|
347 |
|
347 |
my $biblionumber_cannot = $builder->build_sample_biblio({ itemtype => $itemtype_cant })->biblionumber; |
348 |
my $biblionumber_cannot = $builder->build_sample_biblio({ itemtype => $itemtype_cant })->biblionumber; |
348 |
my $biblionumber_can = $builder->build_sample_biblio({ itemtype => $itemtype_can })->biblionumber; |
349 |
my $biblionumber_can = $builder->build_sample_biblio({ itemtype => $itemtype_can })->biblionumber; |
349 |
my ( undef, undef, $itemnumber_1_can ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $biblionumber_cannot); |
350 |
my $biblionumber_record_cannot = $builder->build_sample_biblio({ itemtype => $itemtype_cant_record })->biblionumber; |
350 |
my ( undef, undef, $itemnumber_1_cannot ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CANNOT' } , $biblionumber_cannot); |
351 |
my ( undef, undef, $itemnumber_1_can ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_can } , $biblionumber_cannot); |
|
|
352 |
my ( undef, undef, $itemnumber_1_cannot ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_cant } , $biblionumber_cannot); |
351 |
|
353 |
|
352 |
my ( undef, undef, $itemnumber_2_can ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $biblionumber_can); |
354 |
my ( undef, undef, $itemnumber_2_can ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_can } , $biblionumber_can); |
353 |
my ( undef, undef, $itemnumber_2_cannot ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CANNOT' } , $biblionumber_can); |
355 |
my ( undef, undef, $itemnumber_2_cannot ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_cant } , $biblionumber_can); |
354 |
|
356 |
|
355 |
my ($biblionumber_record_cannot) = create_helper_biblio('CANNOT_RECORD'); |
357 |
my ( undef, undef, $itemnumber_3_cannot ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_cant_record } , $biblionumber_record_cannot); |
356 |
my ( undef, undef, $itemnumber_3_cannot ) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CANNOT_RECORD' } , $biblionumber_record_cannot); |
|
|
357 |
|
358 |
|
358 |
Koha::Holds->search({borrowernumber => $borrowernumbers[0]})->delete; |
359 |
Koha::Holds->search({borrowernumber => $borrowernumbers[0]})->delete; |
359 |
|
360 |
|
360 |
t::lib::Mocks::mock_preference('item-level_itypes', 1); |
361 |
t::lib::Mocks::mock_preference('item-level_itypes', 1); |
361 |
is( |
362 |
is( |
362 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_2_cannot), 'noReservesAllowed', |
363 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_2_cannot)->{status}, 'noReservesAllowed', |
363 |
"With item level set, rule from item must be picked (CANNOT)" |
364 |
"With item level set, rule from item must be picked (CANNOT)" |
364 |
); |
365 |
); |
365 |
is( |
366 |
is( |
366 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_1_can), 'OK', |
367 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_1_can)->{status}, 'OK', |
367 |
"With item level set, rule from item must be picked (CAN)" |
368 |
"With item level set, rule from item must be picked (CAN)" |
368 |
); |
369 |
); |
369 |
t::lib::Mocks::mock_preference('item-level_itypes', 0); |
370 |
t::lib::Mocks::mock_preference('item-level_itypes', 0); |
370 |
is( |
371 |
is( |
371 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_1_can), 'noReservesAllowed', |
372 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_1_can)->{status}, 'noReservesAllowed', |
372 |
"With biblio level set, rule from biblio must be picked (CANNOT)" |
373 |
"With biblio level set, rule from biblio must be picked (CANNOT)" |
373 |
); |
374 |
); |
374 |
is( |
375 |
is( |
375 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_2_cannot), 'OK', |
376 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_2_cannot)->{status}, 'OK', |
376 |
"With biblio level set, rule from biblio must be picked (CAN)" |
377 |
"With biblio level set, rule from biblio must be picked (CAN)" |
377 |
); |
378 |
); |
378 |
is( |
379 |
is( |
379 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_3_cannot), 'noReservesAllowed', |
380 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_3_cannot)->{status}, 'noReservesAllowed', |
380 |
"When no holds allowed and no holds per record allowed should return noReservesAllowed" |
381 |
"When no holds allowed and no holds per record allowed should return noReservesAllowed" |
381 |
); |
382 |
); |
382 |
}; |
383 |
}; |
Lines 385-395
subtest 'CanItemBeReserved' => sub {
Link Here
|
385 |
plan tests => 7; |
386 |
plan tests => 7; |
386 |
|
387 |
|
387 |
my $biblionumber_1 = $builder->build_sample_biblio({ itemtype => $itemtype_can })->biblionumber; |
388 |
my $biblionumber_1 = $builder->build_sample_biblio({ itemtype => $itemtype_can })->biblionumber; |
388 |
my ( undef, undef, $itemnumber_11) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $biblionumber_1); |
389 |
my ( undef, undef, $itemnumber_11) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_can } , $biblionumber_1); |
389 |
my ( undef, undef, $itemnumber_12) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $biblionumber_1); |
390 |
my ( undef, undef, $itemnumber_12) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_can } , $biblionumber_1); |
390 |
my $biblionumber_2 = $builder->build_sample_biblio({ itemtype => $itemtype_can })->biblionumber; |
391 |
my $biblionumber_2 = $builder->build_sample_biblio({ itemtype => $itemtype_can })->biblionumber; |
391 |
my ( undef, undef, $itemnumber_21) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $biblionumber_2); |
392 |
my ( undef, undef, $itemnumber_21) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_can } , $biblionumber_2); |
392 |
my ( undef, undef, $itemnumber_22) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $biblionumber_2); |
393 |
my ( undef, undef, $itemnumber_22) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => $itemtype_can } , $biblionumber_2); |
393 |
|
394 |
|
394 |
Koha::Holds->search({borrowernumber => $borrowernumbers[0]})->delete; |
395 |
Koha::Holds->search({borrowernumber => $borrowernumbers[0]})->delete; |
395 |
|
396 |
|
Lines 405-411
subtest 'CanItemBeReserved' => sub {
Link Here
|
405 |
t::lib::Mocks::mock_preference('item-level_itypes', $item_level); |
406 |
t::lib::Mocks::mock_preference('item-level_itypes', $item_level); |
406 |
is( |
407 |
is( |
407 |
# FIXME This is not really correct, but CanItemBeReserved does not check if biblio-level holds already exist |
408 |
# FIXME This is not really correct, but CanItemBeReserved does not check if biblio-level holds already exist |
408 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_11), 'OK', |
409 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_11)->{status}, 'OK', |
409 |
"A biblio-level hold already exists - another hold can be placed on a specific item item" |
410 |
"A biblio-level hold already exists - another hold can be placed on a specific item item" |
410 |
); |
411 |
); |
411 |
} |
412 |
} |
Lines 422-438
subtest 'CanItemBeReserved' => sub {
Link Here
|
422 |
); |
423 |
); |
423 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=5, holds_per_record=1}); |
424 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=5, holds_per_record=1}); |
424 |
is( |
425 |
is( |
425 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_12), 'tooManyHoldsForThisRecord', |
426 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_12)->{status}, 'tooManyHoldsForThisRecord', |
426 |
"A item-level hold already exists and holds_per_record=1, another hold cannot be placed on this record" |
427 |
"A item-level hold already exists and holds_per_record=1, another hold cannot be placed on this record" |
427 |
); |
428 |
); |
428 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=1, holds_per_record=1}); |
429 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=1, holds_per_record=1}); |
429 |
is( |
430 |
is( |
430 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_12), 'tooManyHoldsForThisRecord', |
431 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_12)->{status}, 'tooManyHoldsForThisRecord', |
431 |
"A item-level hold already exists and holds_per_record=1 - tooManyHoldsForThisRecord has priority over tooManyReserves" |
432 |
"A item-level hold already exists and holds_per_record=1 - tooManyHoldsForThisRecord has priority over tooManyReserves" |
432 |
); |
433 |
); |
433 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=5, holds_per_record=2}); |
434 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=5, holds_per_record=2}); |
434 |
is( |
435 |
is( |
435 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_12), 'OK', |
436 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_12)->{status}, 'OK', |
436 |
"A item-level hold already exists but holds_per_record=2- another item-level hold can be placed on this record" |
437 |
"A item-level hold already exists but holds_per_record=2- another item-level hold can be placed on this record" |
437 |
); |
438 |
); |
438 |
|
439 |
|
Lines 446-456
subtest 'CanItemBeReserved' => sub {
Link Here
|
446 |
); |
447 |
); |
447 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=2, holds_per_record=2}); |
448 |
$dbh->do(q{UPDATE issuingrules set reservesallowed=2, holds_per_record=2}); |
448 |
is( |
449 |
is( |
449 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_21), 'itemAlreadyOnHold', |
450 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_21)->{status}, 'itemAlreadyOnHold', |
450 |
"A item-level holds already exists on this item, itemAlreadyOnHold should be raised" |
451 |
"A item-level holds already exists on this item, itemAlreadyOnHold should be raised" |
451 |
); |
452 |
); |
452 |
is( |
453 |
is( |
453 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_22), 'tooManyReserves', |
454 |
CanItemBeReserved( $borrowernumbers[0], $itemnumber_22)->{status}, 'tooManyReserves', |
454 |
"This patron has already placed reservesallowed holds, tooManyReserves should be raised" |
455 |
"This patron has already placed reservesallowed holds, tooManyReserves should be raised" |
455 |
); |
456 |
); |
456 |
}; |
457 |
}; |
457 |
- |
|
|