From 52f72d11170b2399490775076f8db8b7856dedc1 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Mon, 13 May 2019 11:31:14 -0500
Subject: [PATCH] Bug 22898: Add selenium tests placing holds (staff)

Quick selenium tests to prevent regressions like bug 22895.

Test plan:
Make sure the selenium tests return green

You can also test the buggy branch:
% git checkout v18.11.05
% prove t/db_dependent/selenium/basic_workflow.t
=> Failure
% git bz apply 22895.
% prove t/db_dependent/selenium/basic_workflow.t
=> Success
---
 t/db_dependent/selenium/basic_workflow.t | 34 +++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/t/db_dependent/selenium/basic_workflow.t b/t/db_dependent/selenium/basic_workflow.t
index b7a55d11eb..c8d79b268d 100644
--- a/t/db_dependent/selenium/basic_workflow.t
+++ b/t/db_dependent/selenium/basic_workflow.t
@@ -40,7 +40,7 @@ use C4::Biblio qw( AddBiblio ); # We shouldn't use it
 
 use Koha::CirculationRules;
 
-use Test::More tests => 20;
+use Test::More tests => 22;
 use MARC::Record;
 use MARC::Field;
 
@@ -77,13 +77,16 @@ our $sample_data = {
         issuelength   => '5',
         lengthunit    => 'days',
         renewalperiod => '5',
+        reservesallowed => '5',
+        onshelfholds  => '1',
+        opacitemholds => 'Y',
       },
 };
 our ( $borrowernumber, $start, $prev_time, $cleanup_needed );
 
 SKIP: {
     eval { require Selenium::Remote::Driver; };
-    skip "Selenium::Remote::Driver is needed for selenium tests.", 20 if $@;
+    skip "Selenium::Remote::Driver is needed for selenium tests.", 22 if $@;
 
     $cleanup_needed = 1;
 
@@ -149,7 +152,19 @@ SKIP: {
     $dbh->do(q|INSERT INTO itemtypes (itemtype, description, rentalcharge, notforloan) VALUES (?, ?, ?, ?)|, undef, $itemtype->{itemtype}, $itemtype->{description}, $itemtype->{rentalcharge}, $itemtype->{notforloan});
 
     my $issuing_rules = $sample_data->{issuingrule};
-    $dbh->do(q|INSERT INTO issuingrules (categorycode, itemtype, branchcode, issuelength, lengthunit, renewalperiod) VALUES (?, ?, ?, ?, ?, ?)|, undef, $issuing_rules->{categorycode}, $issuing_rules->{itemtype}, $issuing_rules->{branchcode}, $issuing_rules->{issuelength}, $issuing_rules->{lengthunit}, $issuing_rules->{renewalperiod});
+    $dbh->do(
+        q|INSERT INTO issuingrules (categorycode, itemtype, branchcode, issuelength, lengthunit, renewalperiod, reservesallowed, onshelfholds, opacitemholds) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)|,
+        undef,
+        $issuing_rules->{categorycode},
+        $issuing_rules->{itemtype},
+        $issuing_rules->{branchcode},
+        $issuing_rules->{issuelength},
+        $issuing_rules->{lengthunit},
+        $issuing_rules->{renewalperiod},
+        $issuing_rules->{reservesallowed},
+        $issuing_rules->{onshelfholds},
+        $issuing_rules->{opacitemholds},
+    );
     Koha::CirculationRules->set_rules(
         {
             categorycode => $issuing_rules->{categorycode},
@@ -224,6 +239,19 @@ SKIP: {
 
     time_diff("checkin");
 
+    #Place holds
+    $driver->get($base_url."/reserve/request.pl?borrowernumber=$borrowernumber&biblionumber=".$biblionumbers[0]);
+    $driver->find_element('//form[@id="hold-request-form"]//input[@type="submit"]')->click; # Biblio level
+    my $patron = Koha::Patrons->find($borrowernumber);
+    is( $patron->holds->count, 1, );
+
+    $driver->get($base_url."/reserve/request.pl?borrowernumber=$borrowernumber&biblionumber=".$biblionumbers[1]);
+    $driver->find_element('//form[@id="hold-request-form"]//input[@type="radio"]')->click; # Item level, there is only 1 item per bib so we are safe
+    $driver->find_element('//form[@id="hold-request-form"]//input[@type="submit"]')->click;
+    is( $patron->holds->count, 2, );
+
+    time_diff("holds");
+
     close $fh;
     $driver->quit();
 };
-- 
2.11.0