Revert "Remove unreachable order recovery code"

This reverts commit 355c5f5c55.

This code is necessary to preserver cart contents across logins on
different browser sessions.
This commit is contained in:
Luis Ramos
2020-08-19 17:36:36 +01:00
parent 355c5f5c55
commit 72f5b1b251
2 changed files with 22 additions and 2 deletions

View File

@@ -68,9 +68,18 @@ module Spree
session[:guest_token] = nil
end
# Load current order and create a new one if necessary.
# Recover incomplete orders from other sessions after logging in.
def set_current_order
current_order(true) if spree_current_user
return unless (user = 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
end
# Load current order and create a new one if necessary.
current_order(true)
end
def current_currency

View File

@@ -28,6 +28,17 @@ describe BaseController, type: :controller do
expect(user.orders.count).to eq 1
end
it "uses the last incomplete order" do
last_cart = create(:order, user: user, created_by: user, state: "cart", completed_at: nil)
allow(controller).to receive(:spree_current_user).and_return(user)
expect {
get :index
}.to_not change { Spree::Order.count }
expect(session[:order_id]).to eq last_cart.id
end
it "ignores the last incomplete order" do
# Spree used to merge the last order with the current one.
# And we used to override that logic to delete old incomplete orders.