From d4509897e1613e8239b5d27ffb9bc121ad842c5d Mon Sep 17 00:00:00 2001 From: Ere Maijala 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. Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Martin Renvoize --- 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 dcc46798ff..a806d6757a 100644 --- a/Koha/REST/V1/Holds.pm +++ b/Koha/REST/V1/Holds.pm @@ -309,15 +309,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 bb9870079e..df10cbca61 100644 --- a/t/db_dependent/api/v1/holds.t +++ b/t/db_dependent/api/v1/holds.t @@ -375,7 +375,7 @@ $schema->storage->txn_rollback; subtest 'suspend and resume tests' => sub { - plan tests => 21; + plan tests => 24; $schema->storage->txn_begin; @@ -402,15 +402,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.39.5