From 0f5c39317af89202c5a55463d24d7b8ed63b3fca Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 7 Apr 2021 15:01:24 +0100 Subject: [PATCH] Re-apply taxes in Admin::OrdersController#update Ensures taxes are updated properly when hitting the "Update and Recalculate Fees" button on the order edit page. --- app/controllers/spree/admin/orders_controller.rb | 5 +++++ .../spree/admin/orders_controller_spec.rb | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) 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