diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 6b0f08ba99..fe392d5058 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -84,6 +84,8 @@ class CheckoutController < ::BaseController redirect_to(main_app.shop_path) && return if redirect_to_shop? handle_invalid_stock && return unless valid_order_line_items? + return if valid_payment_intent_provided? + before_address setup_for_current_state end @@ -148,12 +150,14 @@ class CheckoutController < ::BaseController end def valid_payment_intent_provided? - return false unless params["payment_intent"]&.starts_with?("pi_") + @valid_payment_intent_provided ||= begin + return false unless params["payment_intent"]&.starts_with?("pi_") - last_payment = OrderPaymentFinder.new(@order).last_payment - @order.state == "payment" && - last_payment&.state == "requires_authorization" && - last_payment&.response_code == params["payment_intent"] + last_payment = OrderPaymentFinder.new(@order).last_payment + @order.state == "payment" && + last_payment&.state == "requires_authorization" && + last_payment&.response_code == params["payment_intent"] + end end def handle_redirect_from_stripe diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index 10bc625675..4c413727d4 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -210,6 +210,12 @@ describe CheckoutController, type: :controller do expect(response).to redirect_to order_path(order) end + it "does not attempt to load different addresses" do + expect(OpenFoodNetwork::AddressFinder).to_not receive(:new) + + get :edit, params: { payment_intent: "pi_123" } + end + it "creates a customer record" do order.update_columns(customer_id: nil) Customer.delete_all