TL; DR. Scrittura di codice procedurale all'interno di una transazione DB. Come posso migliorare la progettazione del codice, quindi è meglio testabile?
Nella mia applicazione ho un oggetto di servizio che esegue più cose all'interno della stessa transazione. Vedi il codice in Ruby di seguito:
class CreateRefundService
def create(customer_id)
ActiveRecord::Base.transaction do
refund = create_refund(customer_id)
credit = add_credits_to_customer(customer_id)
send_email(refund)
add_note(refund, credit)
end
end
private
# ... implementation of all 4 methods above
end
Sto provando a scrivere 4 test per verificare che tutte e quattro le cose accadano durante la transazione, ma inizia a sentirsi a disagio, dal momento che per ogni metodo sotto test ho bisogno di bloccare altri 3 metodi. Questo mi dà la garanzia che probabilmente c'è un problema su questo design.
Sono sotto vincoli che più cose devono accadere durante la stessa transazione.