diff --git a/app/models/spree/product_decorator.rb b/app/models/spree/product_decorator.rb index a1cdc4b543..37aeb5e3f1 100644 --- a/app/models/spree/product_decorator.rb +++ b/app/models/spree/product_decorator.rb @@ -148,9 +148,11 @@ Spree::Product.class_eval do end def delete_with_delete_from_order_cycles - delete_without_delete_from_order_cycles + transaction do + delete_without_delete_from_order_cycles - ExchangeVariant.where('exchange_variants.variant_id IN (?)', self.variants_including_master_and_deleted).destroy_all + ExchangeVariant.where('exchange_variants.variant_id IN (?)', self.variants_including_master_and_deleted).destroy_all + end end alias_method_chain :delete, :delete_from_order_cycles diff --git a/app/models/spree/variant_decorator.rb b/app/models/spree/variant_decorator.rb index c7aed600ea..a4f8d6d305 100644 --- a/app/models/spree/variant_decorator.rb +++ b/app/models/spree/variant_decorator.rb @@ -52,7 +52,10 @@ Spree::Variant.class_eval do end def delete - self.update_column(:deleted_at, Time.now) + transaction do + self.update_column(:deleted_at, Time.now) + ExchangeVariant.where(variant_id: self).destroy_all + end end diff --git a/spec/models/spree/product_spec.rb b/spec/models/spree/product_spec.rb index 1311314e0c..594dfa5d29 100644 --- a/spec/models/spree/product_spec.rb +++ b/spec/models/spree/product_spec.rb @@ -591,11 +591,11 @@ module Spree end describe "deletion" do - let(:p) { create(:simple_product) } - let(:v) { create(:variant, product: p) } + let(:p) { create(:simple_product) } + let(:v) { create(:variant, product: p) } let(:oc) { create(:simple_order_cycle) } - let(:s) { create(:supplier_enterprise) } - let(:e) { create(:exchange, order_cycle: oc, incoming: true, sender: s, receiver: oc.coordinator) } + let(:s) { create(:supplier_enterprise) } + let(:e) { create(:exchange, order_cycle: oc, incoming: true, sender: s, receiver: oc.coordinator) } it "removes the master variant from all order cycles" do e.variants << p.master diff --git a/spec/models/spree/variant_spec.rb b/spec/models/spree/variant_spec.rb index 1c87397aec..56797f03fd 100644 --- a/spec/models/spree/variant_spec.rb +++ b/spec/models/spree/variant_spec.rb @@ -277,16 +277,24 @@ module Spree end describe "deletion" do + let(:v) { create(:variant) } + let(:e) { create(:exchange, variants: [v]) } + it "marks the variant as deleted" do - v = create(:variant) v.deleted_at.should be_nil v.delete v.deleted_at.should_not be_nil end + + it "removes the variant from all order cycles" do + e + v.delete + e.variants(true).should be_empty + end end describe "destruction" do - it "destroys exchange variants" do + it "removes the variant from all order cycles" do v = create(:variant) e = create(:exchange, variants: [v])