Bug 33996: Add missing authority objects mapping

This patch adds a minimal mapping (i.e. some things get excluded from
the API objects for now). It makes some attributes consistent with the
current API names, and the rest can be added later when they become
needed and we discuss a proper name. But right now is a mess :-/

To test:
1. Apply this patch
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/api/v1/authorities.t
=> SUCCESS: Tests pass!
3. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Sam Lau <samalau@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 3b0fc1fc41)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Tomás Cohen Arazi 2023-06-13 10:13:40 -03:00 committed by Martin Renvoize
parent 5edd76121b
commit 11978e0f17
Signed by: martin.renvoize
GPG key ID: 422B469130441A0F
2 changed files with 56 additions and 42 deletions

View file

@ -30,7 +30,7 @@ Koha::Authority - Koha Authority Object class
=head1 API
=head2 Instance Methods
=head2 Class methods
=head3 get_usage_count
@ -168,9 +168,30 @@ sub record_schema {
: 'MARC21';
}
=head2 Class Methods
=head3 to_api_mapping
=head3 type
This method returns the mapping for representing a Koha::Authority object
on the API.
=cut
sub to_api_mapping {
return {
authid => 'authority_id',
authtrees => undef,
authtypecode => 'framework_id',
datecreated => 'creation_date',
linkid => undef,
marc => undef,
marcxml => undef,
modification_time => 'updated_on',
origincode => undef,
};
}
=head2 Internal methods
=head3 _type
=cut

View file

@ -28,6 +28,8 @@ use Test::Warn;
use t::lib::Mocks;
use t::lib::TestBuilder;
use Mojo::JSON qw(encode_json);
use C4::Auth;
use Koha::Authorities;
@ -67,34 +69,34 @@ subtest 'get() tests' => sub {
</record>|
} });
$t->get_ok("//$userid:$password@/api/v1/authorities/" . $authority->authid)
$t->get_ok("//$userid:$password@/api/v1/authorities/" . $authority->id)
->status_is(403);
$patron->flags(4)->store;
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'application/weird+format' } )
->status_is(400);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'application/json' } )
->status_is(200)
->json_is( '/authid', $authority->authid )
->json_is( '/authtypecode', $authority->authtypecode );
->json_is( '/authority_id', $authority->id )
->json_is( '/framework_id', $authority->authtypecode );
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'application/marcxml+xml' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'application/marc-in-json' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'application/marc' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'text/plain' } )
->status_is(200)
->content_is(q|LDR 00079 2200049 4500
@ -103,7 +105,7 @@ subtest 'get() tests' => sub {
_aMy Corporation|);
$authority->delete;
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->authid
$t->get_ok( "//$userid:$password@/api/v1/authorities/" . $authority->id
=> { Accept => 'application/marc' } )
->status_is(404)
->json_is( '/error', 'Object not found.' );
@ -138,16 +140,16 @@ subtest 'delete() tests' => sub {
</record>|
} });
$t->delete_ok("//$userid:$password@/api/v1/authorities/".$authority->authid)
$t->delete_ok("//$userid:$password@/api/v1/authorities/".$authority->id)
->status_is(403, 'Not enough permissions makes it return the right code');
$patron->flags( 2 ** 14 )->store; # 14 => editauthorities userflag
$t->delete_ok("//$userid:$password@/api/v1/authorities/".$authority->authid)
$t->delete_ok("//$userid:$password@/api/v1/authorities/".$authority->id)
->status_is(204, 'SWAGGER3.2.4')
->content_is('', 'SWAGGER3.3.4');
$t->delete_ok("//$userid:$password@/api/v1/authorities/".$authority->authid)
$t->delete_ok("//$userid:$password@/api/v1/authorities/".$authority->id)
->status_is(404);
$schema->storage->txn_rollback;
@ -261,7 +263,7 @@ subtest 'put() tests' => sub {
</record>|
} });
my $authid = $authority->authid;
my $authid = $authority->id;
my $authtypecode = $authority->authtypecode;
my $marcxml = q|<?xml version="1.0" encoding="UTF-8"?>
@ -333,7 +335,7 @@ subtest 'list() tests' => sub {
$patron->discard_changes;
my $userid = $patron->userid;
my $authid1 = $builder->build_object({ 'class' => 'Koha::Authorities', value => {
my $auth_id_1 = $builder->build_object({ 'class' => 'Koha::Authorities', value => {
marcxml => q|<?xml version="1.0" encoding="UTF-8"?>
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.loc.gov/MARC21/slim" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<controlfield tag="001">1001</controlfield>
@ -344,7 +346,7 @@ subtest 'list() tests' => sub {
</record>|
} })->authid;
my $authid2 = $builder->build_object({ 'class' => 'Koha::Authorities', value => {
my $auth_id_2 = $builder->build_object({ 'class' => 'Koha::Authorities', value => {
marcxml => q|<?xml version="1.0" encoding="UTF-8"?>
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.loc.gov/MARC21/slim" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<controlfield tag="001">1001</controlfield>
@ -355,37 +357,28 @@ subtest 'list() tests' => sub {
</record>|
} })->authid;
my $search =
"[{\"authid\": \"$authid1\"}, {\"authid\": \"$authid2\"}]";
$t->get_ok(
"//$userid:$password@/api/v1/authorities/" => { 'x-koha-query' => $search }
)->status_is(403);
my $query = encode_json( [ { authority_id => $auth_id_1 }, { authority_id => $auth_id_2 } ] );
$t->get_ok("//$userid:$password@/api/v1/authorities?q=$query")->status_is(403);
$patron->flags(4)->store;
$t->get_ok( "//$userid:$password@/api/v1/authorities/" =>
{ Accept => 'application/weird+format', 'x-koha-query' => $search } )
->status_is(400);
$t->get_ok( "//$userid:$password@/api/v1/authorities?q=$query" => { Accept => 'application/weird+format' } )
->status_is(400);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" =>
{ Accept => 'application/json', 'x-koha-query' => $search } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities?q=$query" => { Accept => 'application/json' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" =>
{ Accept => 'application/marcxml+xml', 'x-koha-query' => $search } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities?q=$query" => { Accept => 'application/marcxml+xml' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" =>
{ Accept => 'application/marc-in-json', 'x-koha-query' => $search } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities?q=$query" => { Accept => 'application/marc-in-json' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" =>
{ Accept => 'application/marc', 'x-koha-query' => $search } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities?q=$query" => { Accept => 'application/marc' } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities/" =>
{ Accept => 'text/plain', 'x-koha-query' => $search } )
->status_is(200);
$t->get_ok( "//$userid:$password@/api/v1/authorities?q=$query" => { Accept => 'text/plain' } )->status_is(200);
$schema->storage->txn_rollback;
};