From e87477b6798cfe1f4490be3ee25a231f792e91fb Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 10 Feb 2025 16:28:19 +1100 Subject: [PATCH] Refactor EnterpriseFee.clear_all_adjustments Renamed to clear_order_adjustments, it doesn't clear line item adjustment --- app/models/enterprise_fee.rb | 4 ++-- spec/models/enterprise_fee_spec.rb | 37 ++++++++++++++++-------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/models/enterprise_fee.rb b/app/models/enterprise_fee.rb index 07eab69415..64f1c84bca 100644 --- a/app/models/enterprise_fee.rb +++ b/app/models/enterprise_fee.rb @@ -42,8 +42,8 @@ class EnterpriseFee < ApplicationRecord joins(:calculator).where(spree_calculators: { type: PER_ORDER_CALCULATORS }) } - def self.clear_all_adjustments(order) - order.all_adjustments.enterprise_fee.destroy_all + def self.clear_order_adjustments(order) + order.all_adjustments.enterprise_fee.where.not(adjustable_type: "Spree::LineItem").destroy_all end private diff --git a/spec/models/enterprise_fee_spec.rb b/spec/models/enterprise_fee_spec.rb index 8db2a94ec3..91babfd966 100644 --- a/spec/models/enterprise_fee_spec.rb +++ b/spec/models/enterprise_fee_spec.rb @@ -142,24 +142,10 @@ RSpec.describe EnterpriseFee do end end - describe ".clear_all_adjustments" do + describe ".clear_order_adjustments" do let(:order_cycle) { create(:order_cycle) } let(:order) { create(:order, order_cycle:) } - it "clears adjustments from many fees and on all line items" do - line_item1 = create(:line_item, order:, variant: order_cycle.variants.first) - line_item2 = create(:line_item, order:, variant: order_cycle.variants.second) - - order_cycle.coordinator_fees[0].create_adjustment('foo1', line_item1.order, true) - order_cycle.coordinator_fees[0].create_adjustment('foo2', line_item2.order, true) - order_cycle.exchanges[0].enterprise_fees[0].create_adjustment('foo3', line_item1, true) - order_cycle.exchanges[0].enterprise_fees[0].create_adjustment('foo4', line_item2, true) - - expect do - EnterpriseFee.clear_all_adjustments order - end.to change { order.all_adjustments.count }.by(-4) - end - it "clears adjustments from per-order fees" do enterprise_fee = create(:enterprise_fee) enterprise_fee_aplicator = OpenFoodNetwork::EnterpriseFeeApplicator.new(enterprise_fee, nil, @@ -167,7 +153,7 @@ RSpec.describe EnterpriseFee do enterprise_fee_aplicator.create_order_adjustment(order) expect do - EnterpriseFee.clear_all_adjustments order + described_class.clear_order_adjustments order end.to change { order.adjustments.count }.by(-1) end @@ -179,9 +165,26 @@ RSpec.describe EnterpriseFee do label: 'hello' }) expect do - EnterpriseFee.clear_all_adjustments order + described_class.clear_order_adjustments order end.to change { order.adjustments.count }.by(0) end + + it "doesn't clear adjustments from many fees and on all line items" do + line_item1 = create(:line_item, order:, variant: order_cycle.variants.first) + line_item2 = create(:line_item, order:, variant: order_cycle.variants.second) + + # Order adjustment + order_cycle.coordinator_fees[0].create_adjustment('foo1', line_item1.order, true) + order_cycle.coordinator_fees[0].create_adjustment('foo2', line_item2.order, true) + # Line item adjustment + order_cycle.exchanges[0].enterprise_fees[0].create_adjustment('foo3', line_item1, true) + order_cycle.exchanges[0].enterprise_fees[0].create_adjustment('foo4', line_item2, true) + + # does not clear line item adjustments + expect do + described_class.clear_order_adjustments order + end.to change { order.all_adjustments.count }.by(-2) + end end describe "soft-deletion" do