From 0d836d5fd6aaf1418be7087749d2a8e776a5b793 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Fri, 21 Aug 2015 13:00:11 +0200 Subject: [PATCH] Bug 14702: Unit tests for ChargeReservesFee Content-Type: text/plain; charset=utf-8 Test plan: Run the test: t/db_dependent/Reserves_ChargeReserveFee.t --- t/db_dependent/Reserves_ChargeReserveFee.t | 102 ++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 t/db_dependent/Reserves_ChargeReserveFee.t diff --git a/t/db_dependent/Reserves_ChargeReserveFee.t b/t/db_dependent/Reserves_ChargeReserveFee.t new file mode 100755 index 0000000..70ff631 --- /dev/null +++ b/t/db_dependent/Reserves_ChargeReserveFee.t @@ -0,0 +1,102 @@ +#!/usr/bin/perl + +use Modern::Perl; +use Test::More tests => 4; +use Test::MockModule; + +use C4::Circulation; +use C4::Reserves qw|AddReserve|; +use t::lib::TestBuilder; + +my $mContext = new Test::MockModule('C4::Context'); +$mContext->mock( 'userenv', sub { + return { branch => 'CPL' }; +}); + +my $builder = t::lib::TestBuilder->new(); +my $dbh = C4::Context->dbh; # after start transaction of testbuilder + +# Category with hold fee, two patrons +$builder->build({ + source => 'Category', + value => { + categorycode => 'XYZ1', + reservefee => 2.5, + }, +}); +my $patron1 = $builder->build({ + source => 'Borrower', + value => { + categorycode => 'XYZ1', + }, +}); +my $patron2 = $builder->build({ + source => 'Borrower', + value => { + categorycode => 'XYZ1', + }, +}); + +# One biblio and two items +my $biblio = $builder->build({ + source => 'Biblio', + value => { + title => 'Title 1', + }, +}); +my $item1 = $builder->build({ + source => 'Item', + value => { + biblionumber => $biblio->{biblionumber}, + }, +}); +my $item2 = $builder->build({ + source => 'Item', + value => { + biblionumber => $biblio->{biblionumber}, + }, +}); + +# Add reserve for patron1, no fee expected +my $acc1 = acctlines( $patron1->{borrowernumber} ); +my $res1 = addreserve( $patron1->{borrowernumber} ); +is( acctlines( $patron1->{borrowernumber} ), $acc1, 'No fee charged for patron 1' ); + +# Issue item1 to patron1. Since there is still a reserve too, we should +# expect a charge for patron2. +C4::Circulation::AddIssue( $patron1, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} ); # the date does not really matter +my $acc2 = acctlines( $patron1->{borrowernumber} ); +C4::Reserves::ChargeReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber}, $biblio->{title} ); +is( acctlines( $patron2->{borrowernumber} ), $acc2 + 1, 'Patron 2 charged' ); + +# If we delete the reserve, there should be no charge +$dbh->do( "DELETE FROM reserves WHERE reserve_id=?", undef, ( $res1 ) ); +C4::Reserves::ChargeReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber}, $biblio->{title} ); +is( acctlines( $patron2->{borrowernumber} ), $acc2 + 1, 'Patron 2 not charged' ); + +# If we delete the second item, there should be a charge +$dbh->do( "DELETE FROM items WHERE itemnumber=?", undef, ( $item2->{itemnumber} ) ); +C4::Reserves::ChargeReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber}, $biblio->{title} ); +is( acctlines( $patron2->{borrowernumber} ), $acc2 + 2, 'Patron 2 charged again' ); +# End of tests + +sub acctlines { + my @temp = $dbh->selectrow_array( "SELECT COUNT(*) FROM accountlines WHERE borrowernumber=?", undef, ( $_[0] ) ); + return $temp[0]; +} + +sub addreserve { + return AddReserve( + 'CPL', + $_[0], + $biblio->{biblionumber}, + undef, + '1', + undef, + undef, + '', + $biblio->{title}, + undef, + '' + ); +} -- 1.7.10.4