From e10d6927fad21b6b08c37e40ec455a6a858b193e Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sat, 19 Dec 2020 10:05:16 -0300 Subject: [PATCH] [20.05.x] Bug 24254: Compare itemlost with 0 On C4::Search and C4::Circulation the uses of the items.itemlost field highlight the fact that the comparisson itemlost <= 0 was wrong, as it is evaluated as a Perl boolean. The column can only be an int and NOT NULL, so we need to check if it is 0 to ponder if not hidden. This patch changes the tests to reflect this, and adjust the Koha::Items->filter_by_visible_in_opac implementation to adapt to this. To test: 1. Apply this patch 2. Run: $ kshell k$ prove t/db_dependent/Koha/Items.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: Tomas Cohen Arazi Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize --- Koha/Items.pm | 17 ++++++++++++++--- t/db_dependent/Koha/Items.t | 14 +++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Koha/Items.pm b/Koha/Items.pm index 4aa3b14ae9f..a004dc47aa7 100644 --- a/Koha/Items.pm +++ b/Koha/Items.pm @@ -52,14 +52,25 @@ sub filter_by_visible_in_opac { my $rules = $params->{rules} // {}; - my $search_params; + my $rules_params; foreach my $field (keys %$rules){ - $search_params->{$field}->{'-not_in'} = $rules->{$field}; + $rules_params->{$field}->{'-not_in'} = $rules->{$field}; } - $search_params->{itemlost}->{'<='} = 0 + my $itemlost_params; + $itemlost_params = { itemlost => 0 } if C4::Context->preference('hidelostitems'); + my $search_params; + if ( $rules_params and $itemlost_params ) { + $search_params = { + '-and' => [ $rules_params, $itemlost_params ] + }; + } + else { + $search_params = $rules_params // $itemlost_params; + } + return $self->search( $search_params ); } diff --git a/t/db_dependent/Koha/Items.t b/t/db_dependent/Koha/Items.t index b6b7b5b19d0..5aa78512352 100644 --- a/t/db_dependent/Koha/Items.t +++ b/t/db_dependent/Koha/Items.t @@ -289,7 +289,15 @@ subtest 'filter_by_visible_in_opac() tests' => sub { my $item_5 = $builder->build_sample_item( { biblionumber => $biblio->biblionumber, - itemlost => undef, + itemlost => 0, + itype => $itype_1->itemtype, + withdrawn => 5 + } + ); + my $item_6 = $builder->build_sample_item( + { + biblionumber => $biblio->biblionumber, + itemlost => 2, itype => $itype_1->itemtype, withdrawn => 5 } @@ -299,12 +307,12 @@ subtest 'filter_by_visible_in_opac() tests' => sub { t::lib::Mocks::mock_preference( 'hidelostitems', 0 ); is( $biblio->items->filter_by_visible_in_opac->count, - 5, 'No rules passed, hidelostitems unset' ); + 6, 'No rules passed, hidelostitems unset' ); t::lib::Mocks::mock_preference( 'hidelostitems', 1 ); is( $biblio->items->filter_by_visible_in_opac( { rules => $rules } )->count, - 4, + 3, 'No rules passed, hidelostitems set' ); -- 2.30.0