Bug 30133: Regression tests
authorTomas Cohen Arazi <tomascohen@theke.io>
Fri, 18 Feb 2022 18:33:42 +0000 (15:33 -0300)
committerFridolin Somers <fridolin.somers@biblibre.com>
Fri, 25 Feb 2022 00:35:36 +0000 (14:35 -1000)
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
t/db_dependent/api/v1/items.t

index 4136c28..0d4f4c0 100755 (executable)
@@ -144,7 +144,7 @@ subtest 'get() tests' => sub {
 
 subtest 'pickup_locations() tests' => sub {
 
-    plan tests => 15;
+    plan tests => 16;
 
     $schema->storage->txn_begin;
 
@@ -237,6 +237,48 @@ subtest 'pickup_locations() tests' => sub {
           . "patron_id=" . $patron->id . "&_order_by=marc_org_code" )
       ->json_is( [ $library_1_api, $library_2_api, $library_3_api, $library_5_api ] );
 
+    subtest 'Pagination and AllowHoldPolicyOverride tests' => sub {
+
+        plan tests => 27;
+
+        t::lib::Mocks::mock_preference( 'AllowHoldPolicyOverride', 1 );
+
+        $t->get_ok( "//$userid:$password@/api/v1/items/" . $item->id . "/pickup_locations?" . "patron_id=" . $patron->id . "&_order_by=marc_org_code" . "&_per_page=1" )
+          ->json_is( [$library_1_api] )
+          ->header_is( 'X-Total-Count', '4', '4 is the count for libraries with pickup_location=1' )
+          ->header_is( 'X-Base-Total-Count', '4', '4 is the count for libraries with pickup_location=1' )
+          ->header_unlike( 'Link', qr|rel="prev"| )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=2.*|_page=2.*\&_per_page=1.*)>\; rel="next"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=1.*|_page=1.*\&_per_page=1).*>\; rel="first"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=4.*|_page=4.*\&_per_page=1).*>\; rel="last"# );
+
+        $t->get_ok( "//$userid:$password@/api/v1/items/"
+              . $item->id
+              . "/pickup_locations?"
+              . "patron_id="
+              . $patron->id
+              . "&_order_by=marc_org_code"
+              . "&_per_page=1&_page=3" )    # force the needs_override=1 check
+          ->json_is( [$library_3_api] )
+          ->header_is( 'X-Total-Count', '4', '4 is the count for libraries with pickup_location=1' )
+          ->header_is( 'X-Base-Total-Count', '4', '4 is the count for libraries with pickup_location=1' )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=2.*|_page=2.*\&_per_page=1.*)>\; rel="prev"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=4.*|_page=4.*\&_per_page=1.*)>\; rel="next"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=1.*|_page=1.*\&_per_page=1).*>\; rel="first"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=4.*|_page=4.*\&_per_page=1).*>\; rel="last"# );
+
+        t::lib::Mocks::mock_preference( 'AllowHoldPolicyOverride', 0 );
+
+        $t->get_ok( "//$userid:$password@/api/v1/items/" . $item->id . "/pickup_locations?" . "patron_id=" . $patron->id . "&_order_by=marc_org_code" . "&_per_page=1" )
+          ->json_is( [$library_1_api] )
+          ->header_is( 'X-Total-Count', '2' )
+          ->header_is( 'X-Base-Total-Count', '2' )
+          ->header_unlike( 'Link', qr|rel="prev"| )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=2.*|_page=2.*\&_per_page=1.*)>\; rel="next"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=1.*|_page=1.*\&_per_page=1).*>\; rel="first"# )
+          ->header_like( 'Link', qr#(_per_page=1.*\&_page=2.*|_page=2.*\&_per_page=1).*>\; rel="last"# );
+    };
+
     my $deleted_patron = $builder->build_object({ class => 'Koha::Patrons' });
     my $deleted_patron_id = $deleted_patron->id;
     $deleted_patron->delete;