diff --git a/app/controllers/spree/admin/orders_controller.rb b/app/controllers/spree/admin/orders_controller.rb index b1ee4f3dc6..51f4bbe84d 100644 --- a/app/controllers/spree/admin/orders_controller.rb +++ b/app/controllers/spree/admin/orders_controller.rb @@ -37,6 +37,11 @@ module Spree def update @order.recreate_all_fees! + unless @order.cart? + @order.create_tax_charge! + @order.update_order! + end + unless order_params.present? && @order.update(order_params) && @order.line_items.present? if @order.line_items.empty? && !params[:suppress_error_msg] @order.errors.add(:line_items, Spree.t('errors.messages.blank')) diff --git a/spec/controllers/spree/admin/orders_controller_spec.rb b/spec/controllers/spree/admin/orders_controller_spec.rb index 0d881bc82f..bae8400fc2 100644 --- a/spec/controllers/spree/admin/orders_controller_spec.rb +++ b/spec/controllers/spree/admin/orders_controller_spec.rb @@ -58,12 +58,19 @@ describe Spree::Admin::OrdersController, type: :controller do expect(response.status).to eq 302 end - it "updates distribution charges and redirects to order details page" do - expect_any_instance_of(Spree::Order).to receive(:recreate_all_fees!) + context "recalculating fees and taxes" do + before do + allow(Spree::Order).to receive_message_chain(:includes, :find_by!) { order } + end - spree_put :update, params + it "updates fees and taxes and redirects to order details page" do + expect(order).to receive(:recreate_all_fees!) + expect(order).to receive(:create_tax_charge!) - expect(response).to redirect_to spree.edit_admin_order_path(order) + spree_put :update, params + + expect(response).to redirect_to spree.edit_admin_order_path(order) + end end context "recalculating enterprise fees" do