diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 29e1814e35..31c5f89bbb 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -191,17 +191,19 @@ class CheckoutController < ::BaseController end def redirect_to_payment_gateway - payment_method_id = params.dig(:order, :payments_attributes, 0, :payment_method_id) - payment_method = Spree::PaymentMethod.find(payment_method_id) - - redirect_url = payment_method&.external_payment_url(order: @order) - - return if redirect_url.blank? + return unless selected_payment_method.external_gateway? + return unless (redirect_url = selected_payment_method.external_payment_url(order: @order)) render json: { path: redirect_url }, status: :ok true end + def selected_payment_method + @selected_payment_method ||= Spree::PaymentMethod.find( + params.dig(:order, :payments_attributes, 0, :payment_method_id) + ) + end + def order_error if @order.errors.present? @order.errors.full_messages.to_sentence diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index a5be72e102..4663cc1941 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -423,6 +423,7 @@ describe CheckoutController, type: :controller do it "should call Stripe redirect and redirect if a path is provided" do expect(Spree::PaymentMethod).to receive(:find).and_return(payment_method) + expect(payment_method).to receive(:external_gateway?).and_return(true) expect(payment_method).to receive(:external_payment_url).and_return("test_path") spree_post :update,