Exemplo n.º 1
0
        public async Task <bool> Post([FromBody] PedidoModel model)
        {
            try
            {
                AdicionarPedidoCommand adicionarPedidoCommand = new AdicionarPedidoCommand();
                adicionarPedidoCommand.ClienteId = model.Cliente.Id;

                await _mediatorHandler.EnviarComando(adicionarPedidoCommand);

                foreach (var item in model.Itens)
                {
                    AdicionarItemPedidoCommand adicionarItemPedidoCommand = new AdicionarItemPedidoCommand(item.Produto.Id, item.Quantidade, model.Cliente.Id);
                    await _mediatorHandler.EnviarComando(adicionarItemPedidoCommand);
                }

                return(true);
            }
            catch (DominioException ex)
            {
                return(false);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
        public async Task AdicionarItem_NovoItemPedidoRascunho_DeveExecutarComSucesso()
        {
            //Arrange
            var clienteId           = Guid.NewGuid();
            var pedido              = Pedido.PedidoFactory.NovoPedidoRascunho(clienteId);
            var pedidoItemExistente = new PedidoItem(Guid.NewGuid(), "Produto Teste", 2, 100);

            pedido.AdicionarItem(pedidoItemExistente);

            var pedidoCommand = new AdicionarItemPedidoCommand(clienteId, Guid.NewGuid(), "Outro produto", 1, 50);

            var mocker        = new AutoMocker();
            var pedidoHandler = mocker.CreateInstance <PedidoCommandHandler>();

            mocker.GetMock <IPedidoRepositorio>()
            .Setup(r => r.ObterPedidoRascunhoPorClienteId(clienteId)).Returns(Task.FromResult(pedido));
            mocker.GetMock <IPedidoRepositorio>().Setup(r => r.UnitOfWork.Commit()).Returns(Task.FromResult(true));

            //Act
            var result = await pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            //Assert
            Assert.True(result);
            mocker.GetMock <IPedidoRepositorio>().Verify(r => r.AdicionarItem(It.IsAny <PedidoItem>()), Times.Once);
            mocker.GetMock <IPedidoRepositorio>().Verify(r => r.Atualizar(It.IsAny <Pedido>()), Times.Once);
            mocker.GetMock <IPedidoRepositorio>().Verify(r => r.UnitOfWork.Commit(), Times.Once);
        }
Exemplo n.º 3
0
        public async Task AdicionarItem_NovoItemAoPedidoRascunho_DeveExecutarComSucesso()
        {
            // Arrange
            var clienteId = Guid.NewGuid();

            var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(clienteId);
            var pedidoItemExistente = new PedidoItem(Guid.NewGuid(), "Produto 01", 2, 100);

            pedido.AdicionarItem(pedidoItemExistente);

            var pedidoCommand = new AdicionarItemPedidoCommand(clienteId: clienteId,
                                                               produtoId: Guid.NewGuid(),
                                                               nome: "Produto Teste",
                                                               quantidade: 2,
                                                               valorUnitario: 100);

            // Act
            var pedidoRepository = Substitute.For <IPedidoRepository>();
            var mediator         = Substitute.For <IMediator>();
            var pedidoHandler    = Substitute.For <PedidoCommandHandler>(pedidoRepository, mediator);

            pedidoRepository.ObterPedidoRascunhoPorClienteId(clienteId).Returns(pedido);
            pedidoRepository.UnitOfWork.Commit().Returns(true);

            var result = await pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            // Assert
            result.Should().BeTrue();
            pedidoRepository.Received(1).AdicionarItem(Arg.Any <PedidoItem>());
            pedidoRepository.Received(1).Atualizar(Arg.Any <Pedido>());
            await pedidoRepository.UnitOfWork.Received(1).Commit();
        }
Exemplo n.º 4
0
        public async Task <IActionResult> AdicionarItem(Guid id, int quantidade)
        {
            var produto = await _produtoAppService.ObterPorId(id);

            if (produto == null)
            {
                return(BadRequest());
            }

            if (produto.QuantidadeEstoque < quantidade)
            {
                TempData["Erro"] = "Produto com estoque insuficiente";
                return(RedirectToAction("ProdutoDetalhe", "Vitrine", new { id }));
            }

            // ClienteId é o cliente logado;
            var command = new AdicionarItemPedidoCommand(ClienteId, produto.Id, produto.Nome, quantidade, produto.Valor);
            await _mediatorHandler.EnviarComando(command);

            if (OperacaoValida())
            {
                return(RedirectToAction("Index"));
            }

            // Esse TempData está sendo utilizado porque está dando um Redirect - toda vez que da um Redirect, perde o estado do request anterior, então precisa persistir a mensagem no TempData;
            TempData["Erros"] = ObterMensagensErro();
            return(RedirectToAction("ProdutoDetalhe", "Vitrine", new { id }));
        }
Exemplo n.º 5
0
        public async Task DeveAdicionarUmNovoItemParaUmPedidoNovoComSucesso()
        {
            // Arrange
            var command = new AdicionarItemPedidoCommand(Guid.NewGuid(), Guid.NewGuid(),
                                                         "produto teste", 2, 100);

            var mocker        = new AutoMocker();
            var pedidoHandler = mocker.CreateInstance <PedidoCommandHandler>();

            mocker.GetMock <IPedidoRepository>()
            .Setup(x => x.UnitOfWork.Commit())
            .Returns(Task.FromResult(true));

            // Act

            var resultado = await pedidoHandler.Handle(command, CancellationToken.None);

            // Assert

            resultado.Should().BeTrue();

            mocker.GetMock <IPedidoRepository>()
            .Verify(x => x.Adicionar(It.IsAny <Pedido>()), Times.Once);

            mocker.GetMock <IPedidoRepository>()
            .Verify(x => x.UnitOfWork.Commit(), Times.Once);

            // mocker.GetMock<IMediator>()
            //     .Verify(x =>
            //         x.Publish(It.IsAny<INotification>(), CancellationToken.None), Times.Once);
        }
        public async Task <IActionResult> AdicionarItem(Guid id, int quantidade)
        {
            var produto = await _produtoAppService.ObterPorId(id);

            if (produto == null)
            {
                return(BadRequest());
            }

            if (produto.QuantidadeEstoque < quantidade)
            {
                TempData["Erro"] = "Produto com estoque insuficiente";
                return(RedirectToAction("ProdutoDetalhe", "Vitrine", new { id }));
            }

            var command = new AdicionarItemPedidoCommand(ClienteId, produto.Id, produto.Nome, quantidade, produto.Valor);
            await _mediatorHandler.EnviarComando(command);

            if (OperacaoValida())
            {
                return(RedirectToAction("Index"));
            }

            TempData["Erros"] = ObterMensagensErro();
            return(RedirectToAction("ProdutoDetalhe", "Vitrine", new { id }));
        }
        public async Task AdicionarItem_ItemExistenteAoPedidoRascunho_DeveExecutarComSucesso()
        {
            //Arrange

            var pedidoItemExistente = new PedidoItem(_produtoId, "ProdutoTeste", 1, 100);

            _pedido.AdicionarItem(pedidoItemExistente);

            var pedidoCommand = new AdicionarItemPedidoCommand(_clienteId, _produtoId, "ProdutoTeste", 1, 100);


            _mocker.GetMock <IPedidoRepository>()
            .Setup(r => r.ObterPedidoRascunhoPorClienteId(_clienteId)).Returns(Task.FromResult(_pedido));

            _mocker.GetMock <IPedidoRepository>().Setup(r => r.UnitOfWork.Commit()).Returns(Task.FromResult(true));

            //Act
            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            //Assert
            Assert.True(result);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.AtualizarItem(It.IsAny <PedidoItem>()), Times.Once);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.Atualizar(It.IsAny <Pedido>()), Times.Once);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.UnitOfWork.Commit(), Times.Once);
        }
