Bug 25127: Correction to tests
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 20 Apr 2020 08:34:19 +0000 (09:34 +0100)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Fri, 1 May 2020 14:44:51 +0000 (15:44 +0100)
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

t/db_dependent/Overdues.t

index 12c1cce..e270c52 100644 (file)
@@ -144,13 +144,13 @@ subtest 'UpdateFine tests' => sub {
     my $checkout1 = $builder->build_object(
         {
             class => 'Koha::Checkouts',
-            value => { itemnumber => $item1->itemnumber }
+            value => { itemnumber => $item1->itemnumber, borrowernumber => $patron->id }
         }
     );
     my $checkout2 = $builder->build_object(
         {
             class => 'Koha::Checkouts',
-            value => { itemnumber => $item2->itemnumber }
+            value => { itemnumber => $item2->itemnumber, borrowernumber => $patron->id }
         }
     );
 
@@ -430,27 +430,70 @@ subtest 'UpdateFine tests' => sub {
     is( $fine3->amount+0, 30, "Third fine reduced" );
     is( $fine3->amountoutstanding+0, 10, "Third fine amount outstanding is reduced" );
 
+    # Ensure calculations work correctly for floats (bug #25127)
+    # 7.2 (maxfine) - 7.2 (total_amount_other) != 8.88178419700125e-16 (😢)
     t::lib::Mocks::mock_preference( 'MaxFine', '7.2' );
-    my $patron_1    = $builder->build_object( { class => 'Koha::Patrons' } );
-    my $account   = $patron_1->account;
-    $account->add_debit({ type => 'OVERDUE', amount => '6.99', interface => 'TEST'});
-    $account->add_debit({ type => 'OVERDUE', amount => '.10', interface => 'TEST'});
-    $account->add_debit({ type => 'OVERDUE', amount => '.10', interface => 'TEST'});
-    $account->add_debit({ type => 'OVERDUE', amount => '.01', interface => 'TEST'});
+    my $patron_1   = $builder->build_object( { class => 'Koha::Patrons' } );
     my $item_1     = $builder->build_sample_item();
+    my $item_2     = $builder->build_sample_item();
     my $checkout_1 = $builder->build_object(
         {
             class => 'Koha::Checkouts',
-            value => { itemnumber => $item_1->itemnumber, borrowernumber => $patron_1->id }
+            value => {
+                itemnumber     => $item_1->itemnumber,
+                borrowernumber => $patron_1->id
+            }
+        }
+    );
+    my $checkout_2 = $builder->build_object(
+        {
+            class => 'Koha::Checkouts',
+            value => {
+                itemnumber     => $item_2->itemnumber,
+                borrowernumber => $patron->id
+            }
+        }
+    );
+    my $account = $patron_1->account;
+    $account->add_debit(
+        {
+            type      => 'OVERDUE',
+            amount    => '6.99',
+            issue_id  => $checkout_1->issue_id,
+            interface => 'TEST'
+        }
+    );
+    $account->add_debit(
+        {
+            type      => 'OVERDUE',
+            amount    => '.10',
+            issue_id  => $checkout_1->issue_id,
+            interface => 'TEST'
+        }
+    );
+    $account->add_debit(
+        {
+            type      => 'OVERDUE',
+            amount    => '.10',
+            issue_id  => $checkout_1->issue_id,
+            interface => 'TEST'
+        }
+    );
+    $account->add_debit(
+        {
+            type      => 'OVERDUE',
+            amount    => '.01',
+            issue_id  => $checkout_1->issue_id,
+            interface => 'TEST'
         }
     );
     UpdateFine(
         {
-            issue_id       => $checkout_1->issue_id,
-            itemnumber     => $item_1->itemnumber,
+            issue_id       => $checkout_2->issue_id,
+            itemnumber     => $item_2->itemnumber,
             borrowernumber => $patron_1->borrowernumber,
             amount         => '.1',
-            due            => $checkout_1->date_due
+            due            => $checkout_2->date_due
         }
     );
     $fines = Koha::Account::Lines->search(
@@ -460,6 +503,5 @@ subtest 'UpdateFine tests' => sub {
     is( $fines->count,        4,    "New amount should be 0 so no fine added" );
     ok( C4::Circulation::AddReturn( $item_1->barcode, $item_1->homebranch, 1), "Returning the item and forgiving fines succeeds");
 
-
     $schema->storage->txn_rollback;
 };