Example #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));
        }
        public async Task DeveRetornarErro_Quando_LancamentoInicialFalhar()
        {
            //arrange
            var cliente = new Cliente();

            _clienteServico.Setup(p => p.AdicionarAsync()).ReturnsAsync(cliente);

            var lancamentoCriado = new LancamentoCriado(cliente.Id, LancamentoTipo.DepositoInicial, cliente.ContaCorrente.Saldo,
                                                        cliente.ContaCorrente.Numero, cliente.Nome, cliente.ContaCorrente.Numero,
                                                        cliente.Nome, cliente.ContaCorrente.Saldo, TransacaoTipo.Credito);

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

            //act
            var resultado = await _handler.Handle(new CriarCliente(), _cancellationToken);

            //assert
            Assert.False(resultado.Sucesso);
        }
        public async Task DeveRetornarSucesso_Quando_ClienteCriado()
        {
            //given
            var cliente = new Cliente();

            _clienteServico.Setup(p => p.AdicionarAsync()).ReturnsAsync(cliente);

            var lancamentoCriado = new LancamentoCriado(cliente.Id, LancamentoTipo.DepositoInicial, cliente.ContaCorrente.Saldo,
                                                        cliente.ContaCorrente.Numero, cliente.Nome, cliente.ContaCorrente.Numero,
                                                        cliente.Nome, cliente.ContaCorrente.Saldo, TransacaoTipo.Credito);

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

            //when
            var resultado = await _handler.Handle(new CriarCliente(), _cancellationToken);

            //then
            Assert.True(resultado.Sucesso);
        }