Bug 11629: (folllow-up) fix various issues
[koha_fer] / t / db_dependent / Circulation.t
index aa2a969..6b25208 100755 (executable)
@@ -9,7 +9,7 @@ use C4::Items;
 use C4::Members;
 use C4::Reserves;
 
-use Test::More tests => 44;
+use Test::More tests => 48;
 
 BEGIN {
     use_ok('C4::Circulation');
@@ -201,6 +201,17 @@ C4::Context->dbh->do("DELETE FROM accountlines");
         $biblionumber
     );
 
+    my $barcode3 = 'R00000346';
+    my ( $item_bibnum3, $item_bibitemnum3, $itemnumber3 ) = AddItem(
+        {
+            homebranch       => $branch,
+            holdingbranch    => $branch,
+            barcode          => $barcode3,
+            replacementprice => 23.00
+        },
+        $biblionumber
+    );
+
     # Create 2 borrowers
     my %renewing_borrower_data = (
         firstname =>  'John',
@@ -259,8 +270,14 @@ C4::Context->dbh->do("DELETE FROM accountlines");
     is( $error, 'on_reserve', '(Bug 10663) Cannot renew, reserved (returned error is on_reserve)');
 
     my $reserveid = C4::Reserves::GetReserveId({ biblionumber => $biblionumber, borrowernumber => $reserving_borrowernumber});
-    CancelReserve({ reserve_id => $reserveid });
-
+    my $reserving_borrower = GetMember( borrowernumber => $reserving_borrowernumber );
+    AddIssue($reserving_borrower, $barcode3);
+    my $reserve = $dbh->selectrow_hashref(
+        'SELECT * FROM old_reserves WHERE reserve_id = ?',
+        { Slice => {} },
+        $reserveid
+    );
+    is($reserve->{found}, 'F', 'hold marked completed when checking out item that fills it');
 
     diag("Item-level hold, renewal test");
     AddReserve(
@@ -288,10 +305,22 @@ C4::Context->dbh->do("DELETE FROM accountlines");
     $reserveid = C4::Reserves::GetReserveId({ biblionumber => $biblionumber, itemnumber => $itemnumber, borrowernumber => $reserving_borrowernumber});
     CancelReserve({ reserve_id => $reserveid });
 
+    # set policy to require that loans cannot be
+    # renewed until seven days prior to the due date
+    $dbh->do('UPDATE issuingrules SET norenewalbefore = 7');
+    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
+    is( $renewokay, 0, 'Cannot renew, renewal is premature');
+    is( $error, 'too_soon', 'Cannot renew, renewal is premature (returned code is too_soon)');
+    is(
+        GetSoonestRenewDate($renewing_borrowernumber, $itemnumber),
+        $datedue->clone->add(days => -7),
+        'renewals permitted 7 days before due date, as expected',
+    );
+
     diag("Too many renewals");
 
     # set policy to forbid renewals
-    $dbh->do('UPDATE issuingrules SET renewalsallowed = 0');
+    $dbh->do('UPDATE issuingrules SET norenewalbefore = NULL, renewalsallowed = 0');
 
     ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
     is( $renewokay, 0, 'Cannot renew, 0 renewals allowed');