From 083220089ff84007fa3497521935487dfa409c25 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Fri, 6 Jun 2014 14:52:26 +1000 Subject: [PATCH] WIP: Delete ExchangeVariants when product is soft-deleted --- app/models/spree/product_decorator.rb | 7 +++++++ spec/models/spree/product_spec.rb | 22 +++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) 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