public async Task <Params.ContaCorrente> ValidarConta(Params.ContaCorrente conta) { // Para este teste inseri algumas validações simples. // obviamente elas não refletem a realidade das validações necessárias ref ao banco, agencia, conta e dígito. if (conta == null) { throw new ArgumentException("Conta inválida."); } if (conta.Banco < 0 || conta.Banco.ToString().Length != 3) { throw new ArgumentException($"Número do banco ({conta.Banco}) inválido."); } if (conta.Agencia < 0 || conta.Agencia.ToString().Length != 4) { throw new ArgumentException($"Número da agência ({conta.Agencia}) inválido."); } if (conta.Conta < 0) { throw new ArgumentException($"Número da conta ({conta.Conta}) inválido."); } if (conta.Digito < 0 || conta.Digito.ToString().Length != 1) { throw new ArgumentException($"Digíto da conta ({conta.Digito}) inválido."); } return(Mapper.Map <Params.ContaCorrente>(new Entities.ContaCorrente(conta.Banco, conta.Agencia, conta.Conta, conta.Digito, conta.Saldo))); }
public async Task <Params.ContaCorrente> Debito(Params.ContaCorrente conta, decimal valor) { if (valor < 0) { throw new ArgumentException("Não é permitido debitar valores negativos"); } conta.Saldo = conta.Saldo - valor; return(conta); }
public async Task TestaOperacaoDebito() { _contaCorrenteOrigem = GerarConta(353, 1000, 2002, 3, 1000); _contaCorrenteDestino = GerarConta(353, 4000, 5005, 6, 1000); var contaOrigem = await _contaService.ValidarConta(_contaCorrenteOrigem); var contaDestino = await _contaService.ValidarConta(_contaCorrenteDestino); var resultOperacao = await _lancamentoService.EfetuaLancamento(contaOrigem, contaDestino, OperacaoTipo.Debito, 500); Assert.Equal(500, resultOperacao.ContaOrigem.Saldo); Assert.Equal(1500, resultOperacao.ContaDestino.Saldo); }
public async Task TestaOperacaoDebitoSemSaldoSuficiente() { _contaCorrenteOrigem = GerarConta(353, 1000, 2002, 3, 1000); _contaCorrenteDestino = GerarConta(353, 4000, 5005, 6, 1000); var contaOrigem = await _contaService.ValidarConta(_contaCorrenteOrigem); var contaDestino = await _contaService.ValidarConta(_contaCorrenteDestino); try { var resultOperacao = await _lancamentoService.EfetuaLancamento(contaOrigem, contaDestino, OperacaoTipo.Credito, 5000); } catch (Exception ex) { Assert.Equal("Conta de origem não tem saldo suficiente para a transação. Operação não realizada", ex.Message); } }
public async Task TestaOperacaoDebitoNegativo() { _contaCorrenteOrigem = GerarConta(353, 1000, 2002, 3, 1000); _contaCorrenteDestino = GerarConta(353, 4000, 5005, 6, 1000); var contaOrigem = await _contaService.ValidarConta(_contaCorrenteOrigem); var contaDestino = await _contaService.ValidarConta(_contaCorrenteDestino); try { var resultOperacao = await _lancamentoService.EfetuaLancamento(contaOrigem, contaDestino, OperacaoTipo.Debito, -500); } catch (Exception ex) { Assert.Equal("Não é permitido debitar valores negativos", ex.Message); } }
public async Task <bool> ExisteSaldoParaTransacao(Params.ContaCorrente conta, decimal valor) { //Para este teste não trabalharei com limite de saldo negativo pois não é esta a função desejada. //só inseri esta verificação para emular uma verificação de outro microserviço específico para isso. return(conta.Saldo - valor >= 0); }