|
Lines 18-24
Link Here
|
| 18 |
use Modern::Perl; |
18 |
use Modern::Perl; |
| 19 |
|
19 |
|
| 20 |
use Test::NoWarnings; |
20 |
use Test::NoWarnings; |
| 21 |
use Test::More tests => 109; |
21 |
use Test::More tests => 111; |
| 22 |
use Test::MockModule; |
22 |
use Test::MockModule; |
| 23 |
use Test::Mojo; |
23 |
use Test::Mojo; |
| 24 |
use t::lib::Mocks; |
24 |
use t::lib::Mocks; |
|
Lines 91-97
$bookings_librarian->set_password( { password => $password, skip_validation => 1
Link Here
|
| 91 |
my $bookings_userid = $bookings_librarian->userid; |
91 |
my $bookings_userid = $bookings_librarian->userid; |
| 92 |
|
92 |
|
| 93 |
$t->get_ok("//$bookings_userid:$password@/api/v1/checkouts?patron_id=$patron_id") |
93 |
$t->get_ok("//$bookings_userid:$password@/api/v1/checkouts?patron_id=$patron_id") |
| 94 |
->status_is( 200, 'manage_bookings allows checkouts access' )->json_is( [] ); |
94 |
->status_is( 200, 'manage_bookings allows checkouts access' ) |
|
|
95 |
->json_is( [] ); |
| 95 |
|
96 |
|
| 96 |
Koha::CirculationRules->set_rules( |
97 |
Koha::CirculationRules->set_rules( |
| 97 |
{ |
98 |
{ |
|
Lines 121-146
my $date_due3 = Koha::DateUtils::dt_from_string( $issue3->date_due );
Link Here
|
| 121 |
my $issue4 = C4::Circulation::AddIssue( $patron, $item4->barcode ); |
122 |
my $issue4 = C4::Circulation::AddIssue( $patron, $item4->barcode ); |
| 122 |
C4::Circulation::AddReturn( $item4->barcode, $branchcode ); |
123 |
C4::Circulation::AddReturn( $item4->barcode, $branchcode ); |
| 123 |
|
124 |
|
| 124 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id")->status_is(200) |
125 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id") |
| 125 |
->json_is( '/0/patron_id' => $patron_id )->json_is( '/0/item_id' => $item1->itemnumber ) |
126 |
->status_is(200) |
|
|
127 |
->json_is( '/0/patron_id' => $patron_id ) |
| 128 |
->json_is( '/0/item_id' => $item1->itemnumber ) |
| 126 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
129 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
| 127 |
->json_is( '/1/patron_id' => $patron_id )->json_is( '/1/item_id' => $item2->itemnumber ) |
130 |
->json_is( '/1/patron_id' => $patron_id ) |
| 128 |
->json_is( '/1/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) )->json_hasnt('/2'); |
131 |
->json_is( '/1/item_id' => $item2->itemnumber ) |
|
|
132 |
->json_is( '/1/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) ) |
| 133 |
->json_hasnt('/2'); |
| 129 |
|
134 |
|
| 130 |
# Test checked_in parameter, zero means, the response is same as without it |
135 |
# Test checked_in parameter, zero means, the response is same as without it |
| 131 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&checked_in=0")->status_is(200) |
136 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&checked_in=0") |
| 132 |
->json_is( '/0/patron_id' => $patron_id )->json_is( '/0/item_id' => $item1->itemnumber ) |
137 |
->status_is(200) |
|
|
138 |
->json_is( '/0/patron_id' => $patron_id ) |
| 139 |
->json_is( '/0/item_id' => $item1->itemnumber ) |
| 133 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
140 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
| 134 |
->json_is( '/1/patron_id' => $patron_id )->json_is( '/1/item_id' => $item2->itemnumber ) |
141 |
->json_is( '/1/patron_id' => $patron_id ) |
| 135 |
->json_is( '/1/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) )->json_hasnt('/2'); |
142 |
->json_is( '/1/item_id' => $item2->itemnumber ) |
|
|
143 |
->json_is( '/1/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) ) |
| 144 |
->json_hasnt('/2'); |
| 136 |
|
145 |
|
| 137 |
# Test checked_in parameter, one measn, the checked in checkout is in the response too |
146 |
# Test checked_in parameter, one measn, the checked in checkout is in the response too |
| 138 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&checked_in=1")->status_is(200) |
147 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&checked_in=1") |
| 139 |
->json_is( '/0/patron_id' => $patron_id )->json_is( '/0/item_id' => $item4->itemnumber )->json_hasnt('/1'); |
148 |
->status_is(200) |
|
|
149 |
->json_is( '/0/patron_id' => $patron_id ) |
| 150 |
->json_is( '/0/item_id' => $item4->itemnumber ) |
| 151 |
->json_hasnt('/1'); |
| 140 |
|
152 |
|
| 141 |
$item4->delete; |
153 |
$item4->delete; |
| 142 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&checked_in=1")->status_is(200) |
154 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&checked_in=1") |
| 143 |
->json_is( '/0/patron_id' => $patron_id )->json_is( '/0/item_id' => undef ); |
155 |
->status_is(200) |
|
|
156 |
->json_is( '/0/patron_id' => $patron_id ) |
| 157 |
->json_is( '/0/item_id' => undef ); |
| 144 |
|
158 |
|
| 145 |
$t->get_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->issue_id )->status_is(403)->json_is( |
159 |
$t->get_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->issue_id )->status_is(403)->json_is( |
| 146 |
{ |
160 |
{ |
|
Lines 149-197
$t->get_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->is
Link Here
|
| 149 |
} |
163 |
} |
| 150 |
); |
164 |
); |
| 151 |
|
165 |
|
| 152 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id")->status_is(200) |
166 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id") |
| 153 |
->json_is( '/0/patron_id' => $patron_id )->json_is( '/0/item_id' => $item1->itemnumber ) |
167 |
->status_is(200) |
|
|
168 |
->json_is( '/0/patron_id' => $patron_id ) |
| 169 |
->json_is( '/0/item_id' => $item1->itemnumber ) |
| 154 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
170 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
| 155 |
->json_is( '/1/patron_id' => $patron_id )->json_is( '/1/item_id' => $item2->itemnumber ) |
171 |
->json_is( '/1/patron_id' => $patron_id ) |
| 156 |
->json_is( '/1/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) )->json_hasnt('/2'); |
172 |
->json_is( '/1/item_id' => $item2->itemnumber ) |
| 157 |
|
173 |
->json_is( '/1/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) ) |
| 158 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&_per_page=1&_page=1")->status_is(200) |
174 |
->json_hasnt('/2'); |
| 159 |
->header_is( 'X-Total-Count', '2' )->header_like( 'Link', qr|rel="next"| )->header_like( 'Link', qr|rel="first"| ) |
175 |
|
| 160 |
->header_like( 'Link', qr|rel="last"| )->json_is( '/0/patron_id' => $patron_id ) |
176 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&_per_page=1&_page=1") |
| 161 |
->json_is( '/0/item_id' => $item1->itemnumber ) |
177 |
->status_is(200) |
| 162 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) )->json_hasnt('/1'); |
178 |
->header_is( 'X-Total-Count', '2' ) |
| 163 |
|
179 |
->header_like( 'Link', qr|rel="next"| ) |
| 164 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&_per_page=1&_page=2")->status_is(200) |
180 |
->header_like( 'Link', qr|rel="first"| ) |
| 165 |
->header_is( 'X-Total-Count', '2' )->header_like( 'Link', qr|rel="prev"| )->header_like( 'Link', qr|rel="first"| ) |
181 |
->header_like( 'Link', qr|rel="last"| ) |
| 166 |
->header_like( 'Link', qr|rel="last"| )->json_is( '/0/patron_id' => $patron_id ) |
182 |
->json_is( '/0/patron_id' => $patron_id ) |
| 167 |
->json_is( '/0/item_id' => $item2->itemnumber ) |
183 |
->json_is( '/0/item_id' => $item1->itemnumber ) |
| 168 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) )->json_hasnt('/1'); |
184 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
| 169 |
|
185 |
->json_hasnt('/1'); |
| 170 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id )->status_is(200) |
186 |
|
| 171 |
->json_is( '/patron_id' => $patron_id )->json_is( '/item_id' => $item1->itemnumber ) |
187 |
$t->get_ok("//$userid:$password@/api/v1/checkouts?patron_id=$patron_id&_per_page=1&_page=2") |
| 172 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) )->json_hasnt('/1'); |
188 |
->status_is(200) |
| 173 |
|
189 |
->header_is( 'X-Total-Count', '2' ) |
| 174 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id )->status_is(200) |
190 |
->header_like( 'Link', qr|rel="prev"| ) |
|
|
191 |
->header_like( 'Link', qr|rel="first"| ) |
| 192 |
->header_like( 'Link', qr|rel="last"| ) |
| 193 |
->json_is( '/0/patron_id' => $patron_id ) |
| 194 |
->json_is( '/0/item_id' => $item2->itemnumber ) |
| 195 |
->json_is( '/0/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) ) |
| 196 |
->json_hasnt('/1'); |
| 197 |
|
| 198 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id ) |
| 199 |
->status_is(200) |
| 200 |
->json_is( '/patron_id' => $patron_id ) |
| 201 |
->json_is( '/item_id' => $item1->itemnumber ) |
| 202 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ) |
| 203 |
->json_hasnt('/1'); |
| 204 |
|
| 205 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id ) |
| 206 |
->status_is(200) |
| 175 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ); |
207 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due1 } ) ); |
| 176 |
|
208 |
|
| 177 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id )->status_is(200) |
209 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id ) |
|
|
210 |
->status_is(200) |
| 178 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) ); |
211 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $date_due2 } ) ); |
| 179 |
|
212 |
|
| 180 |
my $expected_datedue = |
213 |
my $expected_datedue = |
| 181 |
$date_due->set_time_zone('local')->add( days => 7 )->set( hour => 23, minute => 59, second => 0 ); |
214 |
$date_due->set_time_zone('local')->add( days => 7 )->set( hour => 23, minute => 59, second => 0 ); |
| 182 |
|
215 |
|
| 183 |
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/renewal" )->status_is(201) |
216 |
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/renewal" ) |
|
|
217 |
->status_is(201) |
| 184 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $expected_datedue } ) ) |
218 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $expected_datedue } ) ) |
| 185 |
->header_is( Location => "/api/v1/checkouts/" . $issue1->issue_id . "/renewal" ); |
219 |
->header_is( Location => "/api/v1/checkouts/" . $issue1->issue_id . "/renewal" ); |
| 186 |
|
220 |
|
| 187 |
my $renewal = $issue1->renewals->last; |
221 |
my $renewal = $issue1->renewals->last; |
| 188 |
is( $renewal->renewal_type, 'Manual', 'Manual renewal recorded' ); |
222 |
is( $renewal->renewal_type, 'Manual', 'Manual renewal recorded' ); |
| 189 |
|
223 |
|
| 190 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/renewals" )->status_is(200) |
224 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/renewals" ) |
| 191 |
->json_is( '/0/checkout_id' => $issue1->issue_id )->json_is( '/0/interface' => 'api' ) |
225 |
->status_is(200) |
|
|
226 |
->json_is( '/0/checkout_id' => $issue1->issue_id ) |
| 227 |
->json_is( '/0/interface' => 'api' ) |
| 192 |
->json_is( '/0/renewer_id' => $librarian->borrowernumber ); |
228 |
->json_is( '/0/renewer_id' => $librarian->borrowernumber ); |
| 193 |
|
229 |
|
| 194 |
$t->post_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->issue_id . "/renewal" )->status_is(403) |
230 |
$t->post_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->issue_id . "/renewal" ) |
|
|
231 |
->status_is(403) |
| 195 |
->json_is( |
232 |
->json_is( |
| 196 |
{ |
233 |
{ |
| 197 |
error => "Authorization failure. Missing required permission(s).", |
234 |
error => "Authorization failure. Missing required permission(s).", |
|
Lines 199-205
$t->post_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->i
Link Here
|
| 199 |
} |
236 |
} |
| 200 |
); |
237 |
); |
| 201 |
|
238 |
|
| 202 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/allows_renewal" )->status_is(200) |
239 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/allows_renewal" ) |
|
|
240 |
->status_is(200) |
| 203 |
->json_is( |
241 |
->json_is( |
| 204 |
{ |
242 |
{ |
| 205 |
allows_renewal => Mojo::JSON->true, |
243 |
allows_renewal => Mojo::JSON->true, |
|
Lines 210-223
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/all
Link Here
|
| 210 |
} |
248 |
} |
| 211 |
); |
249 |
); |
| 212 |
|
250 |
|
| 213 |
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/renewal" )->status_is(201) |
251 |
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/renewal" ) |
|
|
252 |
->status_is(201) |
| 214 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $expected_datedue } ) ) |
253 |
->json_is( '/due_date' => output_pref( { dateformat => "rfc3339", dt => $expected_datedue } ) ) |
| 215 |
->header_is( Location => "/api/v1/checkouts/" . $issue2->issue_id . "/renewal" ); |
254 |
->header_is( Location => "/api/v1/checkouts/" . $issue2->issue_id . "/renewal" ); |
| 216 |
|
255 |
|
| 217 |
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/renewal" )->status_is(403) |
256 |
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/renewal" ) |
|
|
257 |
->status_is(403) |
| 218 |
->json_is( { error => 'Renewal not authorized (too_many)' } ); |
258 |
->json_is( { error => 'Renewal not authorized (too_many)' } ); |
| 219 |
|
259 |
|
| 220 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/allows_renewal" )->status_is(200) |
260 |
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/allows_renewal" ) |
|
|
261 |
->status_is(200) |
| 221 |
->json_is( |
262 |
->json_is( |
| 222 |
{ |
263 |
{ |
| 223 |
allows_renewal => Mojo::JSON->false, |
264 |
allows_renewal => Mojo::JSON->false, |
|
Lines 228-233
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/all
Link Here
|
| 228 |
} |
269 |
} |
| 229 |
); |
270 |
); |
| 230 |
|
271 |
|
|
|
272 |
#Confirm we can get a checkout with a note |
| 273 |
$issue1->note("Test")->notedate( dt_from_string() )->store; |
| 274 |
$t->get_ok("//$userid:$password@/api/v1/checkouts")->status_is(200); |
| 275 |
|
| 231 |
$schema->storage->txn_rollback; |
276 |
$schema->storage->txn_rollback; |
| 232 |
|
277 |
|
| 233 |
subtest 'get_availability' => sub { |
278 |
subtest 'get_availability' => sub { |
|
Lines 275-281
subtest 'get_availability' => sub {
Link Here
|
| 275 |
|
320 |
|
| 276 |
$t->get_ok( |
321 |
$t->get_ok( |
| 277 |
"//$unauth_userid:$unauth_password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
322 |
"//$unauth_userid:$unauth_password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
| 278 |
->status_is(403)->json_is( |
323 |
->status_is(403) |
|
|
324 |
->json_is( |
| 279 |
{ |
325 |
{ |
| 280 |
error => "Authorization failure. Missing required permission(s).", |
326 |
error => "Authorization failure. Missing required permission(s).", |
| 281 |
required_permissions => { circulate => "circulate_remaining_permissions" } |
327 |
required_permissions => { circulate => "circulate_remaining_permissions" } |
|
Lines 284-304
subtest 'get_availability' => sub {
Link Here
|
| 284 |
|
330 |
|
| 285 |
# Available |
331 |
# Available |
| 286 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
332 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
| 287 |
->status_is(200)->json_is( '/blockers' => {} )->json_is( '/confirms' => {} )->json_is( '/warnings' => {} ) |
333 |
->status_is(200) |
|
|
334 |
->json_is( '/blockers' => {} ) |
| 335 |
->json_is( '/confirms' => {} ) |
| 336 |
->json_is( '/warnings' => {} ) |
| 288 |
->json_has('/confirmation_token'); |
337 |
->json_has('/confirmation_token'); |
| 289 |
|
338 |
|
| 290 |
# Blocked |
339 |
# Blocked |
| 291 |
%issuingimpossible = ( GNA => 1 ); |
340 |
%issuingimpossible = ( GNA => 1 ); |
| 292 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
341 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
| 293 |
->status_is(200)->json_is( '/blockers' => { GNA => 1 } )->json_is( '/confirms' => {} ) |
342 |
->status_is(200) |
| 294 |
->json_is( '/warnings' => {} )->json_has('/confirmation_token'); |
343 |
->json_is( '/blockers' => { GNA => 1 } ) |
|
|
344 |
->json_is( '/confirms' => {} ) |
| 345 |
->json_is( '/warnings' => {} ) |
| 346 |
->json_has('/confirmation_token'); |
| 295 |
%issuingimpossible = (); |
347 |
%issuingimpossible = (); |
| 296 |
|
348 |
|
| 297 |
# Warnings/Info |
349 |
# Warnings/Info |
| 298 |
%alerts = ( alert1 => "this is an alert" ); |
350 |
%alerts = ( alert1 => "this is an alert" ); |
| 299 |
%messages = ( message1 => "this is a message" ); |
351 |
%messages = ( message1 => "this is a message" ); |
| 300 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
352 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
| 301 |
->status_is(200)->json_is( '/blockers' => {} )->json_is( '/confirms' => {} ) |
353 |
->status_is(200) |
|
|
354 |
->json_is( '/blockers' => {} ) |
| 355 |
->json_is( '/confirms' => {} ) |
| 302 |
->json_is( '/warnings' => { alert1 => "this is an alert", message1 => "this is a message" } ) |
356 |
->json_is( '/warnings' => { alert1 => "this is an alert", message1 => "this is a message" } ) |
| 303 |
->json_has('/confirmation_token'); |
357 |
->json_has('/confirmation_token'); |
| 304 |
%alerts = (); |
358 |
%alerts = (); |
|
Lines 308-315
subtest 'get_availability' => sub {
Link Here
|
| 308 |
%needsconfirmation = ( confirm1 => 1, confirm2 => 'please' ); |
362 |
%needsconfirmation = ( confirm1 => 1, confirm2 => 'please' ); |
| 309 |
my $token = Koha::Token->new->generate_jwt( { id => $librarian->id . ":" . $item1_id . ":confirm1:confirm2" } ); |
363 |
my $token = Koha::Token->new->generate_jwt( { id => $librarian->id . ":" . $item1_id . ":confirm1:confirm2" } ); |
| 310 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
364 |
$t->get_ok("//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id") |
| 311 |
->status_is(200)->json_is( '/blockers' => {} ) |
365 |
->status_is(200) |
| 312 |
->json_is( '/confirms' => { confirm1 => 1, confirm2 => 'please' } )->json_is( '/warnings' => {} ) |
366 |
->json_is( '/blockers' => {} ) |
|
|
367 |
->json_is( '/confirms' => { confirm1 => 1, confirm2 => 'please' } ) |
| 368 |
->json_is( '/warnings' => {} ) |
| 313 |
->json_has('/confirmation_token'); |
369 |
->json_has('/confirmation_token'); |
| 314 |
my $confirmation_token = $t->tx->res->json('/confirmation_token'); |
370 |
my $confirmation_token = $t->tx->res->json('/confirmation_token'); |
| 315 |
ok( |
371 |
ok( |
|
Lines 336-350
subtest 'get_availability' => sub {
Link Here
|
| 336 |
# All ok |
392 |
# All ok |
| 337 |
$t->get_ok( |
393 |
$t->get_ok( |
| 338 |
"//$unauth_userid:$unauth_password@/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id" |
394 |
"//$unauth_userid:$unauth_password@/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id" |
| 339 |
)->status_is(200)->json_is( '/blockers' => {} )->json_is( '/confirms' => {} )->json_is( '/warnings' => {} ) |
395 |
) |
|
|
396 |
->status_is(200) |
| 397 |
->json_is( '/blockers' => {} ) |
| 398 |
->json_is( '/confirms' => {} ) |
| 399 |
->json_is( '/warnings' => {} ) |
| 340 |
->json_has('/confirmation_token'); |
400 |
->json_has('/confirmation_token'); |
| 341 |
|
401 |
|
| 342 |
# Needs confirmation upgrade to blocker |
402 |
# Needs confirmation upgrade to blocker |
| 343 |
%needsconfirmation = ( TOO_MANY => 1, ISSUED_TO_ANOTHER => 1 ); |
403 |
%needsconfirmation = ( TOO_MANY => 1, ISSUED_TO_ANOTHER => 1 ); |
| 344 |
$t->get_ok( |
404 |
$t->get_ok( |
| 345 |
"//$unauth_userid:$unauth_password@/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id" |
405 |
"//$unauth_userid:$unauth_password@/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id" |
| 346 |
)->status_is(200)->json_is( '/blockers' => { TOO_MANY => 1, ISSUED_TO_ANOTHER => 1 } ) |
406 |
) |
| 347 |
->json_is( '/confirms' => {} )->json_is( '/warnings' => {} )->json_has('/confirmation_token'); |
407 |
->status_is(200) |
|
|
408 |
->json_is( '/blockers' => { TOO_MANY => 1, ISSUED_TO_ANOTHER => 1 } ) |
| 409 |
->json_is( '/confirms' => {} ) |
| 410 |
->json_is( '/warnings' => {} ) |
| 411 |
->json_has('/confirmation_token'); |
| 348 |
%needsconfirmation = (); |
412 |
%needsconfirmation = (); |
| 349 |
|
413 |
|
| 350 |
# Remove personal information from public endpoint |
414 |
# Remove personal information from public endpoint |
|
Lines 393-399
subtest 'get_availability' => sub {
Link Here
|
| 393 |
); |
457 |
); |
| 394 |
$t->get_ok( |
458 |
$t->get_ok( |
| 395 |
"//$unauth_userid:$unauth_password@/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id" |
459 |
"//$unauth_userid:$unauth_password@/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id" |
| 396 |
)->status_is(200)->json_is( '/blockers' => {} )->json_is( '/confirms' => {} )->json_is( '/warnings' => {} ) |
460 |
) |
|
|
461 |
->status_is(200) |
| 462 |
->json_is( '/blockers' => {} ) |
| 463 |
->json_is( '/confirms' => {} ) |
| 464 |
->json_is( '/warnings' => {} ) |
| 397 |
->json_has('/confirmation_token'); |
465 |
->json_has('/confirmation_token'); |
| 398 |
%issuingimpossible = (); |
466 |
%issuingimpossible = (); |
| 399 |
%alerts = (); |
467 |
%alerts = (); |
|
Lines 504-513
subtest 'add checkout' => sub {
Link Here
|
| 504 |
|
572 |
|
| 505 |
$t->post_ok( |
573 |
$t->post_ok( |
| 506 |
"/api/v1/public/patrons/$patron_id/checkouts" => json => { item_id => $item1_id, patron_id => $patron_id } ) |
574 |
"/api/v1/public/patrons/$patron_id/checkouts" => json => { item_id => $item1_id, patron_id => $patron_id } ) |
| 507 |
->status_is(401)->json_is( { error => "Authentication failure." } ); |
575 |
->status_is(401) |
|
|
576 |
->json_is( { error => "Authentication failure." } ); |
| 508 |
|
577 |
|
| 509 |
$t->post_ok( "//$useridp:$password@/api/v1/public/patrons/$patron_id/checkouts" => json => |
578 |
$t->post_ok( "//$useridp:$password@/api/v1/public/patrons/$patron_id/checkouts" => json => |
| 510 |
{ item_id => $item1_id, patron_id => $patron_id } )->status_is(405) |
579 |
{ item_id => $item1_id, patron_id => $patron_id } ) |
|
|
580 |
->status_is(405) |
| 511 |
->json_is( { error => "Feature disabled", error_code => "FEATURE_DISABLED" } ); |
581 |
->json_is( { error => "Feature disabled", error_code => "FEATURE_DISABLED" } ); |
| 512 |
|
582 |
|
| 513 |
# Feature enabled |
583 |
# Feature enabled |
|
Lines 515-524
subtest 'add checkout' => sub {
Link Here
|
| 515 |
|
585 |
|
| 516 |
$t->post_ok( |
586 |
$t->post_ok( |
| 517 |
"/api/v1/public/patrons/$patron_id/checkouts" => json => { item_id => $item1_id, patron_id => $patron_id } ) |
587 |
"/api/v1/public/patrons/$patron_id/checkouts" => json => { item_id => $item1_id, patron_id => $patron_id } ) |
| 518 |
->status_is(401)->json_is( { error => "Authentication failure." } ); |
588 |
->status_is(401) |
|
|
589 |
->json_is( { error => "Authentication failure." } ); |
| 519 |
|
590 |
|
| 520 |
$t->post_ok( "//$userid:$password@/api/v1/public/patrons/$patron_id/checkouts" => json => |
591 |
$t->post_ok( "//$userid:$password@/api/v1/public/patrons/$patron_id/checkouts" => json => |
| 521 |
{ item_id => $item1_id, patron_id => $patron_id } )->status_is(403) |
592 |
{ item_id => $item1_id, patron_id => $patron_id } ) |
|
|
593 |
->status_is(403) |
| 522 |
->json_is( { error => "Unprivileged user cannot access another user's resources" } ); |
594 |
->json_is( { error => "Unprivileged user cannot access another user's resources" } ); |
| 523 |
|
595 |
|
| 524 |
$t->post_ok( "//$useridp:$password@/api/v1/public/patrons/$patron_id/checkouts" => json => |
596 |
$t->post_ok( "//$useridp:$password@/api/v1/public/patrons/$patron_id/checkouts" => json => |
| 525 |
- |
|
|