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)); }
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); }
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()); }
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); }
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); }
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); }