From 6a9505cf6787c858c979e8e317d73013712db6ee Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 15 Jan 2021 15:16:56 +0000 Subject: [PATCH] Ensure adjustments can access soft-deleted originators Note: originator is generally an EnterpriseFee or a TaxRate --- app/models/spree/adjustment.rb | 7 +++++++ spec/models/enterprise_fee_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/app/models/spree/adjustment.rb b/app/models/spree/adjustment.rb index 93f4bbafe2..942e7fc149 100644 --- a/app/models/spree/adjustment.rb +++ b/app/models/spree/adjustment.rb @@ -162,6 +162,13 @@ module Spree result end + # Allow accessing soft-deleted originator objects + def originator + return if originator_type.blank? + + originator_type.constantize.unscoped { super } + end + private def update_adjustable diff --git a/spec/models/enterprise_fee_spec.rb b/spec/models/enterprise_fee_spec.rb index 7bd90db7c4..b5065ecee7 100644 --- a/spec/models/enterprise_fee_spec.rb +++ b/spec/models/enterprise_fee_spec.rb @@ -139,4 +139,24 @@ describe EnterpriseFee do end.to change(order.adjustments, :count).by(0) end end + + describe "soft-deletion" do + let(:tax_category) { create(:tax_category) } + let(:enterprise_fee) { create(:enterprise_fee, tax_category: tax_category ) } + let!(:adjustment) { create(:adjustment, originator: enterprise_fee) } + + before do + enterprise_fee.destroy + enterprise_fee.reload + end + + it "soft-deletes the enterprise fee" do + expect(enterprise_fee.deleted_at).to_not be_nil + end + + it "can be accessed by old adjustments" do + expect(adjustment.reload.originator).to eq enterprise_fee + expect(adjustment.originator.tax_category).to eq enterprise_fee.tax_category + end + end end