From 23148ccd4ce9b09518f42ea37c4d7a5f7706da69 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Mon, 19 Oct 2015 16:17:31 +0100
Subject: [PATCH] Bug 15029: Make the IssueSlip tests pass even if launched
 after 23:00

Prior to this patch, the tests did not pass if they were launched after
23:00.
DateTime complains if you ask for creating a date with hour => 24 (which
is logical so far).

Test plan:
0/ Don't apply this patch
1/ sudo date -s "2015-10-19 23:50:00";prove
t/db_dependent/Members/IssueSlip.t
2/ Apply this patch and repeat 1.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
---
 t/db_dependent/Members/IssueSlip.t | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/t/db_dependent/Members/IssueSlip.t b/t/db_dependent/Members/IssueSlip.t
index 71abe67..8c32c21 100644
--- a/t/db_dependent/Members/IssueSlip.t
+++ b/t/db_dependent/Members/IssueSlip.t
@@ -126,6 +126,7 @@ EOS
 
     subtest 'Daily loans' => sub {
         plan tests => 2;
+        skip "It's 23:59!", 2 if $today->hour == 23 and $today->minute == 59;
         # Test 1: No overdue
         my $today_daily = $today->clone->set( hour => 23, minute => 59 );
         my $today_daily_as_formatted = output_pref( $today_daily );
@@ -194,12 +195,13 @@ EOS
 
     subtest 'Hourly loans' => sub {
         plan tests => 2;
+        skip "It's 23:59!", 2 if $today->hour == 23 and $today->minute == 59;
         # Test 1: No overdue
         my ( $date_due_in_time, $date_due_in_time_as_formatted, $date_due_in_late, $date_due_in_late_as_formatted, $issue_date, $slip, $expected_slip );
         # Assuming today is not hour = 23 and minute = 59
-        $date_due_in_time = $today->clone->set(hour => $today->hour + 1);
+        $date_due_in_time = $today->clone->set(hour => ($today->hour < 23 ? $today->hour + 1 : 23), minute => 59);
         $date_due_in_time_as_formatted = output_pref( $date_due_in_time );
-        $issue_date = $today->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
+        $issue_date = $date_due_in_time->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
         AddIssue( $borrower, $barcode1, $date_due_in_time, undef, $issue_date );
         $issue_date = $yesterday->clone;
         AddIssue( $borrower, $barcode2, $date_due_in_time, undef, $issue_date );
@@ -227,9 +229,9 @@ EOS
         AddReturn( $barcode2, $branchcode );
 
         # Test 2: 1 Overdue
-        $date_due_in_time = $today->clone->set(hour => $today->hour + 1);
+        $date_due_in_time = $today->clone->set(hour => ($today->hour < 23 ? $today->hour + 1 : 23), minute => 59);
         $date_due_in_time_as_formatted = output_pref( $date_due_in_time );
-        $issue_date = $today->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
+        $issue_date = $date_due_in_time->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
         AddIssue( $borrower, $barcode1, $date_due_in_time, undef, $issue_date );
         $date_due_in_late = $today->clone->set(hour => $today->hour - 1);
         $date_due_in_late_as_formatted = output_pref( $date_due_in_late );
@@ -275,6 +277,7 @@ EOS
 
     subtest 'Daily loans' => sub {
         plan tests => 2;
+        skip "It's 23:59!", 2 if $today->hour == 23 and $today->minute == 59;
         # Test 1: No overdue
         my $today_daily = $today->clone->set( hour => 23, minute => 59 );
         my $today_daily_as_formatted = output_pref( $today_daily );
@@ -328,9 +331,9 @@ EOS
         # Test 1: No overdue
         my ( $date_due_in_time, $date_due_in_time_as_formatted, $date_due_in_late, $date_due_in_late_as_formatted, $issue_date, $slip, $expected_slip );
         # Assuming today is not hour = 23 and minute = 59
-        $date_due_in_time = $today->clone->set(hour => $today->hour + 1);
+        $date_due_in_time = $today->clone->set(hour => ($today->hour < 23 ? $today->hour + 1 : 23), minute => 59);
         $date_due_in_time_as_formatted = output_pref( $date_due_in_time );
-        $issue_date = $today->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
+        $issue_date = $date_due_in_time->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
         AddIssue( $borrower, $barcode1, $date_due_in_time, undef, $issue_date );
         $issue_date = $yesterday->clone;
         AddIssue( $borrower, $barcode2, $date_due_in_time, undef, $issue_date );
@@ -350,9 +353,9 @@ EOS
         AddReturn( $barcode2, $branchcode );
 
         # Test 2: 1 Overdue
-        $date_due_in_time = $today->clone->set(hour => $today->hour + 1);
+        $date_due_in_time = $today->clone->set(hour => ($today->hour < 23 ? $today->hour + 1 : 23), minute => 59);
         $date_due_in_time_as_formatted = output_pref( $date_due_in_time );
-        $issue_date = $today->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
+        $issue_date = $date_due_in_time->clone->subtract_duration( DateTime::Duration->new( minutes => 1 ) );
         AddIssue( $borrower, $barcode1, $date_due_in_time, undef, $issue_date );
         $date_due_in_late = $today->clone->set(hour => $today->hour - 1);
         $date_due_in_late_as_formatted = output_pref( $date_due_in_late );
-- 
2.6.2