View | Details | Raw Unified | Return to bug 30979
Collapse All | Expand All

(-)a/t/db_dependent/api/v1/checkouts.t (-3 / +130 lines)
Lines 237-243 $schema->storage->txn_rollback; Link Here
237
237
238
subtest 'get_availability' => sub {
238
subtest 'get_availability' => sub {
239
239
240
    plan tests => 27;
240
    plan tests => 28;
241
241
242
    $schema->storage->txn_begin;
242
    $schema->storage->txn_begin;
243
    my $librarian = $builder->build_object(
243
    my $librarian = $builder->build_object(
Lines 326-338 subtest 'get_availability' => sub { Link Here
326
      ->json_is( '/confirms' => { confirm1 => 1, confirm2 => 'please' } )
326
      ->json_is( '/confirms' => { confirm1 => 1, confirm2 => 'please' } )
327
      ->json_is( '/warnings' => {} )
327
      ->json_is( '/warnings' => {} )
328
      ->json_is( '/confirmation_token' => 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb25maXJtMSI6MSwiY29uZmlybTIiOjF9.4QBpITwnIGOAfohyKjaFDoeBWnGmQTdyJrPn9pavArw' );
328
      ->json_is( '/confirmation_token' => 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb25maXJtMSI6MSwiY29uZmlybTIiOjF9.4QBpITwnIGOAfohyKjaFDoeBWnGmQTdyJrPn9pavArw' );
329
    %needsconfirmation = ();
330
331
    subtest 'public availability' => sub {
332
        plan tests => 18;
333
334
        # Available, Not authentication required
335
        $t->get_ok(
336
"/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
337
        )->status_is(200)->json_is( '/blockers' => {} )
338
          ->json_is( '/confirms'           => {} )->json_is( '/warnings' => {} )
339
          ->json_is( '/confirmation_token' => undef );
340
341
        # Needs confirmation upgrade to blocker
342
        %needsconfirmation = ( TOO_MANY => 1, ISSUED_TO_ANOTHER => 1 );
343
        $t->get_ok(
344
"/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
345
        )->status_is(200)
346
          ->json_is( '/blockers' => { TOO_MANY => 1, ISSUED_TO_ANOTHER => 1 } )
347
          ->json_is( '/confirms' => {} )->json_is( '/warnings' => {} )
348
          ->json_is( '/confirmation_token' => undef );
349
        %needsconfirmation = ();
350
351
        # Remove personal information from public endpoint
352
        %issuingimpossible = (
353
            issued_borrowernumber => 'private',
354
            issued_cardnumber     => 'private',
355
            issued_firstname      => 'private',
356
            issued_surname        => 'private',
357
            resborrowernumber     => 'private',
358
            resbranchcode         => 'private',
359
            rescardnumber         => 'private',
360
            reserve_id            => 'private',
361
            resfirstname          => 'private',
362
            resreservedate        => 'private',
363
            ressurname            => 'private',
364
            item_notforloan       => 'private'
365
        );
366
        %alerts = (
367
            issued_borrowernumber => 'private',
368
            issued_cardnumber     => 'private',
369
            issued_firstname      => 'private',
370
            issued_surname        => 'private',
371
            resborrowernumber     => 'private',
372
            resbranchcode         => 'private',
373
            rescardnumber         => 'private',
374
            reserve_id            => 'private',
375
            resfirstname          => 'private',
376
            resreservedate        => 'private',
377
            ressurname            => 'private',
378
            item_notforloan       => 'private'
379
        );
380
381
        %needsconfirmation = (
382
            issued_borrowernumber => 'private',
383
            issued_cardnumber     => 'private',
384
            issued_firstname      => 'private',
385
            issued_surname        => 'private',
386
            resborrowernumber     => 'private',
387
            resbranchcode         => 'private',
388
            rescardnumber         => 'private',
389
            reserve_id            => 'private',
390
            resfirstname          => 'private',
391
            resreservedate        => 'private',
392
            ressurname            => 'private',
393
            item_notforloan       => 'private'
394
        );
395
        $t->get_ok(
396
"/api/v1/public/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
397
        )->status_is(200)->json_is( '/blockers' => {} )
398
          ->json_is( '/confirms'           => {} )->json_is( '/warnings' => {} )
399
          ->json_is( '/confirmation_token' => undef );
400
        %issuingimpossible = ();
401
        %alerts            = ();
402
        %needsconfirmation = ();
403
    };
329
404
330
    $schema->storage->txn_rollback;
405
    $schema->storage->txn_rollback;
331
};
406
};
332
407
333
subtest 'add checkout' => sub {
408
subtest 'add checkout' => sub {
334
409
335
    plan tests => 9;
410
    plan tests => 10;
336
411
337
    $schema->storage->txn_begin;
412
    $schema->storage->txn_begin;
338
    my $librarian = $builder->build_object(
413
    my $librarian = $builder->build_object(
Lines 406-410 subtest 'add checkout' => sub { Link Here
406
    )->status_is(201)->or(sub { diag $t->tx->res->body });
481
    )->status_is(201)->or(sub { diag $t->tx->res->body });
407
    %needsconfirmation = ();
482
    %needsconfirmation = ();
408
483
484
    subtest 'public add' => sub {
485
        plan tests => 14;
486
487
        my $useridp = $patron->userid;
488
        $patron->set_password(
489
            { password => $password, skip_validation => 1 } );
490
491
        # Feature disabled
492
        t::lib::Mocks::mock_preference( 'OpacTrustedCheckout', 0 );
493
494
        $t->post_ok( "/api/v1/public/patrons/$patron_id/checkouts" => json =>
495
              { item_id => $item1_id, patron_id => $patron_id } )
496
          ->status_is(401)->json_is(
497
            {
498
                error => "Authentication failure."
499
            }
500
          );
501
502
        $t->post_ok(
503
            "//$useridp:$password@/api/v1/public/patrons/$patron_id/checkouts"
504
              => json => { item_id => $item1_id, patron_id => $patron_id } )
505
          ->status_is(405)
506
          ->json_is(
507
            { error => "Feature disabled", error_code => "FEATURE_DISABLED" } );
508
509
        # Feature enabled
510
        t::lib::Mocks::mock_preference( 'OpacTrustedCheckout', 1 );
511
512
        $t->post_ok( "/api/v1/public/patrons/$patron_id/checkouts" => json =>
513
              { item_id => $item1_id, patron_id => $patron_id } )
514
          ->status_is(401)->json_is(
515
            {
516
                error => "Authentication failure."
517
            }
518
          );
519
520
        $t->post_ok(
521
            "//$userid:$password@/api/v1/public/patrons/$patron_id/checkouts"
522
              => json => { item_id => $item1_id, patron_id => $patron_id } )
523
          ->status_is(403)->json_is(
524
            {
525
                error =>
526
                  "Authorization failure. Missing required permission(s).",
527
                required_permissions => undef
528
            }
529
          );
530
531
        $t->post_ok(
532
            "//$useridp:$password@/api/v1/public/patrons/$patron_id/checkouts"
533
              => json => { item_id => $item1_id, patron_id => $patron_id } )
534
          ->status_is(201);
535
    };
536
409
    $schema->storage->txn_rollback;
537
    $schema->storage->txn_rollback;
410
};
538
};
411
- 

Return to bug 30979