Reduce coupling from controller

This commit is contained in:
Pau Perez
2017-07-18 13:45:22 +02:00
committed by Rob Harrington
parent 4c4969e86b
commit e087a008c2
5 changed files with 29 additions and 24 deletions

View File

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

View File

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

View File

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

View File

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

View File

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