From 6ae273ddcbe80f65ace0445f2cba139dfe579c72 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 22 Sep 2021 15:23:07 -0300 Subject: [PATCH] Bug 29082: Add filtering methods to Koha::ArticleRequests This patch adds handy methods for filtering Koha::ArticleRequests resultsets. To test: 1. Apply this patch 2. Run: $ kshell k$ prove t/db_dependent/Koha/ArticleRequests.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: Tomas Cohen Arazi Signed-off-by: Martin Renvoize Signed-off-by: Nick Clemens Signed-off-by: Jonathan Druart --- Koha/ArticleRequests.pm | 45 +++++++++- t/db_dependent/Koha/ArticleRequests.t | 115 +++++++++++++++++++++++++- 2 files changed, 155 insertions(+), 5 deletions(-) diff --git a/Koha/ArticleRequests.pm b/Koha/ArticleRequests.pm index 662677af64..78b19255ee 100644 --- a/Koha/ArticleRequests.pm +++ b/Koha/ArticleRequests.pm @@ -33,7 +33,7 @@ Koha::ArticleRequests - Koha ArticleRequests Object class =head1 API -=head2 Class Methods +=head2 Class methods =cut @@ -60,6 +60,49 @@ sub search_limited { return $self->search( $params, $attributes ); } +=head3 filter_by_current + + my $current_article_requests = $article_requests->filter_by_current; + +Returns a new resultset, filtering out finished article requests. + +=cut + +sub filter_by_current { + my ($self) = @_; + + return $self->search( + { + status => [ + Koha::ArticleRequest::Status::Requested, + Koha::ArticleRequest::Status::Pending, + Koha::ArticleRequest::Status::Processing, + ] + } + ); +} + +=head3 filter_by_finished + + my $finished_article_requests = $article_requests->filter_by_finished; + +Returns a new resultset, filtering out current article requests. + +=cut + +sub filter_by_finished { + my ($self) = @_; + + return $self->search( + { + status => [ + Koha::ArticleRequest::Status::Completed, + Koha::ArticleRequest::Status::Canceled, + ] + } + ); +} + =head3 requested =cut diff --git a/t/db_dependent/Koha/ArticleRequests.t b/t/db_dependent/Koha/ArticleRequests.t index 2da723ffeb..02e9a15bb3 100755 --- a/t/db_dependent/Koha/ArticleRequests.t +++ b/t/db_dependent/Koha/ArticleRequests.t @@ -17,15 +17,16 @@ use Modern::Perl; -use Test::More tests => 1; +use Test::More tests => 3; use Test::MockModule; -use t::lib::TestBuilder; -use t::lib::Mocks; - +use Koha::ArticleRequest::Status; use Koha::ArticleRequests; use Koha::Database; +use t::lib::Mocks; +use t::lib::TestBuilder; + my $schema = Koha::Database->new->schema; my $builder = t::lib::TestBuilder->new; @@ -77,3 +78,109 @@ subtest 'requested() tests' => sub { $schema->storage->txn_rollback; }; + +subtest 'filter_by_current() tests' => sub { + + plan tests => 1; + + $schema->storage->txn_begin; + + my $ar_requested = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Requested } + } + ); + my $ar_pending = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Pending } + } + ); + my $ar_processing = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Processing } + } + ); + my $ar_completed = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Completed } + } + ); + my $ar_cancelled = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Canceled } + } + ); + + my $article_requests = Koha::ArticleRequests->search( + { + id => [ + $ar_requested->id, $ar_pending->id, $ar_processing->id, + $ar_completed->id, $ar_cancelled->id + ] + } + ); + + my $current_article_requests = $article_requests->filter_by_current; + + is( $current_article_requests->count, 3, 'Count is correct' ); + + $schema->storage->txn_rollback; +}; + +subtest 'filter_by_current() tests' => sub { + + plan tests => 1; + + $schema->storage->txn_begin; + + my $ar_requested = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Requested } + } + ); + my $ar_pending = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Pending } + } + ); + my $ar_processing = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Processing } + } + ); + my $ar_completed = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Completed } + } + ); + my $ar_cancelled = $builder->build_object( + { + class => 'Koha::ArticleRequests', + value => { status => Koha::ArticleRequest::Status::Canceled } + } + ); + + my $article_requests = Koha::ArticleRequests->search( + { + id => [ + $ar_requested->id, $ar_pending->id, $ar_processing->id, + $ar_completed->id, $ar_cancelled->id + ] + } + ); + + my $finished_article_requests = $article_requests->filter_by_finished; + + is( $finished_article_requests->count, 2, 'Count is correct' ); + + $schema->storage->txn_rollback; +}; -- 2.39.5