From 5fac29d2ed91577fd66bccc5fc49caa25aed93ed Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 14 Aug 2013 10:44:02 +1000 Subject: [PATCH] Do not merge current and incomplete orders when logging in - fixes #20 --- .../controller_helpers/order_decorator.rb | 15 ++--- spec/controllers/home_controller_spec.rb | 56 +++++++------------ 2 files changed, 23 insertions(+), 48 deletions(-) diff --git a/lib/spree/core/controller_helpers/order_decorator.rb b/lib/spree/core/controller_helpers/order_decorator.rb index 7f0acafe33..727ed7cd90 100644 --- a/lib/spree/core/controller_helpers/order_decorator.rb +++ b/lib/spree/core/controller_helpers/order_decorator.rb @@ -1,22 +1,15 @@ Spree::Core::ControllerHelpers::Order.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 - # Instead, destroy the incomplete orders, otherwise they are restored after checkout, causing much confusion + # Do not attempt to merge incomplete and current orders. Instead, destroy the incomplete orders. def set_current_order if user = try_spree_current_user last_incomplete_order = user.last_incomplete_spree_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 - 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 - end + elsif current_order && last_incomplete_order && current_order != last_incomplete_order + last_incomplete_order.destroy end end end diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 7e0377c8fe..45e852e308 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -27,9 +27,25 @@ describe Spree::HomeController do 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, order_cycle: 3) - current_order = double(:order, distributor: 2, order_cycle: 3) + it "loads the incomplete order when there is no current order" do + incomplete_order = double(:order, id: 1, distributor: 2, order_cycle: 3) + current_order = 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) + + incomplete_order.should_receive(:destroy).never + incomplete_order.should_receive(:merge!).never + + session[:order_id] = nil + spree_get :index + session[:order_id].should == incomplete_order.id + end + + it "destroys the incomplete order when there is a current order" do + incomplete_order = double(:order, distributor: 1, order_cycle: 1) + current_order = double(:order, distributor: 1, order_cycle: 1) user = double(:user, last_incomplete_spree_order: incomplete_order) controller.stub(:try_spree_current_user).and_return(user) @@ -43,39 +59,5 @@ describe Spree::HomeController do spree_get :index end - - 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 - - spree_get :index - end end end