Пример #1
0
        public async Task DeveRetornarSucesso_Quando_LancamentoForGerado()
        {
            //Given
            _clienteOrigem  = new Cliente();
            _clienteDestino = new Cliente();
            _command        = new CriarLancamento(_clienteOrigem.ContaCorrente.Numero, _clienteDestino.ContaCorrente.Numero, LancamentoTipo.Transferencia, 500);

            _clienteRepositorio.Setup(p => p.ObterPorContaAsync(_command.NumeroContaOrigem)).ReturnsAsync(_clienteOrigem);
            _clienteRepositorio.Setup(p => p.ObterPorContaAsync(_command.NumeroContaDestino)).ReturnsAsync(_clienteDestino);
            _clienteServico.Setup(p => p.SalvarAsync(_clienteOrigem));
            _clienteServico.Setup(p => p.SalvarAsync(_clienteDestino));

            _bus.Setup(p => p.Publish(It.IsAny <LancamentoCriado>(), It.IsAny <CancellationToken>()))
            .Callback <LancamentoCriado, CancellationToken>((re, ca) => { _lancamentoCriadoOrigem = re; _cancellationToken = ca; });

            _bus.Setup(p => p.Publish(It.IsAny <LancamentoCriado>(), It.IsAny <CancellationToken>()))
            .Callback <LancamentoCriado, CancellationToken>((re, ca) => { _lancamentoCriadoDestino = re; _cancellationToken = ca; });

            //When
            var resultado = await _handler.Handle(_command, _cancellationToken);

            //Then
            Assert.True(resultado.Sucesso);
            Assert.Equal("Lançamento gerado com sucesso.", resultado.Mensagem);
            decimal origemSaldoAtual = 1000;

            Assert.Equal(_clienteOrigem.ContaCorrente.Saldo, origemSaldoAtual);
            decimal destinoSaldoAtual = 2000;

            Assert.Equal(_clienteDestino.ContaCorrente.Saldo, destinoSaldoAtual);
            _clienteServico.Verify(p => p.SalvarAsync(It.IsAny <Cliente>()), Times.Exactly(2));
            _bus.Verify(p => p.Publish(It.IsAny <LancamentoCriado>(), It.IsAny <CancellationToken>()), Times.Exactly(2));
        }
Пример #2
0
        public async Task DeveRetornarOk_Quando_CriarLancamentoComSucesso()
        {
            //arrange
            var clienteOrigem  = new Cliente();
            var clienteDestino = new Cliente();
            var model          = new CriarLancamento(clienteOrigem.ContaCorrente.Numero, clienteDestino.ContaCorrente.Numero, LancamentoTipo.Transferencia, 1500);

            _bus.Setup(p => p.Send(model, _cancellationToken)).ReturnsAsync(new Resultado(true, "sucesso"));

            //act
            var resultado = await _controller.Post(model, _cancellationToken);

            //assert
            Assert.IsType <OkObjectResult>(resultado);
        }
Пример #3
0
        public async Task DeveRetornarNotFound_Quando_NaoEncontrarContasNoBanco()
        {
            //arrange
            var clienteOrigem  = new Cliente();
            var clienteDestino = new Cliente();
            var model          = new CriarLancamento(clienteOrigem.ContaCorrente.Numero, clienteDestino.ContaCorrente.Numero, LancamentoTipo.Transferencia, 1500);

            _bus.Setup(p => p.Send(model, _cancellationToken)).ReturnsAsync(new Resultado(false, "conta não encontrada"));

            //act
            var resultado = await _controller.Post(model, _cancellationToken);

            //assert
            Assert.IsType <NotFoundObjectResult>(resultado);
        }
        public async Task <IActionResult> Post([FromBody] CriarLancamento model, CancellationToken cancellationToken)
        {
            if (ModelState.IsValid)
            {
                var resultado = await _bus.Send(model, cancellationToken);

                if (resultado.Sucesso)
                {
                    return(Ok(resultado.Mensagem));
                }

                return(NotFound(resultado.Mensagem));
            }
            return(BadRequest());
        }
Пример #5
0
        public async Task DeveRetornarBadRequest_Quando_NaoCriarLancamento()
        {
            //arrange
            var clienteOrigem  = new Cliente();
            var clienteDestino = new Cliente();
            var model          = new CriarLancamento(clienteOrigem.ContaCorrente.Numero, clienteDestino.ContaCorrente.Numero, LancamentoTipo.Transferencia, 1500);

            _bus.Setup(p => p.Send(model, _cancellationToken)).ReturnsAsync(new Resultado(false, "request inválido"));
            _controller.ModelState.AddModelError("Error", "Modelo inválido");

            //act
            var resultado = await _controller.Post(model, _cancellationToken);

            //assert
            Assert.IsType <BadRequestResult>(resultado);
        }
Пример #6
0
        public async Task DeveRetornarErro_Quando_ContaDestinoNaoForEncontrada()
        {
            //Given
            _clienteOrigem = new Cliente();
            _command       = new CriarLancamento(_clienteOrigem.ContaCorrente.Numero, "XAS", LancamentoTipo.Transferencia, 500);
            _clienteRepositorio.Setup(p => p.ObterPorContaAsync(_command.NumeroContaDestino)).ReturnsAsync(_clienteDestino);

            //When
            var resultado = await _handler.Handle(_command, _cancellationToken);

            //Then
            Assert.False(resultado.Sucesso);
            Assert.Equal("Cliente de conta Origem não encontrado.", resultado.Mensagem);
            _clienteServico.Verify(p => p.SalvarAsync(It.IsAny <Cliente>()), Times.Never);
            _bus.Verify(p => p.Publish(It.IsAny <LancamentoCriado>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Пример #7
0
        public async Task DeveRetornarErro_Quando_FalharComunicacaoEntreServicos()
        {
            //Given
            _clienteOrigem  = new Cliente();
            _clienteDestino = new Cliente();
            _command        = new CriarLancamento(_clienteOrigem.ContaCorrente.Numero, _clienteDestino.ContaCorrente.Numero, LancamentoTipo.Transferencia, 500);

            _clienteRepositorio.Setup(p => p.ObterPorContaAsync(_command.NumeroContaOrigem)).ReturnsAsync(_clienteOrigem);
            _clienteRepositorio.Setup(p => p.ObterPorContaAsync(_command.NumeroContaDestino)).ReturnsAsync(_clienteDestino);
            _clienteServico.Setup(p => p.SalvarAsync(_clienteOrigem));
            _clienteServico.Setup(p => p.SalvarAsync(_clienteDestino));

            _bus.Setup(p => p.Publish(It.IsAny <LancamentoCriado>(), It.IsAny <CancellationToken>())).Throws <Exception>();

            _bus.Setup(p => p.Publish(It.IsAny <LancamentoCriado>(), It.IsAny <CancellationToken>())).Throws <Exception>();

            //When
            var resultado = await _handler.Handle(_command, _cancellationToken);

            //Then
            Assert.False(resultado.Sucesso);
            Assert.Equal("Ocorreu uma falha ao enviar o lancamento gerado.", resultado.Mensagem);
            _clienteServico.Verify(p => p.SalvarAsync(It.IsAny <Cliente>()), Times.Never);
        }