示例#1
0
        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)));
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
            }
        }
示例#6
0
 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);
 }