From ed38982e3f1d2e9f491fb6a8a7acdaaf35a575dd Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Wed, 22 Sep 2021 15:46:26 -0300
Subject: [PATCH] Bug 29083: Unit tests

This patch adds missing tests for Koha::Patron->article_requests and
moves (and extends) tests for 'article_requests_current' and
'article_requests_finished' that were originally in ArticleRequests.t
into Koha/Patron.t as we now do.

To test:
1. Apply this patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/ArticleRequests.t \
           t/db_dependent/Koha/Patron.t
=> SUCCESS: Tests pass!

https://bugs.koha-community.org/show_bug.cgi?id=29082
---
 t/db_dependent/ArticleRequests.t |  27 +------
 t/db_dependent/Koha/Patron.t     | 119 ++++++++++++++++++++++++++++++-
 2 files changed, 120 insertions(+), 26 deletions(-)

diff --git a/t/db_dependent/ArticleRequests.t b/t/db_dependent/ArticleRequests.t
index 6fa935b0c2..cb25c00b95 100644
--- a/t/db_dependent/ArticleRequests.t
+++ b/t/db_dependent/ArticleRequests.t
@@ -19,7 +19,7 @@ use Modern::Perl;
 
 use POSIX qw(strftime);
 
-use Test::More tests => 55;
+use Test::More tests => 46;
 use Test::MockModule;
 
 use t::lib::TestBuilder;
@@ -110,30 +110,7 @@ is( $article_request->biblio->id,   $biblio->id, '$ar->biblio() gets correspondi
 is( $article_request->item->id,     $item->id,   '$ar->item() gets corresponding Koha::Item object' );
 is( $article_request->borrower->id, $patron->id, '$ar->borrower() gets corresponding Koha::Patron object' );
 
-my $ar = $patron->article_requests();
-is( ref($ar),      'Koha::ArticleRequests', '$patron->article_requests returns Koha::ArticleRequests object' );
-is( $ar->next->id, $article_request->id,    'Returned article request matches' );
-
-is( $patron->article_requests_current()->count(), 1, 'Open request returned for article_requests_current' );
-$article_request->process();
-is( $patron->article_requests_current()->count(), 1, 'Processing request returned for article_requests_current' );
-$article_request->complete();
-is( $patron->article_requests_current()->count(), 0, 'Completed request not returned for article_requests_current' );
-$article_request->cancel();
-is( $patron->article_requests_current()->count(), 0, 'Canceled request not returned for article_requests_current' );
-
-$article_request->set_pending();
-
-is( $patron->article_requests_finished()->count(), 0, 'Open request returned for article_requests_finished' );
-$article_request->process();
-is( $patron->article_requests_finished()->count(), 0, 'Processing request returned for article_requests_finished' );
-$article_request->complete();
-$article_request->cancel();
-is( $patron->article_requests_finished()->count(), 1, 'Canceled request not returned for article_requests_finished' );
-
-$article_request->set_pending();
-
-$ar = $biblio->article_requests();
+my $ar = $biblio->article_requests();
 is( ref($ar),      'Koha::ArticleRequests', '$biblio->article_requests returns Koha::ArticleRequests object' );
 is( $ar->next->id, $article_request->id,    'Returned article request matches' );
 
diff --git a/t/db_dependent/Koha/Patron.t b/t/db_dependent/Koha/Patron.t
index b088d2a5b2..b055d21d70 100755
--- a/t/db_dependent/Koha/Patron.t
+++ b/t/db_dependent/Koha/Patron.t
@@ -19,7 +19,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 9;
+use Test::More tests => 12;
 use Test::Exception;
 use Test::Warn;
 
@@ -831,3 +831,120 @@ subtest 'can_request_article() tests' => sub {
 
     $schema->storage->txn_rollback;
 };
+
+subtest 'article_requests() tests' => sub {
+
+    plan tests => 3;
+
+    $schema->storage->txn_begin;
+
+    my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+
+    my $article_requests = $patron->article_requests;
+    is( ref($article_requests), 'Koha::ArticleRequests',
+        'In scalar context, type is correct' );
+    is( $article_requests->count, 0, 'No article requests' );
+
+    foreach my $i ( 0 .. 3 ) {
+
+        my $item = $builder->build_sample_item;
+
+        Koha::ArticleRequest->new(
+            {
+                borrowernumber => $patron->id,
+                biblionumber   => $item->biblionumber,
+                itemnumber     => $item->id,
+                title          => "Title",
+            }
+        )->request;
+    }
+
+    $article_requests = $patron->article_requests;
+    is( $article_requests->count, 4, '4 article requests' );
+
+    $schema->storage->txn_rollback;
+};
+
+subtest 'article_requests_current() tests' => sub {
+
+    plan tests => 7;
+
+    $schema->storage->txn_begin;
+
+    my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+    my $item   = $builder->build_sample_item;
+
+    my $article_request = Koha::ArticleRequest->new(
+        {
+            borrowernumber => $patron->id,
+            biblionumber   => $item->biblionumber,
+            itemnumber     => $item->itemnumber,
+            title          => "Boo",
+        }
+    )->request();
+
+    my $ar = $patron->article_requests();
+    is( ref($ar), 'Koha::ArticleRequests',
+        '$patron->article_requests returns Koha::ArticleRequests object' );
+    is( $ar->next->id, $article_request->id,
+        'Returned article request matches' );
+
+    is( $patron->article_requests_current()->count(),
+        1, 'Open request returned for article_requests_current' );
+    $article_request->set_pending();
+    is( $patron->article_requests_current()->count(),
+        1, 'Pending request returned for article_requests_current' );
+    $article_request->process();
+    is( $patron->article_requests_current()->count(),
+        1, 'Processing request returned for article_requests_current' );
+    $article_request->complete();
+    is( $patron->article_requests_current()->count(),
+        0, 'Completed request not returned for article_requests_current' );
+    $article_request->cancel();
+    is( $patron->article_requests_current()->count(),
+        0, 'Canceled request not returned for article_requests_current' );
+
+    $schema->storage->txn_rollback;
+};
+
+subtest 'article_requests_finished() tests' => sub {
+
+    plan tests => 7;
+
+    $schema->storage->txn_begin;
+
+    my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+    my $item   = $builder->build_sample_item;
+
+    my $article_request = Koha::ArticleRequest->new(
+        {
+            borrowernumber => $patron->id,
+            biblionumber   => $item->biblionumber,
+            itemnumber     => $item->itemnumber,
+            title          => "Boo",
+        }
+    )->request();
+
+    my $ar = $patron->article_requests();
+    is( ref($ar), 'Koha::ArticleRequests',
+        '$patron->article_requests returns Koha::ArticleRequests object' );
+    is( $ar->next->id, $article_request->id,
+        'Returned article request matches' );
+
+    is( $patron->article_requests_finished->count,
+        0, 'Open request returned for article_requests_finished' );
+    $article_request->set_pending();
+    is( $patron->article_requests_finished->count,
+        0, 'Pending request returned for article_requests_finished' );
+    $article_request->process();
+    is( $patron->article_requests_finished->count,
+        0, 'Processing request returned for article_requests_finished' );
+    $article_request->complete();
+    is( $patron->article_requests_finished->count,
+        1, 'Completed request returned for article_requests_finished' );
+    $article_request->cancel();
+    is( $patron->article_requests_finished->count,
+        1, 'Cancelled request not returned for article_requests_finished' );
+
+    $schema->storage->txn_rollback;
+};
-- 
2.30.2