From c4a8a38c8dfdfa436dcf7e21dd4e11a6305db5b0 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 15 Jan 2021 14:41:59 +0000 Subject: [PATCH 1/2] Soft-delete enterprise fees These objects can hold critical information related to adjustments and tax categories. If they are hard-deleted we lose vital data that's needed by associated records. --- app/models/enterprise_fee.rb | 2 ++ .../20210115143738_add_deleted_at_to_enterprise_fee.rb | 5 +++++ db/schema.rb | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210115143738_add_deleted_at_to_enterprise_fee.rb diff --git a/app/models/enterprise_fee.rb b/app/models/enterprise_fee.rb index e973419ece..f1161bb8ab 100644 --- a/app/models/enterprise_fee.rb +++ b/app/models/enterprise_fee.rb @@ -1,6 +1,8 @@ class EnterpriseFee < ActiveRecord::Base include Spree::Core::CalculatedAdjustments + acts_as_paranoid + belongs_to :enterprise belongs_to :tax_category, class_name: 'Spree::TaxCategory', foreign_key: 'tax_category_id' diff --git a/db/migrate/20210115143738_add_deleted_at_to_enterprise_fee.rb b/db/migrate/20210115143738_add_deleted_at_to_enterprise_fee.rb new file mode 100644 index 0000000000..f3afbf28d9 --- /dev/null +++ b/db/migrate/20210115143738_add_deleted_at_to_enterprise_fee.rb @@ -0,0 +1,5 @@ +class AddDeletedAtToEnterpriseFee < ActiveRecord::Migration + def change + add_column :enterprise_fees, :deleted_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 3d4de3b876..fc360b11e1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20201219120055) do +ActiveRecord::Schema.define(version: 20210115143738) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -108,6 +108,7 @@ ActiveRecord::Schema.define(version: 20201219120055) do t.datetime "updated_at", null: false t.integer "tax_category_id" t.boolean "inherits_tax_category", default: false, null: false + t.datetime "deleted_at" end add_index "enterprise_fees", ["enterprise_id"], name: "index_enterprise_fees_on_enterprise_id", using: :btree 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 2/2] 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