From 3b15e0ee152f9b5230bd2ee2675cfe8e39ffa89e Mon Sep 17 00:00:00 2001 From: Andy Brett Date: Fri, 26 Feb 2021 18:05:27 -0800 Subject: [PATCH] only complete the payment if it is in a completable state --- app/services/process_payment_intent.rb | 2 +- spec/services/process_payment_intent_spec.rb | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/services/process_payment_intent.rb b/app/services/process_payment_intent.rb index 5c5085cb55..d3142462f7 100644 --- a/app/services/process_payment_intent.rb +++ b/app/services/process_payment_intent.rb @@ -20,7 +20,7 @@ class ProcessPaymentIntent last_payment.update_attribute(:cvv_response_message, nil) OrderWorkflow.new(@order).next - last_payment.complete! if !last_payment.completed? + last_payment.complete! if last_payment.can_complete? end private diff --git a/spec/services/process_payment_intent_spec.rb b/spec/services/process_payment_intent_spec.rb index fdb906c2ea..c93082da2a 100644 --- a/spec/services/process_payment_intent_spec.rb +++ b/spec/services/process_payment_intent_spec.rb @@ -47,5 +47,19 @@ describe ProcessPaymentIntent do expect(order).to have_received(:deliver_order_confirmation_email) end end + + context "payment is in a failed state" do + let(:invalid_intent) { "invalid" } + let(:service) { ProcessPaymentIntent.new(invalid_intent, order) } + + before do + payment.update_attribute(:state, "failed") + end + + it "does not complete the payment" do + service.call! + expect(payment.reload.state).to eq("failed") + end + end end end