|
Lines 33-39
my $t = Test::Mojo->new('Koha::REST::V1');
Link Here
|
| 33 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
33 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
| 34 |
|
34 |
|
| 35 |
subtest 'list_rules() tests' => sub { |
35 |
subtest 'list_rules() tests' => sub { |
| 36 |
plan tests => 32; |
36 |
|
|
|
37 |
my $expected_rules = [ keys %{ Koha::CirculationRules->rule_kinds } ]; |
| 38 |
|
| 39 |
plan tests => ( scalar( @{$expected_rules} ) * 2 ) + 36; |
| 37 |
|
40 |
|
| 38 |
$schema->storage->txn_begin; |
41 |
$schema->storage->txn_begin; |
| 39 |
|
42 |
|
|
Lines 62-70
subtest 'list_rules() tests' => sub {
Link Here
|
| 62 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
65 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
| 63 |
my $unauth_userid = $patron->userid; |
66 |
my $unauth_userid = $patron->userid; |
| 64 |
|
67 |
|
|
|
68 |
note("Effective rules by default"); |
| 65 |
## Authorized user tests |
69 |
## Authorized user tests |
| 66 |
# No circulation_rules, so empty hash should be returned |
70 |
# No circulation_rules, so all keys in the returned hash should be undefined |
| 67 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200)->json_is( '/0' => {} ); |
71 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200); |
|
|
72 |
|
| 73 |
# Extract and decode the JSON response |
| 74 |
my $json = $t->tx->res->json; |
| 75 |
note("No rules defined"); |
| 76 |
foreach my $key ( @{$expected_rules} ) { |
| 77 |
ok( exists $json->[0]->{$key}, "Key '$key' exists in the JSON response" ); |
| 78 |
is( $json->[0]->{$key}, undef, "'$key' is undefined" ); |
| 79 |
} |
| 68 |
|
80 |
|
| 69 |
# One rule created, should get returned |
81 |
# One rule created, should get returned |
| 70 |
ok( |
82 |
ok( |
|
Lines 80-87
subtest 'list_rules() tests' => sub {
Link Here
|
| 80 |
'Given I added an issuing rule branchcode => undef,' . ' categorycode => undef, itemtype => undef,' |
92 |
'Given I added an issuing rule branchcode => undef,' . ' categorycode => undef, itemtype => undef,' |
| 81 |
); |
93 |
); |
| 82 |
|
94 |
|
|
|
95 |
note("One default rule defined"); |
| 83 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200) |
96 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200) |
| 84 |
->json_is( '/0' => { 'fine' => 2 }, "Our single rule is returned" ); |
97 |
->json_is( '/0/fine' => 2, "Default fine rule is returned as expected" ) |
|
|
98 |
->json_is( '/0/finedays' => undef, "Rule finedays is undefined as expected" ); |
| 85 |
|
99 |
|
| 86 |
# Two circulation_rules created, they should both be returned |
100 |
# Two circulation_rules created, they should both be returned |
| 87 |
ok( |
101 |
ok( |
|
Lines 97-109
subtest 'list_rules() tests' => sub {
Link Here
|
| 97 |
'Given I added another issuing rule branchcode => undef,' . ' categorycode => undef, itemtype => undef,' |
111 |
'Given I added another issuing rule branchcode => undef,' . ' categorycode => undef, itemtype => undef,' |
| 98 |
); |
112 |
); |
| 99 |
|
113 |
|
| 100 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200)->json_is( |
114 |
note("Two default rules defined"); |
| 101 |
'/0' => { |
115 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200) |
| 102 |
fine => 2, |
116 |
->json_is( '/0/fine' => 2, "Default fine rule is returned as expected" ) |
| 103 |
finedays => 5, |
117 |
->json_is( '/0/finedays' => 5, "Default finedays rule is returned as expected" ); |
| 104 |
}, |
|
|
| 105 |
"Two default rules are returned" |
| 106 |
); |
| 107 |
|
118 |
|
| 108 |
# Specificity works, three circulation_rules stored, one branchcode specific |
119 |
# Specificity works, three circulation_rules stored, one branchcode specific |
| 109 |
ok( |
120 |
ok( |
|
Lines 119-139
subtest 'list_rules() tests' => sub {
Link Here
|
| 119 |
"Given I added an issuing rule branchcode => $branchcode," . ' categorycode => undef, itemtype => undef,' |
130 |
"Given I added an issuing rule branchcode => $branchcode," . ' categorycode => undef, itemtype => undef,' |
| 120 |
); |
131 |
); |
| 121 |
|
132 |
|
| 122 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules?library_id=$branchcode")->status_is(200)->json_is( |
133 |
note("Two default rules and one branch rule defined"); |
| 123 |
'/0' => { |
134 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules?library_id=$branchcode")->status_is(200) |
| 124 |
fine => 4, |
135 |
->json_is( '/0/fine' => 4, "Branch specific fine rule is returned when library is added to request query" ) |
| 125 |
finedays => 5, |
136 |
->json_is( |
| 126 |
}, |
137 |
'/0/finedays' => 5, |
| 127 |
"Branch specific rule is returned when library is added to request query" |
138 |
"Default finedays rule is returned when library is added to request query but no branch specific rule is defined" |
| 128 |
); |
139 |
); |
| 129 |
|
140 |
|
| 130 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200)->json_is( |
141 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules")->status_is(200) |
| 131 |
'/0' => { |
142 |
->json_is( '/0/fine' => 2, "Defaul fine rule returned when no library is added to request query" ) |
| 132 |
fine => 2, |
143 |
->json_is( '/0/finedays' => 5, "Default finedays rule returned when no library is added to request query" ); |
| 133 |
finedays => 5, |
|
|
| 134 |
}, |
| 135 |
"Default rules are returned when no library is added to request query" |
| 136 |
); |
| 137 |
|
144 |
|
| 138 |
# Warn on unsupported query parameter |
145 |
# Warn on unsupported query parameter |
| 139 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules?rules_blah=blah")->status_is(400) |
146 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules?rules_blah=blah")->status_is(400) |
|
Lines 202-206
subtest 'list_rules() tests' => sub {
Link Here
|
| 202 |
# Unauthorized access |
209 |
# Unauthorized access |
| 203 |
$t->get_ok("//$unauth_userid:$password@/api/v1/circulation_rules")->status_is(403); |
210 |
$t->get_ok("//$unauth_userid:$password@/api/v1/circulation_rules")->status_is(403); |
| 204 |
|
211 |
|
|
|
212 |
subtest 'effective=false tests' => sub { |
| 213 |
|
| 214 |
my $count = scalar( @{$expected_rules} ); |
| 215 |
|
| 216 |
plan tests => ( $count * 2 ) + $count + 10; |
| 217 |
|
| 218 |
# All rules |
| 219 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules?effective=0")->status_is(200); |
| 220 |
|
| 221 |
# Extract and decode the JSON response |
| 222 |
my $json = $t->tx->res->json; |
| 223 |
|
| 224 |
# Check if the response is an array |
| 225 |
is( ref $json, 'ARRAY', 'Response is an array' ); |
| 226 |
is( scalar( @{$json} ), 2, 'Response contains 2 rule sets' ); |
| 227 |
|
| 228 |
# Iterate over each hash in the array |
| 229 |
my $index = 0; |
| 230 |
foreach my $hash ( @{$json} ) { |
| 231 |
my $pointer = Mojo::JSON::Pointer->new($hash); |
| 232 |
|
| 233 |
# First rule set should march default, default, default |
| 234 |
if ( $index == 0 ) { |
| 235 |
ok( $pointer->get('/branchcode') eq "*" |
| 236 |
&& $pointer->get('/itemtype') eq '*' |
| 237 |
&& $pointer->get('/categorycode') eq '*', "Default rules returned first" ); |
| 238 |
} |
| 239 |
|
| 240 |
# Iterate over the list of expected keys for each hash |
| 241 |
foreach my $key ( @{$expected_rules} ) { |
| 242 |
ok( $pointer->contains( '/' . $key ), "Hash contains key '$key'" ); |
| 243 |
} |
| 244 |
|
| 245 |
$index++; |
| 246 |
} |
| 247 |
|
| 248 |
# Filter on library |
| 249 |
$t->get_ok("//$userid:$password@/api/v1/circulation_rules?effective=0&library_id=$branchcode")->status_is(200); |
| 250 |
|
| 251 |
# Extract and decode the JSON response |
| 252 |
$json = $t->tx->res->json; |
| 253 |
|
| 254 |
# Check if the response is an array |
| 255 |
is( ref $json, 'ARRAY', 'Response is an array' ); |
| 256 |
is( scalar( @{$json} ), 1, 'Filtered response contains 1 rule set' ); |
| 257 |
|
| 258 |
$index = 0; |
| 259 |
foreach my $hash ( @{$json} ) { |
| 260 |
my $pointer = Mojo::JSON::Pointer->new($hash); |
| 261 |
|
| 262 |
# First (and only) rule set should match branchcode, default, default. |
| 263 |
if ( $index == 0 ) { |
| 264 |
ok( $pointer->get('/branchcode') eq $branchcode |
| 265 |
&& $pointer->get('/itemtype') eq '*' |
| 266 |
&& $pointer->get('/categorycode') eq '*', "Branchcode rule set returned when filtered" ); |
| 267 |
} |
| 268 |
|
| 269 |
# Iterate over the list of expected keys for each hash |
| 270 |
foreach my $key ( @{$expected_rules} ) { |
| 271 |
ok( $pointer->contains( '/' . $key ), "Hash contains key '$key'" ); |
| 272 |
} |
| 273 |
|
| 274 |
$index++; |
| 275 |
} |
| 276 |
|
| 277 |
}; |
| 205 |
$schema->storage->txn_rollback; |
278 |
$schema->storage->txn_rollback; |
| 206 |
}; |
279 |
}; |
| 207 |
- |
|
|