--- /dev/null
+---
+/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
--- /dev/null
+#!/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;
+};
+