Bug 24901: Add tests for transferbook
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Thu, 19 Mar 2020 08:10:00 +0000 (08:10 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Fri, 20 Mar 2020 10:22:56 +0000 (10:22 +0000)
Test plan:
0/ Read the commit and confirm the new tests make sence
1/ Run the tests and verify they pass
2/ Signoff

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
t/db_dependent/Circulation/transferbook.t

index e37324f..0428307 100644 (file)
@@ -17,7 +17,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 2;
+use Test::More tests => 4;
 use t::lib::TestBuilder;
 use t::lib::Mocks;
 
@@ -47,8 +47,53 @@ subtest 'transfer a non-existant item' => sub {
     );
 };
 
+#FIXME:'UseBranchTransferLimits tests missing
+
+subtest 'transfer already at destination' => sub {
+    plan tests => 5;
+
+    my $library = $builder->build_object( { class => 'Koha::Libraries' } )->store;
+    t::lib::Mocks::mock_userenv( { branchcode => $library->branchcode } );
+
+    my $patron = $builder->build_object(
+        {
+            class => 'Koha::Patrons',
+            value => { branchcode => $library->branchcode }
+        }
+    );
+
+    my $item = $builder->build_sample_item(
+        {
+            library => $library->branchcode,
+        }
+    );
+
+    my ($dotransfer, $messages ) = transferbook( $library->branchcode, $item->barcode );
+    is( $dotransfer, 0, 'Transfer of reserved item failed with ignore reserves: true' );
+    is_deeply(
+        $messages,
+        { 'DestinationEqualsHolding' => 1 },
+        "We got the expected failure message: DestinationEqualsHolding"
+    );
+
+    # We are making sure there is no regression, feel free to change the behavior if needed.
+    # * Contrary to the POD, if ignore_reserves is not passed (or is false), any item reserve
+    #   found will override all other measures that may prevent transfer and force a transfer.
+    AddReserve({
+        branchcode     => $item->homebranch,
+        borrowernumber => $patron->borrowernumber,
+        biblionumber   => $item->biblionumber,
+        itemnumber     => $item->itemnumber,
+    });
+
+    ($dotransfer, $messages ) = transferbook( $library->branchcode, $item->barcode );
+    is( $dotransfer, 1, 'Transfer of reserved item succeeded without ignore reserves' );
+    is( $messages->{ResFound}->{ResFound}, 'Reserved', "We found the reserve");
+    is( $messages->{ResFound}->{itemnumber}, $item->itemnumber, "We got the reserve info");
+};
+
 subtest 'transfer an issued item' => sub {
-    plan tests => 3;
+    plan tests => 5;
 
     my $library = $builder->build_object( { class => 'Koha::Libraries' } )->store;
     t::lib::Mocks::mock_userenv( { branchcode => $library->branchcode } );
@@ -75,13 +120,73 @@ subtest 'transfer an issued item' => sub {
     my ($dotransfer, $messages) = transferbook( $library->branchcode, $item->barcode );
     is( $messages->{WasReturned}, $patron->borrowernumber, 'transferbook should have return a WasReturned flag is the item was issued before the transferbook call');
 
+    # Reset issue
+    $issue = AddIssue( $patron->unblessed, $item->barcode, $dt_to );
+
+    # We are making sure there is no regression, feel free to change the behavior if needed.
+    # * Contrary to the POD, if ignore_reserves is not passed (or is false), any item reserve
+    #   found will override all other measures that may prevent transfer and force a transfer.
     AddReserve({
         branchcode     => $item->homebranch,
         borrowernumber => $patron->borrowernumber,
         biblionumber   => $item->biblionumber,
         itemnumber     => $item->itemnumber,
     });
+
     ($dotransfer, $messages ) = transferbook( $library->branchcode, $item->barcode );
+    is( $dotransfer, 1, 'Transfer of reserved item succeeded without ignore reserves' );
+    is( $messages->{ResFound}->{ResFound}, 'Reserved', "We found the reserve");
+    is( $messages->{ResFound}->{itemnumber}, $item->itemnumber, "We got the reserve info");
+    is( $messages->{WasReturned}, $patron->borrowernumber, "We got the return info");
+};
+
+subtest 'ignore_reserves flag' => sub {
+    plan tests => 10;
+    my $library = $builder->build_object( { class => 'Koha::Libraries' } )->store;
+    t::lib::Mocks::mock_userenv( { branchcode => $library->branchcode } );
+
+    my $patron = $builder->build_object(
+        {
+            class => 'Koha::Patrons',
+            value => { branchcode => $library->branchcode }
+        }
+    );
+
+    my $item = $builder->build_sample_item(
+        {
+            library => $library->branchcode,
+        }
+    );
+
+    AddReserve({
+        branchcode     => $item->homebranch,
+        borrowernumber => $patron->borrowernumber,
+        biblionumber   => $item->biblionumber,
+        itemnumber     => $item->itemnumber,
+    });
+
+    # We are making sure there is no regression, feel free to change the behavior if needed.
+    # * Contrary to the POD, if ignore_reserves is not passed (or is false), any item reserve
+    #   found will override all other measures that may prevent transfer and force a transfer.
+    my ($dotransfer, $messages ) = transferbook( $library->branchcode, $item->barcode );
+    is( $dotransfer, 1, 'Transfer of reserved item succeeded without ignore reserves' );
+    is( $messages->{ResFound}->{ResFound}, 'Reserved', "We found the reserve");
+    is( $messages->{ResFound}->{itemnumber}, $item->itemnumber, "We got the reserve info");
+
+    my $ignore_reserves = 0;
+    ($dotransfer, $messages ) = transferbook( $library->branchcode, $item->barcode, $ignore_reserves );
+    is( $dotransfer, 1, 'Transfer of reserved item succeeded with ignore reserves: false' );
     is( $messages->{ResFound}->{ResFound}, 'Reserved', "We found the reserve");
     is( $messages->{ResFound}->{itemnumber}, $item->itemnumber, "We got the reserve info");
+
+    $ignore_reserves = 1;
+    ($dotransfer, $messages ) = transferbook( $library->branchcode, $item->barcode, $ignore_reserves );
+    is( $dotransfer, 0, 'Transfer of reserved item failed with ignore reserves: true' );
+    is_deeply(
+        $messages,
+        { 'DestinationEqualsHolding' => 1 },
+        "We got the expected failure message: DestinationEqualsHolding"
+    );
+    isnt( $messages->{ResFound}->{ResFound}, 'Reserved', "We did not return that we found a reserve");
+    isnt( $messages->{ResFound}->{itemnumber}, $item->itemnumber, "We did not return the reserve info");
 };