|
Lines 17-23
Link Here
|
| 17 |
|
17 |
|
| 18 |
use Modern::Perl; |
18 |
use Modern::Perl; |
| 19 |
|
19 |
|
| 20 |
use Test::More tests => 66; |
20 |
use Test::More tests => 60; |
| 21 |
use DateTime::Duration; |
21 |
use DateTime::Duration; |
| 22 |
|
22 |
|
| 23 |
use t::lib::Mocks; |
23 |
use t::lib::Mocks; |
|
Lines 417-494
C4::Circulation::AddIssue( $patron_1, $barcode_1, $daysago10, 0, $today );
Link Here
|
| 417 |
AddReturn($barcode_1, undef, undef, dt_from_string('2014-04-01 23:42')); |
417 |
AddReturn($barcode_1, undef, undef, dt_from_string('2014-04-01 23:42')); |
| 418 |
$return = $dbh->selectrow_hashref("SELECT * FROM old_issues LIMIT 1" ); |
418 |
$return = $dbh->selectrow_hashref("SELECT * FROM old_issues LIMIT 1" ); |
| 419 |
ok( $return->{returndate} eq '2014-04-01 23:42:00', "Item returned with a return date of '2014-04-01 23:42' has that return date" ); |
419 |
ok( $return->{returndate} eq '2014-04-01 23:42:00', "Item returned with a return date of '2014-04-01 23:42' has that return date" ); |
|
|
420 |
subtest 'AddIssue Update notforloanstatus according to UpdateNotForLoanStatusOnCheckin' => sub { |
| 421 |
plan tests => 7; |
| 422 |
my $itemnumber = Koha::Item->new( |
| 423 |
{ |
| 424 |
biblionumber => $biblionumber, |
| 425 |
barcode => 'barcode_3', |
| 426 |
itemcallnumber => 'callnumber3', |
| 427 |
homebranch => $branchcode_1, |
| 428 |
holdingbranch => $branchcode_1, |
| 429 |
notforloan => 1, |
| 430 |
itype => $itemtype, |
| 431 |
biblioitemnumber => $biblioitemnumber |
| 432 |
}, |
| 433 |
)->store->itemnumber; |
| 420 |
|
434 |
|
| 421 |
my $itemnumber = Koha::Item->new( |
435 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', q{} ); |
| 422 |
{ |
436 |
t::lib::Mocks::mock_preference( 'CataloguingLog', 1 ); |
| 423 |
biblionumber => $biblionumber, |
437 |
my $log_count_before = $schema->resultset('ActionLog')->search( { module => 'CATALOGUING' } )->count(); |
| 424 |
barcode => 'barcode_3', |
438 |
|
| 425 |
itemcallnumber => 'callnumber3', |
439 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 426 |
homebranch => $branchcode_1, |
440 |
my $item = Koha::Items->find($itemnumber); |
| 427 |
holdingbranch => $branchcode_1, |
441 |
ok( $item->notforloan eq 1, 'UpdateNotForLoanStatusOnCheckin does not modify value when not enabled' ); |
| 428 |
notforloan => 1, |
442 |
|
| 429 |
itype => $itemtype, |
443 |
my $updatenotforloanstatusoncheckin = " |
| 430 |
biblioitemnumber => $biblioitemnumber |
444 |
_ALL_:\n |
| 431 |
}, |
445 |
1: 0\n |
| 432 |
)->store->itemnumber; |
446 |
9: 1\n\n |
| 433 |
|
447 |
$itemtype:\n |
| 434 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', q{} ); |
448 |
1: 9 |
| 435 |
t::lib::Mocks::mock_preference( 'CataloguingLog', 1 ); |
449 |
"; |
| 436 |
my $log_count_before = $schema->resultset('ActionLog')->search({module => 'CATALOGUING'})->count(); |
450 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', $updatenotforloanstatusoncheckin ); |
| 437 |
|
451 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 438 |
AddReturn( 'barcode_3', $branchcode_1 ); |
452 |
$item = Koha::Items->find($itemnumber); |
| 439 |
my $item = Koha::Items->find( $itemnumber ); |
453 |
ok( |
| 440 |
ok( $item->notforloan eq 1, 'UpdateNotForLoanStatusOnCheckin does not modify value when not enabled' ); |
454 |
$item->notforloan eq 9, |
| 441 |
|
455 |
q{UpdateNotForLoanStatusOnCheckin prioritises item type specific rule over _ALL_ rules} |
| 442 |
my $updatenotforloanstatusoncheckin = " |
456 |
); |
| 443 |
_ALL_:\n |
457 |
my $log_count_after = $schema->resultset('ActionLog')->search( { module => 'CATALOGUING' } )->count(); |
| 444 |
1: 0\n |
458 |
is( $log_count_before, $log_count_after, "Change from UpdateNotForLoanStatusOnCheckin is not logged" ); |
| 445 |
9: 1\n\n |
|
|
| 446 |
$itemtype:\n |
| 447 |
1: 9 |
| 448 |
"; |
| 449 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', $updatenotforloanstatusoncheckin ); |
| 450 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 451 |
$item = Koha::Items->find( $itemnumber ); |
| 452 |
ok( $item->notforloan eq 9, q{UpdateNotForLoanStatusOnCheckin prioritises item type specific rule over _ALL_ rules} ); |
| 453 |
my $log_count_after = $schema->resultset('ActionLog')->search({module => 'CATALOGUING'})->count(); |
| 454 |
is($log_count_before, $log_count_after, "Change from UpdateNotForLoanStatusOnCheckin is not logged"); |
| 455 |
|
| 456 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 457 |
$item = Koha::Items->find( $itemnumber ); |
| 458 |
ok( $item->notforloan eq 9, q{UpdateNotForLoanStatusOnCheckin uses item type specific rules even if they do not target the returned items' notforloan value} ); |
| 459 |
|
459 |
|
| 460 |
# Change the returning item to an item type without a rule |
460 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 461 |
Koha::Items->find( $itemnumber )->itype( $itemtype2 )->store; |
461 |
$item = Koha::Items->find($itemnumber); |
| 462 |
Koha::Items->find( $itemnumber )->notforloan( 1 )->store; |
462 |
ok( |
| 463 |
AddReturn( 'barcode_3', $branchcode_1 ); |
463 |
$item->notforloan eq 9, |
| 464 |
$item = Koha::Items->find( $itemnumber ); |
464 |
q{UpdateNotForLoanStatusOnCheckin uses item type specific rules even if they do not target the returned items' notforloan value} |
| 465 |
ok( $item->notforloan eq 0, q{UpdateNotForLoanStatusOnCheckin _ALL_ rules are applied if there are no specific item type rule matching the returned item} ); |
465 |
); |
| 466 |
|
466 |
|
| 467 |
t::lib::Mocks::mock_preference( |
467 |
# Change the returning item to an item type without a rule |
| 468 |
'UpdateNotForLoanStatusOnCheckin', q{_ALL_: |
468 |
Koha::Items->find($itemnumber)->itype($itemtype2)->store; |
| 469 |
1: ONLYMESSAGE |
469 |
Koha::Items->find($itemnumber)->notforloan(1)->store; |
| 470 |
} |
470 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 471 |
); |
471 |
$item = Koha::Items->find($itemnumber); |
| 472 |
$item->notforloan(1)->store; |
472 |
ok( |
| 473 |
AddReturn( 'barcode_3', $branchcode_1 ); |
473 |
$item->notforloan eq 0, |
| 474 |
$item->discard_changes; |
474 |
q{UpdateNotForLoanStatusOnCheckin _ALL_ rules are applied if there are no specific item type rule matching the returned item} |
| 475 |
is( |
475 |
); |
| 476 |
$item->notforloan, 1, |
|
|
| 477 |
q{UpdateNotForLoanStatusOnCheckin does not update notforloan value from 1 for _ALL_ with setting "1: ONLYMESSAGE"} |
| 478 |
); |
| 479 |
|
476 |
|
|
|
477 |
t::lib::Mocks::mock_preference( |
| 478 |
'UpdateNotForLoanStatusOnCheckin', q{_ALL_: |
| 479 |
1: ONLYMESSAGE |
| 480 |
} |
| 481 |
); |
| 482 |
$item->notforloan(1)->store; |
| 483 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 484 |
$item->discard_changes; |
| 485 |
is( |
| 486 |
$item->notforloan, 1, |
| 487 |
q{UpdateNotForLoanStatusOnCheckin does not update notforloan value from 1 for _ALL_ with setting "1: ONLYMESSAGE"} |
| 488 |
); |
| 480 |
|
489 |
|
| 481 |
t::lib::Mocks::mock_preference( |
490 |
t::lib::Mocks::mock_preference( |
| 482 |
'UpdateNotForLoanStatusOnCheckin', "$itemtype:\n |
491 |
'UpdateNotForLoanStatusOnCheckin', "$itemtype:\n |
| 483 |
1: ONLYMESSAGE |
492 |
1: ONLYMESSAGE |
| 484 |
" |
493 |
" |
| 485 |
); |
494 |
); |
| 486 |
AddReturn( 'barcode_3', $branchcode_1 ); |
495 |
AddReturn( 'barcode_3', $branchcode_1 ); |
| 487 |
$item->discard_changes; |
496 |
$item->discard_changes; |
| 488 |
is( |
497 |
is( |
| 489 |
$item->notforloan, 1, |
498 |
$item->notforloan, 1, |
| 490 |
q{UpdateNotForLoanStatusOnCheckin does not update notforloan value for specific itemtype from 1 with setting "1: ONLYMESSAGE"} |
499 |
q{UpdateNotForLoanStatusOnCheckin does not update notforloan value for specific itemtype from 1 with setting "1: ONLYMESSAGE"} |
| 491 |
); |
500 |
); |
|
|
501 |
}; |
| 492 |
|
502 |
|
| 493 |
############################################## |
503 |
############################################## |
| 494 |
# |
504 |
# |
|
Lines 514-520
subtest 'AddReturn: Update notforloanstatus according to UpdateNotForLoanStatusO
Link Here
|
| 514 |
|
524 |
|
| 515 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', q{} ); |
525 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', q{} ); |
| 516 |
AddIssue( $patron_2, 'barcode_6', dt_from_string ); |
526 |
AddIssue( $patron_2, 'barcode_6', dt_from_string ); |
| 517 |
$item = Koha::Items->find($itemnumber4); |
527 |
my $item = Koha::Items->find($itemnumber4); |
| 518 |
ok( $item->notforloan eq -1, 'UpdateNotForLoanStatusOnCheckout does not modify value when not enabled' ); |
528 |
ok( $item->notforloan eq -1, 'UpdateNotForLoanStatusOnCheckout does not modify value when not enabled' ); |
| 519 |
AddReturn( 'barcode_6', $branchcode_1 ); |
529 |
AddReturn( 'barcode_6', $branchcode_1 ); |
| 520 |
|
530 |
|
|
Lines 606-612
subtest '_updateNotForLoanFromYaml' => sub {
Link Here
|
| 606 |
|
616 |
|
| 607 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', q{} ); |
617 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', q{} ); |
| 608 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', q{} ); |
618 |
t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', q{} ); |
| 609 |
$item = Koha::Items->find($itemnumber4); |
619 |
my $item = Koha::Items->find($itemnumber4); |
| 610 |
$item->notforloan(-1)->store; |
620 |
$item->notforloan(-1)->store; |
| 611 |
C4::Circulation::_updateNotForLoanFromYaml( $item, 'UpdateNotForLoanStatusOnCheckout' ); |
621 |
C4::Circulation::_updateNotForLoanFromYaml( $item, 'UpdateNotForLoanStatusOnCheckout' ); |
| 612 |
ok( |
622 |
ok( |
|
Lines 749-760
my $item2 = Koha::Items->find( $itemnumber2 );
Link Here
|
| 749 |
ok( $item2->location eq 'FIC', 'UpdateItemLocationOnCheckin does not modify value when not enabled' ); |
759 |
ok( $item2->location eq 'FIC', 'UpdateItemLocationOnCheckin does not modify value when not enabled' ); |
| 750 |
|
760 |
|
| 751 |
t::lib::Mocks::mock_preference( 'UpdateItemLocationOnCheckin', 'FIC: GEN' ); |
761 |
t::lib::Mocks::mock_preference( 'UpdateItemLocationOnCheckin', 'FIC: GEN' ); |
| 752 |
$log_count_before = $schema->resultset('ActionLog')->search({module => 'CATALOGUING'})->count(); |
762 |
my $log_count_before = $schema->resultset('ActionLog')->search({module => 'CATALOGUING'})->count(); |
| 753 |
AddReturn( 'barcode_4', $branchcode_1 ); |
763 |
AddReturn( 'barcode_4', $branchcode_1 ); |
| 754 |
$item2 = Koha::Items->find( $itemnumber2 ); |
764 |
$item2 = Koha::Items->find( $itemnumber2 ); |
| 755 |
is( $item2->location, 'GEN', q{UpdateItemLocationOnCheckin updates location value from 'FIC' to 'GEN' with setting "FIC: GEN"} ); |
765 |
is( $item2->location, 'GEN', q{UpdateItemLocationOnCheckin updates location value from 'FIC' to 'GEN' with setting "FIC: GEN"} ); |
| 756 |
is( $item2->permanent_location, 'GEN', q{UpdateItemLocationOnCheckin updates permanent_location value from 'FIC' to 'GEN' with setting "FIC: GEN"} ); |
766 |
is( $item2->permanent_location, 'GEN', q{UpdateItemLocationOnCheckin updates permanent_location value from 'FIC' to 'GEN' with setting "FIC: GEN"} ); |
| 757 |
$log_count_after = $schema->resultset('ActionLog')->search({module => 'CATALOGUING'})->count(); |
767 |
my $log_count_after = $schema->resultset('ActionLog')->search({module => 'CATALOGUING'})->count(); |
| 758 |
is($log_count_before, $log_count_after, "Change from UpdateNotForLoanStatusOnCheckin is not logged"); |
768 |
is($log_count_before, $log_count_after, "Change from UpdateNotForLoanStatusOnCheckin is not logged"); |
| 759 |
AddReturn( 'barcode_4', $branchcode_1 ); |
769 |
AddReturn( 'barcode_4', $branchcode_1 ); |
| 760 |
$item2 = Koha::Items->find( $itemnumber2 ); |
770 |
$item2 = Koha::Items->find( $itemnumber2 ); |
| 761 |
- |
|
|