Exemplo n.º 8
0
        public void DeveNotificarErrosParaCommandInvalido()
        {
            // Arrange

            var command = new AdicionarItemPedidoCommand(
                Guid.Empty,
                Guid.Empty,
                "",
                0,
                0
                );

            // Act

            var estaValido = command.EstaValido();
            var erros      = command.Validacoes
                             .Errors
                             .Select(x => x.ErrorMessage)
                             .ToList();

            // Assert

            estaValido.Should().BeFalse();

            erros.Should()
            .Contain(ValidacaoParaAdicionarItemPedido.IdClienteErroMsg)
            .And.Contain(ValidacaoParaAdicionarItemPedido.IdProdutoErroMsg)
            .And.Contain(ValidacaoParaAdicionarItemPedido.NomeErroMsg)
            .And.Contain(ValidacaoParaAdicionarItemPedido.QtdMinErroMsg)
            .And.Contain(ValidacaoParaAdicionarItemPedido.ValorErroMsg);
        }
        public async Task <IActionResult> AdicionarItem(Guid id, int quantidade)
        {
            var produto = await _produtoAppService.ObterPorId(id);

            if (produto == null)
            {
                return(BadRequest());
            }

            if (produto.QuantidadeEstoque < quantidade)
            {
                TempData["Erro"] = "Produto com estoque insuficiente";
                return(RedirectToAction("ProdutoDetalhe", "Vitrine", new { id }));
            }

            var command = new AdicionarItemPedidoCommand(ClienteId, produto.Id, produto.Nome, quantidade, produto.Valor);
            await _IMediateHandler.EnviarComando(command);

            if (OperacaoValida())
            {
                return(RedirectToAction("Index"));
            }

            // Esta sendo usado o TempData porque estou usando o redirectToAction toda ves que uso esse redirection eu perco o
            //estado do meu request anterior,então eu preciso persistir minha msg de erro no meu temp data
            TempData["Erro"] = "Produto Indisponível";
            // Esse redirect é um novo request
            return(RedirectToAction("ProdutoDetalhe", "Vitrine", new { id }));
        }
