diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 49c4b61ec7..8de59d36f6 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -40,7 +40,7 @@ class CheckoutController < Spree::CheckoutController set_default_bill_address set_default_ship_address - ResetOrderService.new(self).call + ResetOrderService.new(self, current_order).call session[:access_token] = current_order.token flash[:success] = t(:order_processed_successfully) diff --git a/app/helpers/checkout_helper.rb b/app/helpers/checkout_helper.rb index 37b84040b6..428173511a 100644 --- a/app/helpers/checkout_helper.rb +++ b/app/helpers/checkout_helper.rb @@ -105,7 +105,7 @@ module CheckoutHelper end def reset_order - ResetOrderService.new(self).call + ResetOrderService.new(self, current_order).call end def payment_method_price(method, order) diff --git a/app/services/reset_order_service.rb b/app/services/reset_order_service.rb index 28eb8ff64b..18e53272ec 100644 --- a/app/services/reset_order_service.rb +++ b/app/services/reset_order_service.rb @@ -1,22 +1,23 @@ -class ResetOrderService < SimpleDelegator - def call - distributor = current_order.distributor - token = current_order.token +class ResetOrderService + def initialize(controller, order) + @controller = controller + @distributor = order.distributor + @token = order.token + end + def call controller.expire_current_order - build_new_order(distributor, token) + build_new_order end private - def build_new_order(distributor, token) - current_order(true) - current_order.set_distributor!(distributor) - current_order.tokenized_permission.token = token - current_order.tokenized_permission.save! - end + attr_reader :controller, :distributor, :token - def controller - __getobj__ + def build_new_order + new_order = controller.current_order(true) + new_order.set_distributor!(distributor) + new_order.tokenized_permission.token = token + new_order.tokenized_permission.save! end end diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index 1b90541d86..8833a1bd9f 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -146,7 +146,7 @@ describe CheckoutController do end it "returns order confirmation url on success" do - allow(ResetOrderService).to receive(:new).with(controller) { reset_order_service } + allow(ResetOrderService).to receive(:new).with(controller, order) { reset_order_service } expect(reset_order_service).to receive(:call) order.stub(:update_attributes).and_return true @@ -159,7 +159,7 @@ describe CheckoutController do describe "stale object handling" do it "retries when a stale object error is encountered" do - allow(ResetOrderService).to receive(:new).with(controller) { reset_order_service } + allow(ResetOrderService).to receive(:new).with(controller, order) { reset_order_service } expect(reset_order_service).to receive(:call) order.stub(:update_attributes).and_return true diff --git a/spec/services/reset_order_service_spec.rb b/spec/services/reset_order_service_spec.rb index 30ffca82ad..e02cdb25e3 100644 --- a/spec/services/reset_order_service_spec.rb +++ b/spec/services/reset_order_service_spec.rb @@ -1,15 +1,19 @@ require 'spec_helper' describe ResetOrderService do - let(:current_distributor) { double(:distributor) } let(:current_token) { double(:current_token) } - let(:current_order) { double(:current_order) } + let(:current_distributor) { double(:distributor) } + let(:current_order) do + double( + :current_order, + token: current_token, + distributor: current_distributor + ) + end let(:tokenized_permission) { double(:tokenized_permission, save!: true) } let(:new_order) do double( :new_order, - distributor: current_distributor, - token: current_token, set_distributor!: true, tokenized_permission: tokenized_permission, ) @@ -21,10 +25,10 @@ describe ResetOrderService do expire_current_order: true ) end - let(:reset_order_service) { described_class.new(controller) } + let(:reset_order_service) { described_class.new(controller, current_order) } before do - allow(current_order) + allow(new_order) .to receive(:tokenized_permission) .and_return(tokenized_permission) @@ -48,7 +52,7 @@ describe ResetOrderService do it 'sets the token of the tokenized permissions' do reset_order_service.call - expect(current_order.tokenized_permission) + expect(new_order.tokenized_permission) .to have_received(:token=).with(current_token) end