Étant donné le code ci-dessous :
class FooController < ApplicationController
def create
if auth_is_alright && params_are_cool #pseudocode
@bar_results = BarService.new(param).run
end
end
end
class BarService
def initialize(params)
@transaction_token = params[:transaction_token]
@id = params[:id]
@quantity = params[:quantity]
@value = params[:value]
if Transaction.where(token: @transaction_token).any?
_undo_previous_run
end
end
def run
Transaction.new(token: @transaction_token, product_id: @id, quantity: @quantity, value: @value).save!
product = Product.find(id: @id)
product.update!(stock_quantity: product.stock_quantity - @quantity)
end
private
def _undo_previous_run
transaction = Transaction.find_by_token(@transaction_token)
product = Product.find(id: transaction.product_id)
product.update!(stock_quantity: product.stock_quantity + transaction.quantity)
transaction.destroy
end
end
Maintenant, ma question est la suivante : quel est le bon endroit pour tester le comportement de _undo_previous_run ?
- BarServiceSpec ?
- FooControllerSpec ? (appel de l'action de création, etc.)
- D'autres ?