From b7976a23562e2ae7dcb235c7e4997d11ad323178 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Thu, 19 Oct 2017 16:54:39 +1100 Subject: [PATCH] Do not update finalized fee adjustments --- app/models/spree/order_decorator.rb | 5 +++++ spec/models/spree/order_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 31c14c0225..b24d971447 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -144,6 +144,8 @@ Spree::Order.class_eval do end # After changing line items of a completed order + # TODO: perhaps this should be triggered from a controller + # rather than an after_save callback? def update_shipping_fees! shipments.each do |shipment| next if shipment.shipped? @@ -153,6 +155,8 @@ Spree::Order.class_eval do end # After changing line items of a completed order + # TODO: perhaps this should be triggered from a controller + # rather than an after_save callback? def update_payment_fees! payments.each do |payment| next if payment.completed? @@ -367,6 +371,7 @@ Spree::Order.class_eval do end def update_adjustment!(adjustment) + return if adjustment.finalized? state = adjustment.state adjustment.state = 'open' adjustment.update!(self) diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index d722e234d2..7b1f464dc8 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -687,6 +687,26 @@ describe Spree::Order do expect(order.adjustment_total).to eq expected_fees - shipping_fee - payment_fee expect(order.shipment.adjustment.included_tax).to eq 0.6 end + + context "when finalized fee adjustments exist on the order" do + let(:payment_fee_adjustment) { order.adjustments.payment_fee.first } + let(:shipping_fee_adjustment) { order.adjustments.shipping.first } + + before do + payment_fee_adjustment.finalize! + shipping_fee_adjustment.finalize! + order.reload + end + + it "does not attempt to update such adjustments" do + order.update_attributes(line_items_attributes: [{id: order.line_items.first.id, quantity: 0}]) + + # Check if fees got updated + order.reload + expect(order.adjustment_total).to eq expected_fees + expect(order.shipment.adjustment.included_tax).to eq 1.2 + end + end end context "changing the shipping method to one without fees" do