Bugzilla – Attachment 41473 Details for
Bug 11229
makepayment and makepartialpayment (C4::Accounts) don't log branch to statistics table
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11229: (regression tests) makepayment and makepartialpayment should log correctly
Bug-11229-regression-tests-makepayment-and-makepar.patch (text/plain), 16.14 KB, created by
Tomás Cohen Arazi (tcohen)
on 2015-08-13 15:10:52 UTC
(
hide
)
Description:
Bug 11229: (regression tests) makepayment and makepartialpayment should log correctly
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi (tcohen)
Created:
2015-08-13 15:10:52 UTC
Size:
16.14 KB
patch
obsolete
>From cfdae1a7fcc439ca44d7dda8c64d830f2861b236 Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@unc.edu.ar> >Date: Thu, 13 Aug 2015 11:32:49 -0300 >Subject: [PATCH] Bug 11229: (regression tests) makepayment and > makepartialpayment should log correctly > >This patch introduces tests for makepayment and makepartialpayment to check >they are correctly logging to the statistics table. > >To test: >- Run > $ prove t/db_dependent/Accounts.t >=> FAIL: tests fail because statistics are not correctly logged. > >Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar> >--- > t/db_dependent/Accounts.t | 393 +++++++++++++++++++++++++++++----------------- > 1 file changed, 253 insertions(+), 140 deletions(-) > >diff --git a/t/db_dependent/Accounts.t b/t/db_dependent/Accounts.t >index a167f02..6bf0bb0 100644 >--- a/t/db_dependent/Accounts.t >+++ b/t/db_dependent/Accounts.t >@@ -16,12 +16,14 @@ > # You should have received a copy of the GNU General Public License along > # with Koha; if not, see <http://www.gnu.org/licenses>. > >-use strict; >-use warnings; >+use Modern::Perl; > >-use Test::More tests => 15; >+use Test::More tests => 8; >+use Test::MockModule; > use Test::Warn; > >+use t::lib::TestBuilder; >+ > BEGIN { > use_ok('C4::Accounts'); > use_ok('Koha::Object'); >@@ -29,23 +31,25 @@ BEGIN { > use_ok('Data::Dumper'); > } > >-can_ok( 'C4::Accounts', >- qw( recordpayment >- makepayment >- getnextacctno >- >- chargelostitem >- manualinvoice >- getcharges >- ModNote >- getcredits >- getrefunds >- ReversePayment >- recordpayment_selectaccts >- makepartialpayment >- WriteOffFee ) >+can_ok( 'C4::Accounts', >+ qw( recordpayment >+ makepayment >+ getnextacctno >+ chargelostitem >+ manualinvoice >+ getcharges >+ ModNote >+ getcredits >+ getrefunds >+ ReversePayment >+ recordpayment_selectaccts >+ makepartialpayment >+ WriteOffFee ) > ); > >+my $builder = t::lib::TestBuilder->new(); >+my $schema = Koha::Database->new()->schema(); >+ > my $dbh = C4::Context->dbh; > $dbh->{RaiseError}=1; > $dbh->{AutoCommit}=0; >@@ -53,131 +57,240 @@ $dbh->do(q|DELETE FROM accountlines|); > $dbh->do(q|DELETE FROM borrowers|); > $dbh->do(q|DELETE FROM issues|); > >-# Mock userenv >-local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /redefined/ }; >-my $userenv; >-*C4::Context::userenv = \&Mock_userenv; >-$userenv = { flags => 1, id => 'my_userid', branch => 'CPL' }; >- >-# A Borrower for the tests ---------------------- >-my $categorycode = Koha::Database->new()->schema()->resultset('Category')->first()->categorycode(); >-my $branchcode = Koha::Database->new()->schema()->resultset('Branch')->first()->branchcode(); >- >-my $borrower = Koha::Borrower->new( { >- cardnumber => '1234567890', >- surname => 'McFly', >- firstname => 'Marty', >-} ); >-$borrower->categorycode( $categorycode ); >-$borrower->branchcode( $branchcode ); >-$borrower->store; >- >-my $sth = $dbh->prepare( >- "INSERT INTO accountlines ( >- borrowernumber, >- amountoutstanding ) >- VALUES ( ?, ? )" >-); >-$sth->execute($borrower->borrowernumber, '100'); >-$sth->execute($borrower->borrowernumber, '200'); >- >-$sth = $dbh->prepare("SELECT count(*) FROM accountlines"); >-$sth->execute; >-my $count = $sth->fetchrow_array; >-is ($count, 2, 'There is 2 lines as expected'); >- >-# Testing recordpayment ------------------------- >-# There is $100 in the account >-$sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >-my $amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >-my $amountleft = 0; >-for my $line ( @$amountoutstanding ) { >- $amountleft += $line; >-} >-ok($amountleft == 300, 'The account has 300$ as expected' ); >- >-# We make a $20 payment >-my $borrowernumber = $borrower->borrowernumber; >-my $data = '20.00'; >-my $sys_paytype; >-my $payment_note = '$20.00 payment note'; >-recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >-# There is now $280 in the account >-$sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >-$amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >-$amountleft = 0; >-for my $line ( @$amountoutstanding ) { >- $amountleft += $line; >-} >-ok($amountleft == 280, 'The account has $280 as expected' ); >-# Is the payment note well registered >-$sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >-$sth->execute($borrower->borrowernumber); >-my $note = $sth->fetchrow_array; >-is($note,'$20.00 payment note', '$20.00 payment note is registered'); >- >-# We make a -$30 payment (a NEGATIVE payment) >-$data = '-30.00'; >-$payment_note = '-$30.00 payment note'; >-recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >-# There is now $310 in the account >-$sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >-$amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >-$amountleft = 0; >-for my $line ( @$amountoutstanding ) { >- $amountleft += $line; >-} >-ok($amountleft == 310, 'The account has $310 as expected' ); >-# Is the payment note well registered >-$sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >-$sth->execute($borrower->borrowernumber); >-$note = $sth->fetchrow_array; >-is($note,'-$30.00 payment note', '-$30.00 payment note is registered'); >- >-#We make a $150 payment ( > 1stLine ) >-$data = '150.00'; >-$payment_note = '$150.00 payment note'; >-recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >-# There is now $160 in the account >-$sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >-$amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >-$amountleft = 0; >-for my $line ( @$amountoutstanding ) { >- $amountleft += $line; >-} >-ok($amountleft == 160, 'The account has $160 as expected' ); >-# Is the payment note well registered >-$sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >-$sth->execute($borrower->borrowernumber); >-$note = $sth->fetchrow_array; >-is($note,'$150.00 payment note', '$150.00 payment note is registered'); >- >-#We make a $200 payment ( > amountleft ) >-$data = '200.00'; >-$payment_note = '$200.00 payment note'; >-recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >-# There is now -$40 in the account >-$sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >-$amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >-$amountleft = 0; >-for my $line ( @$amountoutstanding ) { >- $amountleft += $line; >-} >-ok($amountleft == -40, 'The account has -$40 as expected, (credit situation)' ); >-# Is the payment note well registered >-$sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >-$sth->execute($borrower->borrowernumber); >-$note = $sth->fetchrow_array; >-is($note,'$200.00 payment note', '$200.00 payment note is registered'); >+my $branchcode = 'CPL'; >+my $borrower_number; > >+my $context = new Test::MockModule('C4::Context'); >+$context->mock( 'userenv', sub { >+ return { >+ flags => 1, >+ id => 'my_userid', >+ branch => $branchcode, >+ }; >+}); > > >-$dbh->rollback; >+subtest "recordpayment() tests" => sub { >+ >+ plan tests => 10; >+ >+ # Create a borrower >+ my $categorycode = $builder->build({ source => 'Category' })->{ categorycode }; >+ my $branchcode = $builder->build({ source => 'Branch' })->{ branchcode }; >+ >+ my $borrower = Koha::Borrower->new( { >+ cardnumber => '1234567890', >+ surname => 'McFly', >+ firstname => 'Marty', >+ } ); >+ $borrower->categorycode( $categorycode ); >+ $borrower->branchcode( $branchcode ); >+ $borrower->store; >+ >+ my $sth = $dbh->prepare( >+ "INSERT INTO accountlines ( >+ borrowernumber, >+ amountoutstanding ) >+ VALUES ( ?, ? )" >+ ); >+ $sth->execute($borrower->borrowernumber, '100'); >+ $sth->execute($borrower->borrowernumber, '200'); >+ >+ $sth = $dbh->prepare("SELECT count(*) FROM accountlines"); >+ $sth->execute; >+ my $count = $sth->fetchrow_array; >+ is ($count, 2, 'There is 2 lines as expected'); >+ >+ # Testing recordpayment ------------------------- >+ # There is $100 in the account >+ $sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >+ my $amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >+ my $amountleft = 0; >+ for my $line ( @$amountoutstanding ) { >+ $amountleft += $line; >+ } >+ ok($amountleft == 300, 'The account has 300$ as expected' ); >+ >+ # We make a $20 payment >+ my $borrowernumber = $borrower->borrowernumber; >+ my $data = '20.00'; >+ my $sys_paytype; >+ my $payment_note = '$20.00 payment note'; >+ recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >+ # There is now $280 in the account >+ $sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >+ $amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >+ $amountleft = 0; >+ for my $line ( @$amountoutstanding ) { >+ $amountleft += $line; >+ } >+ ok($amountleft == 280, 'The account has $280 as expected' ); >+ # Is the payment note well registered >+ $sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >+ $sth->execute($borrower->borrowernumber); >+ my $note = $sth->fetchrow_array; >+ is($note,'$20.00 payment note', '$20.00 payment note is registered'); >+ >+ # We make a -$30 payment (a NEGATIVE payment) >+ $data = '-30.00'; >+ $payment_note = '-$30.00 payment note'; >+ recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >+ # There is now $310 in the account >+ $sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >+ $amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >+ $amountleft = 0; >+ for my $line ( @$amountoutstanding ) { >+ $amountleft += $line; >+ } >+ ok($amountleft == 310, 'The account has $310 as expected' ); >+ # Is the payment note well registered >+ $sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >+ $sth->execute($borrower->borrowernumber); >+ $note = $sth->fetchrow_array; >+ is($note,'-$30.00 payment note', '-$30.00 payment note is registered'); >+ >+ #We make a $150 payment ( > 1stLine ) >+ $data = '150.00'; >+ $payment_note = '$150.00 payment note'; >+ recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >+ # There is now $160 in the account >+ $sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >+ $amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >+ $amountleft = 0; >+ for my $line ( @$amountoutstanding ) { >+ $amountleft += $line; >+ } >+ ok($amountleft == 160, 'The account has $160 as expected' ); >+ # Is the payment note well registered >+ $sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >+ $sth->execute($borrower->borrowernumber); >+ $note = $sth->fetchrow_array; >+ is($note,'$150.00 payment note', '$150.00 payment note is registered'); >+ >+ #We make a $200 payment ( > amountleft ) >+ $data = '200.00'; >+ $payment_note = '$200.00 payment note'; >+ recordpayment($borrowernumber, $data, $sys_paytype, $payment_note); >+ # There is now -$40 in the account >+ $sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); >+ $amountoutstanding = $dbh->selectcol_arrayref($sth, {}, $borrower->borrowernumber); >+ $amountleft = 0; >+ for my $line ( @$amountoutstanding ) { >+ $amountleft += $line; >+ } >+ ok($amountleft == -40, 'The account has -$40 as expected, (credit situation)' ); >+ # Is the payment note well registered >+ $sth = $dbh->prepare("SELECT note FROM accountlines WHERE borrowernumber=? ORDER BY accountlines_id DESC LIMIT 1"); >+ $sth->execute($borrower->borrowernumber); >+ $note = $sth->fetchrow_array; >+ is($note,'$200.00 payment note', '$200.00 payment note is registered'); >+}; >+ >+subtest "makepayment() tests" => sub { >+ >+ plan tests => 6; >+ >+ # Create a borrower >+ my $category = $builder->build({ source => 'Category' })->{ categorycode }; >+ my $branch = $builder->build({ source => 'Branch' })->{ branchcode }; >+ $branchcode = $branch; >+ my $borrowernumber = $builder->build({ >+ source => 'Borrower', >+ value => { categorycode => $category, >+ branchcode => $branch } >+ })->{ borrowernumber }; > >+ my $amount = 100; >+ my $accountline = $builder->build({ source => 'Accountline', >+ value => { borrowernumber => $borrowernumber, >+ amount => $amount, >+ amountoutstanding => $amount } >+ }); > >-# Sub ------------------------------------------- >+ my $rs = $schema->resultset('Accountline')->search({ >+ borrowernumber => $borrowernumber >+ }); >+ >+ is( $rs->count(), 1, 'Accountline created' ); >+ >+ # make the full payment >+ makepayment( >+ $accountline->{ accountlines_id }, $borrowernumber, >+ $accountline->{ accountno }, $amount, >+ $borrowernumber, $branch, 'A payment note' ); >+ >+ # TODO: someone should write actual tests for makepayment() >+ >+ my $stat = $schema->resultset('Statistic')->search({ >+ branch => $branch, >+ type => 'payment' >+ }, { order_by => { -desc => 'datetime' } })->next(); >+ >+ ok( defined $stat, "There's a payment log that matches the branch" ); >+ >+ SKIP: { >+ skip "No statistic logged", 4 unless defined $stat; >+ >+ is( $stat->type, 'payment', "Correct statistic type" ); >+ is( $stat->branch, $branch, "Correct branch logged to statistics" ); >+ is( $stat->borrowernumber, $borrowernumber, "Correct borrowernumber logged to statistics" ); >+ is( $stat->value, "$amount" . "\.0000", "Correct amount logged to statistics" ); >+ } >+}; >+ >+subtest "makepartialpayment() tests" => sub { >+ >+ plan tests => 6; >+ >+ # Create a borrower >+ my $category = $builder->build({ source => 'Category' })->{ categorycode }; >+ my $branch = $builder->build({ source => 'Branch' })->{ branchcode }; >+ $branchcode = $branch; >+ my $borrowernumber = $builder->build({ >+ source => 'Borrower', >+ value => { categorycode => $category, >+ branchcode => $branch } >+ })->{ borrowernumber }; >+ >+ my $amount = 100; >+ my $partialamount = 60; >+ my $accountline = $builder->build({ source => 'Accountline', >+ value => { borrowernumber => $borrowernumber, >+ amount => $amount, >+ amountoutstanding => $amount } >+ }); >+ >+ my $rs = $schema->resultset('Accountline')->search({ >+ borrowernumber => $borrowernumber >+ }); >+ >+ is( $rs->count(), 1, 'Accountline created' ); >+ >+ # make the full payment >+ makepartialpayment( >+ $accountline->{ accountlines_id }, $borrowernumber, >+ $accountline->{ accountno }, $partialamount, >+ $borrowernumber, $branch, 'A payment note' ); >+ >+ # TODO: someone should write actual tests for makepartialpayment() >+ >+ my $stat = $schema->resultset('Statistic')->search({ >+ branch => $branch, >+ type => 'payment' >+ }, { order_by => { -desc => 'datetime' } })->next(); >+ >+ ok( defined $stat, "There's a payment log that matches the branch" ); >+ >+ SKIP: { >+ skip "No statistic logged", 4 unless defined $stat; >+ >+ is( $stat->type, 'payment', "Correct statistic type" ); >+ is( $stat->branch, $branch, "Correct branch logged to statistics" ); >+ is( $stat->borrowernumber, $borrowernumber, "Correct borrowernumber logged to statistics" ); >+ is( $stat->value, "$partialamount" . "\.0000", "Correct amount logged to statistics" ); >+ } >+}; >+ >+$dbh->rollback; > >-# C4::Context->userenv >-sub Mock_userenv { >- return $userenv; >-} >\ No newline at end of file >+1; >\ No newline at end of file >-- >2.5.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11229
:
39971
|
41473
|
41474
|
41475
|
41619
|
41620
|
41621
|
41622
|
41623