From 3fec99135701b97b935fa89279bf31f33f17a95f Mon Sep 17 00:00:00 2001
From: Ere Maijala <ere.maijala@helsinki.fi>
Date: Wed, 19 Feb 2020 11:45:04 +0200
Subject: [PATCH] Bug 24680: Fix end_date returned from
 api/v1/holds/{hold_id}/suspension endpoint

Before this patch the response would return current date as the suspension end date for a hold that is suspended with no end date.
---
 Koha/REST/V1/Holds.pm         | 16 ++++++++++------
 t/db_dependent/api/v1/holds.t | 29 +++++++++++++++++++++--------
 2 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/Koha/REST/V1/Holds.pm b/Koha/REST/V1/Holds.pm
index 629a037d99..079b67cd5e 100644
--- a/Koha/REST/V1/Holds.pm
+++ b/Koha/REST/V1/Holds.pm
@@ -312,15 +312,19 @@ sub suspend {
         $hold->suspend_hold($date);
         $hold->discard_changes;
         $c->res->headers->location( $c->req->url->to_string );
+        my $suspend_end_date;
+        if ($hold->suspend_until) {
+            $suspend_end_date = output_pref({
+                dt         => dt_from_string( $hold->suspend_until ),
+                dateformat => 'rfc3339',
+                dateonly   => 1
+                }
+            );
+        }
         return $c->render(
             status  => 201,
             openapi => {
-                end_date => output_pref(
-                    {   dt         => dt_from_string( $hold->suspend_until ),
-                        dateformat => 'rfc3339',
-                        dateonly   => 1
-                    }
-                )
+                end_date => $suspend_end_date
             }
         );
     }
diff --git a/t/db_dependent/api/v1/holds.t b/t/db_dependent/api/v1/holds.t
index 01b9733e42..d27b9a9e44 100644
--- a/t/db_dependent/api/v1/holds.t
+++ b/t/db_dependent/api/v1/holds.t
@@ -370,7 +370,7 @@ $schema->storage->txn_rollback;
 
 subtest 'suspend and resume tests' => sub {
 
-    plan tests => 21;
+    plan tests => 24;
 
     $schema->storage->txn_begin;
 
@@ -397,15 +397,28 @@ subtest 'suspend and resume tests' => sub {
 
     $hold->discard_changes;    # refresh object
 
+    ok( $hold->is_suspended, 'Hold is suspended' );
+    $t->json_is('/end_date', undef, 'Hold suspension has no end date');
+
+    my $end_date = output_pref({
+      dt         => dt_from_string( undef ),
+      dateformat => 'rfc3339',
+      dateonly   => 1
+    });
+
+    $t->post_ok( "//$userid:$password@/api/v1/holds/" . $hold->id . "/suspension" => json => { end_date => $end_date } );
+
+    $hold->discard_changes;    # refresh object
+
     ok( $hold->is_suspended, 'Hold is suspended' );
     $t->json_is(
-        '/end_date',
-        output_pref(
-            {   dt         => dt_from_string( $hold->suspend_until ),
-                dateformat => 'rfc3339',
-                dateonly   => 1
-            }
-        )
+      '/end_date',
+      output_pref({
+        dt         => dt_from_string( $hold->suspend_until ),
+        dateformat => 'rfc3339',
+        dateonly   => 1
+      }),
+      'Hold suspension has correct end date'
     );
 
     $t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id . "/suspension" )
-- 
2.17.1