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