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