diff --git a/app/PaymentDrivers/Stripe/ACH.php b/app/PaymentDrivers/Stripe/ACH.php index 1e4a3653050d..86d6d4ec6bc0 100644 --- a/app/PaymentDrivers/Stripe/ACH.php +++ b/app/PaymentDrivers/Stripe/ACH.php @@ -95,8 +95,12 @@ class ACH return render('gateways.stripe.ach.verify', $data); } - public function processVerification($request, ClientGatewayToken $token) + public function processVerification(Request $request, ClientGatewayToken $token) { + $request->validate([ + 'transactions.*' => ['integer', 'min:1'], + ]); + if (isset($token->meta->state) && $token->meta->state === 'authorized') { return redirect() ->route('client.payment_methods.show', $token->hashed_id) diff --git a/resources/views/portal/ninja2020/gateways/stripe/ach/verify.blade.php b/resources/views/portal/ninja2020/gateways/stripe/ach/verify.blade.php index 46afb0bd3d9a..fa4465b2e701 100644 --- a/resources/views/portal/ninja2020/gateways/stripe/ach/verify.blade.php +++ b/resources/views/portal/ninja2020/gateways/stripe/ach/verify.blade.php @@ -11,11 +11,23 @@ @component('portal.ninja2020.components.general.card-element', ['title' => '#1 ' . ctrans('texts.amount_cents')]) - + + + @error('transactions.0') +
+ {{ $message }} +
+ @enderror @endcomponent @component('portal.ninja2020.components.general.card-element', ['title' => '#2 ' . ctrans('texts.amount_cents')]) - + + + @error('transactions.1') +
+ {{ $message }} +
+ @enderror @endcomponent @component('portal.ninja2020.gateways.includes.pay_now', ['type' => 'submit']) diff --git a/tests/Browser/ClientPortal/Gateways/Stripe/ACHTest.php b/tests/Browser/ClientPortal/Gateways/Stripe/ACHTest.php index 53947540b35b..60f3b49324d4 100644 --- a/tests/Browser/ClientPortal/Gateways/Stripe/ACHTest.php +++ b/tests/Browser/ClientPortal/Gateways/Stripe/ACHTest.php @@ -103,4 +103,31 @@ class ACHTest extends DuskTestCase ->assertSee('Payment method has been successfully removed.'); }); } + + public function testIntegerAndMinimumValueOnVerification() + { + $this->browse(function (Browser $browser) { + $browser + ->visitRoute('client.payment_methods.index') + ->press('Add Payment Method') + ->clickLink('Bank Account') + ->type('#account-holder-name', 'John Doe') + ->select('#country', 'US') + ->select('#currency', 'USD') + ->type('#routing-number', '110000000') + ->type('#account-number', '000123456789') + ->check('#accept-terms') + ->press('Add Payment Method') + ->waitForText('ACH (Verification)', 60) + ->type('@verification-1st', '0.1') + ->type('@verification-2nd', '0') + ->press('Complete Verification') + ->assertSee('The transactions.0 must be an integer') + ->assertSee('The transactions.1 must be at least 1') + ->type('@verification-1st', '32') + ->type('@verification-2nd', '45') + ->press('Complete Verification') + ->assertSee('Bank Transfer'); + }); + } }