diff --git a/app/models/spree/product_decorator.rb b/app/models/spree/product_decorator.rb index f257e55c1b..a1cdc4b543 100644 --- a/app/models/spree/product_decorator.rb +++ b/app/models/spree/product_decorator.rb @@ -147,6 +147,13 @@ Spree::Product.class_eval do end end + def delete_with_delete_from_order_cycles + delete_without_delete_from_order_cycles + + ExchangeVariant.where('exchange_variants.variant_id IN (?)', self.variants_including_master_and_deleted).destroy_all + end + alias_method_chain :delete, :delete_from_order_cycles + private diff --git a/spec/models/spree/product_spec.rb b/spec/models/spree/product_spec.rb index 3b21d425eb..1311314e0c 100644 --- a/spec/models/spree/product_spec.rb +++ b/spec/models/spree/product_spec.rb @@ -580,7 +580,7 @@ module Spree end end - describe "Taxons" do + describe "taxons" do let(:taxon1) { create(:taxon) } let(:taxon2) { create(:taxon) } let(:product) { create(:simple_product) } @@ -589,5 +589,25 @@ module Spree product.taxons.should == [product.primary_taxon] end end + + describe "deletion" do + 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) } + + it "removes the master variant from all order cycles" do + e.variants << p.master + p.delete + e.variants(true).should be_empty + end + + it "removes all other variants from order cycles" do + e.variants << v + p.delete + e.variants(true).should be_empty + end + end end end