Bug 33176: Handle RequirePaymentType

Test plan:

1. Turn on RequirePaymentType
2. Create a manual invocie on a patron account
3. Go to pay it, 'Payment type:' is marked as required.
4. In the inscept the select input ( #payment_type ) with your browser's dev tools. Removed the required attribute.
5. You are able to make the payment without a payment type.
6. Apply patch and restart_all
7. Try 4-5 again. This time you should get a 500 error and the payment should not go through.
8. Turn RequirePaymentType off. Try a payment with a payment type, you shoud be successful.
9. Make sure tests will pass:

prove -v t/db_dependent/Koha/Account.t

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Sam Lau <samalau@gmail.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit b15a15df9e)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
(cherry picked from commit 98347e1612)
Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com>
This commit is contained in:
Lucas Gass 2023-04-13 17:28:24 +00:00 committed by Pedro Amorim
parent 29b688ff19
commit db6758b8c2
3 changed files with 23 additions and 2 deletions

View File

@ -102,6 +102,10 @@ sub pay {
}
);
Koha::Exceptions::Account::PaymentTypeRequired->throw()
if ( C4::Context->preference("RequirePaymentType")
&& !defined($payment_type) );
# NOTE: Pay historically always applied as much credit as it could to all
# existing outstanding debits, whether passed specific debits or otherwise.
if ( $payment->amountoutstanding ) {

View File

@ -47,6 +47,10 @@ use Exception::Class (
'Koha::Exceptions::Account::RegisterRequired' => {
isa => 'Koha::Exceptions::Account',
description => 'Account transaction requires a cash register'
},
'Koha::Exceptions::Account::PaymentTypeRequired' => {
isa => 'Koha::Exceptions::Account',
description => 'Account transaction requires a payment type'
}
);

View File

@ -665,17 +665,31 @@ subtest 'reconcile_balance' => sub {
subtest 'pay() tests' => sub {
plan tests => 6;
plan tests => 7;
$schema->storage->txn_begin;
# Disable renewing upon fine payment
t::lib::Mocks::mock_preference( 'RenewAccruingItemWhenPaid', 0 );
my $patron = $builder->build_object({ class => 'Koha::Patrons' });
my $library = $builder->build_object({ class => 'Koha::Libraries' });
my $account = $patron->account;
t::lib::Mocks::mock_preference( 'RequirePaymentType', 1 );
throws_ok {
$account->pay(
{
amount => 5,
interface => 'intranet'
}
);
}
'Koha::Exceptions::Account::PaymentTypeRequired',
'Exception thrown for RequirePaymentType:1 + payment_type:undef';
t::lib::Mocks::mock_preference( 'RequirePaymentType', 0 );
my $context = Test::MockModule->new('C4::Context');
$context->mock( 'userenv', { branch => $library->id } );
@ -688,7 +702,6 @@ subtest 'pay() tests' => sub {
my $credit_2 = Koha::Account::Lines->find( $credit_2_id );
is( $credit_2->branchcode, $library->id, 'branchcode set because library_id was passed' );
# Enable cash registers
t::lib::Mocks::mock_preference( 'UseCashRegisters', 1 );
throws_ok {