Exemplo n.º 10
0
        public void AdicionarItemPedidoCommand_ComandoEstaValido_DevePassarNaValidacao()
        {
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.NewGuid(),
                                                               Guid.NewGuid(), "Produto Teste", 2, 100);

            var result = pedidoCommand.EhValido();

            Assert.True(result);
        }
Exemplo n.º 11
0
        public void AdicionarItemPedidoCommand_QuantidadeUnidadesSuperiorAoPermitido_NaoDevePassarNaValidacao()
        {
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.NewGuid(),
                                                               Guid.NewGuid(), "Produto Teste", Pedido.MAX_UNIDADES_ITEM + 1, 100);

            var result = pedidoCommand.EhValido();

            Assert.False(result);
            Assert.Contains(AdicionarItemPedidoValidation.QtdMaxErroMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
        }
        public void AdicionarItemPedidoCommand_ComandoEstaValido_DevePassarNaValidacao()
        {
            // Arrange
            var command = new AdicionarItemPedidoCommand(Guid.NewGuid(), Guid.NewGuid(), "Produto Teste", 2, 100);

            // Act
            var result = command.EhValido();

            // Assert
            Assert.True(result);
        }
        public async Task AdicionarItem_CommandInvalido_DeveRetornarFalsoELancarEventosDeNotificacao()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.Empty, Guid.Empty, "", 0, 0);

            // Act
            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            // Assert
            Assert.False(result);
            _mocker.GetMock <IMediator>().Verify(m => m.Publish(It.IsAny <INotification>(), CancellationToken.None), Times.Exactly(5));
        }
