コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }