Bug 21896: Add unit tests for Koha::Account::normalize_balance
authorTomas Cohen Arazi <tomascohen@theke.io>
Tue, 27 Nov 2018 20:06:20 +0000 (17:06 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 10 Dec 2018 09:54:15 +0000 (09:54 +0000)
Signed-off-by: Christopher Brannon <cbrannon@cdalibrary.org>

Signed-off-by: Mark Tompsett <mtompset@hotmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

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

t/db_dependent/Koha/Account.t

index ff400c7..ad9da10 100755 (executable)
@@ -19,7 +19,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 4;
+use Test::More tests => 5;
 
 use Koha::Account;
 use Koha::Account::Lines;
@@ -225,3 +225,124 @@ subtest 'lines() tests' => sub {
 
     $schema->storage->txn_rollback;
 };
+
+subtest 'normalize_balance' => sub {
+
+    plan tests => 3;
+
+    subtest 'more credit than debit' => sub {
+
+        plan tests => 6;
+
+        $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 => 2 });
+        $account->add_credit({ amount => 3 });
+        $account->add_credit({ amount => 4 });
+        $account->add_credit({ amount => 5 });
+
+        # Add Debits TODO: replace for calls to add_debit when time comes
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4 })->store;
+
+        # Paid Off
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0 })->store;
+
+        is( $account->balance(), -5, "Account balance is -5" );
+        is( $account->outstanding_debits->total_outstanding, 10, 'Outstanding debits sum 10' );
+        is( $account->outstanding_credits->total_outstanding, -15, 'Outstanding credits sum -15' );
+
+        $account->normalize_balance();
+
+        is( $account->balance(), -5, "Account balance is -5" );
+        is( $account->outstanding_debits->total_outstanding, 0, 'No outstanding debits' );
+        is( $account->outstanding_credits->total_outstanding, -5, 'Outstanding credits sum -5' );
+
+        $schema->storage->txn_rollback;
+    };
+
+    subtest 'same debit than credit' => sub {
+
+        plan tests => 6;
+
+        $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 => 2 });
+        $account->add_credit({ amount => 3 });
+        $account->add_credit({ amount => 4 });
+
+        # Add Debits TODO: replace for calls to add_debit when time comes
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4 })->store;
+
+        # Paid Off
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0 })->store;
+
+        is( $account->balance(), 0, "Account balance is 0" );
+        is( $account->outstanding_debits->total_outstanding, 10, 'Outstanding debits sum 10' );
+        is( $account->outstanding_credits->total_outstanding, -10, 'Outstanding credits sum -10' );
+
+        $account->normalize_balance();
+
+        is( $account->balance(), 0, "Account balance is 0" );
+        is( $account->outstanding_debits->total_outstanding, 0, 'No outstanding debits' );
+        is( $account->outstanding_credits->total_outstanding, 0, 'Outstanding credits sum 0' );
+
+        $schema->storage->txn_rollback;
+    };
+
+    subtest 'more debit than credit' => sub {
+
+        plan tests => 6;
+
+        $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 => 2 });
+        $account->add_credit({ amount => 3 });
+        $account->add_credit({ amount => 4 });
+
+        # Add Debits TODO: replace for calls to add_debit when time comes
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 5, amountoutstanding => 5 })->store;
+
+        # Paid Off
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0 })->store;
+        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0 })->store;
+
+        is( $account->balance(), 5, "Account balance is 5" );
+        is( $account->outstanding_debits->total_outstanding, 15, 'Outstanding debits sum 15' );
+        is( $account->outstanding_credits->total_outstanding, -10, 'Outstanding credits sum -10' );
+
+        $account->normalize_balance();
+
+        is( $account->balance(), 5, "Account balance is 5" );
+        is( $account->outstanding_debits->total_outstanding, 5, 'Outstanding debits sum 5' );
+        is( $account->outstanding_credits->total_outstanding, 0, 'Outstanding credits sum 0' );
+
+        $schema->storage->txn_rollback;
+    };
+};