3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use Test::More tests => 4;
24 use t::lib::TestBuilder;
27 use List::Util qw(min);
29 use Koha::Item::Transfer::Limits;
32 my $schema = Koha::Database->new->schema;
33 my $builder = t::lib::TestBuilder->new;
35 t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
37 my $t = Test::Mojo->new('Koha::REST::V1');
39 subtest 'list() tests' => sub {
42 $schema->storage->txn_begin;
44 Koha::Item::Transfer::Limits->delete;
46 my $patron = $builder->build_object({
47 class => 'Koha::Patrons',
48 value => { flags => 1 }
50 my $password = 'thePassword123';
51 $patron->set_password({ password => $password, skip_validation => 1 });
52 my $userid = $patron->userid;
54 my $limit = $builder->build_object({ class => 'Koha::Item::Transfer::Limits' });
56 $t->get_ok( "//$userid:$password@/api/v1/transfer_limits" )
57 ->status_is( 200, 'SWAGGER3.2.2' )
58 ->json_is( [$limit->to_api] );
60 $schema->storage->txn_rollback;
63 subtest 'add() tests' => sub {
67 $schema->storage->txn_begin;
69 my $authorized_patron = $builder->build_object({
70 class => 'Koha::Patrons',
71 value => { flags => 1 }
73 my $password = 'thePassword123';
74 $authorized_patron->set_password({ password => $password, skip_validation => 1 });
75 my $auth_userid = $authorized_patron->userid;
77 my $unauthorized_patron = $builder->build_object({
78 class => 'Koha::Patrons',
79 value => { flags => 4 }
81 $unauthorized_patron->set_password({ password => $password, skip_validation => 1 });
82 my $unauth_userid = $unauthorized_patron->userid;
84 my $limit = $builder->build_object({ class => 'Koha::Item::Transfer::Limits' });
85 my $limit_hashref = $limit->to_api;
86 delete $limit_hashref->{limit_id};
89 # Unauthorized attempt to write
90 $t->post_ok( "//$unauth_userid:$password@/api/v1/transfer_limits" => json => $limit_hashref )
93 # Authorized attempt to write invalid data
94 my $limit_with_invalid_field = {'invalid' => 'invalid'};
96 $t->post_ok( "//$auth_userid:$password@/api/v1/transfer_limits" => json => $limit_with_invalid_field )
101 message => "Properties not allowed: invalid.",
107 # Authorized attempt to write
108 $t->post_ok( "//$auth_userid:$password@/api/v1/transfer_limits" => json => $limit_hashref )
109 ->status_is( 201, 'SWAGGER3.2.1' )
110 ->json_has( '' => $limit_hashref, 'SWAGGER3.3.1' );
112 $schema->storage->txn_rollback;
115 subtest 'delete() tests' => sub {
118 $schema->storage->txn_begin;
120 my $authorized_patron = $builder->build_object({
121 class => 'Koha::Patrons',
122 value => { flags => 1 }
124 my $password = 'thePassword123';
125 $authorized_patron->set_password({ password => $password, skip_validation => 1 });
126 my $auth_userid = $authorized_patron->userid;
128 my $unauthorized_patron = $builder->build_object({
129 class => 'Koha::Patrons',
130 value => { flags => 4 }
132 $unauthorized_patron->set_password({ password => $password, skip_validation => 1 });
133 my $unauth_userid = $unauthorized_patron->userid;
135 my $limit = $builder->build_object({ class => 'Koha::Item::Transfer::Limits' });
136 my $limit_id = $limit->id;
138 # Unauthorized attempt to delete
139 $t->delete_ok( "//$unauth_userid:$password@/api/v1/transfer_limits/$limit_id" )
142 $t->delete_ok( "//$auth_userid:$password@/api/v1/transfer_limits/$limit_id" )
143 ->status_is(204, 'SWAGGER3.2.4')
144 ->content_is('', 'SWAGGER3.3.4');
146 $t->delete_ok( "//$auth_userid:$password@/api/v1/transfer_limits/$limit_id" )
149 $schema->storage->txn_rollback;
152 subtest 'batch_add() and batch_delete() tests' => sub {
155 $schema->storage->txn_begin;
157 Koha::Item::Transfer::Limits->delete;
159 #my $library = $builder->build_object({ class => 'Koha::Libraries' });
161 my $library = Koha::Libraries->search->next;
162 my $itemtype = Koha::ItemTypes->search->next;
164 my $authorized_patron = $builder->build_object({
165 class => 'Koha::Patrons',
166 value => { flags => 1 }
168 my $password = 'thePassword123';
169 $authorized_patron->set_password({ password => $password, skip_validation => 1 });
170 my $auth_userid = $authorized_patron->userid;
172 my $unauthorized_patron = $builder->build_object({
173 class => 'Koha::Patrons',
174 value => { flags => 4 }
176 $unauthorized_patron->set_password({ password => $password, skip_validation => 1 });
177 my $unauth_userid = $unauthorized_patron->userid;
179 my $limit_hashref = {
180 item_type => $itemtype->id
183 # Unauthorized attempt to write
184 $t->post_ok( "//$unauth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
187 # Authorized attempt to write invalid data
188 my $limit_with_invalid_field = {'invalid' => 'invalid'};
190 $t->post_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_with_invalid_field )
195 message => "Properties not allowed: invalid.",
201 # Create all combinations of to/from libraries
202 $t->post_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
203 ->status_is( 201, 'SWAGGER3.2.1' )
204 ->json_has( '' => $limit_hashref, 'SWAGGER3.3.1' );
206 my $limits = Koha::Item::Transfer::Limits->search;
208 my $libraries_count = Koha::Libraries->search->count;
209 is( $limits->count, $libraries_count * ($libraries_count - 1 ), "Created the correct number of limits" );
211 # Delete all combinations of to/from libraries
212 $t->delete_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
213 ->status_is( 204, 'SWAGGER3.2.1' );
215 $limits = Koha::Item::Transfer::Limits->search;
217 is( $limits->count, 0, "Deleted the correct number of limits" );
219 # Create all combinations of 'to' libraries
220 $limit_hashref->{to_library_id} = $library->id;
221 $t->post_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
222 ->status_is( 201, 'SWAGGER3.2.1' )
223 ->json_has( '' => $limit_hashref, 'SWAGGER3.3.1' );
225 $limits = Koha::Item::Transfer::Limits->search;
227 is( $limits->count, $libraries_count - 1 , "Created the correct number of limits" );
229 # Delete all combinations of 'to' libraries
230 $t->delete_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
231 ->status_is( 204, 'SWAGGER3.2.1' );
233 $limits = Koha::Item::Transfer::Limits->search;
235 is( $limits->count, 0, "Deleted the correct number of limits" );
237 # Create all combinations of 'from' libraries
238 Koha::Item::Transfer::Limits->search->delete;
240 delete $limit_hashref->{to_library_id};
241 $limit_hashref->{from_library_id} = $library->id;
242 $t->post_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
243 ->status_is( 201, 'SWAGGER3.2.1' )
244 ->json_has( '' => $limit_hashref, 'SWAGGER3.3.1' );
246 $limits = Koha::Item::Transfer::Limits->search;
248 $libraries_count = Koha::Libraries->search->count;
249 is( $limits->count, $libraries_count - 1 , "Created the correct number of limits" );
251 # Delete all combinations of 'from' libraries
252 $t->delete_ok( "//$auth_userid:$password@/api/v1/transfer_limits/batch" => json => $limit_hashref )
253 ->status_is( 204, 'SWAGGER3.2.1' );
255 $limits = Koha::Item::Transfer::Limits->search;
257 $libraries_count = Koha::Libraries->search->count;
258 is( $limits->count, 0, "Deleted the correct number of limits" );
260 $schema->storage->txn_rollback;