From ce2882de354d6918fa3f0e84b80c7b8d1d7fbd4b Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Thu, 27 Mar 2014 09:49:08 +1100 Subject: [PATCH] OrderCycleFormApplicator uses exchanges.incoming instead of role --- .../order_cycle_form_applicator.rb | 24 ++++----- .../order_cycle_form_applicator_spec.rb | 50 ++++++++++--------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/lib/open_food_network/order_cycle_form_applicator.rb b/lib/open_food_network/order_cycle_form_applicator.rb index ef8b4f86e7..dc5056d53a 100644 --- a/lib/open_food_network/order_cycle_form_applicator.rb +++ b/lib/open_food_network/order_cycle_form_applicator.rb @@ -17,11 +17,11 @@ module OpenFoodNetwork variant_ids = exchange_variant_ids(exchange) enterprise_fee_ids = exchange[:enterprise_fee_ids] - if exchange_exists?(exchange[:enterprise_id], @order_cycle.coordinator_id) - update_exchange(exchange[:enterprise_id], @order_cycle.coordinator_id, + if exchange_exists?(exchange[:enterprise_id], @order_cycle.coordinator_id, true) + update_exchange(exchange[:enterprise_id], @order_cycle.coordinator_id, true, {variant_ids: variant_ids, enterprise_fee_ids: enterprise_fee_ids}) else - add_exchange(exchange[:enterprise_id], @order_cycle.coordinator_id, + add_exchange(exchange[:enterprise_id], @order_cycle.coordinator_id, true, {variant_ids: variant_ids, enterprise_fee_ids: enterprise_fee_ids}) end end @@ -31,12 +31,12 @@ module OpenFoodNetwork variant_ids = exchange_variant_ids(exchange) enterprise_fee_ids = exchange[:enterprise_fee_ids] - if exchange_exists?(@order_cycle.coordinator_id, exchange[:enterprise_id]) - update_exchange(@order_cycle.coordinator_id, exchange[:enterprise_id], + if exchange_exists?(@order_cycle.coordinator_id, exchange[:enterprise_id], false) + update_exchange(@order_cycle.coordinator_id, exchange[:enterprise_id], false, {variant_ids: variant_ids, enterprise_fee_ids: enterprise_fee_ids, pickup_time: exchange[:pickup_time], pickup_instructions: exchange[:pickup_instructions]}) else - add_exchange(@order_cycle.coordinator_id, exchange[:enterprise_id], + add_exchange(@order_cycle.coordinator_id, exchange[:enterprise_id], false, {variant_ids: variant_ids, enterprise_fee_ids: enterprise_fee_ids, pickup_time: exchange[:pickup_time], pickup_instructions: exchange[:pickup_instructions]}) end @@ -50,18 +50,18 @@ module OpenFoodNetwork attr_accessor :touched_exchanges - def exchange_exists?(sender_id, receiver_id) - @order_cycle.exchanges.where(:sender_id => sender_id, :receiver_id => receiver_id).present? + def exchange_exists?(sender_id, receiver_id, incoming) + @order_cycle.exchanges.where(:sender_id => sender_id, :receiver_id => receiver_id, :incoming => incoming).present? end - def add_exchange(sender_id, receiver_id, attrs={}) - attrs = attrs.reverse_merge(:sender_id => sender_id, :receiver_id => receiver_id) + def add_exchange(sender_id, receiver_id, incoming, attrs={}) + attrs = attrs.reverse_merge(:sender_id => sender_id, :receiver_id => receiver_id, :incoming => incoming) exchange = @order_cycle.exchanges.create! attrs @touched_exchanges << exchange end - def update_exchange(sender_id, receiver_id, attrs={}) - exchange = @order_cycle.exchanges.where(:sender_id => sender_id, :receiver_id => receiver_id).first + def update_exchange(sender_id, receiver_id, incoming, attrs={}) + exchange = @order_cycle.exchanges.where(:sender_id => sender_id, :receiver_id => receiver_id, :incoming => incoming).first exchange.update_attributes!(attrs) @touched_exchanges << exchange diff --git a/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb b/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb index 441e28beeb..81cd925569 100644 --- a/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb +++ b/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb @@ -7,15 +7,15 @@ module OpenFoodNetwork coordinator_id = 123 supplier_id = 456 - incoming_exchange = {:enterprise_id => supplier_id, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2]} + incoming_exchange = {:enterprise_id => supplier_id, :incoming => true, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2]} oc = double(:order_cycle, :coordinator_id => coordinator_id, :exchanges => [], :incoming_exchanges => [incoming_exchange], :outgoing_exchanges => []) applicator = OrderCycleFormApplicator.new(oc) applicator.should_receive(:exchange_variant_ids).with(incoming_exchange).and_return([1, 3]) - applicator.should_receive(:exchange_exists?).with(supplier_id, coordinator_id).and_return(false) - applicator.should_receive(:add_exchange).with(supplier_id, coordinator_id, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2]}) + applicator.should_receive(:exchange_exists?).with(supplier_id, coordinator_id, true).and_return(false) + applicator.should_receive(:add_exchange).with(supplier_id, coordinator_id, true, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2]}) applicator.should_receive(:destroy_untouched_exchanges) applicator.go! @@ -25,15 +25,15 @@ module OpenFoodNetwork coordinator_id = 123 distributor_id = 456 - outgoing_exchange = {:enterprise_id => distributor_id, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'} + outgoing_exchange = {:enterprise_id => distributor_id, :incoming => false, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'} oc = double(:order_cycle, :coordinator_id => coordinator_id, :exchanges => [], :incoming_exchanges => [], :outgoing_exchanges => [outgoing_exchange]) applicator = OrderCycleFormApplicator.new(oc) applicator.should_receive(:exchange_variant_ids).with(outgoing_exchange).and_return([1, 3]) - applicator.should_receive(:exchange_exists?).with(coordinator_id, distributor_id).and_return(false) - applicator.should_receive(:add_exchange).with(coordinator_id, distributor_id, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'}) + applicator.should_receive(:exchange_exists?).with(coordinator_id, distributor_id, false).and_return(false) + applicator.should_receive(:add_exchange).with(coordinator_id, distributor_id, false, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'}) applicator.should_receive(:destroy_untouched_exchanges) applicator.go! @@ -43,19 +43,19 @@ module OpenFoodNetwork coordinator_id = 123 supplier_id = 456 - incoming_exchange = {:enterprise_id => supplier_id, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2]} + incoming_exchange = {:enterprise_id => supplier_id, :incoming => true, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2]} oc = double(:order_cycle, :coordinator_id => coordinator_id, - :exchanges => [double(:exchange, :sender_id => supplier_id, :receiver_id => coordinator_id)], + :exchanges => [double(:exchange, :sender_id => supplier_id, :receiver_id => coordinator_id, :incoming => true)], :incoming_exchanges => [incoming_exchange], :outgoing_exchanges => []) applicator = OrderCycleFormApplicator.new(oc) applicator.should_receive(:exchange_variant_ids).with(incoming_exchange).and_return([1, 3]) - applicator.should_receive(:exchange_exists?).with(supplier_id, coordinator_id).and_return(true) - applicator.should_receive(:update_exchange).with(supplier_id, coordinator_id, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2]}) + applicator.should_receive(:exchange_exists?).with(supplier_id, coordinator_id, true).and_return(true) + applicator.should_receive(:update_exchange).with(supplier_id, coordinator_id, true, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2]}) applicator.should_receive(:destroy_untouched_exchanges) applicator.go! @@ -65,19 +65,19 @@ module OpenFoodNetwork coordinator_id = 123 distributor_id = 456 - outgoing_exchange = {:enterprise_id => distributor_id, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'} + outgoing_exchange = {:enterprise_id => distributor_id, :incoming => false, :variants => {'1' => true, '2' => false, '3' => true}, :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'} oc = double(:order_cycle, :coordinator_id => coordinator_id, - :exchanges => [double(:exchange, :sender_id => coordinator_id, :receiver_id => distributor_id)], + :exchanges => [double(:exchange, :sender_id => coordinator_id, :receiver_id => distributor_id, :incoming => false)], :incoming_exchanges => [], :outgoing_exchanges => [outgoing_exchange]) applicator = OrderCycleFormApplicator.new(oc) applicator.should_receive(:exchange_variant_ids).with(outgoing_exchange).and_return([1, 3]) - applicator.should_receive(:exchange_exists?).with(coordinator_id, distributor_id).and_return(true) - applicator.should_receive(:update_exchange).with(coordinator_id, distributor_id, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'}) + applicator.should_receive(:exchange_exists?).with(coordinator_id, distributor_id, false).and_return(true) + applicator.should_receive(:update_exchange).with(coordinator_id, distributor_id, false, {:variant_ids => [1, 3], :enterprise_fee_ids => [1, 2], :pickup_time => 'pickup time', :pickup_instructions => 'pickup instructions'}) applicator.should_receive(:destroy_untouched_exchanges) applicator.go! @@ -87,7 +87,7 @@ module OpenFoodNetwork it "destroys untouched exchanges" do coordinator_id = 123 supplier_id = 456 - exchange = double(:exchange, :id => 1, :sender_id => supplier_id, :receiver_id => coordinator_id) + exchange = double(:exchange, :id => 1, :sender_id => supplier_id, :receiver_id => coordinator_id, :incoming => true) oc = double(:order_cycle, :coordinator_id => coordinator_id, @@ -134,11 +134,12 @@ module OpenFoodNetwork exchange = FactoryGirl.create(:exchange, order_cycle: oc) applicator = OrderCycleFormApplicator.new(oc) - applicator.send(:exchange_exists?, exchange.sender_id, exchange.receiver_id).should be_true - applicator.send(:exchange_exists?, exchange.receiver_id, exchange.sender_id).should be_false - applicator.send(:exchange_exists?, exchange.sender_id, 999).should be_false - applicator.send(:exchange_exists?, 999, exchange.receiver_id).should be_false - applicator.send(:exchange_exists?, 999, 888).should be_false + applicator.send(:exchange_exists?, exchange.sender_id, exchange.receiver_id, exchange.incoming).should be_true + applicator.send(:exchange_exists?, exchange.sender_id, exchange.receiver_id, !exchange.incoming).should be_false + applicator.send(:exchange_exists?, exchange.receiver_id, exchange.sender_id, exchange.incoming).should be_false + applicator.send(:exchange_exists?, exchange.sender_id, 999999, exchange.incoming).should be_false + applicator.send(:exchange_exists?, 999999, exchange.receiver_id, exchange.incoming).should be_false + applicator.send(:exchange_exists?, 999999, 888888, exchange.incoming).should be_false end it "adds exchanges" do @@ -146,17 +147,19 @@ module OpenFoodNetwork applicator = OrderCycleFormApplicator.new(oc) sender = FactoryGirl.create(:enterprise) receiver = FactoryGirl.create(:enterprise) + incoming = true variant1 = FactoryGirl.create(:variant) variant2 = FactoryGirl.create(:variant) enterprise_fee1 = FactoryGirl.create(:enterprise_fee) enterprise_fee2 = FactoryGirl.create(:enterprise_fee) applicator.send(:touched_exchanges=, []) - applicator.send(:add_exchange, sender.id, receiver.id, {:variant_ids => [variant1.id, variant2.id], :enterprise_fee_ids => [enterprise_fee1.id, enterprise_fee2.id]}) + applicator.send(:add_exchange, sender.id, receiver.id, incoming, {:variant_ids => [variant1.id, variant2.id], :enterprise_fee_ids => [enterprise_fee1.id, enterprise_fee2.id]}) exchange = Exchange.last exchange.sender.should == sender exchange.receiver.should == receiver + exchange.incoming.should == incoming exchange.variants.sort.should == [variant1, variant2].sort exchange.enterprise_fees.sort.should == [enterprise_fee1, enterprise_fee2].sort @@ -168,6 +171,7 @@ module OpenFoodNetwork applicator = OrderCycleFormApplicator.new(oc) sender = FactoryGirl.create(:enterprise) receiver = FactoryGirl.create(:enterprise) + incoming = true variant1 = FactoryGirl.create(:variant) variant2 = FactoryGirl.create(:variant) variant3 = FactoryGirl.create(:variant) @@ -175,10 +179,10 @@ module OpenFoodNetwork enterprise_fee2 = FactoryGirl.create(:enterprise_fee) enterprise_fee3 = FactoryGirl.create(:enterprise_fee) - exchange = FactoryGirl.create(:exchange, order_cycle: oc, sender: sender, receiver: receiver, variant_ids: [variant1.id, variant2.id], enterprise_fee_ids: [enterprise_fee1.id, enterprise_fee2.id]) + exchange = FactoryGirl.create(:exchange, order_cycle: oc, sender: sender, receiver: receiver, incoming: incoming, variant_ids: [variant1.id, variant2.id], enterprise_fee_ids: [enterprise_fee1.id, enterprise_fee2.id]) applicator.send(:touched_exchanges=, []) - applicator.send(:update_exchange, sender.id, receiver.id, {:variant_ids => [variant1.id, variant3.id], :enterprise_fee_ids => [enterprise_fee2.id, enterprise_fee3.id]}) + applicator.send(:update_exchange, sender.id, receiver.id, incoming, {:variant_ids => [variant1.id, variant3.id], :enterprise_fee_ids => [enterprise_fee2.id, enterprise_fee3.id]}) exchange.reload exchange.variants.sort.should == [variant1, variant3].sort