mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Do not merge current and incomplete orders when logging in - fixes #20
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user