Bug 32030: ERM - GET /erm/agreements spec files
Signed-off-by: Jonathan Field <jonathan.field@ptfs-europe.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
7e0009e96a
commit
8f82195af2
3 changed files with 240 additions and 0 deletions
47
api/v1/swagger/definitions/erm_agreement.yaml
Normal file
47
api/v1/swagger/definitions/erm_agreement.yaml
Normal file
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
type: object
|
||||
properties:
|
||||
agreement_id:
|
||||
type: integer
|
||||
description: internally assigned agreement identifier
|
||||
readOnly: true
|
||||
vendor_id:
|
||||
description: foreign key to aqbooksellers
|
||||
type:
|
||||
- integer
|
||||
- "null"
|
||||
name:
|
||||
description: name of the agreement
|
||||
type: string
|
||||
description:
|
||||
description: description of the agreement
|
||||
type:
|
||||
- string
|
||||
- "null"
|
||||
status:
|
||||
description: current status of the agreement
|
||||
type: string
|
||||
closure_reason:
|
||||
description: reason of the closure
|
||||
type:
|
||||
- string
|
||||
- "null"
|
||||
is_perpetual:
|
||||
description: is the agreement perpetual
|
||||
type: boolean
|
||||
renewal_priority:
|
||||
description: priority of the renewal
|
||||
type:
|
||||
- string
|
||||
- "null"
|
||||
license_info:
|
||||
description: info about the license
|
||||
type:
|
||||
- string
|
||||
- "null"
|
||||
additionalProperties: false
|
||||
required:
|
||||
- agreement_id
|
||||
- name
|
||||
- status
|
||||
- is_perpetual
|
87
api/v1/swagger/paths/erm_agreements.yaml
Normal file
87
api/v1/swagger/paths/erm_agreements.yaml
Normal file
|
@ -0,0 +1,87 @@
|
|||
---
|
||||
/erm/agreements:
|
||||
get:
|
||||
x-mojo-to: ERM::Agreements#list
|
||||
operationId: listErmAgreements
|
||||
tags:
|
||||
- agreement
|
||||
summary: List erm_agreements
|
||||
produces:
|
||||
- application/json
|
||||
parameters:
|
||||
- description: Case insensitive search on agreement agreement_id
|
||||
in: query
|
||||
name: agreement_id
|
||||
required: false
|
||||
type: integer
|
||||
- description: Case insensitive search on agreement vendor_id
|
||||
in: query
|
||||
name: vendor_id
|
||||
required: false
|
||||
type: integer
|
||||
- description: Case insensitive search on agreement name
|
||||
in: query
|
||||
name: name
|
||||
required: false
|
||||
type: string
|
||||
- description: Case insensitive search on agreement description
|
||||
in: query
|
||||
name: description
|
||||
required: false
|
||||
type: string
|
||||
- description: Case insensitive search on agreement status
|
||||
in: query
|
||||
name: status
|
||||
required: false
|
||||
type: string
|
||||
- description: Case insensitive search on agreement closure_reason
|
||||
in: query
|
||||
name: closure_reason
|
||||
required: false
|
||||
type: string
|
||||
- description: Case insensitive search on agreement is_perpetual
|
||||
in: query
|
||||
name: is_perpetual
|
||||
required: false
|
||||
type: boolean
|
||||
- description: Case insensitive search on agreement renewal_priority
|
||||
in: query
|
||||
name: renewal_priority
|
||||
required: false
|
||||
type: string
|
||||
- description: Case insensitive search on agreement license_info
|
||||
in: query
|
||||
name: license_info
|
||||
required: false
|
||||
type: string
|
||||
- $ref: ../parameters.yaml#/match
|
||||
- $ref: ../parameters.yaml#/order_by
|
||||
- $ref: ../parameters.yaml#/page
|
||||
- $ref: ../parameters.yaml#/per_page
|
||||
- $ref: ../parameters.yaml#/q_param
|
||||
- $ref: ../parameters.yaml#/q_body
|
||||
- $ref: ../parameters.yaml#/q_header
|
||||
responses:
|
||||
200:
|
||||
description: A list of agreement
|
||||
schema:
|
||||
items:
|
||||
$ref: ../definitions.yaml#/erm_agreement
|
||||
type: array
|
||||
403:
|
||||
description: Access forbidden
|
||||
schema:
|
||||
$ref: ../definitions.yaml#/error
|
||||
500:
|
||||
description: |-
|
||||
Internal server error. Possible `error_code` attribute values:
|
||||
* `internal_server_error`
|
||||
schema:
|
||||
$ref: ../definitions.yaml#/error
|
||||
503:
|
||||
description: Under maintenance
|
||||
schema:
|
||||
$ref: ../definitions.yaml#/error
|
||||
x-koha-authorization:
|
||||
permissions:
|
||||
erm: 1
|
106
t/db_dependent/api/v1/erm_agreements.t
Normal file
106
t/db_dependent/api/v1/erm_agreements.t
Normal file
|
@ -0,0 +1,106 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 1;
|
||||
use Test::Mojo;
|
||||
|
||||
use t::lib::TestBuilder;
|
||||
use t::lib::Mocks;
|
||||
|
||||
use Koha::ERM::Agreements;
|
||||
use Koha::Database;
|
||||
|
||||
my $schema = Koha::Database->new->schema;
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
|
||||
my $t = Test::Mojo->new('Koha::REST::V1');
|
||||
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
|
||||
|
||||
subtest 'list() tests' => sub {
|
||||
|
||||
plan tests => 17;
|
||||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
Koha::ERM::Agreements->search->delete;
|
||||
|
||||
my $librarian = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Patrons',
|
||||
value => { flags => 27 ** 2 }
|
||||
}
|
||||
);
|
||||
my $password = 'thePassword123';
|
||||
$librarian->set_password( { password => $password, skip_validation => 1 } );
|
||||
my $userid = $librarian->userid;
|
||||
|
||||
my $patron = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Patrons',
|
||||
value => { flags => 0 }
|
||||
}
|
||||
);
|
||||
|
||||
$patron->set_password( { password => $password, skip_validation => 1 } );
|
||||
my $unauth_userid = $patron->userid;
|
||||
|
||||
## Authorized user tests
|
||||
# No agreements, so empty array should be returned
|
||||
$t->get_ok("//$userid:$password@/api/v1/erm/agreements")
|
||||
->status_is(200)
|
||||
->json_is( [] );
|
||||
|
||||
my $agreement = $builder->build_object({ class => 'Koha::ERM::Agreements' });
|
||||
|
||||
# One agreement created, should get returned
|
||||
$t->get_ok("//$userid:$password@/api/v1/erm/agreements")
|
||||
->status_is(200)
|
||||
->json_is( [$agreement->to_api] );
|
||||
|
||||
my $another_agreement = $builder->build_object(
|
||||
{ class => 'Koha::ERM::Agreements', value => { vendor_id => $agreement->vendor_id } } );
|
||||
my $agreement_with_another_vendor_id = $builder->build_object({ class => 'Koha::ERM::Agreements' });
|
||||
|
||||
# Two agreements created, they should both be returned
|
||||
$t->get_ok("//$userid:$password@/api/v1/erm/agreements")
|
||||
->status_is(200)
|
||||
->json_is([$agreement->to_api,
|
||||
$another_agreement->to_api,
|
||||
$agreement_with_another_vendor_id->to_api
|
||||
] );
|
||||
|
||||
# Filtering works, two agreements sharing vendor_id
|
||||
$t->get_ok("//$userid:$password@/api/v1/erm/agreements?vendor_id=" . $agreement->vendor_id )
|
||||
->status_is(200)
|
||||
->json_is([ $agreement->to_api,
|
||||
$another_agreement->to_api
|
||||
]);
|
||||
|
||||
# Warn on unsupported query parameter
|
||||
$t->get_ok("//$userid:$password@/api/v1/erm/agreements?blah=blah" )
|
||||
->status_is(400)
|
||||
->json_is( [{ path => '/query/blah', message => 'Malformed query string'}] );
|
||||
|
||||
# Unauthorized access
|
||||
$t->get_ok("//$unauth_userid:$password@/api/v1/erm/agreements")
|
||||
->status_is(403);
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
Loading…
Reference in a new issue