OrderCycleFormApplicator uses exchanges.incoming instead of role

This commit is contained in:
Rohan Mitchell
2014-03-27 09:49:08 +11:00
parent 3104d285ca
commit ce2882de35
2 changed files with 39 additions and 35 deletions

View File

@@ -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

View File

@@ -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