Bug 21896: (QA follow-up) Add tests for FIFO behaviour
authorTomas Cohen Arazi <tomascohen@theke.io>
Thu, 29 Nov 2018 13:55:51 +0000 (10:55 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 10 Dec 2018 09:55:16 +0000 (09:55 +0000)
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit 4302bdda5c1c348e63003589795af3d37249c167)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

t/db_dependent/Koha/Account.t

index 39c0664..f11a2f2 100755 (executable)
@@ -228,7 +228,7 @@ subtest 'lines() tests' => sub {
 
 subtest 'reconcile_balance' => sub {
 
-    plan tests => 3;
+    plan tests => 4;
 
     subtest 'more credit than debit' => sub {
 
@@ -345,4 +345,42 @@ subtest 'reconcile_balance' => sub {
 
         $schema->storage->txn_rollback;
     };
+
+    subtest 'credits are applied to older debits first' => sub {
+
+        plan tests => 9;
+
+        $schema->storage->txn_begin;
+
+        my $patron  = $builder->build_object({ class => 'Koha::Patrons' });
+        my $account = $patron->account;
+
+        # Add Credits
+        $account->add_credit({ amount => 1 });
+        $account->add_credit({ amount => 3 });
+
+        # Add Debits TODO: replace for calls to add_debit when time comes
+        my $debit_1 = Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1 })->store;
+        my $debit_2 = Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2 })->store;
+        my $debit_3 = Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3 })->store;
+
+        is( $account->balance(), 2, "Account balance is 2" );
+        is( $account->outstanding_debits->total_outstanding, 6, 'Outstanding debits sum 6' );
+        is( $account->outstanding_credits->total_outstanding, -4, 'Outstanding credits sum -4' );
+
+        $account->reconcile_balance();
+
+        is( $account->balance(), 2, "Account balance is 2" );
+        is( $account->outstanding_debits->total_outstanding, 2, 'Outstanding debits sum 2' );
+        is( $account->outstanding_credits->total_outstanding, 0, 'Outstanding credits sum 0' );
+
+        $debit_1->discard_changes;
+        is( $debit_1->amountoutstanding + 0, 0, 'Old debit payed' );
+        $debit_2->discard_changes;
+        is( $debit_2->amountoutstanding + 0, 0, 'Old debit payed' );
+        $debit_3->discard_changes;
+        is( $debit_3->amountoutstanding + 0, 2, 'Newest debit only partially payed' );
+
+        $schema->storage->txn_rollback;
+    };
 };