Bug 20287: Replace occurrences of AddMember with Koha::Patron->new->store->borrowernumber
[koha.git] / t / db_dependent / Patron / Borrower_Discharge.t
index dbdd7af..d43b49e 100644 (file)
@@ -15,7 +15,7 @@
 # with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-use Test::More tests => 18;
+use Test::More tests => 19;
 use Test::Warn;
 use MARC::Record;
 
@@ -23,8 +23,8 @@ use C4::Biblio qw( AddBiblio );
 use C4::Circulation qw( AddIssue AddReturn );
 use C4::Context;
 use C4::Items qw( AddItem );
-use C4::Members qw( AddMember GetMember );
 
+use Koha::Patrons;
 use Koha::Patron::Discharge;
 use Koha::Database;
 
@@ -43,13 +43,16 @@ my $another_library = $builder->build({ source => 'Branch' });
 my $itemtype        = $builder->build({ source => 'Itemtype' })->{itemtype};
 
 C4::Context->_new_userenv('xxx');
-C4::Context->set_userenv(0, 0, 0, 'firstname', 'surname', $library->{branchcode}, $library->{branchcode}, '', '', '', '', '');
 my $patron = $builder->build({
     source => 'Borrower',
     value => {
         branchcode => $library->{branchcode},
+        flags      => 1, # superlibrarian
     }
 });
