public async Task <CommandResult> Handle(
            EfetuarOperacaoCommand request,
            CancellationToken cancellationToken)
        {
            CommandResult commandResult = new CommandResult(true);

            try
            {
                var dataOperacao        = DateTime.Now;
                var contaCorrenteOrigem = await _contaCorrenteRepository.FindByIdAsync(request.ContaCorrenteOrigemId);

                var contaCorrenteDestino = await _contaCorrenteRepository.FindByIdAsync(request.ContaCorrenteDestinoId);

                var operacaoDomainService = new OperacaoDomainService();

                operacaoDomainService.EfetuarTransacao(
                    contaCorrenteOrigem,
                    contaCorrenteDestino,
                    dataOperacao,
                    request.ValorOperacao);

                var sucesso = await _unitOfWork.SaveEntitiesAsync();

                if (!sucesso)
                {
                    commandResult = new CommandResult(false, "Operação de escrita não foi efetuada");
                }
            }
            catch (Exception ex)
            {
                commandResult = new CommandResult(false, ex.Message);
            }

            return(commandResult);
        }
        public void Operacao_Credito_Suficiente_Sucesso()
        {
            //Arrange
            var contaOrigem = new ContaCorrente(
                Guid.NewGuid(),
                Guid.NewGuid(),
                LancamentosBuilder());

            var contaDestino = new ContaCorrente(
                Guid.NewGuid(),
                Guid.NewGuid(),
                LancamentosBuilder());

            var valorOperacao = 400;
            var dataOperacao  = DateTime.Now;

            var contaOrigemSaldoEsperado  = 300;
            var contaDestinoSaldoEsperado = 1100;
            var operacaoService           = new OperacaoDomainService();

            //Act
            operacaoService.EfetuarTransacao(
                contaOrigem,
                contaDestino,
                dataOperacao,
                valorOperacao);

            //Assert
            Assert.Equal(contaOrigemSaldoEsperado, contaOrigem.Saldo);
            Assert.Equal(contaDestinoSaldoEsperado, contaDestino.Saldo);
        }
        public void Operacao_Contas_Mesma_Origem_Falha()
        {
            //Arrange
            var contaCorrenteId = Guid.NewGuid();
            var contaOrigem     = new ContaCorrente(
                contaCorrenteId,
                Guid.NewGuid(),
                LancamentosBuilder());

            var contaDestino = new ContaCorrente(
                contaCorrenteId,
                Guid.NewGuid(),
                LancamentosBuilder());

            var valorOperacao   = 800;
            var dataOperacao    = DateTime.Now;
            var operacaoService = new OperacaoDomainService();

            //Act - Assert
            Assert.Throws <AccountManagerDomainException>(() =>
            {
                operacaoService.EfetuarTransacao(
                    contaOrigem,
                    contaDestino,
                    dataOperacao,
                    valorOperacao);
            });
        }
Beispiel #4
0
        public void Operacao_Credito_Insuficiente_Falha()
        {
            //Arrange
            var contaOrigem = new ContaCorrente(
                Guid.NewGuid(),
                Guid.NewGuid(),
                LancamentosBuilder());

            var contaDestino = new ContaCorrente(
                Guid.NewGuid(),
                Guid.NewGuid(),
                LancamentosBuilder());

            var valorOperacao   = 800;
            var dataOperacao    = DateTime.Now;
            var operacaoService = new OperacaoDomainService();

            //Act - Assert
            Assert.Throws <CheckingAccountDomainException>(() =>
            {
                operacaoService.EfetuarTransacao(
                    contaOrigem,
                    contaDestino,
                    dataOperacao,
                    valorOperacao);
            });
        }