diff --git a/app/controllers/spree/base_controller_decorator.rb b/app/controllers/spree/base_controller_decorator.rb new file mode 100644 index 0000000000..7ad171e0be --- /dev/null +++ b/app/controllers/spree/base_controller_decorator.rb @@ -0,0 +1,20 @@ +module Spree + BaseController.class_eval do + + # Override definition in spree/auth/app/controllers/spree/base_controller_decorator.rb + # Do not attempt to merge incomplete and current orders when they have differing distributors + def set_current_order + if current_user + if current_user.respond_to?(:last_incomplete_order) + last_incomplete_order = current_user.last_incomplete_order + 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 && + (current_order.distributor.nil? || current_order.distributor == last_incomplete_order.distributor) + current_order.merge!(last_incomplete_order) + end + end + end + end + end +end diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index b2e35ef562..327787aa9c 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -25,4 +25,22 @@ describe Spree::HomeController do assigns(:products_local).should == [p1] assigns(:products_remote).should == [p2] end + + 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) + + user = double(:user, last_incomplete_order: incomplete_order) + controller.stub(:current_user).and_return(user) + controller.stub(:current_order).and_return(current_order) + + incomplete_order.should_receive(:merge!).never + current_order.should_receive(:merge!).never + + session[:order_id] = 123 + + spree_get :index + end + end end