|
Lines 208-233
subtest "Test endpoints with permission" => sub {
Link Here
|
| 208 |
|
208 |
|
| 209 |
$t->get_ok("//$userid_1:$password@/api/v1/holds")->status_is(200)->json_has('/0')->json_has('/1')->json_hasnt('/2'); |
209 |
$t->get_ok("//$userid_1:$password@/api/v1/holds")->status_is(200)->json_has('/0')->json_has('/1')->json_hasnt('/2'); |
| 210 |
|
210 |
|
| 211 |
$t->get_ok("//$userid_1:$password@/api/v1/holds?priority=2")->status_is(200) |
211 |
$t->get_ok("//$userid_1:$password@/api/v1/holds?priority=2") |
| 212 |
->json_is( '/0/patron_id', $patron_2->borrowernumber )->json_hasnt('/1'); |
212 |
->status_is(200) |
|
|
213 |
->json_is( '/0/patron_id', $patron_2->borrowernumber ) |
| 214 |
->json_hasnt('/1'); |
| 213 |
|
215 |
|
| 214 |
$t->delete_ok("//$userid_3:$password@/api/v1/holds/$reserve_id")->status_is( 204, 'REST3.2.4' ) |
216 |
$t->delete_ok("//$userid_3:$password@/api/v1/holds/$reserve_id") |
|
|
217 |
->status_is( 204, 'REST3.2.4' ) |
| 215 |
->content_is( '', 'REST3.3.4' ); |
218 |
->content_is( '', 'REST3.3.4' ); |
| 216 |
|
219 |
|
| 217 |
$t->patch_ok( "//$userid_3:$password@/api/v1/holds/$reserve_id" => json => $patch_data )->status_is(404) |
220 |
$t->patch_ok( "//$userid_3:$password@/api/v1/holds/$reserve_id" => json => $patch_data ) |
|
|
221 |
->status_is(404) |
| 218 |
->json_has('/error'); |
222 |
->json_has('/error'); |
| 219 |
|
223 |
|
| 220 |
$t->delete_ok("//$userid_3:$password@/api/v1/holds/$reserve_id")->status_is(404)->json_has('/error'); |
224 |
$t->delete_ok("//$userid_3:$password@/api/v1/holds/$reserve_id")->status_is(404)->json_has('/error'); |
| 221 |
|
225 |
|
| 222 |
$t->get_ok( "//$userid_3:$password@/api/v1/holds?patron_id=" . $patron_1->borrowernumber )->status_is(200) |
226 |
$t->get_ok( "//$userid_3:$password@/api/v1/holds?patron_id=" . $patron_1->borrowernumber ) |
|
|
227 |
->status_is(200) |
| 223 |
->json_is( [] ); |
228 |
->json_is( [] ); |
| 224 |
|
229 |
|
| 225 |
my $inexisting_borrowernumber = $patron_2->borrowernumber * 2; |
230 |
my $inexisting_borrowernumber = $patron_2->borrowernumber * 2; |
| 226 |
$t->get_ok("//$userid_1:$password@/api/v1/holds?patron_id=$inexisting_borrowernumber")->status_is(200) |
231 |
$t->get_ok("//$userid_1:$password@/api/v1/holds?patron_id=$inexisting_borrowernumber") |
|
|
232 |
->status_is(200) |
| 227 |
->json_is( [] ); |
233 |
->json_is( [] ); |
| 228 |
|
234 |
|
| 229 |
$t->delete_ok( "//$userid_3:$password@/api/v1/holds/$reserve_id2" => json => "Cancellation reason" ) |
235 |
$t->delete_ok( "//$userid_3:$password@/api/v1/holds/$reserve_id2" => json => "Cancellation reason" ) |
| 230 |
->status_is( 204, 'REST3.2.4' )->content_is( '', 'REST3.3.4' ); |
236 |
->status_is( 204, 'REST3.2.4' ) |
|
|
237 |
->content_is( '', 'REST3.3.4' ); |
| 231 |
|
238 |
|
| 232 |
# Make sure pickup location checks doesn't get in the middle |
239 |
# Make sure pickup location checks doesn't get in the middle |
| 233 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
240 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
|
Lines 235-258
subtest "Test endpoints with permission" => sub {
Link Here
|
| 235 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
242 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
| 236 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search } ); |
243 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search } ); |
| 237 |
|
244 |
|
| 238 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data )->status_is(201)->json_has('/hold_id') |
245 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
|
|
246 |
->status_is(201) |
| 247 |
->json_has('/hold_id') |
| 239 |
->header_is( 'Location' => '/api/v1/holds/' . $t->tx->res->json->{hold_id}, "REST3.4.1" ); |
248 |
->header_is( 'Location' => '/api/v1/holds/' . $t->tx->res->json->{hold_id}, "REST3.4.1" ); |
| 240 |
|
249 |
|
| 241 |
# Get id from response |
250 |
# Get id from response |
| 242 |
$reserve_id = $t->tx->res->json->{hold_id}; |
251 |
$reserve_id = $t->tx->res->json->{hold_id}; |
| 243 |
|
252 |
|
| 244 |
$t->get_ok( "//$userid_1:$password@/api/v1/holds?patron_id=" . $patron_1->borrowernumber )->status_is(200) |
253 |
$t->get_ok( "//$userid_1:$password@/api/v1/holds?patron_id=" . $patron_1->borrowernumber ) |
|
|
254 |
->status_is(200) |
| 245 |
->json_is( '/0/hold_id', $reserve_id ) |
255 |
->json_is( '/0/hold_id', $reserve_id ) |
| 246 |
->json_is( '/0/expiration_date', output_pref( { dt => $expiration_date, dateformat => 'iso', dateonly => 1 } ) ) |
256 |
->json_is( '/0/expiration_date', output_pref( { dt => $expiration_date, dateformat => 'iso', dateonly => 1 } ) ) |
| 247 |
->json_is( '/0/pickup_library_id', $branchcode ); |
257 |
->json_is( '/0/pickup_library_id', $branchcode ); |
| 248 |
|
258 |
|
| 249 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data )->status_is(403) |
259 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
|
|
260 |
->status_is(403) |
| 250 |
->json_like( '/error', qr/itemAlreadyOnHold/ ); |
261 |
->json_like( '/error', qr/itemAlreadyOnHold/ ); |
| 251 |
|
262 |
|
| 252 |
$post_data->{biblio_id} = $biblio_2->biblionumber; |
263 |
$post_data->{biblio_id} = $biblio_2->biblionumber; |
| 253 |
$post_data->{item_id} = $item_2->itemnumber; |
264 |
$post_data->{item_id} = $item_2->itemnumber; |
| 254 |
|
265 |
|
| 255 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data )->status_is(403) |
266 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
|
|
267 |
->status_is(403) |
| 256 |
->json_like( '/error', qr/Hold cannot be placed. Reason: tooManyReserves/ ); |
268 |
->json_like( '/error', qr/Hold cannot be placed. Reason: tooManyReserves/ ); |
| 257 |
|
269 |
|
| 258 |
my $to_delete_patron = $builder->build_object( { class => 'Koha::Patrons' } ); |
270 |
my $to_delete_patron = $builder->build_object( { class => 'Koha::Patrons' } ); |
|
Lines 261-267
subtest "Test endpoints with permission" => sub {
Link Here
|
| 261 |
|
273 |
|
| 262 |
my $tmp_patron_id = $post_data->{patron_id}; |
274 |
my $tmp_patron_id = $post_data->{patron_id}; |
| 263 |
$post_data->{patron_id} = $deleted_patron_id; |
275 |
$post_data->{patron_id} = $deleted_patron_id; |
| 264 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data )->status_is(400) |
276 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
|
|
277 |
->status_is(400) |
| 265 |
->json_is( { error => 'patron_id not found' } ); |
278 |
->json_is( { error => 'patron_id not found' } ); |
| 266 |
|
279 |
|
| 267 |
# Restore the original patron_id as it is expected by the next subtest |
280 |
# Restore the original patron_id as it is expected by the next subtest |
|
Lines 279-285
subtest 'Reserves with itemtype' => sub {
Link Here
|
| 279 |
item_type => $itemtype, |
292 |
item_type => $itemtype, |
| 280 |
}; |
293 |
}; |
| 281 |
|
294 |
|
| 282 |
$t->delete_ok("//$userid_3:$password@/api/v1/holds/$reserve_id")->status_is( 204, 'REST3.2.4' ) |
295 |
$t->delete_ok("//$userid_3:$password@/api/v1/holds/$reserve_id") |
|
|
296 |
->status_is( 204, 'REST3.2.4' ) |
| 283 |
->content_is( '', 'REST3.3.4' ); |
297 |
->content_is( '', 'REST3.3.4' ); |
| 284 |
|
298 |
|
| 285 |
# Make sure pickup location checks doesn't get in the middle |
299 |
# Make sure pickup location checks doesn't get in the middle |
|
Lines 292-299
subtest 'Reserves with itemtype' => sub {
Link Here
|
| 292 |
|
306 |
|
| 293 |
$reserve_id = $t->tx->res->json->{hold_id}; |
307 |
$reserve_id = $t->tx->res->json->{hold_id}; |
| 294 |
|
308 |
|
| 295 |
$t->get_ok( "//$userid_1:$password@/api/v1/holds?patron_id=" . $patron_1->borrowernumber )->status_is(200) |
309 |
$t->get_ok( "//$userid_1:$password@/api/v1/holds?patron_id=" . $patron_1->borrowernumber ) |
| 296 |
->json_is( '/0/hold_id', $reserve_id )->json_is( '/0/item_type', $itemtype ); |
310 |
->status_is(200) |
|
|
311 |
->json_is( '/0/hold_id', $reserve_id ) |
| 312 |
->json_is( '/0/item_type', $itemtype ); |
| 297 |
}; |
313 |
}; |
| 298 |
|
314 |
|
| 299 |
subtest 'test AllowHoldDateInFuture' => sub { |
315 |
subtest 'test AllowHoldDateInFuture' => sub { |
|
Lines 325-331
subtest 'test AllowHoldDateInFuture' => sub {
Link Here
|
| 325 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
341 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
| 326 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search } ); |
342 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search } ); |
| 327 |
|
343 |
|
| 328 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data )->status_is(201) |
344 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
|
|
345 |
->status_is(201) |
| 329 |
->json_is( '/hold_date', output_pref( { dt => $future_hold_date, dateformat => 'iso', dateonly => 1 } ) ); |
346 |
->json_is( '/hold_date', output_pref( { dt => $future_hold_date, dateformat => 'iso', dateonly => 1 } ) ); |
| 330 |
}; |
347 |
}; |
| 331 |
|
348 |
|
|
Lines 384-390
subtest 'x-koha-override and AllowHoldPolicyOverride tests' => sub {
Link Here
|
| 384 |
|
401 |
|
| 385 |
$can_item_be_reserved_result = { status => 'ageRestricted' }; |
402 |
$can_item_be_reserved_result = { status => 'ageRestricted' }; |
| 386 |
|
403 |
|
| 387 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $post_data )->status_is(403) |
404 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $post_data ) |
|
|
405 |
->status_is(403) |
| 388 |
->json_is( '/error' => "Hold cannot be placed. Reason: ageRestricted" ); |
406 |
->json_is( '/error' => "Hold cannot be placed. Reason: ageRestricted" ); |
| 389 |
|
407 |
|
| 390 |
# x-koha-override doesn't override if AllowHoldPolicyOverride not set |
408 |
# x-koha-override doesn't override if AllowHoldPolicyOverride not set |
|
Lines 395-401
subtest 'x-koha-override and AllowHoldPolicyOverride tests' => sub {
Link Here
|
| 395 |
|
413 |
|
| 396 |
$can_item_be_reserved_result = { status => 'pickupNotInHoldGroup' }; |
414 |
$can_item_be_reserved_result = { status => 'pickupNotInHoldGroup' }; |
| 397 |
|
415 |
|
| 398 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $post_data )->status_is(403) |
416 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $post_data ) |
|
|
417 |
->status_is(403) |
| 399 |
->json_is( '/error' => "Hold cannot be placed. Reason: pickupNotInHoldGroup" ); |
418 |
->json_is( '/error' => "Hold cannot be placed. Reason: pickupNotInHoldGroup" ); |
| 400 |
|
419 |
|
| 401 |
# x-koha-override overrides the status |
420 |
# x-koha-override overrides the status |
|
Lines 493-499
subtest 'suspend and resume tests' => sub {
Link Here
|
| 493 |
'Hold suspension has correct end date' |
512 |
'Hold suspension has correct end date' |
| 494 |
); |
513 |
); |
| 495 |
|
514 |
|
| 496 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id . "/suspension" )->status_is( 204, 'REST3.2.4' ) |
515 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id . "/suspension" ) |
|
|
516 |
->status_is( 204, 'REST3.2.4' ) |
| 497 |
->content_is( '', 'REST3.3.4' ); |
517 |
->content_is( '', 'REST3.3.4' ); |
| 498 |
|
518 |
|
| 499 |
# Pass a an expiration date for the suspension |
519 |
# Pass a an expiration date for the suspension |
|
Lines 502-513
subtest 'suspend and resume tests' => sub {
Link Here
|
| 502 |
. $hold->id |
522 |
. $hold->id |
| 503 |
. "/suspension" => json => |
523 |
. "/suspension" => json => |
| 504 |
{ end_date => output_pref( { dt => $date, dateformat => 'iso', dateonly => 1 } ) } ) |
524 |
{ end_date => output_pref( { dt => $date, dateformat => 'iso', dateonly => 1 } ) } ) |
| 505 |
->status_is( 201, 'Hold suspension created' )->json_is( |
525 |
->status_is( 201, 'Hold suspension created' ) |
|
|
526 |
->json_is( |
| 506 |
'/end_date', |
527 |
'/end_date', |
| 507 |
output_pref( { dt => $date, dateformat => 'iso', dateonly => 1 } ) |
528 |
output_pref( { dt => $date, dateformat => 'iso', dateonly => 1 } ) |
| 508 |
)->header_is( Location => "/api/v1/holds/" . $hold->id . "/suspension", 'The Location header is set' ); |
529 |
)->header_is( Location => "/api/v1/holds/" . $hold->id . "/suspension", 'The Location header is set' ); |
| 509 |
|
530 |
|
| 510 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id . "/suspension" )->status_is( 204, 'REST3.2.4' ) |
531 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id . "/suspension" ) |
|
|
532 |
->status_is( 204, 'REST3.2.4' ) |
| 511 |
->content_is( '', 'REST3.3.4' ); |
533 |
->content_is( '', 'REST3.3.4' ); |
| 512 |
|
534 |
|
| 513 |
$hold->set_waiting->discard_changes; |
535 |
$hold->set_waiting->discard_changes; |
|
Lines 693-706
subtest 'PUT /holds/{hold_id}/priority tests' => sub {
Link Here
|
| 693 |
|
715 |
|
| 694 |
$t->put_ok( "//$userid_np:$password@/api/v1/holds/" . $hold_3->id . "/priority" => json => 1 )->status_is(403); |
716 |
$t->put_ok( "//$userid_np:$password@/api/v1/holds/" . $hold_3->id . "/priority" => json => 1 )->status_is(403); |
| 695 |
|
717 |
|
| 696 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $hold_3->id . "/priority" => json => 1 )->status_is(200) |
718 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $hold_3->id . "/priority" => json => 1 ) |
|
|
719 |
->status_is(200) |
| 697 |
->json_is(1); |
720 |
->json_is(1); |
| 698 |
|
721 |
|
| 699 |
is( $hold_1->discard_changes->priority, 2, 'Priority adjusted correctly' ); |
722 |
is( $hold_1->discard_changes->priority, 2, 'Priority adjusted correctly' ); |
| 700 |
is( $hold_2->discard_changes->priority, 3, 'Priority adjusted correctly' ); |
723 |
is( $hold_2->discard_changes->priority, 3, 'Priority adjusted correctly' ); |
| 701 |
is( $hold_3->discard_changes->priority, 1, 'Priority adjusted correctly' ); |
724 |
is( $hold_3->discard_changes->priority, 1, 'Priority adjusted correctly' ); |
| 702 |
|
725 |
|
| 703 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $hold_3->id . "/priority" => json => 3 )->status_is(200) |
726 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $hold_3->id . "/priority" => json => 3 ) |
|
|
727 |
->status_is(200) |
| 704 |
->json_is(3); |
728 |
->json_is(3); |
| 705 |
|
729 |
|
| 706 |
is( $hold_1->discard_changes->priority, 1, 'Priority adjusted correctly' ); |
730 |
is( $hold_1->discard_changes->priority, 1, 'Priority adjusted correctly' ); |
|
Lines 880-886
subtest 'add() + can_place_holds() tests' => sub {
Link Here
|
| 880 |
my $hold_id = |
904 |
my $hold_id = |
| 881 |
$t->post_ok( |
905 |
$t->post_ok( |
| 882 |
"//$userid:$password@/api/v1/holds" => { 'x-koha-override' => 'debt_limit' } => json => $post_data ) |
906 |
"//$userid:$password@/api/v1/holds" => { 'x-koha-override' => 'debt_limit' } => json => $post_data ) |
| 883 |
->status_is( 201, "Override works for 'debt_limit'" )->tx->res->json->{hold_id}; |
907 |
->status_is( 201, "Override works for 'debt_limit'" ) |
|
|
908 |
->tx->res->json->{hold_id}; |
| 884 |
|
909 |
|
| 885 |
Koha::Holds->find($hold_id)->delete(); |
910 |
Koha::Holds->find($hold_id)->delete(); |
| 886 |
|
911 |
|
|
Lines 1003-1009
subtest 'add() + can_place_holds() tests' => sub {
Link Here
|
| 1003 |
|
1028 |
|
| 1004 |
my $hold_id = $t->post_ok( |
1029 |
my $hold_id = $t->post_ok( |
| 1005 |
"//$userid:$password@/api/v1/holds" => { 'x-koha-override' => 'hold_limit' } => json => $post_data ) |
1030 |
"//$userid:$password@/api/v1/holds" => { 'x-koha-override' => 'hold_limit' } => json => $post_data ) |
| 1006 |
->status_is( 201, "Override works for 'hold_limit'" )->tx->res->json->{hold_id}; |
1031 |
->status_is( 201, "Override works for 'hold_limit'" ) |
|
|
1032 |
->tx->res->json->{hold_id}; |
| 1007 |
|
1033 |
|
| 1008 |
Koha::Holds->find($hold_id)->delete(); |
1034 |
Koha::Holds->find($hold_id)->delete(); |
| 1009 |
|
1035 |
|
|
Lines 1283-1302
subtest 'edit() tests' => sub {
Link Here
|
| 1283 |
}; |
1309 |
}; |
| 1284 |
|
1310 |
|
| 1285 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" . $biblio_hold->id => json => $biblio_hold_data ) |
1311 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" . $biblio_hold->id => json => $biblio_hold_data ) |
| 1286 |
->status_is(400)->json_is( { error => 'The supplied pickup location is not valid' } ); |
1312 |
->status_is(400) |
|
|
1313 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1287 |
|
1314 |
|
| 1288 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $biblio_hold->id => json => $biblio_hold_data )->status_is(400) |
1315 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $biblio_hold->id => json => $biblio_hold_data ) |
|
|
1316 |
->status_is(400) |
| 1289 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1317 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1290 |
|
1318 |
|
| 1291 |
$biblio_hold->discard_changes; |
1319 |
$biblio_hold->discard_changes; |
| 1292 |
is( $biblio_hold->branchcode, $library_3->branchcode, 'branchcode remains untouched' ); |
1320 |
is( $biblio_hold->branchcode, $library_3->branchcode, 'branchcode remains untouched' ); |
| 1293 |
|
1321 |
|
| 1294 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" |
1322 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" |
| 1295 |
. $biblio_hold->id => { 'x-koha-override' => 'any' } => json => $biblio_hold_data )->status_is(200) |
1323 |
. $biblio_hold->id => { 'x-koha-override' => 'any' } => json => $biblio_hold_data ) |
|
|
1324 |
->status_is(200) |
| 1296 |
->json_has( '/pickup_library_id' => $library_1->id ); |
1325 |
->json_has( '/pickup_library_id' => $library_1->id ); |
| 1297 |
|
1326 |
|
| 1298 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1327 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1299 |
. $biblio_hold->id => { 'x-koha-override' => 'any' } => json => $biblio_hold_data )->status_is(200) |
1328 |
. $biblio_hold->id => { 'x-koha-override' => 'any' } => json => $biblio_hold_data ) |
|
|
1329 |
->status_is(200) |
| 1300 |
->json_has( '/pickup_library_id' => $library_1->id ); |
1330 |
->json_has( '/pickup_library_id' => $library_1->id ); |
| 1301 |
|
1331 |
|
| 1302 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
1332 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
|
Lines 1346-1366
subtest 'edit() tests' => sub {
Link Here
|
| 1346 |
priority => $item_hold_api_data->{priority} |
1376 |
priority => $item_hold_api_data->{priority} |
| 1347 |
}; |
1377 |
}; |
| 1348 |
|
1378 |
|
| 1349 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" . $item_hold->id => json => $item_hold_data )->status_is(400) |
1379 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" . $item_hold->id => json => $item_hold_data ) |
|
|
1380 |
->status_is(400) |
| 1350 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1381 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1351 |
|
1382 |
|
| 1352 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $item_hold->id => json => $item_hold_data )->status_is(400) |
1383 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" . $item_hold->id => json => $item_hold_data ) |
|
|
1384 |
->status_is(400) |
| 1353 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1385 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1354 |
|
1386 |
|
| 1355 |
$item_hold->discard_changes; |
1387 |
$item_hold->discard_changes; |
| 1356 |
is( $item_hold->branchcode, $library_3->branchcode, 'branchcode remains untouched' ); |
1388 |
is( $item_hold->branchcode, $library_3->branchcode, 'branchcode remains untouched' ); |
| 1357 |
|
1389 |
|
| 1358 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" |
1390 |
$t->patch_ok( "//$userid:$password@/api/v1/holds/" |
| 1359 |
. $item_hold->id => { 'x-koha-override' => 'any' } => json => $item_hold_data )->status_is(200) |
1391 |
. $item_hold->id => { 'x-koha-override' => 'any' } => json => $item_hold_data ) |
|
|
1392 |
->status_is(200) |
| 1360 |
->json_has( '/pickup_library_id' => $library_1->id ); |
1393 |
->json_has( '/pickup_library_id' => $library_1->id ); |
| 1361 |
|
1394 |
|
| 1362 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1395 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1363 |
. $item_hold->id => { 'x-koha-override' => 'any' } => json => $item_hold_data )->status_is(200) |
1396 |
. $item_hold->id => { 'x-koha-override' => 'any' } => json => $item_hold_data ) |
|
|
1397 |
->status_is(200) |
| 1364 |
->json_has( '/pickup_library_id' => $library_1->id ); |
1398 |
->json_has( '/pickup_library_id' => $library_1->id ); |
| 1365 |
|
1399 |
|
| 1366 |
$item_hold_data->{pickup_library_id} = $library_2->branchcode; |
1400 |
$item_hold_data->{pickup_library_id} = $library_2->branchcode; |
|
Lines 1483-1489
subtest 'add() tests' => sub {
Link Here
|
| 1483 |
pickup_library_id => $library_1->branchcode, |
1517 |
pickup_library_id => $library_1->branchcode, |
| 1484 |
}; |
1518 |
}; |
| 1485 |
|
1519 |
|
| 1486 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data )->status_is(400) |
1520 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data ) |
|
|
1521 |
->status_is(400) |
| 1487 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1522 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1488 |
|
1523 |
|
| 1489 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
1524 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
|
Lines 1512-1518
subtest 'add() tests' => sub {
Link Here
|
| 1512 |
pickup_library_id => $library_1->branchcode, |
1547 |
pickup_library_id => $library_1->branchcode, |
| 1513 |
}; |
1548 |
}; |
| 1514 |
|
1549 |
|
| 1515 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data )->status_is(400) |
1550 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data ) |
|
|
1551 |
->status_is(400) |
| 1516 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1552 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1517 |
|
1553 |
|
| 1518 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
1554 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
|
Lines 1540-1546
subtest 'add() tests' => sub {
Link Here
|
| 1540 |
pickup_library_id => $library_1->branchcode, |
1576 |
pickup_library_id => $library_1->branchcode, |
| 1541 |
}; |
1577 |
}; |
| 1542 |
|
1578 |
|
| 1543 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data )->status_is(400) |
1579 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data ) |
|
|
1580 |
->status_is(400) |
| 1544 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1581 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1545 |
|
1582 |
|
| 1546 |
$can_item_be_reserved = 'notReservable'; |
1583 |
$can_item_be_reserved = 'notReservable'; |
|
Lines 1565-1571
subtest 'add() tests' => sub {
Link Here
|
| 1565 |
} |
1602 |
} |
| 1566 |
); |
1603 |
); |
| 1567 |
|
1604 |
|
| 1568 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data )->status_is(400) |
1605 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data ) |
|
|
1606 |
->status_is(400) |
| 1569 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1607 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1570 |
|
1608 |
|
| 1571 |
# empty cases |
1609 |
# empty cases |
|
Lines 1576-1582
subtest 'add() tests' => sub {
Link Here
|
| 1576 |
} |
1614 |
} |
| 1577 |
); |
1615 |
); |
| 1578 |
|
1616 |
|
| 1579 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data )->status_is(400) |
1617 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data ) |
|
|
1618 |
->status_is(400) |
| 1580 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
1619 |
->json_is( { error => 'The supplied pickup location is not valid' } ); |
| 1581 |
|
1620 |
|
| 1582 |
$schema->storage->txn_rollback; |
1621 |
$schema->storage->txn_rollback; |
|
Lines 1636-1649
subtest 'PUT /holds/{hold_id}/pickup_location tests' => sub {
Link Here
|
| 1636 |
|
1675 |
|
| 1637 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1676 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1638 |
. $hold->id |
1677 |
. $hold->id |
| 1639 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } )->status_is(200) |
1678 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } ) |
|
|
1679 |
->status_is(200) |
| 1640 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
1680 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
| 1641 |
|
1681 |
|
| 1642 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library adjusted correctly' ); |
1682 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library adjusted correctly' ); |
| 1643 |
|
1683 |
|
| 1644 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1684 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1645 |
. $hold->id |
1685 |
. $hold->id |
| 1646 |
. "/pickup_location" => json => { pickup_library_id => $library_3->branchcode } )->status_is(400) |
1686 |
. "/pickup_location" => json => { pickup_library_id => $library_3->branchcode } ) |
|
|
1687 |
->status_is(400) |
| 1647 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
1688 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
| 1648 |
|
1689 |
|
| 1649 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library unchanged' ); |
1690 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library unchanged' ); |
|
Lines 1664-1670
subtest 'PUT /holds/{hold_id}/pickup_location tests' => sub {
Link Here
|
| 1664 |
# Attempt to use an invalid pickup locations ends in 400 |
1705 |
# Attempt to use an invalid pickup locations ends in 400 |
| 1665 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1706 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1666 |
. $hold->id |
1707 |
. $hold->id |
| 1667 |
. "/pickup_location" => json => { pickup_library_id => $library_3->branchcode } )->status_is(400) |
1708 |
. "/pickup_location" => json => { pickup_library_id => $library_3->branchcode } ) |
|
|
1709 |
->status_is(400) |
| 1668 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
1710 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
| 1669 |
|
1711 |
|
| 1670 |
is( $hold->discard_changes->branchcode, $library_1->branchcode, 'pickup library unchanged' ); |
1712 |
is( $hold->discard_changes->branchcode, $library_1->branchcode, 'pickup library unchanged' ); |
|
Lines 1675-1681
subtest 'PUT /holds/{hold_id}/pickup_location tests' => sub {
Link Here
|
| 1675 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1717 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1676 |
. $hold->id |
1718 |
. $hold->id |
| 1677 |
. "/pickup_location" => { 'x-koha-override' => 'any' } => json => |
1719 |
. "/pickup_location" => { 'x-koha-override' => 'any' } => json => |
| 1678 |
{ pickup_library_id => $library_2->branchcode } )->status_is(200) |
1720 |
{ pickup_library_id => $library_2->branchcode } ) |
|
|
1721 |
->status_is(200) |
| 1679 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
1722 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
| 1680 |
|
1723 |
|
| 1681 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library changed' ); |
1724 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library changed' ); |
|
Lines 1684-1697
subtest 'PUT /holds/{hold_id}/pickup_location tests' => sub {
Link Here
|
| 1684 |
|
1727 |
|
| 1685 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1728 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1686 |
. $hold->id |
1729 |
. $hold->id |
| 1687 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } )->status_is(200) |
1730 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } ) |
|
|
1731 |
->status_is(200) |
| 1688 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
1732 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
| 1689 |
|
1733 |
|
| 1690 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library adjusted correctly' ); |
1734 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'pickup library adjusted correctly' ); |
| 1691 |
|
1735 |
|
| 1692 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1736 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1693 |
. $hold->id |
1737 |
. $hold->id |
| 1694 |
. "/pickup_location" => json => { pickup_library_id => $library_3->branchcode } )->status_is(400) |
1738 |
. "/pickup_location" => json => { pickup_library_id => $library_3->branchcode } ) |
|
|
1739 |
->status_is(400) |
| 1695 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
1740 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
| 1696 |
|
1741 |
|
| 1697 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'invalid pickup library not used' ); |
1742 |
is( $hold->discard_changes->branchcode, $library_2->branchcode, 'invalid pickup library not used' ); |
|
Lines 1699-1705
subtest 'PUT /holds/{hold_id}/pickup_location tests' => sub {
Link Here
|
| 1699 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1744 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1700 |
. $hold->id |
1745 |
. $hold->id |
| 1701 |
. "/pickup_location" => { 'x-koha-override' => 'any' } => json => |
1746 |
. "/pickup_location" => { 'x-koha-override' => 'any' } => json => |
| 1702 |
{ pickup_library_id => $library_3->branchcode } )->status_is(400) |
1747 |
{ pickup_library_id => $library_3->branchcode } ) |
|
|
1748 |
->status_is(400) |
| 1703 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
1749 |
->json_is( { error => '[The supplied pickup location is not valid]' } ); |
| 1704 |
|
1750 |
|
| 1705 |
is( |
1751 |
is( |
|
Lines 1713-1729
subtest 'PUT /holds/{hold_id}/pickup_location tests' => sub {
Link Here
|
| 1713 |
|
1759 |
|
| 1714 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1760 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1715 |
. $waiting_hold->id |
1761 |
. $waiting_hold->id |
| 1716 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } )->status_is(409) |
1762 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } ) |
|
|
1763 |
->status_is(409) |
| 1717 |
->json_is( { error => q{Cannot change pickup location}, error_code => 'hold_waiting' } ); |
1764 |
->json_is( { error => q{Cannot change pickup location}, error_code => 'hold_waiting' } ); |
| 1718 |
|
1765 |
|
| 1719 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1766 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1720 |
. $in_processing_hold->id |
1767 |
. $in_processing_hold->id |
| 1721 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } )->status_is(409) |
1768 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } ) |
|
|
1769 |
->status_is(409) |
| 1722 |
->json_is( { error => q{Cannot change pickup location}, error_code => 'hold_in_processing' } ); |
1770 |
->json_is( { error => q{Cannot change pickup location}, error_code => 'hold_in_processing' } ); |
| 1723 |
|
1771 |
|
| 1724 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
1772 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 1725 |
. $in_transit_hold->id |
1773 |
. $in_transit_hold->id |
| 1726 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } )->status_is(200) |
1774 |
. "/pickup_location" => json => { pickup_library_id => $library_2->branchcode } ) |
|
|
1775 |
->status_is(200) |
| 1727 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
1776 |
->json_is( { pickup_library_id => $library_2->branchcode } ); |
| 1728 |
|
1777 |
|
| 1729 |
$schema->storage->txn_rollback; |
1778 |
$schema->storage->txn_rollback; |
|
Lines 1777-1783
subtest 'delete() tests' => sub {
Link Here
|
| 1777 |
) |
1826 |
) |
| 1778 |
); |
1827 |
); |
| 1779 |
|
1828 |
|
| 1780 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id )->status_is( 204, 'REST3.2.4' ) |
1829 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id ) |
|
|
1830 |
->status_is( 204, 'REST3.2.4' ) |
| 1781 |
->content_is( '', 'REST3.3.4' ); |
1831 |
->content_is( '', 'REST3.3.4' ); |
| 1782 |
|
1832 |
|
| 1783 |
$hold = Koha::Holds->find( |
1833 |
$hold = Koha::Holds->find( |
|
Lines 1793-1799
subtest 'delete() tests' => sub {
Link Here
|
| 1793 |
); |
1843 |
); |
| 1794 |
|
1844 |
|
| 1795 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id => { 'x-koha-override' => q{} } ) |
1845 |
$t->delete_ok( "//$userid:$password@/api/v1/holds/" . $hold->id => { 'x-koha-override' => q{} } ) |
| 1796 |
->status_is( 204, 'Same behavior if header not set' )->content_is(''); |
1846 |
->status_is( 204, 'Same behavior if header not set' ) |
|
|
1847 |
->content_is(''); |
| 1797 |
|
1848 |
|
| 1798 |
$hold = Koha::Holds->find( |
1849 |
$hold = Koha::Holds->find( |
| 1799 |
AddReserve( |
1850 |
AddReserve( |
|
Lines 1809-1815
subtest 'delete() tests' => sub {
Link Here
|
| 1809 |
|
1860 |
|
| 1810 |
$t->delete_ok( |
1861 |
$t->delete_ok( |
| 1811 |
"//$userid:$password@/api/v1/holds/" . $hold->id => { 'x-koha-override' => q{cancellation-request-flow} } ) |
1862 |
"//$userid:$password@/api/v1/holds/" . $hold->id => { 'x-koha-override' => q{cancellation-request-flow} } ) |
| 1812 |
->status_is( 204, 'Same behavior if header set but hold not waiting' )->content_is(''); |
1863 |
->status_is( 204, 'Same behavior if header set but hold not waiting' ) |
|
|
1864 |
->content_is(''); |
| 1813 |
|
1865 |
|
| 1814 |
$hold = Koha::Holds->find( |
1866 |
$hold = Koha::Holds->find( |
| 1815 |
AddReserve( |
1867 |
AddReserve( |
|
Lines 1928-1934
subtest 'Bug 40866: API hold creation with override logs confirmations' => sub {
Link Here
|
| 1928 |
# Create hold with override |
1980 |
# Create hold with override |
| 1929 |
my $hold_id = |
1981 |
my $hold_id = |
| 1930 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => { 'x-koha-override' => 'any' } => json => $post_data ) |
1982 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => { 'x-koha-override' => 'any' } => json => $post_data ) |
| 1931 |
->status_is(201)->tx->res->json->{hold_id}; |
1983 |
->status_is(201) |
|
|
1984 |
->tx->res->json->{hold_id}; |
| 1932 |
|
1985 |
|
| 1933 |
ok( $hold_id, 'Hold created via API with override' ); |
1986 |
ok( $hold_id, 'Hold created via API with override' ); |
| 1934 |
|
1987 |
|