From e6430d386a31a33a53eefebf7f8b48ed961df384 Mon Sep 17 00:00:00 2001 From: Baptiste Date: Mon, 9 Dec 2024 14:59:14 +0100 Subject: [PATCH] Bug 35292: Update tests for UpdateNotForloanStatusOnCheckout Note: These patches have been split for sake of understandability for review but they should probably be squashe --- t/db_dependent/Circulation/issue.t | 109 +++++++++++++++++++++-------- 1 file changed, 80 insertions(+), 29 deletions(-) diff --git a/t/db_dependent/Circulation/issue.t b/t/db_dependent/Circulation/issue.t index c384a776a9e..9f0ee4c2e38 100755 --- a/t/db_dependent/Circulation/issue.t +++ b/t/db_dependent/Circulation/issue.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 67; +use Test::More tests => 65; use DateTime::Duration; use t::lib::Mocks; @@ -496,35 +496,86 @@ is( # ############################################## -my $itemnumber4 = Koha::Item->new( - { - biblionumber => $biblionumber, - barcode => 'barcode_6', - itemcallnumber => 'callnumber6', - homebranch => $branchcode_1, - holdingbranch => $branchcode_1, - notforloan => -1, - itype => $itemtype, - location => 'loc1' - }, -)->store->itemnumber; - -t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', q{} ); -AddIssue( $patron_2, 'barcode_6', dt_from_string ); -$item = Koha::Items->find( $itemnumber4 ); -ok( $item->notforloan eq -1, 'UpdateNotForLoanStatusOnCheckout does not modify value when not enabled' ); - -t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', '-1: 0' ); -AddReturn( 'barcode_6', $branchcode_1 ); -my $test = AddIssue( $patron_2, 'barcode_6', dt_from_string ); -$item = Koha::Items->find( $itemnumber4 ); -ok( $item->notforloan eq 0, q{UpdateNotForLoanStatusOnCheckout updates notforloan value from -1 to 0 with setting "-1: 0"} ); - -AddIssue( $patron_2, 'barcode_6', dt_from_string ); -AddReturn( 'barcode_6', $branchcode_1 ); -$item = Koha::Items->find( $itemnumber4 ); -ok( $item->notforloan eq 0, q{UpdateNotForLoanStatusOnCheckout does not update notforloan value from 0 with setting "-1: 0"} ); +subtest 'AddReturn: Update notforloanstatus according to UpdateNotForLoanStatusOnCheckout' => sub { + plan tests => 5; + my $itemnumber4 = Koha::Item->new( + { + biblionumber => $biblionumber, + barcode => 'barcode_6', + itemcallnumber => 'callnumber6', + homebranch => $branchcode_1, + holdingbranch => $branchcode_1, + notforloan => -1, + itype => $itemtype, + location => 'loc1' + }, + )->store->itemnumber; + + t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckout', q{} ); + AddIssue( $patron_2, 'barcode_6', dt_from_string ); + $item = Koha::Items->find($itemnumber4); + ok( $item->notforloan eq -1, 'UpdateNotForLoanStatusOnCheckout does not modify value when not enabled' ); + AddReturn( 'barcode_6', $branchcode_1 ); + + t::lib::Mocks::mock_preference( + 'UpdateNotForLoanStatusOnCheckout', q{ _ALL_: + -1: 0 + } + ); + $item->notforloan(-1)->store; + my $test = AddIssue( $patron_2, 'barcode_6', dt_from_string ); + $item = Koha::Items->find($itemnumber4); + ok( + $item->notforloan eq 0, + q{UpdateNotForLoanStatusOnCheckout updates notforloan value from -1 to 0 with setting "_ALL_: -1: 0"} + ); + AddReturn( 'barcode_6', $branchcode_1 ); + + $item->notforloan(1)->store; + AddIssue( $patron_2, 'barcode_6', dt_from_string ); + $item = Koha::Items->find($itemnumber4); + ok( + $item->notforloan eq 1, + q{UpdateNotForLoanStatusOnCheckout does not update notforloan value from 1 with setting "_ALL_: -1: 0"} + ); + AddReturn( 'barcode_6', $branchcode_1 ); + + t::lib::Mocks::mock_preference( + 'UpdateNotForLoanStatusOnCheckout', q{ + _ALL_: + -1: 0 + } . $itemtype . q{: + -1: 1 + } + ); + + $item->notforloan(-1)->store; + AddIssue( $patron_2, 'barcode_6', dt_from_string ); + $item = Koha::Items->find($itemnumber4); + ok( $item->notforloan eq 1, q{UpdateNotForLoanStatusOnCheckout uses the most specific rule to update notforloan } ); + AddReturn( 'barcode_6', $branchcode_1 ); + + t::lib::Mocks::mock_preference( + 'UpdateNotForLoanStatusOnCheckout', q{ + _ALL_: + -1: 0 + NOT_} . $itemtype . q{: + -1: 1 + } + ); + + $item->notforloan(-1)->store; + AddIssue( $patron_2, 'barcode_6', dt_from_string ); + $item = Koha::Items->find($itemnumber4); + ok( + $item->notforloan eq 0, + q{UpdateNotForLoanStatusOnCheckout uses the default rule (_ALL_) if no rule matches the itype} + ); + AddReturn( 'barcode_6', $branchcode_1 ); + + $item->delete; +}; ########################################## # -- 2.30.2