@@ -, +, @@ api/v1/holds/{hold_id}/suspension endpoint --- Koha/REST/V1/Holds.pm | 16 ++++++++++------ t/db_dependent/api/v1/holds.t | 29 +++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 14 deletions(-) --- a/Koha/REST/V1/Holds.pm +++ a/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 } ); } --- a/t/db_dependent/api/v1/holds.t +++ a/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; @@ -398,14 +398,27 @@ 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" ) --