From ced53298355ce07cbd1e1b6cc30bbb2ba03600a4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 4 Oct 2020 23:54:19 +0100 Subject: [PATCH 1/2] Add Stripe spec for multiple attempted payments at checkout --- .../consumer/shopping/checkout_stripe_spec.rb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/spec/features/consumer/shopping/checkout_stripe_spec.rb b/spec/features/consumer/shopping/checkout_stripe_spec.rb index 40543e164f..eb0bc20a2d 100644 --- a/spec/features/consumer/shopping/checkout_stripe_spec.rb +++ b/spec/features/consumer/shopping/checkout_stripe_spec.rb @@ -181,6 +181,34 @@ feature "Check out with Stripe", js: true do end end end + + context "with multiple payment attempts; one failed and one succeeded" do + let(:error_message) { "Card was declined: insufficient funds." } + + before do + stub_payment_intents_post_request order: order + end + + it "records failed payment attempt and allows order completion" do + # First payment attempt is rejected + stub_failed_capture_request(order: order, response: { message: error_message }) + checkout_with_stripe + expect(page).to have_content error_message + + expect(order.reload.payments.count).to eq 1 + expect(order.state).to eq "cart" + expect(order.payments.first.state).to eq "failed" + + # Second payment attempt is accepted + stub_successful_capture_request order: order + place_order + expect(page).to have_content "Confirmed" + + expect(order.reload.payments.count).to eq 2 + expect(order.state).to eq "complete" + expect(order.payments.last.state).to eq "completed" + end + end end end end From 3b130327a5a3df0766f05b518bed0c6e5049fcdf Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 4 Oct 2020 23:58:18 +0100 Subject: [PATCH 2/2] DRY error_message variable used multiple times --- spec/features/consumer/shopping/checkout_stripe_spec.rb | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/spec/features/consumer/shopping/checkout_stripe_spec.rb b/spec/features/consumer/shopping/checkout_stripe_spec.rb index eb0bc20a2d..349bb6838b 100644 --- a/spec/features/consumer/shopping/checkout_stripe_spec.rb +++ b/spec/features/consumer/shopping/checkout_stripe_spec.rb @@ -88,6 +88,7 @@ feature "Check out with Stripe", js: true do create(:stripe_sca_payment_method, distributors: [distributor]) } let!(:shipping_method) { create(:shipping_method) } + let(:error_message) { "Card was declined: insufficient funds." } context "with guest checkout" do before do @@ -111,8 +112,6 @@ feature "Check out with Stripe", js: true do end context "when the card is rejected" do - let(:error_message) { "Card was declined: insufficient funds." } - before do stub_payment_intents_post_request order: order stub_failed_capture_request order: order, response: { message: error_message } @@ -163,8 +162,6 @@ feature "Check out with Stripe", js: true do end describe "and the authorization fails" do - let(:error_message) { "Card was declined: insufficient funds." } - before do stub_failed_capture_request order: order, response: { message: error_message } end @@ -183,8 +180,6 @@ feature "Check out with Stripe", js: true do end context "with multiple payment attempts; one failed and one succeeded" do - let(:error_message) { "Card was declined: insufficient funds." } - before do stub_payment_intents_post_request order: order end