mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Merge pull request #3126 from mkllnk/2841-convert-guest-customer
2841 Associate customers with their user records
This commit is contained in:
42
db/migrate/20181123012635_associate_customers_to_users.rb
Normal file
42
db/migrate/20181123012635_associate_customers_to_users.rb
Normal file
@@ -0,0 +1,42 @@
|
||||
# When we introduced the Customer model, we didn't associate any existing
|
||||
# customers with users that have the same email address.
|
||||
# Later we decided to create that association when users sign up. But we didn't
|
||||
# update all the existing customers. We do that now for data consistency and to
|
||||
# solve several bugs.
|
||||
#
|
||||
# - https://github.com/openfoodfoundation/openfoodnetwork/pull/2084
|
||||
# - https://github.com/openfoodfoundation/openfoodnetwork/issues/2841
|
||||
class AssociateCustomersToUsers < ActiveRecord::Migration
|
||||
class Customer < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def up
|
||||
save_customers
|
||||
execute "UPDATE customers
|
||||
SET user_id = spree_users.id
|
||||
FROM spree_users
|
||||
WHERE customers.email = spree_users.email
|
||||
AND customers.user_id IS NULL;"
|
||||
end
|
||||
|
||||
def down
|
||||
customers = backed_up_customers
|
||||
Customer.where(id: customers).update_all(user_id: nil)
|
||||
end
|
||||
|
||||
def save_customers
|
||||
customers = Customer.
|
||||
joins("INNER JOIN spree_users ON customers.email = spree_users.email").
|
||||
where(user_id: nil).all
|
||||
|
||||
File.write(backup_file, Marshal.dump(customers))
|
||||
end
|
||||
|
||||
def backed_up_customers
|
||||
Marshal.load(File.read(backup_file))
|
||||
end
|
||||
|
||||
def backup_file
|
||||
File.join("log", "customers_without_user_association.log")
|
||||
end
|
||||
end
|
||||
@@ -13,7 +13,7 @@ module ShopWorkflow
|
||||
end
|
||||
|
||||
def set_order(order)
|
||||
ApplicationController.any_instance.stub(:session).and_return({order_id: order.id, access_token: order.token})
|
||||
allow_any_instance_of(ApplicationController).to receive(:session).and_return({order_id: order.id, access_token: order.token})
|
||||
end
|
||||
|
||||
def add_product_to_cart(order, product, quantity: 1)
|
||||
|
||||
Reference in New Issue
Block a user