Exemplo n.º 14
0
        public async Task DeveAtualizarItemPreviamenteAdicionado()
        {
            // Arrange
            var clienteId = Guid.NewGuid();
            var produtoId = Guid.NewGuid();

            var pedido = new Pedido(clienteId);
            var item   = new PedidoItem(produtoId, "Produto teste", 2, 100);

            pedido.AdicionarItem(item);

            var command = new AdicionarItemPedidoCommand(
                clienteId,
                produtoId,
                "Produto teste",
                2,
                100);

            var mocker        = new AutoMocker();
            var pedidoHandler = mocker.CreateInstance <PedidoCommandHandler>();

            var repository = mocker.GetMock <IPedidoRepository>();

            repository
            .Setup(x => x.ObterPedidoRascunho(clienteId))
            .Returns(Task.FromResult(pedido));

            repository
            .Setup(x => x.UnitOfWork.Commit())
            .Returns(Task.FromResult(true));


            // Act

            var resultado = await pedidoHandler.Handle(command, CancellationToken.None);

            // Assert

            resultado.Should().BeTrue();

            repository
            .Verify(x =>
                    x.AtualizarItem(It.IsAny <PedidoItem>()), Times.Once);

            repository
            .Verify(x =>
                    x.Atualizar(It.IsAny <Pedido>()), Times.Once);

            repository
            .Verify(x =>
                    x.UnitOfWork.Commit(), Times.Once);
        }
Exemplo n.º 15
0
        public void AdicionarItemPedidoCommand_QuantidadeUnidadesAcimaPermitido_NaoDevePassarNaValidacao()
        {
            //Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.NewGuid(), Guid.NewGuid(),
                                                               "Teste", Pedido.MAX_UNIDADES_ITEM + 1, 0);

            //Act
            var result = pedidoCommand.EhValido();

            //Assert
            Assert.False(result);
            Assert.Contains(AdicionarItemPedidoValidation.QtdMaxErrorMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
        }
        public async Task AdicionarItem_NovoPedido_DeveExecutarComSucesso()
        {
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.NewGuid(),
                                                               Guid.NewGuid(), "Novo Produto", 2, 150);

            _mocker.GetMock <IPedidoRepository>().Setup(r => r.UnitOfWork.Commit()).Returns(Task.FromResult(true));

            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            Assert.True(result);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.Adicionar(It.IsAny <Pedido>()), Times.Once);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.UnitOfWork.Commit(), Times.Once);
            // mocker.GetMock<IMediator>().Verify(r => r.Publish(It.IsAny<INotification>(), CancellationToken.None), Times.Once);
        }
Exemplo n.º 17
0
        public void AdicionarItemPedidoCommand_ComandoEstaInvalido_NaoDevePassarNaValidacao()
        {
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.Empty,
                                                               Guid.Empty, "", 0, 0);

            var result = pedidoCommand.EhValido();

            Assert.False(result);
            Assert.Contains(AdicionarItemPedidoValidation.IdClienteErroMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.IdProdutoErroMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.NomeErroMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.QtdMinErroMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.ValorErroMsg, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
        }
Exemplo n.º 18
0
        public void AdicionarItemPedidoCommand_CommandoEstaValido_DevePassarNaValidacao()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(clienteId: Guid.NewGuid(),
                                                               produtoId: Guid.NewGuid(),
                                                               nome: "Produto Teste",
                                                               quantidade: 2,
                                                               valorUnitario: 100);

            // Act
            var result = pedidoCommand.EhValido();

            // Assert
            result.Should().BeTrue();
        }
Exemplo n.º 19
0
        public async Task AdicionarItem_NovoPedido_DeveExecutarComSucesso()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.NewGuid(), Guid.NewGuid(), "Produto Teste", 2, 100);

            _mocker.GetMock <IPedidoRepository>().Setup(p => p.UnitOfWork.Commit()).Returns(Task.FromResult(true));

            // Act
            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            // Assert
            Assert.True(result);
            _mocker.GetMock <IPedidoRepository>().Verify(p => p.Adicionar(It.IsAny <Pedido>()), Times.Once);
            _mocker.GetMock <IPedidoRepository>().Verify(p => p.UnitOfWork.Commit(), Times.Once);
        }
Exemplo n.º 20
0
        public async Task <IActionResult> AdicionarItem(Guid id, int quantidade)
        {
            var produto = await _produtoAppService.ObterPorId(id);

            if (produto == null)
            {
                return(BadRequest());
            }

            if (produto.QuantidadeEstoque < quantidade)
            {
            }

            var comando = new AdicionarItemPedidoCommand(clienteId, produto.Id, produto.Nome, quantidade, produto.Valor);
        }
