Bug 16534: Add tests for CanBookBeIssued & AllowReturnToBranch
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Sun, 22 May 2016 09:02:44 +0000 (10:02 +0100)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 24 Jun 2016 11:45:00 +0000 (11:45 +0000)
Signed-off-by: Marc VĂ©ron <veron@veron.ch>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
t/db_dependent/Circulation.t

index cfee3e2..72436a0 100755 (executable)
@@ -30,7 +30,7 @@ use Koha::Database;
 
 use t::lib::TestBuilder;
 
-use Test::More tests => 84;
+use Test::More tests => 85;
 
 BEGIN {
     use_ok('C4::Circulation');
@@ -908,4 +908,99 @@ C4::Context->dbh->do("DELETE FROM accountlines");
     is( Koha::Account::Lines->search({ issue_id => $issue->id })->count, 1, 'UpdateFine should not create a new accountline when updating an existing fine');
 }
 
+subtest 'CanBookBeIssued & AllowReturnToBranch' => sub {
+    plan tests => 23;
+
+    my $homebranch    = $builder->build( { source => 'Branch' } );
+    my $holdingbranch = $builder->build( { source => 'Branch' } );
+    my $otherbranch   = $builder->build( { source => 'Branch' } );
+    my $patron_1      = $builder->build( { source => 'Borrower' } );
+    my $patron_2      = $builder->build( { source => 'Borrower' } );
+
+    my $biblioitem = $builder->build( { source => 'Biblioitem' } );
+    my $item = $builder->build(
+        {   source => 'Item',
+            value  => {
+                homebranch    => $homebranch->{branchcode},
+                holdingbranch => $holdingbranch->{branchcode},
+                notforloan    => 0,
+                itemlost      => 0,
+                withdrawn     => 0,
+                biblionumber  => $biblioitem->{biblionumber}
+            }
+        }
+    );
+
+    set_userenv($holdingbranch);
+
+    my $issue = AddIssue( $patron_1, $item->{barcode} );
+    is( ref($issue), 'Koha::Schema::Result::Issue' );    # FIXME Should be Koha::Issue
+
+    my ( $error, $question, $alerts );
+
+    # AllowReturnToBranch == anywhere
+    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
+    ## Can be issued from homebranch
+    set_userenv($homebranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$error) + keys(%$alerts),        0 );
+    is( exists $question->{ISSUED_TO_ANOTHER}, 1 );
+    ## Can be issued from holdingbranch
+    set_userenv($holdingbranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$error) + keys(%$alerts),        0 );
+    is( exists $question->{ISSUED_TO_ANOTHER}, 1 );
+    ## Can be issued from another branch
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$error) + keys(%$alerts),        0 );
+    is( exists $question->{ISSUED_TO_ANOTHER}, 1 );
+
+    # AllowReturnToBranch == holdingbranch
+    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
+    ## Cannot be issued from homebranch
+    set_userenv($homebranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$question) + keys(%$alerts),  0 );
+    is( exists $error->{RETURN_IMPOSSIBLE}, 1 );
+    is( $error->{branch_to_return},         $holdingbranch->{branchcode} );
+    ## Can be issued from holdinbranch
+    set_userenv($holdingbranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$error) + keys(%$alerts),        0 );
+    is( exists $question->{ISSUED_TO_ANOTHER}, 1 );
+    ## Cannot be issued from another branch
+    set_userenv($otherbranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$question) + keys(%$alerts),  0 );
+    is( exists $error->{RETURN_IMPOSSIBLE}, 1 );
+    is( $error->{branch_to_return},         $holdingbranch->{branchcode} );
+
+    # AllowReturnToBranch == homebranch
+    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
+    ## Can be issued from holdinbranch
+    set_userenv($homebranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$error) + keys(%$alerts),        0 );
+    is( exists $question->{ISSUED_TO_ANOTHER}, 1 );
+    ## Cannot be issued from holdinbranch
+    set_userenv($holdingbranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$question) + keys(%$alerts),  0 );
+    is( exists $error->{RETURN_IMPOSSIBLE}, 1 );
+    is( $error->{branch_to_return},         $homebranch->{branchcode} );
+    ## Cannot be issued from holdinbranch
+    set_userenv($otherbranch);
+    ( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
+    is( keys(%$question) + keys(%$alerts),  0 );
+    is( exists $error->{RETURN_IMPOSSIBLE}, 1 );
+    is( $error->{branch_to_return},         $homebranch->{branchcode} );
+
+    # TODO t::lib::Mocks::mock_preference('AllowReturnToBranch', 'homeorholdingbranch');
+};
+
+sub set_userenv {
+    my ( $library ) = @_;
+    C4::Context->set_userenv(0,0,0,'firstname','surname', $library->{branchcode}, $library->{branchname}, '', '', '');
+}
+
 1;