bug 2394: regression test for canreservefromotherbranches
[koha.git] / t / db_dependent / Holds.t
index 0f70872..74cecfa 100755 (executable)
@@ -2,9 +2,12 @@
 
 use strict;
 use warnings;
+
+use t::lib::Mocks;
+use C4::Context;
 use C4::Branch;
 
-use Test::More tests => 19;
+use Test::More tests => 22;
 use MARC::Record;
 use C4::Biblio;
 use C4::Items;
@@ -164,6 +167,54 @@ AlterPriority( 'bottom', $reserve->{'reserve_id'} );
 $reserve = GetReserve( $reserve->{'reserve_id'} );
 ok( $reserve->{'priority'} eq '5', "Test AlterPriority(), move to bottom" );
 
+# Regression test for bug 2394
+#
+# If IndependentBranches is ON and canreservefromotherbranches is OFF,
+# a patron is not permittedo to request an item whose homebranch (i.e.,
+# owner of the item) is different from the patron's own library.
+# However, if canreservefromotherbranches is turned ON, the patron can
+# create such hold requests.
+#
+# Note that canreservefromotherbranches has no effect if
+# IndependentBranches is OFF.
+
+my ($foreign_bibnum, $foreign_title, $foreign_bibitemnum) = create_helper_biblio();
+my ($foreign_item_bibnum, $foreign_item_bibitemnum, $foreign_itemnumber)
+  = AddItem({ homebranch => 'MPL', holdingbranch => 'MPL' } , $foreign_bibnum);
+$dbh->do('DELETE FROM issuingrules');
+$dbh->do(
+    q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed)
+      VALUES (?, ?, ?, ?)}, 
+    {},
+    '*', '*', '*', 25
+);
+
+# make sure some basic sysprefs are set
+t::lib::Mocks::mock_preference('ReservesControlBranch', 'homebranch');
+t::lib::Mocks::mock_preference('item-level_itypes', 1);
+
+# if IndependentBranches is OFF, a CPL patron can reserve an MPL item
+t::lib::Mocks::mock_preference('IndependentBranches', 0);
+ok(
+    CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber),
+    'CPL patron allowed to reserve MPL item with IndependentBranches OFF (bug 2394)'
+);
+
+# if IndependentBranches is OFF, a CPL patron cannot reserve an MPL item
+t::lib::Mocks::mock_preference('IndependentBranches', 1);
+t::lib::Mocks::mock_preference('canreservefromotherbranches', 0);
+ok(
+    ! CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber),
+    'CPL patron NOT allowed to reserve MPL item with IndependentBranches ON ... (bug 2394)'
+);
+
+# ... unless canreservefromotherbranches is ON
+t::lib::Mocks::mock_preference('canreservefromotherbranches', 1);
+ok(
+    CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber),
+    '... unless canreservefromotherbranches is ON (bug 2394)'
+);
+
 # Helper method to set up a Biblio.
 sub create_helper_biblio {
     my $bib = MARC::Record->new();