From cb294fa4886445e86bbacd6181304d05226b0263 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 14 Jan 2021 11:28:35 +0000 Subject: [PATCH] Bug 24254: (QA follow-up) Inlines opachiddenitems handling We decided to inline the opachiddenitems filter as we don't believe it will be used exclusively. Signed-off-by: Martin Renvoize Signed-off-by: Andrew Fuerste-Henry (cherry picked from commit 67f5a2607798f19a7bcd5e5f006f72bf196edd9e) Signed-off-by: Victor Grousset/tuxayo --- Koha/Items.pm | 37 ++++++---------- t/db_dependent/Koha/Items.t | 87 +------------------------------------ 2 files changed, 14 insertions(+), 110 deletions(-) diff --git a/Koha/Items.pm b/Koha/Items.pm index 734a4025ae..e1a72436b3 100644 --- a/Koha/Items.pm +++ b/Koha/Items.pm @@ -48,7 +48,8 @@ Koha::Items - Koha Item object set class Returns a new resultset, containing those items that are not expected to be hidden in OPAC for the passed I object that is passed. -The I and I system preferences are honoured. +The I, I and I system preferences +are honoured. =cut @@ -59,8 +60,16 @@ sub filter_by_visible_in_opac { my $result = $self; + # Filter out OpacHiddenItems unless disabled by OpacHiddenItemsExceptions unless ( $patron and $patron->category->override_hidden_items ) { - $result = $result->filter_out_opachiddenitems; + my $rules = C4::Context->yaml_preference('OpacHiddenItems') // {}; + + my $rules_params; + foreach my $field (keys %$rules){ + $rules_params->{$field}->{'-not_in'} = $rules->{$field}; + } + + $result = $result->search( $rules_params ); } if (C4::Context->preference('hidelostitems')) { @@ -70,28 +79,6 @@ sub filter_by_visible_in_opac { return $result; } -=head3 filter_out_opachiddenitems - - my $filered_items = $items->filter_out_opachiddenitems; - -Returns a new resultset, containing those items that are not expected to be hidden in OPAC. -The I system preference is honoured. - -=cut - -sub filter_out_opachiddenitems { - my ($self) = @_; - - my $rules = C4::Context->yaml_preference('OpacHiddenItems') // {}; - - my $rules_params; - foreach my $field (keys %$rules){ - $rules_params->{$field}->{'-not_in'} = $rules->{$field}; - } - - return $self->search( $rules_params ); -} - =head3 filter_out_lost my $filered_items = $items->filter_out_lost; @@ -129,6 +116,8 @@ sub object_class { =head1 AUTHOR Kyle M Hall +Tomas Cohen Arazi +Martin Renvoize =cut diff --git a/t/db_dependent/Koha/Items.t b/t/db_dependent/Koha/Items.t index 55f4c0fae1..42c31b5ab0 100644 --- a/t/db_dependent/Koha/Items.t +++ b/t/db_dependent/Koha/Items.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 14; +use Test::More tests => 12; use Test::MockModule; use Test::Exception; @@ -356,88 +356,3 @@ subtest 'filter_out_lost() tests' => sub { $schema->storage->txn_rollback; }; - -subtest 'filter_out_opachiddenitems() tests' => sub { - - plan tests => 6; - - $schema->storage->txn_begin; - - # have a fresh biblio - my $biblio = $builder->build_sample_biblio; - # have two itemtypes - my $itype_1 = $builder->build_object({ class => 'Koha::ItemTypes' }); - my $itype_2 = $builder->build_object({ class => 'Koha::ItemTypes' }); - # have 5 items on that biblio - my $item_1 = $builder->build_sample_item( - { - biblionumber => $biblio->biblionumber, - itype => $itype_1->itemtype, - withdrawn => 1 - } - ); - my $item_2 = $builder->build_sample_item( - { - biblionumber => $biblio->biblionumber, - itype => $itype_2->itemtype, - withdrawn => 2 - } - ); - my $item_3 = $builder->build_sample_item( - { - biblionumber => $biblio->biblionumber, - itype => $itype_1->itemtype, - withdrawn => 3 - } - ); - my $item_4 = $builder->build_sample_item( - { - biblionumber => $biblio->biblionumber, - itype => $itype_2->itemtype, - withdrawn => 4 - } - ); - my $item_5 = $builder->build_sample_item( - { - biblionumber => $biblio->biblionumber, - itype => $itype_1->itemtype, - withdrawn => 5 - } - ); - my $item_6 = $builder->build_sample_item( - { - biblionumber => $biblio->biblionumber, - itype => $itype_1->itemtype, - withdrawn => 5 - } - ); - - my $rules = undef; - - my $mocked_context = Test::MockModule->new('C4::Context'); - $mocked_context->mock( 'yaml_preference', sub { - return $rules; - }); - - is( $biblio->items->filter_out_opachiddenitems->count, 6, 'No rules passed' ); - - $rules = {}; - - $rules = { withdrawn => [ 1, 2 ] }; - is( $biblio->items->filter_out_opachiddenitems->count, 4, 'Rules on withdrawn' ); - - $rules = { itype => [ $itype_1->itemtype ] }; - is( $biblio->items->filter_out_opachiddenitems->count, 2, 'Rules on itype' ); - - $rules = { withdrawn => [ 1, 2 ], itype => [ $itype_1->itemtype ] }; - is( $biblio->items->filter_out_opachiddenitems->count, 1, 'Rules on itype and withdrawn' ); - is( $biblio->items->filter_out_opachiddenitems->next->itemnumber, - $item_4->itemnumber, - 'The right item is returned' - ); - - $rules = { withdrawn => [ 1, 2 ], itype => [ $itype_2->itemtype ] }; - is( $biblio->items->filter_out_opachiddenitems->count, 3, 'Rules on itype and withdrawn' ); - - $schema->storage->txn_rollback; -}; -- 2.39.5