use t::lib::TestBuilder;
-use Test::More tests => 84;
+use Test::More tests => 85;
BEGIN {
use_ok('C4::Circulation');
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;