Lines 17-23
Link Here
|
17 |
|
17 |
|
18 |
use Modern::Perl; |
18 |
use Modern::Perl; |
19 |
|
19 |
|
20 |
use Test::More tests => 11; |
20 |
use Test::More tests => 12; |
21 |
use Test::MockModule; |
21 |
use Test::MockModule; |
22 |
use Test::Mojo; |
22 |
use Test::Mojo; |
23 |
use t::lib::TestBuilder; |
23 |
use t::lib::TestBuilder; |
Lines 238-246
subtest "Test endpoints with permission" => sub {
Link Here
|
238 |
->status_is(204, 'SWAGGER3.2.4') |
238 |
->status_is(204, 'SWAGGER3.2.4') |
239 |
->content_is('', 'SWAGGER3.3.4'); |
239 |
->content_is('', 'SWAGGER3.3.4'); |
240 |
|
240 |
|
|
|
241 |
# Make sure pickup location checks doesn't get in the middle |
242 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
243 |
$mock_biblio->mock( 'pickup_locations', sub { return Koha::Libraries->search; }); |
244 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
245 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search }); |
246 |
|
241 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
247 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
242 |
->status_is(201) |
248 |
->status_is(201) |
243 |
->json_has('/hold_id'); |
249 |
->json_has('/hold_id'); |
|
|
250 |
|
244 |
# Get id from response |
251 |
# Get id from response |
245 |
$reserve_id = $t->tx->res->json->{hold_id}; |
252 |
$reserve_id = $t->tx->res->json->{hold_id}; |
246 |
|
253 |
|
Lines 290-295
subtest 'Reserves with itemtype' => sub {
Link Here
|
290 |
->status_is(204, 'SWAGGER3.2.4') |
297 |
->status_is(204, 'SWAGGER3.2.4') |
291 |
->content_is('', 'SWAGGER3.3.4'); |
298 |
->content_is('', 'SWAGGER3.3.4'); |
292 |
|
299 |
|
|
|
300 |
# Make sure pickup location checks doesn't get in the middle |
301 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
302 |
$mock_biblio->mock( 'pickup_locations', sub { return Koha::Libraries->search; }); |
303 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
304 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search }); |
305 |
|
293 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
306 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
294 |
->status_is(201) |
307 |
->status_is(201) |
295 |
->json_has('/hold_id'); |
308 |
->json_has('/hold_id'); |
Lines 329-334
subtest 'test AllowHoldDateInFuture' => sub {
Link Here
|
329 |
|
342 |
|
330 |
t::lib::Mocks::mock_preference( 'AllowHoldDateInFuture', 1 ); |
343 |
t::lib::Mocks::mock_preference( 'AllowHoldDateInFuture', 1 ); |
331 |
|
344 |
|
|
|
345 |
# Make sure pickup location checks doesn't get in the middle |
346 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
347 |
$mock_biblio->mock( 'pickup_locations', sub { return Koha::Libraries->search; }); |
348 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
349 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search }); |
350 |
|
332 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
351 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
333 |
->status_is(201) |
352 |
->status_is(201) |
334 |
->json_is('/hold_date', output_pref({ dt => $future_hold_date, dateformat => 'rfc3339', dateonly => 1 })); |
353 |
->json_is('/hold_date', output_pref({ dt => $future_hold_date, dateformat => 'rfc3339', dateonly => 1 })); |
Lines 345-357
subtest 'test AllowHoldPolicyOverride' => sub {
Link Here
|
345 |
itemtype => undef, |
364 |
itemtype => undef, |
346 |
branchcode => undef, |
365 |
branchcode => undef, |
347 |
rules => { |
366 |
rules => { |
348 |
holdallowed => 1 |
367 |
holdallowed => 1 |
349 |
} |
368 |
} |
350 |
} |
369 |
} |
351 |
); |
370 |
); |
352 |
|
371 |
|
353 |
t::lib::Mocks::mock_preference( 'AllowHoldPolicyOverride', 0 ); |
372 |
t::lib::Mocks::mock_preference( 'AllowHoldPolicyOverride', 0 ); |
354 |
|
373 |
|
|
|
374 |
# Make sure pickup location checks doesn't get in the middle |
375 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
376 |
$mock_biblio->mock( 'pickup_locations', sub { return Koha::Libraries->search; }); |
377 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
378 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search }); |
379 |
|
355 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
380 |
$t->post_ok( "//$userid_3:$password@/api/v1/holds" => json => $post_data ) |
356 |
->status_is(403) |
381 |
->status_is(403) |
357 |
->json_has('/error'); |
382 |
->json_has('/error'); |
Lines 606-611
subtest 'add() tests (maxreserves behaviour)' => sub {
Link Here
|
606 |
my $biblio_3 = $builder->build_sample_biblio; |
631 |
my $biblio_3 = $builder->build_sample_biblio; |
607 |
my $item_3 = $builder->build_sample_item({ biblionumber => $biblio_3->biblionumber }); |
632 |
my $item_3 = $builder->build_sample_item({ biblionumber => $biblio_3->biblionumber }); |
608 |
|
633 |
|
|
|
634 |
# Make sure pickup location checks doesn't get in the middle |
635 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
636 |
$mock_biblio->mock( 'pickup_locations', sub { return Koha::Libraries->search; }); |
637 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
638 |
$mock_item->mock( 'pickup_locations', sub { return Koha::Libraries->search }); |
639 |
|
609 |
# Disable logging |
640 |
# Disable logging |
610 |
t::lib::Mocks::mock_preference( 'HoldsLog', 0 ); |
641 |
t::lib::Mocks::mock_preference( 'HoldsLog', 0 ); |
611 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
642 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
Lines 868-870
subtest 'edit() tests' => sub {
Link Here
|
868 |
|
899 |
|
869 |
$schema->storage->txn_rollback; |
900 |
$schema->storage->txn_rollback; |
870 |
}; |
901 |
}; |
871 |
- |
902 |
|
|
|
903 |
subtest 'add() tests' => sub { |
904 |
|
905 |
plan tests => 10; |
906 |
|
907 |
$schema->storage->txn_begin; |
908 |
|
909 |
my $password = 'AbcdEFG123'; |
910 |
|
911 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
912 |
my $patron = $builder->build_object( |
913 |
{ class => 'Koha::Patrons', value => { flags => 1 } } ); |
914 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
915 |
my $userid = $patron->userid; |
916 |
$builder->build( |
917 |
{ |
918 |
source => 'UserPermission', |
919 |
value => { |
920 |
borrowernumber => $patron->borrowernumber, |
921 |
module_bit => 6, |
922 |
code => 'modify_holds_priority', |
923 |
}, |
924 |
} |
925 |
); |
926 |
|
927 |
# Disable logging |
928 |
t::lib::Mocks::mock_preference( 'HoldsLog', 0 ); |
929 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
930 |
|
931 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
932 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
933 |
|
934 |
my $library_1 = $builder->build_object({ class => 'Koha::Libraries' }); |
935 |
my $library_2 = $builder->build_object({ class => 'Koha::Libraries' }); |
936 |
my $library_3 = $builder->build_object({ class => 'Koha::Libraries' }); |
937 |
|
938 |
# let's control what Koha::Biblio->pickup_locations returns, for testing |
939 |
$mock_biblio->mock( 'pickup_locations', sub { |
940 |
return Koha::Libraries->search( { branchcode => [ $library_2->branchcode, $library_3->branchcode ] } ); |
941 |
}); |
942 |
# let's mock what Koha::Item->pickup_locations returns, for testing |
943 |
$mock_item->mock( 'pickup_locations', sub { |
944 |
return Koha::Libraries->search( { branchcode => [ $library_2->branchcode, $library_3->branchcode ] } ); |
945 |
}); |
946 |
|
947 |
my $biblio = $builder->build_sample_biblio; |
948 |
my $item = $builder->build_sample_item({ biblionumber => $biblio->biblionumber }); |
949 |
|
950 |
# Test biblio-level holds |
951 |
my $biblio_hold = $builder->build_object( |
952 |
{ |
953 |
class => "Koha::Holds", |
954 |
value => { |
955 |
biblionumber => $biblio->biblionumber, |
956 |
branchcode => $library_3->branchcode, |
957 |
itemnumber => undef, |
958 |
priority => 1, |
959 |
} |
960 |
} |
961 |
); |
962 |
|
963 |
my $biblio_hold_data = $biblio_hold->to_api; |
964 |
$biblio_hold->delete; |
965 |
$biblio_hold_data->{pickup_library_id} = $library_1->branchcode; |
966 |
delete $biblio_hold_data->{hold_id}; |
967 |
|
968 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data ) |
969 |
->status_is(400) |
970 |
->json_is({ error => 'The supplied pickup location is not valid' }); |
971 |
|
972 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
973 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data ) |
974 |
->status_is(201); |
975 |
|
976 |
# Test item-level holds |
977 |
my $item_hold = $builder->build_object( |
978 |
{ |
979 |
class => "Koha::Holds", |
980 |
value => { |
981 |
biblionumber => $biblio->biblionumber, |
982 |
branchcode => $library_3->branchcode, |
983 |
itemnumber => $item->itemnumber, |
984 |
priority => 1, |
985 |
} |
986 |
} |
987 |
); |
988 |
|
989 |
my $item_hold_data = $item_hold->to_api; |
990 |
$item_hold->delete; |
991 |
$item_hold_data->{pickup_library_id} = $library_1->branchcode; |
992 |
delete $item_hold->{hold_id}; |
993 |
|
994 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data ) |
995 |
->status_is(400) |
996 |
->json_is({ error => 'The supplied pickup location is not valid' }); |
997 |
|
998 |
$item_hold_data->{pickup_library_id} = $library_2->branchcode; |
999 |
$t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data ) |
1000 |
->status_is(201); |
1001 |
|
1002 |
$schema->storage->txn_rollback; |
1003 |
}; |