@@ -, +, @@ REST API --- api/v1/swagger/paths.json | 4 +++ api/v1/swagger/paths/checkouts.json | 39 +++++++++++++++++++++++++++++ t/db_dependent/api/v1/checkouts.t | 12 ++++++++- 3 files changed, 54 insertions(+), 1 deletion(-) --- a/api/v1/swagger/paths.json +++ a/api/v1/swagger/paths.json @@ -56,6 +56,10 @@ "/patrons/{patron_id}/account/credits": { "$ref": "paths/patrons_account.json#/~1patrons~1{patron_id}~1account~1credits" }, + "/patrons/{patron_id}/checkouts": { + "$ref": "paths/checkouts.json#/~1patrons~1{patron_id}~1checkouts" + }, + "/patrons/{patron_id}/password": { "$ref": "paths/patrons_password.json#/~1patrons~1{patron_id}~1password" }, --- a/api/v1/swagger/paths/checkouts.json +++ a/api/v1/swagger/paths/checkouts.json @@ -135,5 +135,44 @@ } } } + }, + "/patrons/{patron_id}/checkouts": { + "get": { + "x-mojo-to": "Checkouts#list", + "operationId": "listPatronsCheckouts", + "tags": ["patrons", "checkouts"], + "parameters": [{ + "$ref": "../parameters.json#/patron_id_pp" + },{ + "name": "checked_in", + "in": "query", + "description": "By default, only current checkout are returned, when this is true, all checkouts (current and checked in) are returned as result.", + "type": "boolean" + }], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "A list of checkouts", + "schema": { + "$ref": "../definitions.json#/checkouts" + } + }, + "403": { + "description": "Access forbidden", + "schema": { "$ref": "../definitions.json#/error" } + }, + "404": { + "description": "Patron not found", + "schema": { "$ref": "../definitions.json#/error" } + } + }, + "x-koha-authorization": { + "permissions": { + "circulate": "circulate_remaining_permissions" + } + } + } } } --- a/t/db_dependent/api/v1/checkouts.t +++ a/t/db_dependent/api/v1/checkouts.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 73; +use Test::More tests => 82; use Test::MockModule; use Test::Mojo; use t::lib::Mocks; @@ -130,6 +130,16 @@ $t->get_ok( "//$userid:$password@/api/v1/checkouts?patron_id=$patron_id") ->json_is('/1/due_date' => output_pref({ dateformat => "rfc3339", dt => $date_due2 }) ) ->json_hasnt('/2'); +$t->get_ok( "//$userid:$password@/api/v1/patrons/$patron_id/checkouts") + ->status_is(200) + ->json_is('/0/patron_id' => $patron_id) + ->json_is('/0/item_id' => $item1->itemnumber) + ->json_is('/0/due_date' => output_pref({ dateformat => "rfc3339", dt => $date_due1 }) ) + ->json_is('/1/patron_id' => $patron_id) + ->json_is('/1/item_id' => $item2->itemnumber) + ->json_is('/1/due_date' => output_pref({ dateformat => "rfc3339", dt => $date_due2 }) ) + ->json_hasnt('/2'); + $t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id) ->status_is(200) ->json_is('/patron_id' => $patron_id) --