public async Task <Tuple <IDebitoTransferencia, ICreditoTransferencia> > TransferirAsync(int contaOrigemId, int contaDestinoId, decimal valor) { var contaOrigem = await DoFindContaAsync(contaOrigemId); var contaDestino = await DoFindContaAsync(contaDestinoId); var saldoAnterior = contaOrigem.Saldo; contaOrigem.Debitar(valor); var debito = new DebitoTransferencia(contaOrigem, DateTime.Now, saldoAnterior, valor, contaOrigem.Saldo); debito.CalcularTarifa(); saldoAnterior = contaDestino.Saldo; contaDestino.Creditar(valor); var credito = new CreditoTransferencia(debito, contaDestino, DateTime.Now, saldoAnterior, valor, contaDestino.Saldo); await this.transacaoRepository.SaveAsync(new List <ITransacao> { debito, credito }); return(new Tuple <IDebitoTransferencia, ICreditoTransferencia>(debito, credito)); }
public void TestDeveriaCalcularATarifaDeTransferenciaCorretamente(decimal value, decimal expected) { var contaMock = new Mock <IContaCorrente>(); contaMock.Setup(x => x.Saldo).Returns(0); var deposito = new DebitoTransferencia(contaMock.Object, DateTime.Now, 0, value, value); var tarifa = deposito.CalcularTarifa(); Assert.Equal(expected, tarifa.Valor); }