| Lines 1284-1290
          subtest 'search_patrons_to_anonymise' => sub {
      
      
        Link Here | 
        
          | 1284 |     t::lib::Mocks::mock_preference('IndependentBranches', 0); | 1284 |     t::lib::Mocks::mock_preference('IndependentBranches', 0); | 
        
          | 1285 | }; | 1285 | }; | 
        
          | 1286 |  | 1286 |  | 
          
            
              | 1287 | subtest 'libraries_where_can_see_patrons + libraries_where_can_see_things + can_see_patron_infos + search_limited' => sub { | 1287 | subtest 'libraries_where_can_see_patrons + libraries_where_can_see_things + can_see_patron_infos + search_limited' => | 
            
              |  |  | 1288 |     sub { | 
        
          | 1288 |     plan tests => 4; | 1289 |     plan tests => 4; | 
        
          | 1289 |  | 1290 |  | 
        
          | 1290 |     # group1 | 1291 |     # group1 | 
  
    | Lines 1293-1330
          subtest 'libraries_where_can_see_patrons + libraries_where_can_see_things + can_
      
      
        Link Here | 
        
          | 1293 |     # group2 | 1294 |     # group2 | 
        
          | 1294 |     #   + library21 | 1295 |     #   + library21 | 
        
          | 1295 |     $nb_of_patrons = Koha::Patrons->search->count; | 1296 |     $nb_of_patrons = Koha::Patrons->search->count; | 
          
            
              | 1296 |     my $group_1 = Koha::Library::Group->new( { title => 'TEST Group 1', ft_hide_patron_info => 1 } )->store; | 1297 |     my $group_1    = Koha::Library::Group->new( { title => 'TEST Group 1', ft_hide_patron_info => 1 } )->store; | 
            
              | 1297 |     my $group_2 = Koha::Library::Group->new( { title => 'TEST Group 2', ft_hide_patron_info => 1 } )->store; | 1298 |     my $group_2    = Koha::Library::Group->new( { title => 'TEST Group 2', ft_hide_patron_info => 1 } )->store; | 
        
          | 1298 |     my $library_11 = $builder->build( { source => 'Branch' } ); | 1299 |     my $library_11 = $builder->build( { source => 'Branch' } ); | 
        
          | 1299 |     my $library_12 = $builder->build( { source => 'Branch' } ); | 1300 |     my $library_12 = $builder->build( { source => 'Branch' } ); | 
        
          | 1300 |     my $library_21 = $builder->build( { source => 'Branch' } ); | 1301 |     my $library_21 = $builder->build( { source => 'Branch' } ); | 
        
          | 1301 |     $library_11 = Koha::Libraries->find( $library_11->{branchcode} ); | 1302 |     $library_11 = Koha::Libraries->find( $library_11->{branchcode} ); | 
        
          | 1302 |     $library_12 = Koha::Libraries->find( $library_12->{branchcode} ); | 1303 |     $library_12 = Koha::Libraries->find( $library_12->{branchcode} ); | 
        
          | 1303 |     $library_21 = Koha::Libraries->find( $library_21->{branchcode} ); | 1304 |     $library_21 = Koha::Libraries->find( $library_21->{branchcode} ); | 
          
            
              | 1304 |     Koha::Library::Group->new( | 1305 |     Koha::Library::Group->new( { branchcode => $library_11->branchcode, parent_id => $group_1->id } )->store; | 
            
              | 1305 |         { branchcode => $library_11->branchcode, parent_id => $group_1->id } )->store; | 1306 |     Koha::Library::Group->new( { branchcode => $library_12->branchcode, parent_id => $group_1->id } )->store; | 
            
              | 1306 |     Koha::Library::Group->new( | 1307 |     Koha::Library::Group->new( { branchcode => $library_21->branchcode, parent_id => $group_2->id } )->store; | 
            
              | 1307 |         { branchcode => $library_12->branchcode, parent_id => $group_1->id } )->store; | 1308 |  | 
            
              | 1308 |     Koha::Library::Group->new( | 1309 |     my $sth = | 
            
              | 1309 |         { branchcode => $library_21->branchcode, parent_id => $group_2->id } )->store; | 1310 |         C4::Context->dbh->prepare(q|INSERT INTO user_permissions( borrowernumber, module_bit, code ) VALUES (?, 4, ?)|) | 
            
              | 1310 |  | 1311 |         ;    # 4 for borrowers | 
            
              | 1311 |     my $sth = C4::Context->dbh->prepare(q|INSERT INTO user_permissions( borrowernumber, module_bit, code ) VALUES (?, 4, ?)|); # 4 for borrowers | 1312 |              # 2 patrons from library_11 (group1) | 
            
              | 1312 |     # 2 patrons from library_11 (group1) | 1313 |              # patron_11_1 see patron's infos from outside its group | 
            
              | 1313 |     # patron_11_1 see patron's infos from outside its group | 1314 |              # Setting flags => undef to not be considered as superlibrarian | 
            
              | 1314 |     # Setting flags => undef to not be considered as superlibrarian | 1315 |     my $patron_11_1 = $builder->build( | 
            
              | 1315 |     my $patron_11_1 = $builder->build({ source => 'Borrower', value => { branchcode => $library_11->branchcode, flags => undef, }}); | 1316 |         { source => 'Borrower', value => { branchcode => $library_11->branchcode, flags => undef, } } ); | 
        
          | 1316 |     $patron_11_1 = Koha::Patrons->find( $patron_11_1->{borrowernumber} ); | 1317 |     $patron_11_1 = Koha::Patrons->find( $patron_11_1->{borrowernumber} ); | 
        
          | 1317 |     $sth->execute( $patron_11_1->borrowernumber, 'edit_borrowers' ); | 1318 |     $sth->execute( $patron_11_1->borrowernumber, 'edit_borrowers' ); | 
        
          | 1318 |     $sth->execute( $patron_11_1->borrowernumber, 'view_borrower_infos_from_any_libraries' ); | 1319 |     $sth->execute( $patron_11_1->borrowernumber, 'view_borrower_infos_from_any_libraries' ); | 
            
              |  |  | 1320 |  | 
        
          | 1319 |     # patron_11_2 can only see patron's info from its group | 1321 |     # patron_11_2 can only see patron's info from its group | 
          
            
              | 1320 |     my $patron_11_2 = $builder->build({ source => 'Borrower', value => { branchcode => $library_11->branchcode, flags => undef, }}); | 1322 |     my $patron_11_2 = $builder->build( | 
            
              |  |  | 1323 |         { source => 'Borrower', value => { branchcode => $library_11->branchcode, flags => undef, } } ); | 
        
          | 1321 |     $patron_11_2 = Koha::Patrons->find( $patron_11_2->{borrowernumber} ); | 1324 |     $patron_11_2 = Koha::Patrons->find( $patron_11_2->{borrowernumber} ); | 
        
          | 1322 |     $sth->execute( $patron_11_2->borrowernumber, 'edit_borrowers' ); | 1325 |     $sth->execute( $patron_11_2->borrowernumber, 'edit_borrowers' ); | 
            
              |  |  | 1326 |  | 
        
          | 1323 |     # 1 patron from library_12 (group1) | 1327 |     # 1 patron from library_12 (group1) | 
          
            
              | 1324 |     my $patron_12 = $builder->build({ source => 'Borrower', value => { branchcode => $library_12->branchcode, flags => undef, }}); | 1328 |     my $patron_12 = $builder->build( | 
            
              |  |  | 1329 |         { source => 'Borrower', value => { branchcode => $library_12->branchcode, flags => undef, } } ); | 
        
          | 1325 |     $patron_12 = Koha::Patrons->find( $patron_12->{borrowernumber} ); | 1330 |     $patron_12 = Koha::Patrons->find( $patron_12->{borrowernumber} ); | 
            
              |  |  | 1331 |  | 
        
          | 1326 |     # 1 patron from library_21 (group2) can only see patron's info from its group | 1332 |     # 1 patron from library_21 (group2) can only see patron's info from its group | 
          
            
              | 1327 |     my $patron_21 = $builder->build({ source => 'Borrower', value => { branchcode => $library_21->branchcode, flags => undef, }}); | 1333 |     my $patron_21 = $builder->build( | 
            
              |  |  | 1334 |         { source => 'Borrower', value => { branchcode => $library_21->branchcode, flags => undef, } } ); | 
        
          | 1328 |     $patron_21 = Koha::Patrons->find( $patron_21->{borrowernumber} ); | 1335 |     $patron_21 = Koha::Patrons->find( $patron_21->{borrowernumber} ); | 
        
          | 1329 |     $sth->execute( $patron_21->borrowernumber, 'edit_borrowers' ); | 1336 |     $sth->execute( $patron_21->borrowernumber, 'edit_borrowers' ); | 
        
          | 1330 |  | 1337 |  | 
  
    | Lines 1354-1410
          subtest 'libraries_where_can_see_patrons + libraries_where_can_see_things + can_
      
      
        Link Here | 
        
          | 1354 |  | 1361 |  | 
        
          | 1355 |         my @branchcodes; | 1362 |         my @branchcodes; | 
        
          | 1356 |  | 1363 |  | 
          
            
              | 1357 |         t::lib::Mocks::mock_userenv({ patron => $patron_11_1 }); | 1364 |         t::lib::Mocks::mock_userenv( { patron => $patron_11_1 } ); | 
        
          | 1358 |         @branchcodes = $patron_11_1->libraries_where_can_see_patrons; | 1365 |         @branchcodes = $patron_11_1->libraries_where_can_see_patrons; | 
        
          | 1359 |         is_deeply( \@branchcodes, [], q|patron_11_1 has view_borrower_infos_from_any_libraries => No restriction| ); | 1366 |         is_deeply( \@branchcodes, [], q|patron_11_1 has view_borrower_infos_from_any_libraries => No restriction| ); | 
        
          | 1360 |  | 1367 |  | 
          
            
              | 1361 |         t::lib::Mocks::mock_userenv({ patron => $patron_11_2 }); | 1368 |         t::lib::Mocks::mock_userenv( { patron => $patron_11_2 } ); | 
        
          | 1362 |         @branchcodes = $patron_11_2->libraries_where_can_see_patrons; | 1369 |         @branchcodes = $patron_11_2->libraries_where_can_see_patrons; | 
          
            
              | 1363 |         is_deeply( \@branchcodes, [ sort ( $library_11->branchcode, $library_12->branchcode ) ], q|patron_11_2 has not view_borrower_infos_from_any_libraries => Can only see patron's from its group| ); | 1370 |         is_deeply( | 
            
              |  |  | 1371 |             \@branchcodes, [ sort ( $library_11->branchcode, $library_12->branchcode ) ], | 
            
              | 1372 |             q|patron_11_2 has not view_borrower_infos_from_any_libraries => Can only see patron's from its group| | 
            
              | 1373 |         ); | 
        
          | 1364 |  | 1374 |  | 
          
            
              | 1365 |         t::lib::Mocks::mock_userenv({ patron => $patron_21 }); | 1375 |         t::lib::Mocks::mock_userenv( { patron => $patron_21 } ); | 
        
          | 1366 |         @branchcodes = $patron_21->libraries_where_can_see_patrons; | 1376 |         @branchcodes = $patron_21->libraries_where_can_see_patrons; | 
          
            
              | 1367 |         is_deeply( \@branchcodes, [$library_21->branchcode], q|patron_21 has not view_borrower_infos_from_any_libraries => Can only see patron's from its group| ); | 1377 |         is_deeply( | 
            
              |  |  | 1378 |             \@branchcodes, [ $library_21->branchcode ], | 
            
              | 1379 |             q|patron_21 has not view_borrower_infos_from_any_libraries => Can only see patron's from its group| | 
            
              | 1380 |         ); | 
        
          | 1368 |     }; | 1381 |     }; | 
        
          | 1369 |     subtest 'can_see_patron_infos' => sub { | 1382 |     subtest 'can_see_patron_infos' => sub { | 
        
          | 1370 |         plan tests => 6; | 1383 |         plan tests => 6; | 
        
          | 1371 |  | 1384 |  | 
          
            
              | 1372 |         t::lib::Mocks::mock_userenv({ patron => $patron_11_1 }); | 1385 |         t::lib::Mocks::mock_userenv( { patron => $patron_11_1 } ); | 
        
          | 1373 |         $patron_11_1 = Koha::Patrons->find( $patron_11_1->borrowernumber ); | 1386 |         $patron_11_1 = Koha::Patrons->find( $patron_11_1->borrowernumber ); | 
          
            
              | 1374 |         is( $patron_11_1->can_see_patron_infos( $patron_11_2 ), 1, q|patron_11_1 can see patron_11_2, from its library| ); | 1387 |         is( $patron_11_1->can_see_patron_infos($patron_11_2), 1, q|patron_11_1 can see patron_11_2, from its library| ); | 
            
              | 1375 |         is( $patron_11_1->can_see_patron_infos( $patron_12 ),   1, q|patron_11_1 can see patron_12, from its group| ); | 1388 |         is( $patron_11_1->can_see_patron_infos($patron_12),   1, q|patron_11_1 can see patron_12, from its group| ); | 
            
              | 1376 |         is( $patron_11_1->can_see_patron_infos( $patron_21 ),   1, q|patron_11_1 can see patron_11_2, from another group| ); | 1389 |         is( $patron_11_1->can_see_patron_infos($patron_21), 1, q|patron_11_1 can see patron_11_2, from another group| ); | 
        
          | 1377 |  | 1390 |  | 
          
            
              | 1378 |         t::lib::Mocks::mock_userenv({ patron => $patron_11_2 }); | 1391 |         t::lib::Mocks::mock_userenv( { patron => $patron_11_2 } ); | 
        
          | 1379 |         $patron_11_2 = Koha::Patrons->find( $patron_11_2->borrowernumber ); | 1392 |         $patron_11_2 = Koha::Patrons->find( $patron_11_2->borrowernumber ); | 
          
            
              | 1380 |         is( $patron_11_2->can_see_patron_infos( $patron_11_1 ), 1, q|patron_11_2 can see patron_11_1, from its library| ); | 1393 |         is( $patron_11_2->can_see_patron_infos($patron_11_1), 1, q|patron_11_2 can see patron_11_1, from its library| ); | 
            
              | 1381 |         is( $patron_11_2->can_see_patron_infos( $patron_12 ),   1, q|patron_11_2 can see patron_12, from its group| ); | 1394 |         is( $patron_11_2->can_see_patron_infos($patron_12),   1, q|patron_11_2 can see patron_12, from its group| ); | 
            
              | 1382 |         is( $patron_11_2->can_see_patron_infos( $patron_21 ),   0, q|patron_11_2 can NOT see patron_21, from another group| ); | 1395 |         is( | 
            
              |  |  | 1396 |             $patron_11_2->can_see_patron_infos($patron_21), 0, | 
            
              | 1397 |             q|patron_11_2 can NOT see patron_21, from another group| | 
            
              | 1398 |         ); | 
        
          | 1383 |     }; | 1399 |     }; | 
        
          | 1384 |     subtest 'search_limited' => sub { | 1400 |     subtest 'search_limited' => sub { | 
        
          | 1385 |         plan tests => 6; | 1401 |         plan tests => 6; | 
        
          | 1386 |  | 1402 |  | 
          
            
              | 1387 |         t::lib::Mocks::mock_userenv({ patron => $patron_11_1 }); | 1403 |         t::lib::Mocks::mock_userenv( { patron => $patron_11_1 } ); | 
        
          | 1388 |         $patron_11_1 = Koha::Patrons->find( $patron_11_1->borrowernumber ); | 1404 |         $patron_11_1 = Koha::Patrons->find( $patron_11_1->borrowernumber ); | 
          
            
              | 1389 |         my $total_number_of_patrons = $nb_of_patrons + 4; #we added four in these tests | 1405 |         my $total_number_of_patrons = $nb_of_patrons + 4;    #we added four in these tests | 
        
          | 1390 |         is( Koha::Patrons->search->count, $total_number_of_patrons, 'Non-limited search should return all patrons' ); | 1406 |         is( Koha::Patrons->search->count, $total_number_of_patrons, 'Non-limited search should return all patrons' ); | 
          
            
              | 1391 |         is( Koha::Patrons->search_limited->count, $total_number_of_patrons, 'patron_11_1 is allowed to see all patrons' ); | 1407 |         is( | 
            
              |  |  | 1408 |             Koha::Patrons->search_limited->count, $total_number_of_patrons, | 
            
              | 1409 |             'patron_11_1 is allowed to see all patrons' | 
            
              | 1410 |         ); | 
        
          | 1392 |  | 1411 |  | 
          
            
              | 1393 |         t::lib::Mocks::mock_userenv({ patron => $patron_11_2 }); | 1412 |         t::lib::Mocks::mock_userenv( { patron => $patron_11_2 } ); | 
        
          | 1394 |         $patron_11_2 = Koha::Patrons->find( $patron_11_2->borrowernumber ); | 1413 |         $patron_11_2 = Koha::Patrons->find( $patron_11_2->borrowernumber ); | 
          
            
              | 1395 |         is( Koha::Patrons->search->count, $total_number_of_patrons, 'Non-limited search should return all patrons'); | 1414 |         is( Koha::Patrons->search->count, $total_number_of_patrons, 'Non-limited search should return all patrons' ); | 
            
              | 1396 |         is( Koha::Patrons->search_limited->count, 3, 'patron_12_1 is not allowed to see patrons from other groups, only patron_11_1, patron_11_2 and patron_12' ); | 1415 |         is( | 
            
              |  |  | 1416 |             Koha::Patrons->search_limited->count, 3, | 
            
              | 1417 |             'patron_12_1 is not allowed to see patrons from other groups, only patron_11_1, patron_11_2 and patron_12' | 
            
              | 1418 |         ); | 
        
          | 1397 |  | 1419 |  | 
          
            
              | 1398 |         t::lib::Mocks::mock_userenv({ patron => $patron_21 }); | 1420 |         t::lib::Mocks::mock_userenv( { patron => $patron_21 } ); | 
        
          | 1399 |         $patron_21 = Koha::Patrons->find( $patron_21->borrowernumber ); | 1421 |         $patron_21 = Koha::Patrons->find( $patron_21->borrowernumber ); | 
          
            
              | 1400 |         is( Koha::Patrons->search->count, $total_number_of_patrons, 'Non-limited search should return all patrons'); | 1422 |         is( Koha::Patrons->search->count, $total_number_of_patrons, 'Non-limited search should return all patrons' ); | 
            
              | 1401 |         is( Koha::Patrons->search_limited->count, 1, 'patron_21 is not allowed to see patrons from other groups, only himself' ); | 1423 |         is( | 
            
              |  |  | 1424 |             Koha::Patrons->search_limited->count, 1, | 
            
              | 1425 |             'patron_21 is not allowed to see patrons from other groups, only himself' | 
            
              | 1426 |         ); | 
        
          | 1402 |     }; | 1427 |     }; | 
        
          | 1403 |     $patron_11_1->delete; | 1428 |     $patron_11_1->delete; | 
        
          | 1404 |     $patron_11_2->delete; | 1429 |     $patron_11_2->delete; | 
        
          | 1405 |     $patron_12->delete; | 1430 |     $patron_12->delete; | 
        
          | 1406 |     $patron_21->delete; | 1431 |     $patron_21->delete; | 
          
            
              | 1407 | }; | 1432 |     }; | 
        
          | 1408 |  | 1433 |  | 
        
          | 1409 | subtest 'account_locked' => sub { | 1434 | subtest 'account_locked' => sub { | 
        
          | 1410 |     plan tests => 13; | 1435 |     plan tests => 13; | 
            
              | 1411 | -  |  |  |