From df1e25f104e0d7df4d83b166653348fe0de8d62d Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sat, 19 Dec 2020 10:05:16 -0300 Subject: [PATCH] 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 --- 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 78663f0dc8..f123a614ba 100644 --- a/Koha/Items.pm +++ b/Koha/Items.pm @@ -65,14 +65,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 eca3909853..ca328ba747 100755 --- a/t/db_dependent/Koha/Items.t +++ b/t/db_dependent/Koha/Items.t @@ -1366,7 +1366,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 } @@ -1376,12 +1384,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.29.2