diff --git a/app/controllers/spree/admin/payments_controller.rb b/app/controllers/spree/admin/payments_controller.rb index bdc610e8a7..f818022dfd 100644 --- a/app/controllers/spree/admin/payments_controller.rb +++ b/app/controllers/spree/admin/payments_controller.rb @@ -130,11 +130,11 @@ module Spree # At this point admin should have passed through Customer Details step # where order.next is called which leaves the order in payment step # - # Orders in complete step also allows to access this controller + # Orders in complete or canceled step also allows to access this controller # # Otherwise redirect user to that step def can_transition_to_payment - return if @order.payment? || @order.complete? + return if @order.payment? || @order.complete? || @order.canceled? flash[:notice] = Spree.t(:fill_in_customer_info) redirect_to spree.edit_admin_order_customer_url(@order) diff --git a/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb b/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb index a6ed887d61..cc743c1f4b 100644 --- a/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb +++ b/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb @@ -278,4 +278,25 @@ describe Spree::Admin::PaymentsController, type: :controller do end end end + + describe '#index' do + context "order is canceled but has a completed payment" do + let(:payment_method) do + create( + :stripe_sca_payment_method, + distributor_ids: [create(:distributor_enterprise).id], + preferred_enterprise_id: create(:enterprise).id + ) + end + let!(:order) { create(:order, state: 'canceled') } + let!(:payment) do + create(:payment, order: order, payment_method: payment_method, amount: order.total) + end + + it "renders the payments tab" do + spree_get :index, order_id: order.number + expect(response.status).to eq 200 + end + end + end end