|
Lines 17-23
Link Here
|
| 17 |
|
17 |
|
| 18 |
use Modern::Perl; |
18 |
use Modern::Perl; |
| 19 |
|
19 |
|
| 20 |
use Test::More tests => 10; |
20 |
use Test::More tests => 11; |
| 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 200-206
subtest "Test endpoints without permission" => sub {
Link Here
|
| 200 |
|
200 |
|
| 201 |
subtest "Test endpoints with permission" => sub { |
201 |
subtest "Test endpoints with permission" => sub { |
| 202 |
|
202 |
|
| 203 |
plan tests => 62; |
203 |
plan tests => 44; |
| 204 |
|
204 |
|
| 205 |
$t->get_ok( "//$userid_1:$password@/api/v1/holds" ) |
205 |
$t->get_ok( "//$userid_1:$password@/api/v1/holds" ) |
| 206 |
->status_is(200) |
206 |
->status_is(200) |
|
Lines 213-245
subtest "Test endpoints with permission" => sub {
Link Here
|
| 213 |
->json_is('/0/patron_id', $patron_2->borrowernumber) |
213 |
->json_is('/0/patron_id', $patron_2->borrowernumber) |
| 214 |
->json_hasnt('/1'); |
214 |
->json_hasnt('/1'); |
| 215 |
|
215 |
|
| 216 |
# While suspended_until is date-time, it's always set to midnight. |
|
|
| 217 |
my $expected_suspended_until = $suspended_until->strftime('%FT00:00:00%z'); |
| 218 |
substr($expected_suspended_until, -2, 0, ':'); |
| 219 |
|
| 220 |
$t->put_ok( "//$userid_1:$password@/api/v1/holds/$reserve_id" => json => $put_data ) |
| 221 |
->status_is(200) |
| 222 |
->json_is( '/hold_id', $reserve_id ) |
| 223 |
->json_is( '/suspended_until', $expected_suspended_until ) |
| 224 |
->json_is( '/priority', 2 ) |
| 225 |
->json_is( '/pickup_library_id', $branchcode ); |
| 226 |
|
| 227 |
# Change only pickup library, everything else should remain |
| 228 |
$t->put_ok( "//$userid_1:$password@/api/v1/holds/$reserve_id" => json => { pickup_library_id => $branchcode2 } ) |
| 229 |
->status_is(200) |
| 230 |
->json_is( '/hold_id', $reserve_id ) |
| 231 |
->json_is( '/suspended_until', $expected_suspended_until ) |
| 232 |
->json_is( '/priority', 2 ) |
| 233 |
->json_is( '/pickup_library_id', $branchcode2 ); |
| 234 |
|
| 235 |
# Reset suspended_until, everything else should remain |
| 236 |
$t->put_ok( "//$userid_1:$password@/api/v1/holds/$reserve_id" => json => { suspended_until => undef } ) |
| 237 |
->status_is(200) |
| 238 |
->json_is( '/hold_id', $reserve_id ) |
| 239 |
->json_is( '/suspended_until', undef ) |
| 240 |
->json_is( '/priority', 2 ) |
| 241 |
->json_is( '/pickup_library_id', $branchcode2 ); |
| 242 |
|
| 243 |
$t->delete_ok( "//$userid_3:$password@/api/v1/holds/$reserve_id" ) |
216 |
$t->delete_ok( "//$userid_3:$password@/api/v1/holds/$reserve_id" ) |
| 244 |
->status_is(204, 'SWAGGER3.2.4') |
217 |
->status_is(204, 'SWAGGER3.2.4') |
| 245 |
->content_is('', 'SWAGGER3.3.4'); |
218 |
->content_is('', 'SWAGGER3.3.4'); |
|
Lines 777-779
subtest 'pickup_locations() tests' => sub {
Link Here
|
| 777 |
|
750 |
|
| 778 |
$schema->storage->txn_rollback; |
751 |
$schema->storage->txn_rollback; |
| 779 |
}; |
752 |
}; |
| 780 |
- |
753 |
|
|
|
754 |
subtest 'edit() tests' => sub { |
| 755 |
|
| 756 |
plan tests => 12; |
| 757 |
|
| 758 |
$schema->storage->txn_begin; |
| 759 |
|
| 760 |
my $password = 'AbcdEFG123'; |
| 761 |
|
| 762 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
| 763 |
my $patron = $builder->build_object( |
| 764 |
{ class => 'Koha::Patrons', value => { flags => 1 } } ); |
| 765 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
| 766 |
my $userid = $patron->userid; |
| 767 |
$builder->build( |
| 768 |
{ |
| 769 |
source => 'UserPermission', |
| 770 |
value => { |
| 771 |
borrowernumber => $patron->borrowernumber, |
| 772 |
module_bit => 6, |
| 773 |
code => 'modify_holds_priority', |
| 774 |
}, |
| 775 |
} |
| 776 |
); |
| 777 |
|
| 778 |
# Disable logging |
| 779 |
t::lib::Mocks::mock_preference( 'HoldsLog', 0 ); |
| 780 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
| 781 |
|
| 782 |
my $mock_biblio = Test::MockModule->new('Koha::Biblio'); |
| 783 |
my $mock_item = Test::MockModule->new('Koha::Item'); |
| 784 |
|
| 785 |
my $library_1 = $builder->build_object({ class => 'Koha::Libraries' }); |
| 786 |
my $library_2 = $builder->build_object({ class => 'Koha::Libraries' }); |
| 787 |
my $library_3 = $builder->build_object({ class => 'Koha::Libraries' }); |
| 788 |
|
| 789 |
# let's control what Koha::Biblio->pickup_locations returns, for testing |
| 790 |
$mock_biblio->mock( 'pickup_locations', sub { |
| 791 |
return Koha::Libraries->search( { branchcode => [ $library_2->branchcode, $library_3->branchcode ] } ); |
| 792 |
}); |
| 793 |
# let's mock what Koha::Item->pickup_locations returns, for testing |
| 794 |
$mock_item->mock( 'pickup_locations', sub { |
| 795 |
return Koha::Libraries->search( { branchcode => [ $library_2->branchcode, $library_3->branchcode ] } ); |
| 796 |
}); |
| 797 |
|
| 798 |
my $biblio = $builder->build_sample_biblio; |
| 799 |
my $item = $builder->build_sample_item({ biblionumber => $biblio->biblionumber }); |
| 800 |
|
| 801 |
# Test biblio-level holds |
| 802 |
my $biblio_hold = $builder->build_object( |
| 803 |
{ |
| 804 |
class => "Koha::Holds", |
| 805 |
value => { |
| 806 |
biblionumber => $biblio->biblionumber, |
| 807 |
branchcode => $library_3->branchcode, |
| 808 |
itemnumber => undef, |
| 809 |
priority => 1, |
| 810 |
} |
| 811 |
} |
| 812 |
); |
| 813 |
|
| 814 |
my $biblio_hold_data = $biblio_hold->to_api; |
| 815 |
$biblio_hold_data->{pickup_library_id} = $library_1->branchcode; |
| 816 |
|
| 817 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 818 |
. $biblio_hold->id |
| 819 |
=> json => $biblio_hold_data ) |
| 820 |
->status_is(400); |
| 821 |
|
| 822 |
$biblio_hold->discard_changes; |
| 823 |
is( $biblio_hold->branchcode, $library_3->branchcode, 'branchcode remains untouched' ); |
| 824 |
|
| 825 |
$biblio_hold_data->{pickup_library_id} = $library_2->branchcode; |
| 826 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 827 |
. $biblio_hold->id |
| 828 |
=> json => $biblio_hold_data ) |
| 829 |
->status_is(200); |
| 830 |
|
| 831 |
$biblio_hold->discard_changes; |
| 832 |
is( $biblio_hold->branchcode, $library_2->id, 'Pickup location changed correctly' ); |
| 833 |
|
| 834 |
# Test item-level holds |
| 835 |
my $item_hold = $builder->build_object( |
| 836 |
{ |
| 837 |
class => "Koha::Holds", |
| 838 |
value => { |
| 839 |
biblionumber => $biblio->biblionumber, |
| 840 |
branchcode => $library_3->branchcode, |
| 841 |
itemnumber => $item->itemnumber, |
| 842 |
priority => 1, |
| 843 |
} |
| 844 |
} |
| 845 |
); |
| 846 |
|
| 847 |
my $item_hold_data = $item_hold->to_api; |
| 848 |
$item_hold_data->{pickup_library_id} = $library_1->branchcode; |
| 849 |
|
| 850 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 851 |
. $item_hold->id |
| 852 |
=> json => $item_hold_data ) |
| 853 |
->status_is(400); |
| 854 |
|
| 855 |
$item_hold->discard_changes; |
| 856 |
is( $item_hold->branchcode, $library_3->branchcode, 'branchcode remains untouched' ); |
| 857 |
|
| 858 |
$item_hold_data->{pickup_library_id} = $library_2->branchcode; |
| 859 |
$t->put_ok( "//$userid:$password@/api/v1/holds/" |
| 860 |
. $item_hold->id |
| 861 |
=> json => $item_hold_data ) |
| 862 |
->status_is(200); |
| 863 |
|
| 864 |
$item_hold->discard_changes; |
| 865 |
is( $item_hold->branchcode, $library_2->id, 'Pickup location changed correctly' ); |
| 866 |
|
| 867 |
$schema->storage->txn_rollback; |
| 868 |
}; |