| Lines 19-25
          
      
      
        Link Here | 
        
          | 19 |  | 19 |  | 
        
          | 20 | use Modern::Perl; | 20 | use Modern::Perl; | 
        
          | 21 |  | 21 |  | 
          
            
              | 22 | use Test::More tests => 4; | 22 | use Test::More tests => 5; | 
        
          | 23 | use Test::MockModule; | 23 | use Test::MockModule; | 
        
          | 24 | use Test::Mojo; | 24 | use Test::Mojo; | 
        
          | 25 | use Test::Warn; | 25 | use Test::Warn; | 
  
    | Lines 99-104
          subtest 'list() tests' => sub {
      
      
        Link Here | 
        
          | 99 |     $schema->storage->txn_rollback; | 99 |     $schema->storage->txn_rollback; | 
        
          | 100 | }; | 100 | }; | 
        
          | 101 |  | 101 |  | 
            
              |  |  | 102 | subtest 'list_public() tests' => sub { | 
            
              | 103 |  | 
            
              | 104 |     plan tests => 2; | 
            
              | 105 |  | 
            
              | 106 |     $schema->storage->txn_begin; | 
            
              | 107 |  | 
            
              | 108 |     # Clean out all demo items | 
            
              | 109 |     Koha::Items->delete(); | 
            
              | 110 |  | 
            
              | 111 |     my $patron = $builder->build_object({ class => 'Koha::Patrons' }); | 
            
              | 112 |     my $mocked_category = Test::MockModule->new('Koha::Patron::Category'); | 
            
              | 113 |     my $exception = 1; | 
            
              | 114 |     $mocked_category->mock( 'override_hidden_items', sub { | 
            
              | 115 |         return $exception; | 
            
              | 116 |     }); | 
            
              | 117 |  | 
            
              | 118 |     my $password = 'thePassword123'; | 
            
              | 119 |     $patron->set_password( { password => $password, skip_validation => 1 } ); | 
            
              | 120 |     my $userid = $patron->userid; | 
            
              | 121 |  | 
            
              | 122 |     # have a fresh biblio | 
            
              | 123 |     my $biblio = $builder->build_sample_biblio; | 
            
              | 124 |     # have two itemtypes | 
            
              | 125 |     my $itype_1 = $builder->build_object({ class => 'Koha::ItemTypes' }); | 
            
              | 126 |     my $itype_2 = $builder->build_object({ class => 'Koha::ItemTypes' }); | 
            
              | 127 |     # have 5 items on that biblio | 
            
              | 128 |     my $item_1 = $builder->build_sample_item( | 
            
              | 129 |         { | 
            
              | 130 |             biblionumber => $biblio->biblionumber, | 
            
              | 131 |             itemlost     => -1, | 
            
              | 132 |             itype        => $itype_1->itemtype, | 
            
              | 133 |             withdrawn    => 1, | 
            
              | 134 |             copynumber   => undef | 
            
              | 135 |         } | 
            
              | 136 |     ); | 
            
              | 137 |     my $item_2 = $builder->build_sample_item( | 
            
              | 138 |         { | 
            
              | 139 |             biblionumber => $biblio->biblionumber, | 
            
              | 140 |             itemlost     => 0, | 
            
              | 141 |             itype        => $itype_2->itemtype, | 
            
              | 142 |             withdrawn    => 2, | 
            
              | 143 |             copynumber   => undef | 
            
              | 144 |         } | 
            
              | 145 |     ); | 
            
              | 146 |     my $item_3 = $builder->build_sample_item( | 
            
              | 147 |         { | 
            
              | 148 |             biblionumber => $biblio->biblionumber, | 
            
              | 149 |             itemlost     => 1, | 
            
              | 150 |             itype        => $itype_1->itemtype, | 
            
              | 151 |             withdrawn    => 3, | 
            
              | 152 |             copynumber   => undef | 
            
              | 153 |         } | 
            
              | 154 |     ); | 
            
              | 155 |     my $item_4 = $builder->build_sample_item( | 
            
              | 156 |         { | 
            
              | 157 |             biblionumber => $biblio->biblionumber, | 
            
              | 158 |             itemlost     => 0, | 
            
              | 159 |             itype        => $itype_2->itemtype, | 
            
              | 160 |             withdrawn    => 4, | 
            
              | 161 |             copynumber   => undef | 
            
              | 162 |         } | 
            
              | 163 |     ); | 
            
              | 164 |     my $item_5 = $builder->build_sample_item( | 
            
              | 165 |         { | 
            
              | 166 |             biblionumber => $biblio->biblionumber, | 
            
              | 167 |             itemlost     => 0, | 
            
              | 168 |             itype        => $itype_1->itemtype, | 
            
              | 169 |             withdrawn    => 5, | 
            
              | 170 |             copynumber   => undef | 
            
              | 171 |         } | 
            
              | 172 |     ); | 
            
              | 173 |     my $item_6 = $builder->build_sample_item( | 
            
              | 174 |         { | 
            
              | 175 |             biblionumber => $biblio->biblionumber, | 
            
              | 176 |             itemlost     => 2, | 
            
              | 177 |             itype        => $itype_1->itemtype, | 
            
              | 178 |             withdrawn    => 5, | 
            
              | 179 |             copynumber   => undef | 
            
              | 180 |         } | 
            
              | 181 |     ); | 
            
              | 182 |  | 
            
              | 183 |     my $rules = undef; | 
            
              | 184 |     my $mocked_context = Test::MockModule->new('C4::Context'); | 
            
              | 185 |     $mocked_context->mock( 'yaml_preference', sub { | 
            
              | 186 |         return $rules; | 
            
              | 187 |     }); | 
            
              | 188 |  | 
            
              | 189 |     subtest 'anonymous access' => sub { | 
            
              | 190 |         plan tests => 21; | 
            
              | 191 |  | 
            
              | 192 |         t::lib::Mocks::mock_preference( 'hidelostitems', 0 ); | 
            
              | 193 |         my $res = $t->get_ok( "/api/v1/public/items" )->status_is(200)->tx->res->json; | 
            
              | 194 |         is( scalar @{ $res }, 6, 'No rules set, hidelostitems unset, all items returned'); | 
            
              | 195 |  | 
            
              | 196 |         t::lib::Mocks::mock_preference( 'hidelostitems', 1 ); | 
            
              | 197 |         $res = $t->get_ok( "/api/v1/public/items" )->status_is(200)->tx->res->json; | 
            
              | 198 |         is( scalar @{ $res }, 3, 'No rules set, hidelostitems set, 3 items hidden'); | 
            
              | 199 |  | 
            
              | 200 |         t::lib::Mocks::mock_preference( 'hidelostitems', 0 ); | 
            
              | 201 |         $rules = { biblionumber => [ $biblio->biblionumber ] }; | 
            
              | 202 |         $res = $t->get_ok( "/api/v1/public/items" )->status_is(200)->tx->res->json; | 
            
              | 203 |         is( scalar @{ $res }, 0, 'Biblionumber rule set, hidelostitems unset, all items hidden'); | 
            
              | 204 |  | 
            
              | 205 |         $rules = { withdrawn => [ 1, 2 ] }; | 
            
              | 206 |         $res = $t->get_ok( "/api/v1/public/items" )->status_is(200)->tx->res->json; | 
            
              | 207 |         is( scalar @{ $res }, 4, 'Withdrawn rule set, hidelostitems unset, 2 items hidden'); | 
            
              | 208 |  | 
            
              | 209 |         $rules = { itype => [ $itype_1->itemtype ] }; | 
            
              | 210 |         $res = $t->get_ok( "/api/v1/public/items" )->status_is(200)->tx->res->json; | 
            
              | 211 |         is( scalar @{ $res }, 2, 'Itype rule set, hidelostitems unset, 4 items hidden'); | 
            
              | 212 |  | 
            
              | 213 |         $rules = { withdrawn => [ 1 ] }; | 
            
              | 214 |         $res = $t->get_ok( "/api/v1/public/items?external_id=" . $item_1->barcode ) | 
            
              | 215 |           ->status_is(200)->tx->res->json; | 
            
              | 216 |         is( scalar @{ $res }, 0, 'Withdrawn rule set, hidelostitems unset, search on barcode returns no item'); | 
            
              | 217 |  | 
            
              | 218 |         $rules = undef; | 
            
              | 219 |         $t->get_ok( "/api/v1/public/items?external_id=" . $item_1->barcode ) | 
            
              | 220 |           ->status_is(200)->json_is( | 
            
              | 221 |             '/0' => $item_1->to_api( { public => 1 } ), | 
            
              | 222 | 'No rules set, hidelostitems unset, public form of item returned on barcode search' | 
            
              | 223 |           ); | 
            
              | 224 |     }; | 
            
              | 225 |  | 
            
              | 226 |     subtest 'logged in user access' => sub { | 
            
              | 227 |         plan tests => 3; | 
            
              | 228 |  | 
            
              | 229 |         t::lib::Mocks::mock_preference( 'hidelostitems', 1 ); | 
            
              | 230 |         $rules = { withdrawn => [ 1, 2 ] }; | 
            
              | 231 |         my $res = $t->get_ok("//$userid:$password@/api/v1/public/items") | 
            
              | 232 |           ->status_is(200)->tx->res->json; | 
            
              | 233 |         is( | 
            
              | 234 |             scalar @{$res}, | 
            
              | 235 |             3, | 
            
              | 236 | 'Rules on withdrawn but patron with override passed, hidelostitems set' | 
            
              | 237 |         ); | 
            
              | 238 |     }; | 
            
              | 239 |  | 
            
              | 240 |     $schema->storage->txn_rollback; | 
            
              | 241 | }; | 
        
          | 102 |  | 242 |  | 
        
          | 103 | subtest 'get() tests' => sub { | 243 | subtest 'get() tests' => sub { | 
        
          | 104 |  | 244 |  | 
            
              | 105 | -  |  |  |