diff --git a/lib/spree/core/controller_helpers/order_decorator.rb b/lib/spree/core/controller_helpers/order_decorator.rb index 5bc52358fe..7f0acafe33 100644 --- a/lib/spree/core/controller_helpers/order_decorator.rb +++ b/lib/spree/core/controller_helpers/order_decorator.rb @@ -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 \ No newline at end of file +end diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 11569269fd..7e0377c8fe 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -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