public void Deve_Retornar_Sucesso_Como_Falso_Quando_Parametro_Valor_For_Zero()
        {
            var requisicaoTransacao = new RequisicaoDeTransacao();
            var response            = _servicoTransacao.Efetuar(requisicaoTransacao);

            Assert.False(response.Sucesso);
        }
        public void Deve_Retornar_Sucesso_Como_Verdadeiro_Efetuar_Transacao()
        {
            var requisicaoTransacao = new RequisicaoDeTransacao()
            {
                Valor  = 100M,
                Origem = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "123456", Digito = "7"
                },
                Destino = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "654321", Digito = "0"
                }
            };


            _contaCorrenteRepositorio.Setup(x => x.Obter(It.Is <ContaCorrente>(x => x.Numero == "123456"))).Returns(new ContaCorrente("0001", "123456", "7")
            {
                Id = Guid.NewGuid().ToString(), Saldo = 500M
            });
            _contaCorrenteRepositorio.Setup(x => x.Obter(It.Is <ContaCorrente>(x => x.Numero == "654321"))).Returns(new ContaCorrente("0001", "654321", "0")
            {
                Id = Guid.NewGuid().ToString(), Saldo = 200M
            });

            _contaCorrenteRepositorio.Setup(x => x.AtualizarSaldo(It.Is <ContaCorrente>(x => x.Numero == "123456")));
            _contaCorrenteRepositorio.Setup(x => x.AtualizarSaldo(It.Is <ContaCorrente>(x => x.Numero == "654321")));

            var response = _servicoTransacao.Efetuar(requisicaoTransacao);

            Assert.True(response.Sucesso);
        }
        public void Deve_Retornar_Sucesso_Como_Falso_Quando_Der_Alguma_Exececao_AO_Persistir_Saldo()
        {
            var requisicaoTransacao = new RequisicaoDeTransacao()
            {
                Valor  = 100M,
                Origem = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "123456", Digito = "7"
                },
                Destino = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "654321", Digito = "0"
                }
            };


            _contaCorrenteRepositorio.Setup(x => x.Obter(It.Is <ContaCorrente>(x => x.Numero == "123456"))).Returns(new ContaCorrente("0001", "123456", "7")
            {
                Id = Guid.NewGuid().ToString(), Saldo = 500M
            });
            _contaCorrenteRepositorio.Setup(x => x.Obter(It.Is <ContaCorrente>(x => x.Numero == "654321"))).Returns(new ContaCorrente("0001", "654321", "0")
            {
                Id = Guid.NewGuid().ToString(), Saldo = 200M
            });

            _contaCorrenteRepositorio.Setup(x => x.AtualizarSaldo(It.IsAny <ContaCorrente>())).Throws(new Exception());


            var response = _servicoTransacao.Efetuar(requisicaoTransacao);

            Assert.False(response.Sucesso);
        }
示例#4
0
        private ValidationResult ValidarObjetoDeRequisicao(RequisicaoDeTransacao transacao)
        {
            var validador = new ValidadorRequisicaoDeTransacao();
            var validacao = validador.Validate(transacao);

            return(validacao);
        }
        public void Deve_Retornar_Sucesso_Como_Falso_Quando_Nao_Encontar_ContaCorrente_Destino()
        {
            var requisicaoTransacao = new RequisicaoDeTransacao()
            {
                Valor  = 100M,
                Origem = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "123456", Digito = "7"
                },
                Destino = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "654321", Digito = "0"
                }
            };


            _contaCorrenteRepositorio.Setup(x => x.Obter(It.Is <ContaCorrente>(x => x.Numero == "123456"))).Returns(new ContaCorrente("0001", "123456", "7")
            {
                Id = Guid.NewGuid(), Saldo = 500M
            });
            _contaCorrenteRepositorio.Setup(x => x.Obter(It.Is <ContaCorrente>(x => x.Numero == "654321"))).Returns((ContaCorrente)null);

            var response = _servicoTransacao.Efetuar(requisicaoTransacao);

            Assert.False(response.Sucesso);
        }
        public void Deve_Retornar_Sucesso_Como_Falso_Quando_Parametro_ContaCorrente_Origem_E_Destino_Forem_Nulas()
        {
            var requisicaoTransacao = new RequisicaoDeTransacao()
            {
                Valor = 100M
            };
            var response = _servicoTransacao.Efetuar(requisicaoTransacao);

            Assert.False(response.Sucesso);
        }
        public ActionResult Post(RequisicaoDeTransacao requisicao)
        {
            var resultado = _servico.Efetuar(requisicao);

            if (!resultado.Sucesso)
            {
                return(StatusCode(resultado.Erro.StatusCode, new RespostaErroPadrao(resultado.Erro)));
            }

            return(Ok(resultado.Objeto));
        }
        public void Deve_Retornar_Sucesso_Como_Falso_Quando_Parametro_ContaCorrente_Destino_For_Nula()
        {
            var requisicaoTransacao = new RequisicaoDeTransacao()
            {
                Valor  = 100M,
                Origem = new RequisicaoDeContaCorrente()
                {
                    Agencia = "0001", Numero = "123456", Digito = "7"
                },
            };
            var response = _servicoTransacao.Efetuar(requisicaoTransacao);

            Assert.False(response.Sucesso);
        }
示例#9
0
        public RespostaPadrao <RetornoTransacao> Efetuar(RequisicaoDeTransacao transacao)
        {
            RespostaPadrao <RetornoTransacao> resultado = new RespostaPadrao <RetornoTransacao>();

            try
            {
                var validacao = ValidarObjetoDeRequisicao(transacao);
                if (!validacao.IsValid)
                {
                    resultado.ConfigurarResposta(validacao);
                }
                else
                {
                    var contaOrigem  = new ContaCorrente(transacao.Origem.Agencia, transacao.Origem.Numero, transacao.Origem.Digito);
                    var contaDestino = new ContaCorrente(transacao.Destino.Agencia, transacao.Destino.Numero, transacao.Destino.Digito);

                    contaOrigem  = ValidarContaCorrente(contaOrigem, "origem");
                    contaDestino = ValidarContaCorrente(contaDestino, "destino");

                    _movimentacao.Debitar(contaOrigem, transacao.Valor);
                    _movimentacao.Creditar(contaDestino, transacao.Valor);

                    resultado.ConfigurarResposta(true, new RetornoTransacao("Transação concluída com sucesso."));
                }
            }
            catch (ExcecaoDeDominio ex)
            {
                resultado.ConfigurarResposta(ex);
            }
            catch (Exception ex)
            {
                resultado.ConfigurarResposta(ex);
            }

            return(resultado);
        }