mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Separate OrderCompletionReset from Checkout::PostCheckoutActions and don't pass controller objects to Checkout::PostCheckoutActions
We need to separate some of these bits to make them easier to call in different contexts. Also there's some weird stuff happening here with the controller being passed in to the service, and it seems like a code smell to me...
This commit is contained in:
@@ -220,7 +220,8 @@ class CheckoutController < ::BaseController
|
||||
end
|
||||
|
||||
def checkout_succeeded
|
||||
Checkout::PostCheckoutActions.new(@order).success(self, params, spree_current_user)
|
||||
Checkout::PostCheckoutActions.new(@order).success(params, spree_current_user)
|
||||
OrderCompletionReset.new(self, @order).call
|
||||
|
||||
session[:access_token] = current_order.token
|
||||
flash[:notice] = t(:order_processed_successfully)
|
||||
|
||||
@@ -7,10 +7,9 @@ module Checkout
|
||||
@order = order
|
||||
end
|
||||
|
||||
def success(controller, params, current_user)
|
||||
def success(params, current_user)
|
||||
set_customer_terms_and_conditions_accepted_at(params)
|
||||
save_order_addresses_as_user_default(params, current_user)
|
||||
OrderCompletionReset.new(controller, @order).call
|
||||
end
|
||||
|
||||
def failure
|
||||
|
||||
@@ -7,33 +7,20 @@ describe Checkout::PostCheckoutActions do
|
||||
let(:postCheckoutActions) { Checkout::PostCheckoutActions.new(order) }
|
||||
|
||||
describe "#success" do
|
||||
let(:controller) {}
|
||||
let(:params) { { order: {} } }
|
||||
let(:current_user) { order.distributor.owner }
|
||||
|
||||
let(:reset_order_service) { instance_double(OrderCompletionReset) }
|
||||
|
||||
before do
|
||||
expect(OrderCompletionReset).to receive(:new).
|
||||
with(controller, order).and_return(reset_order_service)
|
||||
expect(reset_order_service).to receive(:call)
|
||||
end
|
||||
|
||||
it "resets the order" do
|
||||
postCheckoutActions.success(controller, params, current_user)
|
||||
end
|
||||
|
||||
describe "setting customer terms_and_conditions_accepted_at" do
|
||||
before { order.customer = build(:customer) }
|
||||
|
||||
it "does not set customer's terms_and_conditions to the current time if terms have not been accepted" do
|
||||
postCheckoutActions.success(controller, params, current_user)
|
||||
postCheckoutActions.success(params, current_user)
|
||||
expect(order.customer.terms_and_conditions_accepted_at).to be_nil
|
||||
end
|
||||
|
||||
it "sets customer's terms_and_conditions to the current time if terms have been accepted" do
|
||||
params = { order: { terms_and_conditions_accepted: true } }
|
||||
postCheckoutActions.success(controller, params, current_user)
|
||||
postCheckoutActions.success(params, current_user)
|
||||
expect(order.customer.terms_and_conditions_accepted_at).to_not be_nil
|
||||
end
|
||||
end
|
||||
@@ -50,14 +37,14 @@ describe Checkout::PostCheckoutActions do
|
||||
params[:order][:default_bill_address] = true
|
||||
expect(user_default_address_setter).to receive(:set_default_bill_address)
|
||||
|
||||
postCheckoutActions.success(controller, params, current_user)
|
||||
postCheckoutActions.success(params, current_user)
|
||||
end
|
||||
|
||||
it "sets user default ship address is option selected in params" do
|
||||
params[:order][:default_ship_address] = true
|
||||
expect(user_default_address_setter).to receive(:set_default_ship_address)
|
||||
|
||||
postCheckoutActions.success(controller, params, current_user)
|
||||
postCheckoutActions.success(params, current_user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user