From c78090c6b82133990080de92df14e0f7d1850a66 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 9 Jan 2024 13:14:55 +0100 Subject: [PATCH] Bug 35744: Implement +strings for GET /patrons/:patron_id In order to retrieve the library's name and patron category's description alongwith other patron's info. Test plan: Run the following command before and after this patch: % curl -u koha:koha --request GET 'http://localhost:8081/api/v1/patrons/42' --header "Content-Type: application/json" --header "x-koha-embed: +strings" | jq Notice that you now have _strings which contains the library's name and patron category's description --- Koha/Patron.pm | 21 +++++++++++++++++++ api/v1/swagger/definitions/patron.yaml | 5 +++++ api/v1/swagger/paths/patrons.yaml | 1 + t/db_dependent/api/v1/patrons.t | 29 +++++++++++++++++++++++++- 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 1a4a9205806..758c4e21ada 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -2467,6 +2467,27 @@ sub to_api_mapping { }; } +=head3 strings_map + +Returns a map of column name to string representations including the string. + +=cut + +sub strings_map { + my ( $self, $params ) = @_; + + return { + library_id => { + str => $self->library->branchname, + type => 'library', + }, + category_id => { + str => $self->category->description, + type => 'patron_category', + } + }; +} + =head3 queue_notice Koha::Patrons->queue_notice({ letter_params => $letter_params, message_name => 'DUE'}); diff --git a/api/v1/swagger/definitions/patron.yaml b/api/v1/swagger/definitions/patron.yaml index edcf47beec3..26f7b81948a 100644 --- a/api/v1/swagger/definitions/patron.yaml +++ b/api/v1/swagger/definitions/patron.yaml @@ -378,6 +378,11 @@ properties: type: - boolean description: Protected status of the patron + _strings: + type: + - object + - "null" + description: A list of stringified coded values additionalProperties: false required: - surname diff --git a/api/v1/swagger/paths/patrons.yaml b/api/v1/swagger/paths/patrons.yaml index cf8aa091227..a2e86ec2a8f 100644 --- a/api/v1/swagger/paths/patrons.yaml +++ b/api/v1/swagger/paths/patrons.yaml @@ -482,6 +482,7 @@ items: type: string enum: + - +strings - extended_attributes collectionFormat: csv produces: diff --git a/t/db_dependent/api/v1/patrons.t b/t/db_dependent/api/v1/patrons.t index f882cae0e0e..1e3acdf306f 100755 --- a/t/db_dependent/api/v1/patrons.t +++ b/t/db_dependent/api/v1/patrons.t @@ -230,7 +230,7 @@ subtest 'list() tests' => sub { subtest 'get() tests' => sub { - plan tests => 3; + plan tests => 4; $schema->storage->txn_begin; unauthorized_access_tests('GET', -1, undef); @@ -315,6 +315,33 @@ subtest 'get() tests' => sub { $schema->storage->txn_rollback; }; + + subtest '+strings' => sub { + + plan tests => 4; + + $schema->storage->txn_begin; + + my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); + + my $librarian = $builder->build_object( + { + class => 'Koha::Patrons', + value => { flags => 2**4 } # borrowers flag = 4 + } + ); + my $password = 'thePassword123'; + $librarian->set_password( { password => $password, skip_validation => 1 } ); + my $userid = $librarian->userid; + + $t->get_ok( "//$userid:$password@/api/v1/patrons/" . $patron->id => { "x-koha-embed" => "+strings" } ) + ->status_is(200) + ->json_has( '/_strings/library_id' => { str => $patron->library->branchname, type => 'library' } ) + ->json_has( + '/_strings/category_id' => { str => $patron->category->description, type => 'patron_category' } ); + + $schema->storage->txn_rollback; + }; }; subtest 'add() tests' => sub { -- 2.34.1