+my $p = Koha::Patrons->find( $patron->{borrowernumber} );
+set_logged_in_user( $p );
+
 my $patron2 = $builder->build({
     source => 'Borrower',
     value => {
@@ -60,8 +63,10 @@ my $patron3 = $builder->build({
     source => 'Borrower',
     value => {
         branchcode => $another_library->{branchcode},
+        flags => undef,
     }
 });
+my $p3 = Koha::Patrons->find( $patron3->{borrowernumber} );
 
 # Discharge not possible with issues
 my ( $biblionumber ) = AddBiblio( MARC::Record->new, '');
@@ -80,8 +85,8 @@ is( Koha::Patron::Discharge::can_be_discharged({ borrowernumber => $patron->{bor
 
 is( Koha::Patron::Discharge::request({ borrowernumber => $patron->{borrowernumber} }), undef, 'No request done if patron has issues' );
 is( Koha::Patron::Discharge::discharge({ borrowernumber => $patron->{borrowernumber} }), undef, 'No discharge done if patron has issues' );
-is_deeply( Koha::Patron::Discharge::get_pendings(), [], 'There is no pending discharge request' );
-is_deeply( Koha::Patron::Discharge::get_validated(), [], 'There is no validated discharge' );
+is_deeply( [ Koha::Patron::Discharge::get_pendings ], [], 'There is no pending discharge request' );
+is_deeply( [ Koha::Patron::Discharge::get_validated ], [], 'There is no validated discharge' );
 
 AddReturn( $barcode );
 
@@ -96,18 +101,18 @@ Koha::Patron::Discharge::discharge( { borrowernumber => $patron2->{borrowernumbe
 Koha::Patron::Discharge::discharge( { borrowernumber => $patron3->{borrowernumber} } );
 is( Koha::Patron::Discharge::is_discharged( { borrowernumber => $patron->{borrowernumber} } ), 1, 'The patron has been discharged' );
 is( Koha::Patrons->find( $patron->{borrowernumber} )->is_debarred, '9999-12-31', 'The patron has been debarred after discharge' );
-is( scalar( @{ Koha::Patron::Discharge::get_validated() } ),             3,            'There are 3 validated discharges' );
-is( scalar( @{ Koha::Patron::Discharge::get_validated( { borrowernumber => $patron->{borrowernumber} } ) } ), 1, 'There is 1 validated discharge for a given patron' );
-is( scalar( @{ Koha::Patron::Discharge::get_validated( { branchcode => $library->{branchcode} } ) } ), 2, 'There is 2 validated discharges for a given branchcode' );    # This is not used in the code yet
+is( scalar( Koha::Patron::Discharge::get_validated ),             3,            'There are 3 validated discharges' );
+is( scalar( Koha::Patron::Discharge::get_validated( { borrowernumber => $patron->{borrowernumber} } ) ), 1, 'There is 1 validated discharge for a given patron' );
+is( scalar( Koha::Patron::Discharge::get_validated( { branchcode => $library->{branchcode} } ) ), 2, 'There is 2 validated discharges for a given branchcode' );    # This is not used in the code yet
 Koha::Patron::Debarments::DelUniqueDebarment( { 'borrowernumber' => $patron->{borrowernumber}, 'type' => 'DISCHARGE' } );
 ok( !Koha::Patrons->find( $patron->{borrowernumber} )->is_debarred, 'The debarment has been lifted' );
 ok( !Koha::Patron::Discharge::is_discharged( { borrowernumber => $patron->{borrowernumber} } ), 'The patron is not discharged after the restriction has been lifted' );
 
 # Verify that the discharge works multiple times
 Koha::Patron::Discharge::request({ borrowernumber => $patron->{borrowernumber} });
-is(scalar( @{ Koha::Patron::Discharge::get_pendings() }), 1, 'There is a pending discharge request (second time)');
+is(scalar( Koha::Patron::Discharge::get_pendings ), 1, 'There is a pending discharge request (second time)');
 Koha::Patron::Discharge::discharge( { borrowernumber => $patron->{borrowernumber} } );
-is_deeply( Koha::Patron::Discharge::get_pendings(), [], 'There is no pending discharge request (second time)');
+is_deeply( [ Koha::Patron::Discharge::get_pendings ], [], 'There is no pending discharge request (second time)');
 
 # Check if PDF::FromHTML is installed.
 my $check = eval { require PDF::FromHTML; };
@@ -126,6 +131,37 @@ else {
 # FIXME Should be a Koha::Object object
 is( ref(Koha::Patron::Discharge::request({ borrowernumber => $patron->{borrowernumber} })), 'Koha::Schema::Result::Discharge', 'Discharge request sent' );
 
+subtest 'search_limited' => sub {
+    plan tests => 4;
+    $dbh->do(q|DELETE FROM discharges|);
+    my $group_1 = Koha::Library::Group->new( { title => 'TEST Group 1' } )->store;
+    my $group_2 = Koha::Library::Group->new( { title => 'TEST Group 2' } )->store;
+    # $patron and $patron2 are from the same library, $patron3 from another one
+    # Logged in user is $patron, superlibrarian
+    set_logged_in_user( $p );
+    Koha::Library::Group->new({ parent_id => $group_1->id,  branchcode => $patron->{branchcode} })->store();
+    Koha::Library::Group->new({ parent_id => $group_2->id,  branchcode => $patron3->{branchcode} })->store();
+    Koha::Patron::Discharge::request({ borrowernumber => $patron->{borrowernumber} });
+    Koha::Patron::Discharge::request({ borrowernumber => $patron2->{borrowernumber} });
+    Koha::Patron::Discharge::request({ borrowernumber => $patron3->{borrowernumber} });
+    is( scalar( Koha::Patron::Discharge::get_pendings), 3, 'With permission, all discharges are visible' );
+    is( Koha::Patron::Discharge::count({pending => 1}), 3, 'With permission, all discharges are visible' );
+
+    # With patron 3 logged in, only discharges from their group are visible
+    set_logged_in_user( $p3 );
+    is( scalar( Koha::Patron::Discharge::get_pendings), 1, 'Without permission, only discharge from our group are visible' );
+    is( Koha::Patron::Discharge::count({pending => 1}), 1, 'Without permission, only discharge from our group are visible' );
+};
+
 $schema->storage->txn_rollback;
 
-1;
+sub set_logged_in_user {
+    my ($patron) = @_;
+    C4::Context->set_userenv(
+        $patron->borrowernumber, $patron->userid,
+        $patron->cardnumber,     'firstname',
+        'surname',               $patron->library->branchcode,
+        'Midway Public Library', $patron->flags,
+        '',                      ''
+    );
+}