From 9ef7da13392cc7e4c2078d14cc4de5569abd00a2 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Tue, 28 May 2013 14:01:04 +1000 Subject: [PATCH] Add OrderCycle#distributed_variants --- app/models/order_cycle.rb | 7 +++++++ spec/models/order_cycle_spec.rb | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index 87a8ddce66..45736b2359 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -5,6 +5,9 @@ class OrderCycle < ActiveRecord::Base has_many :exchanges, :dependent => :destroy + # TODO: DRY the incoming/outgoing clause used in several cases below + # See Spree::Product definition, scopes variants and variants_including_master + # This will require these accessors to be renamed attr_accessor :incoming_exchanges, :outgoing_exchanges validates_presence_of :name, :coordinator_id @@ -29,6 +32,10 @@ class OrderCycle < ActiveRecord::Base self.exchanges.map(&:variants).flatten.uniq end + def distributed_variants + self.exchanges.where(:sender_id => self.coordinator).map(&:variants).flatten.uniq + end + def products self.variants.map(&:product).uniq end diff --git a/spec/models/order_cycle_spec.rb b/spec/models/order_cycle_spec.rb index e6a4e42d82..ee55c70b74 100644 --- a/spec/models/order_cycle_spec.rb +++ b/spec/models/order_cycle_spec.rb @@ -103,15 +103,19 @@ describe OrderCycle do before(:each) do @oc = create(:simple_order_cycle) + e0 = create(:exchange, + order_cycle: @oc, sender: create(:enterprise), receiver: @oc.coordinator) e1 = create(:exchange, order_cycle: @oc, sender: @oc.coordinator, receiver: create(:enterprise)) e2 = create(:exchange, order_cycle: @oc, sender: @oc.coordinator, receiver: create(:enterprise)) + @p0 = create(:product) @p1 = create(:product) @p2 = create(:product) @p2_v = create(:variant, product: @p2) + e0.variants << @p0.master e1.variants << @p1.master e1.variants << @p2.master e1.variants << @p2_v @@ -119,11 +123,15 @@ describe OrderCycle do end it "reports on the variants exchanged in the order cycle" do - @oc.variants.sort.should == [@p1.master, @p2.master, @p2_v].sort + @oc.variants.sort.should == [@p0.master, @p1.master, @p2.master, @p2_v].sort + end + + it "reports on the variants distributed in the order cycle" do + @oc.distributed_variants.sort.should == [@p1.master, @p2.master, @p2_v].sort end it "reports on the products exchanged in the order cycle" do - @oc.products.sort.should == [@p1, @p2] + @oc.products.sort.should == [@p0, @p1, @p2] end end end