Exemplo n.º 21
0
        public void AdicionarItemPedidoCommand_ComandoEstaInvalido_NaoDevePassarNasValidacoes()
        {
            //Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(Guid.Empty, Guid.Empty, "", 0, 0);

            //Act
            var result = pedidoCommand.EhValido();

            //Assert
            Assert.False(result);
            Assert.Contains(AdicionarItemPedidoValidation.IdClienteMsgErro, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.IdProdutoMsgErro, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.NomeMsgErro, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.QtdMinMsgErro, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
            Assert.Contains(AdicionarItemPedidoValidation.ValorUnitarioMsgErro, pedidoCommand.ValidationResult.Errors.Select(c => c.ErrorMessage));
        }
Exemplo n.º 22
0
        public void AdicionarItemPedidoCommand_QuantidadeUnidadesSuperiorAoPermitido_NaoDevePassarNaValidacao()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(clienteId: Guid.NewGuid(),
                                                               produtoId: Guid.NewGuid(),
                                                               nome: "Produto Teste",
                                                               quantidade: Pedido.MAX_UNIDADES_ITEM + 1,
                                                               valorUnitario: 100);

            // Act
            var result = pedidoCommand.EhValido();

            // Assert
            result.Should().BeFalse();
            pedidoCommand.ValidationResult.Errors.Should().HaveCount(1);
            pedidoCommand.ValidationResult.Errors.Should().Contain(x => x.ErrorMessage == AdicionarItemPedidoValidation.QtdMaxErroMsg);
        }
Exemplo n.º 23
0
        public async Task AdicionarItem_NovoPedido_DeveExecutarComSucesso()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(_clienteId, _produtoId,
                                                               "Produto Teste", 2, 100);

            _mocker.GetMock <IPedidoRepository>().Setup(r => r.UnitOfWork.Commit()).Returns(Task.FromResult(true));

            // Act
            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            // Assert
            Assert.True(result);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.Adicionar(It.IsAny <Pedido>()), Times.Once);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.UnitOfWork.Commit(), Times.Once);
            //_mocker.GetMock<IMediator>().Verify(result => result.Publish(It.IsAny<INotification>(), CancellationToken.None), Times.Once);
        }
        public async Task AdicionarItem_ItemExistenteAoPedidoRascunhoTotalizandoQuantidadeAcimaDoPermitido_DeveRetornarFalsoELancarEventosDeNotificacao()
        {
            // Arrange
            var pedidoItemExistente = new PedidoItem(_produtoId, "Produto 1", 2, 100);

            _pedido.AdicionarItem(pedidoItemExistente);

            var pedidoCommand = new AdicionarItemPedidoCommand(_clienteId, _produtoId, "Produto 1", Pedido.MAX_UNIDADES_ITEM, 100);

            _mocker.GetMock <IPedidoRepository>()
            .Setup(r => r.ObterPedidoRascunhoPorClienteId(_clienteId)).Returns(Task.FromResult(_pedido));

            // Act
            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            // Assert
            Assert.False(result);
            _mocker.GetMock <IMediator>().Verify(m => m.Publish(It.IsAny <INotification>(), CancellationToken.None), Times.Exactly(1));
        }
        public async Task <IActionResult> Post([FromBody] ItemViewModel item)
        {
            var produto = await _produtoAppService.ObterPorId(item.Id);

            if (produto == null)
            {
                return(BadRequest());
            }

            if (produto.QuantidadeEstoque < item.Quantidade)
            {
                NotificarErro("ErroValidacao", "Produto com estoque insuficiente");
            }

            var command = new AdicionarItemPedidoCommand(ClienteId, produto.Id, produto.Nome, item.Quantidade, produto.Valor);
            await _mediatorHandler.Send(command);

            return(Response());
        }
