Fix our monkey-patch of spree's order merging to accomodate orders having an order cycle

This commit is contained in:
Rohan Mitchell
2013-04-05 15:00:42 +11:00
parent 990931e006
commit 02b524bfce
2 changed files with 28 additions and 7 deletions

View File

@@ -8,8 +8,11 @@ Spree::Core::ControllerHelpers::Order.class_eval do
if session[:order_id].nil? && last_incomplete_order
session[:order_id] = last_incomplete_order.id
elsif current_order && last_incomplete_order && current_order != last_incomplete_order
if current_order.distributor.nil? || current_order.distributor == last_incomplete_order.distributor
if (current_order.distributor.nil? || current_order.distributor == last_incomplete_order.distributor) &&
(current_order.order_cycle.nil? || current_order.order_cycle == last_incomplete_order.order_cycle)
current_order.set_distributor! last_incomplete_order.distributor if current_order.distributor.nil?
current_order.set_order_cycle! last_incomplete_order.order_cycle if current_order.order_cycle.nil?
current_order.merge!(last_incomplete_order)
else
last_incomplete_order.destroy
@@ -17,4 +20,4 @@ Spree::Core::ControllerHelpers::Order.class_eval do
end
end
end
end
end

View File

@@ -28,8 +28,8 @@ describe Spree::HomeController do
context "BaseController: merging incomplete orders" do
it "does not attempt to merge incomplete and current orders when they have differing distributors" do
incomplete_order = double(:order, distributor: 1)
current_order = double(:order, distributor: 2)
incomplete_order = double(:order, distributor: 1, order_cycle: 3)
current_order = double(:order, distributor: 2, order_cycle: 3)
user = double(:user, last_incomplete_spree_order: incomplete_order)
controller.stub(:try_spree_current_user).and_return(user)
@@ -44,15 +44,33 @@ describe Spree::HomeController do
spree_get :index
end
it "sets the distributor when the target order has no distributor" do
incomplete_order = double(:order, distributor: 1)
current_order = double(:order, distributor: nil)
it "does not attempt to merge incomplete and current orders when they have differing order cycles" do
incomplete_order = double(:order, distributor: 1, order_cycle: 2)
current_order = double(:order, distributor: 1, order_cycle: 3)
user = double(:user, last_incomplete_spree_order: incomplete_order)
controller.stub(:try_spree_current_user).and_return(user)
controller.stub(:current_order).and_return(current_order)
incomplete_order.should_receive(:destroy)
incomplete_order.should_receive(:merge!).never
current_order.should_receive(:merge!).never
session[:order_id] = 123
spree_get :index
end
it "sets the distributor and order cycle when the target order does not have these" do
incomplete_order = double(:order, distributor: 1, order_cycle: 2)
current_order = double(:order, distributor: nil, order_cycle: nil)
user = double(:user, last_incomplete_spree_order: incomplete_order)
controller.stub(:try_spree_current_user).and_return(user)
controller.stub(:current_order).and_return(current_order)
current_order.should_receive(:set_distributor!).with(1)
current_order.should_receive(:set_order_cycle!).with(2)
current_order.should_receive(:merge!)
session[:order_id] = 123