From d5c0f24e99d9bf4cf9245f2dbbe5a97b8ca41ed1 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Fri, 27 May 2022 12:43:00 +0000
Subject: [PATCH] Bug 30860: Unit test

---
 t/db_dependent/Reserves.t | 51 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t
index 1f368e36b6..5f25ae49fc 100755
--- a/t/db_dependent/Reserves.t
+++ b/t/db_dependent/Reserves.t
@@ -17,7 +17,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 77;
+use Test::More tests => 78;
 use Test::MockModule;
 use Test::Warn;
 
@@ -1719,3 +1719,52 @@ subtest 'CanItemBeReserved() tests' => sub {
 
     $schema->storage->txn_rollback;
 };
+
+subtest 'CanBookBeReserved return_all_items tests' => sub {
+
+    plan tests => 3;
+
+    $schema->storage->txn_begin;
+
+    my $patron = $builder->build_object({ class => "Koha::Patrons" });
+
+    my $item_1 = $builder->build_sample_item({ homebranch => $patron->branchcode });
+    my $item_2 = $builder->build_sample_item({ biblionumber => $item_1->biblionumber });
+    my $item_3 = $builder->build_sample_item({ biblionumber => $item_1->biblionumber });
+    my $item_4 = $builder->build_sample_item({ biblionumber => $item_1->biblionumber });
+
+    my $can_book_be = CanBookBeReserved($patron->borrowernumber,$item_1->biblionumber);
+    my $can_item_1_be = CanItemBeReserved($patron,$item_1);
+    my $can_item_2_be = CanItemBeReserved($patron,$item_2);
+    my $can_item_3_be = CanItemBeReserved($patron,$item_3);
+    my $can_item_4_be = CanItemBeReserved($patron,$item_4);
+
+    my $can_be_all = {
+        %$can_book_be,
+        $item_1->itemnumber => $can_item_1_be,
+        $item_2->itemnumber => $can_item_2_be,
+        $item_3->itemnumber => $can_item_3_be,
+        $item_4->itemnumber => $can_item_4_be,
+    };
+
+    my $can_book_be_all = CanBookBeReserved($patron->borrowernumber,$item_1->biblionumber, undef, {return_all_items => 1});
+
+    is_deeply( $can_book_be_all, $can_be_all, "We get status for book and status per itemnumber when all requested");
+
+    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 0);
+    $item_4->damaged(1)->store();
+    $can_item_4_be = CanItemBeReserved($patron,$item_4);
+    my $can_be_all = {
+        %$can_book_be,
+        $item_1->itemnumber => $can_item_1_be,
+        $item_2->itemnumber => $can_item_2_be,
+        $item_3->itemnumber => $can_item_3_be,
+        $item_4->itemnumber => $can_item_4_be,
+    };
+    $can_book_be_all = CanBookBeReserved($patron->borrowernumber,$item_1->biblionumber, undef, {return_all_items => 1});
+
+    is_deeply( $can_book_be_all, $can_be_all, "We get status for book and status per itemnumber when all requested");
+    is( $can_book_be_all->{status}, 'OK', "When some can be reserved and some cannot we get 'OK'");
+
+    $schema->storage->txn_rollback;
+};
-- 
2.30.2