From cde423791b6ff0f16b2951d26a72fe7635318c03 Mon Sep 17 00:00:00 2001 From: Alex Buckley Date: Fri, 22 May 2020 04:43:02 +0000 Subject: [PATCH] Bug 25560: Unit tests Test plan: 1. Run tests sudo koha-shell prove xt prove t/db_dependent/Circulation/issue.t prove t/db_dependent/Koha/Object.t Sponsored-By: Waikato Institute of Technology, NZ Signed-off-by: David Nind --- t/db_dependent/Circulation/issue.t | 83 ++++++++++++++++++++++++++++-- t/db_dependent/Koha/Object.t | 4 +- 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/t/db_dependent/Circulation/issue.t b/t/db_dependent/Circulation/issue.t index 81d5e6742c..6c35fea667 100755 --- a/t/db_dependent/Circulation/issue.t +++ b/t/db_dependent/Circulation/issue.t @@ -17,9 +17,8 @@ use Modern::Perl; -use Test::More tests => 50; +use Test::More tests => 61; use DateTime::Duration; - use t::lib::Mocks; use t::lib::TestBuilder; @@ -75,9 +74,15 @@ $dbh->do(q|DELETE FROM statistics|); # Generate sample datas my $itemtype = $builder->build( { source => 'Itemtype', - value => { notforloan => undef, rentalcharge => 0 } + value => { notforloan => undef, rentalcharge => 0, updatenotforloan => 1 } + } +)->{itemtype}; +my $itemtype2 = $builder->build( + { source => 'Itemtype', + value => { notforloan => undef, updatenotforloan => 0 } } )->{itemtype}; + my $branchcode_1 = $builder->build({ source => 'Branch' })->{branchcode}; my $branchcode_2 = $builder->build({ source => 'Branch' })->{branchcode}; my $branchcode_3 = $builder->build({ source => 'Branch' })->{branchcode}; @@ -124,10 +129,17 @@ my $daysago10 = output_pref( # Add biblio and item my $record = MARC::Record->new(); +my $record2 = MARC::Record->new(); $record->append_fields( + MARC::Field->new( '942', '0', '0', c => $itemtype ), + MARC::Field->new( '952', '0', '0', a => $branchcode_1 ) ); + +$record2->append_fields( + MARC::Field->new( '942', '0', '0', c => $itemtype2 ), MARC::Field->new( '952', '0', '0', a => $branchcode_1 ) ); my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( $record, '' ); +my ( $biblionumber2, $biblioitemnumber2 ) = C4::Biblio::AddBiblio( $record2, '' ); my $barcode_1 = 'barcode_1'; my $barcode_2 = 'barcode_2'; @@ -391,7 +403,8 @@ my $itemnumber = Koha::Item->new( homebranch => $branchcode_1, holdingbranch => $branchcode_1, notforloan => 1, - itype => $itemtype + itype => $itemtype, + biblioitemnumber => $biblioitemnumber }, )->store->itemnumber; @@ -414,6 +427,67 @@ AddReturn( 'barcode_3', $branchcode_1 ); $item = Koha::Items->find( $itemnumber ); ok( $item->notforloan eq 9, q{UpdateNotForLoanStatusOnCheckin does not update notforloan value from 9 with setting "1: 9"} ); +# Bug 25560: Exclude itemtypes from UpdateNotForLoanStatusOnCheckin syspref + +# item-level_itypes syspref is set to 'Specific item' +t::lib::Mocks::mock_preference( 'item-level_itypes', '1' ); + +# Set biblioitems.itemtype to an itemtype with updatenotforloan = 0 +Koha::Items->find( $itemnumber )->biblioitemnumber($biblioitemnumber2)->store; +ok( Koha::ItemTypes->find(Koha::Biblioitems->find({ biblioitemnumber => $biblioitemnumber2 })->itemtype)->updatenotforloan eq 0, q{Biblio-level itemtype has a updatenotforloan set to 0} ); + +# Keep items.itype on an itemtype with updatenotforloan = 1 +ok( Koha::ItemTypes->find(Koha::Items->find($itemnumber)->itype)->updatenotforloan eq 1, q{item level itemtype has a updatenotforloan set to 1}); + +# items.notforloan status should change as the effective itemtype (item-level itype) +# does allow notforloan status to be updated on checkin +t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', '9: 1'); +AddReturn( 'barcode_3', $branchcode_1 ); +$item = Koha::Items->find( $itemnumber ); +ok( $item->notforloan eq 1, q{UpdateNotForLoanStatusOnCheckin does update the notforloan value when ithe effective itemtype (specific item) has an enabled updatenotforloan flag} ); + +# Set biblioitems.itemtype to an itemtype with updatenotforloan = 1 +Koha::Items->find( $itemnumber )->biblioitemnumber($biblioitemnumber)->store; +ok( Koha::ItemTypes->find(Koha::Biblioitems->find({ biblioitemnumber => $biblioitemnumber })->itemtype)->updatenotforloan eq 1, q{Biblio-level itemtype has a updatenotforloan set to 1 }); + +# Set items.itype to an itemtype with updatenotforloanstatus = 0 +Koha::Items->find( $itemnumber )->itype($itemtype2)->store; +ok( Koha::ItemTypes->find(Koha::Items->find($itemnumber)->itype)->updatenotforloan eq 0, q{item level itemtype has an updatenotforloan set to 0 }); + +# items.notforloan status shouldn't change as the effective itemtype (item-level itype) +# does not allow notforloan status to be updated on checkin +t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', '1: 9'); +AddReturn( 'barcode_3', $branchcode_1 ); +$item = Koha::Items->find( $itemnumber ); +ok( $item->notforloan eq 1, q{UpdateNotForLoanStatusOnCheckin does not update notforloan value when th effective item type (specific item) has a disabled updatenotforloan flag} ); + +# item-level_itypes syspref is set to 'bibliographic record' +t::lib::Mocks::mock_preference( 'item-level_itypes', '0' ); + +# Check items.itype is still an itemtype with updatenotforloan = 0 +ok( Koha::ItemTypes->find(Koha::Items->find($itemnumber)->itype)->updatenotforloan eq 0, q{item level itype has a updatenotforloanstatuscheckin set to 0}); + +# items.notforloan status should change as the effective itemtype (biblio-level itemtype) +# does allow notforloan status to be updated on checkin +AddReturn( 'barcode_3', $branchcode_1 ); +$item = Koha::Items->find( $itemnumber ); +ok( $item->notforloan eq 9, q{UpdateNotForLoanStatusOnCheckin updates notforloan value when the effective item type (bibliographic record) has an enabled updatenotforloan flag} ); + +# Set biblioitems.itemtype to an itemtype with updatenotforloan = 0 +Koha::Items->find( $itemnumber )->biblioitemnumber($biblioitemnumber2)->store; +ok( Koha::ItemTypes->find(Koha::Biblioitems->find({ biblioitemnumber => $biblioitemnumber2 })->itemtype)->updatenotforloan eq 0, q{Biblio-level itemtype has a updatenotforloan set to 0 }); + +# Set items.itype to an itemtype with updatenotforloan = 1 +Koha::Items->find( $itemnumber )->itype($itemtype)->store; +ok( Koha::ItemTypes->find(Koha::Items->find($itemnumber)->itype)->updatenotforloan eq 1, q{item level itype has an updatenotforloan set to 1}); + +# items.notforloan status shouldn't change as the effective itemtype (biblio-level itemtype) +# doesn't allow notforloan status to be updated at checkin +t::lib::Mocks::mock_preference( 'UpdateNotForLoanStatusOnCheckin', '9: 1'); +AddReturn( 'barcode_3', $branchcode_1 ); +$item = Koha::Items->find( $itemnumber ); +ok( $item->notforloan eq 9, q{UpdateNotForLoanStatusOnCheckin does not update notforloanvalue when the effective itemtype (bibliographic record) has a disabled updatenotforloan flag} ); + my $itemnumber2 = Koha::Item->new( { biblionumber => $biblionumber, @@ -496,6 +570,7 @@ is( $item3->location, 'CART', q{UpdateItemLocationOnCheckin updates location val # Bug 14640 - Cancel the hold on checking out if asked +Koha::Items->find({ barcode => $barcode_1 })->notforloan('0')->store; my $reserve_id = AddReserve( { branchcode => $branchcode_1, diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t index 10c94c38e3..3e9ae3ea01 100755 --- a/t/db_dependent/Koha/Object.t +++ b/t/db_dependent/Koha/Object.t @@ -697,7 +697,7 @@ subtest "Test update method" => sub { subtest 'store() tests' => sub { - plan tests => 16; + plan tests => 17; # Using Koha::Library::Groups to test Koha::Object>-store # Simple object with foreign keys and unique key @@ -799,6 +799,7 @@ subtest 'store() tests' => sub { rentalcharge => "", notforloan => "", hideinopac => "", + updatenotforloan => "", } )->store; }; @@ -806,6 +807,7 @@ subtest 'store() tests' => sub { is( $itemtype->rentalcharge, undef, 'decimal DEFAULT NULL should default to null'); is( $itemtype->notforloan, undef, 'int DEFAULT NULL should default to null'); is( $itemtype->hideinopac, 0, 'int NOT NULL DEFAULT 0 should default to 0'); + is( $itemtype->updatenotforloan, 1, 'int NOT NULL DEFAULT 1 should default to 1'); subtest 'Bad value tests' => sub { -- 2.20.1