Exemplo n.º 26
0
        public async Task AdicionarItem_CommandoInvalido_DeveRetornarFalsoELancarEventosDeNotificacao()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(clienteId: Guid.Empty,
                                                               produtoId: Guid.NewGuid(),
                                                               nome: "",
                                                               quantidade: 0,
                                                               valorUnitario: 0);

            // Act
            var pedidoRepository = Substitute.For <IPedidoRepository>();
            var mediator         = Substitute.For <IMediator>();
            var pedidoHandler    = Substitute.For <PedidoCommandHandler>(pedidoRepository, mediator);

            var result = await pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            // Assert
            result.Should().BeFalse();
            await mediator.Received(4).Publish(Arg.Any <INotification>());
        }
        public async Task AdicionarItem_NovoPedido_DeveExecutarComSucesso()
        {
            //Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(_clienteId,
                                                               _produtoId, "Produto Teste", 2, 100);

            //implementação de CQRS via commandHandler -> recebe injeções de dependencia (repositorio e mediator-entrega do comando para o comand handler)
            //var mocker = new AutoMocker();
            //var pedidoHandler = mocker.CreateInstance<PedidoCommandHandler>();

            _mocker.GetMock <IPedidoRepository>().Setup(r => r.UnitOfWork.Commit()).Returns(Task.FromResult(true));

            //Act
            var result = await _pedidoHandler.Handle(pedidoCommand, CancellationToken.None);

            //Assert
            Assert.True(result);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.Adicionar(It.IsAny <Pedido>()), Times.Once);
            _mocker.GetMock <IPedidoRepository>().Verify(r => r.UnitOfWork.Commit(), Times.Once);
            //mocker.GetMock<IMediator>().Verify(r => r.Publish(It.IsAny<INotification>(),CancellationToken.None), Times.Once);
        }
Exemplo n.º 28
0
        public void AdicionarItemPedidoCommand_CommandoEstaInvalido_NaoDevePassarNaValidacao()
        {
            // Arrange
            var pedidoCommand = new AdicionarItemPedidoCommand(clienteId: Guid.Empty,
                                                               produtoId: Guid.Empty,
                                                               nome: "",
                                                               quantidade: 0,
                                                               valorUnitario: 0);

            // Act
            var result = pedidoCommand.EhValido();

            // Assert
            result.Should().BeFalse();
            pedidoCommand.ValidationResult.Errors.Should().HaveCount(5);
            pedidoCommand.ValidationResult.Errors.Should().Contain(x => x.ErrorMessage == AdicionarItemPedidoValidation.IdProdutoErroMsg);
            pedidoCommand.ValidationResult.Errors.Should().Contain(x => x.ErrorMessage == AdicionarItemPedidoValidation.IdClienteErroMsg);
            pedidoCommand.ValidationResult.Errors.Should().Contain(x => x.ErrorMessage == AdicionarItemPedidoValidation.NomeErroMsg);
            pedidoCommand.ValidationResult.Errors.Should().Contain(x => x.ErrorMessage == AdicionarItemPedidoValidation.QtdMinErroMsg);
            pedidoCommand.ValidationResult.Errors.Should().Contain(x => x.ErrorMessage == AdicionarItemPedidoValidation.ValorErroMsg);
        }
Exemplo n.º 29
0
        public void CommandParaAdicionarItemDeveSerValido()
        {
            // Arrange
            var command = new AdicionarItemPedidoCommand(
                Guid.NewGuid(),
                Guid.NewGuid(),
                "Produto teste",
                2,
                100
                );

            // Act

            var estaValido = command.EstaValido();

            // Assert

            estaValido
            .Should()
            .BeTrue();
        }
Exemplo n.º 30
0
        public async Task DeveNotificarErrosParaUmCommandInvalido()
        {
            // Arrange
            var command = new AdicionarItemPedidoCommand(
                Guid.Empty, Guid.Empty, "", 0, 0);


            var mocker        = new AutoMocker();
            var pedidoHandler = mocker.CreateInstance <PedidoCommandHandler>();

            // Act

            var resultado = await pedidoHandler.Handle(command, CancellationToken.None);

            // Assert

            resultado.Should().BeFalse();

            mocker.GetMock <IMediator>()
            .Verify(x =>
                    x.Publish(It.IsAny <INotification>(), CancellationToken.None), Times.Exactly(5));
        }