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:
Matt-Yorkley
2021-12-05 10:38:15 +00:00
parent ad60f2392a
commit 67b8a55273
3 changed files with 7 additions and 20 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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