Esempio n. 1
0
        public async Task Webhook_AoCriarumPedidoComClienteNaoAutenticado_RetornarSucesso()
        {
            // Arrange
            var pedidoId = Guid.NewGuid();
            var command  = new WebhookPagamentoCommand(pedidoId, PagamentoStatus.Aprovado);

            var pedido    = Pedido.Criar(pedidoId, 999);
            var pagamento = PedidoPagamento.Criar(pedido, "4242424242424242", DateTime.Now.AddDays(1), 123);

            pedido.AdicionarPagamento(pagamento);
            pedido.AtualizarStatus(PedidoStatus.ProcessandoPagamento);

            //Obter pedido
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Pedidos.ObterPorIdAsync(pedido.Id))
            .Returns(Task.FromResult(pedido));

            //Obter EventBus
            _mocker.GetMock <IEventBus>()
            .Setup(p => p.Publish(It.IsAny <string>(), It.IsAny <Event>(), It.IsAny <string>()))
            .Returns(Task.CompletedTask);

            // Act
            var responseResult = await _handler.Handle(command, CancellationToken.None);

            // Assert
            Assert.False(responseResult.HasFails);
            _mocker.GetMock <IUnitOfWork>().Verify(o => o.SaveAsync(), Times.Once);
        }
        public async Task <ResponseResult> Handle(CriarPagamentoCommand request, CancellationToken cancellationToken)
        {
            request.Validate();
            if (request.Notifications.Any())
            {
                _response.AddNotifications(request.Notifications);
                return(_response);
            }

            var pedido = await _unitOfWork.Pedidos.ObterPorIdAsync(request.PedidoId);

            if (pedido == null)
            {
                _response.AddNotification(new Notification("pagamento", Erros.ErroPedido_NaoEncontrado));
                return(_response);
            }

            if (pedido.Status != PedidoStatus.AguardandoPagamento)
            {
                _response.AddNotification(new Notification("pagamento", Erros.ErroPedido_PedidoNaoEstaAguardandoPgto));
                return(_response);
            }


            var pagamento = PedidoPagamento.Criar(
                pedido,
                request.NumeroCartao,
                request.VencimentoCartao,
                request.CodigoSeguranca);

            if (!pagamento.ValidarCartao())
            {
                _response.AddNotification(new Notification("pagamento", Erros.ErroPagamento_CartaoInvalido));
                return(_response);
            }


            /******************/
            /******************/
            /* MOCK - Gateway de Pagamento*/
            var token = await _gatewayPagamento.EnviarParaPagamento(pedido);

            pagamento.AdicionarToken(token);
            /******************/


            pedido.AdicionarPagamento(pagamento);
            pedido.AtualizarStatus(PedidoStatus.ProcessandoPagamento);

            //publica o evento para o bus
            await _eventBus.Publish("pedido-atualizado-event", new PedidoAtualizadoEvent(pedido.Id, pedido.Status), pedido.Id.ToString());

            await _unitOfWork.Pedidos.AdicionarPagamentoAsync(pagamento);

            await _unitOfWork.SaveAsync();

            return(_response);
        }
 public void Add(PedidoPagamento pag)
 {
     using (DataContext db = new DataContext())
     {
         try
         {
             db.PedidoPagamentos.Add(pag);
             db.SaveChanges();
         }
         catch (Exception)
         {
             throw;
         }
     }
 }
        public async Task Pagamento_AoCriarumPagamentoComComandoValido_RetornarSucesso()
        {
            // Arrange
            var pedidoId = Guid.NewGuid();
            var command  = new CriarPagamentoCommand("4242424242424242", DateTime.Now.AddDays(1), 123);

            command.MarcarPedidoId(pedidoId);

            var pedido    = Pedido.Criar(pedidoId, 999);
            var pagamento = PedidoPagamento.Criar(pedido, "4242424242424242", DateTime.Now.AddDays(1), 123);

            pedido.AdicionarPagamento(pagamento);
            pedido.AtualizarStatus(PedidoStatus.AguardandoPagamento);

            //Obter pedido
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Pedidos.ObterPorIdAsync(pedido.Id))
            .Returns(Task.FromResult(pedido));

            //Obter Gateway
            _mocker.GetMock <IGatewayPagamento>()
            .Setup(p => p.EnviarParaPagamento(It.IsAny <Pedido>()))
            .Returns(Task.FromResult("token"));

            //Obter EventBus
            _mocker.GetMock <IEventBus>()
            .Setup(p => p.Publish(It.IsAny <Event>()))
            .Returns(Task.CompletedTask);

            //adicionar pagamento pedido
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Pedidos.AdicionarPagamentoAsync(pagamento))
            .Returns(Task.CompletedTask);

            //Salvar operação
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.SaveAsync())
            .Returns(Task.CompletedTask);



            // Act
            var responseResult = await _handler.Handle(command, CancellationToken.None);

            // Assert
            Assert.False(responseResult.HasFails);
            _mocker.GetMock <IUnitOfWork>().Verify(o => o.SaveAsync(), Times.Once);
        }
 public void Remove(int PedidoPagamentoID)
 {
     using (DataContext db = new DataContext())
     {
         try
         {
             PedidoPagamento pag = db.PedidoPagamentos.Single(pp => pp.PedidoPagamentoID == PedidoPagamentoID);
             db.PedidoPagamentos.Remove(pag);
             db.SaveChanges();
         }
         catch (Exception)
         {
             throw;
         }
     }
 }
        public IActionResult Post([FromBody] PedidoPagamento PedidoPagamento)
        {
            var pedidoIn        = new SqlParameter("@PedidoId", PedidoPagamento.PedidoId);
            var formaPgtoIn     = new SqlParameter("@FormaPgtoId", PedidoPagamento.FormaPgtoId);
            var valorIn         = new SqlParameter("@Valor", PedidoPagamento.Valor);
            var usuarioIn       = new SqlParameter("@UsuarioId", 1); // TODO: usuario
            var servicoAceitoIn = new SqlParameter("@ServicoAceito", PedidoPagamento.PedidoId);

            var saldoOut = new SqlParameter();

            saldoOut.ParameterName = "@Saldo";
            saldoOut.Direction     = ParameterDirection.Output;
            saldoOut.DbType        = DbType.Decimal;

            _db.Database.ExecuteSqlCommand("PedidoPagamento @PedidoId, @FormaPgtoId, @Valor, @UsuarioId, @ServicoAceito, @Saldo OUT", pedidoIn, formaPgtoIn, valorIn, usuarioIn, servicoAceitoIn, saldoOut);
            return(Ok(saldoOut.Value));
        }
Esempio n. 7
0
        private void addPagamento(decimal Valor, int FormaPagamentoID)
        {
            if (FormaPagamentoID > 1 && Valor > saldo)
            {
                MessageBox.Show("Não é possível fazer um pagamento com cartão/cheque maior que o saldo do pedido.", "ERRO: Pagamento", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                dalPedidoPagamento dalPPag = new dalPedidoPagamento();
                PedidoPagamento    pp      = new PedidoPagamento
                {
                    Data             = DateTime.Now,
                    FormaPagamentoID = FormaPagamentoID,
                    Valor            = Valor,
                    PedidoID         = PedidoID
                };

                dalPPag.Add(pp);

                populaGrid();
                atualizaValores();
            }
        }
 public async Task AdicionarPagamentoAsync(PedidoPagamento pedidoPagamento)
 {
     await _context.Pagamentos.AddAsync(pedidoPagamento);
 }