Exemple #1
0
        public void DeveCancelarPedidoAtivo()
        {
            bool resultadoEsperado = true;

            var pedido = FabricaPedido.CriarPedido(clienteParaTeste, itensParaTeste);

            string mensagem;
            var    resultado = pedido.EValidoParaCancelar(out mensagem);

            Assert.AreEqual(resultadoEsperado, resultado);
        }
        public void BuscarPedido()
        {
            Cliente clienteEsperado = new Cliente()
            {
                Id       = 1,
                CPF      = 12345678910,
                Nome     = "Cliente Teste",
                Endereco = new Endereco()
                {
                    Rua         = "Rua Teste",
                    Numero      = 3,
                    Complemento = "101"
                }
            };
            List <Item> itensEsperados = new List <Item>()
            {
                new Item()
                {
                    Id        = 1,
                    Descricao = "Item de Teste 1",
                    Valor     = 1.99M
                },
                new Item()
                {
                    Id        = 2,
                    Descricao = "Item de Teste 2",
                    Valor     = 1000
                }
            };

            var pedido = FabricaPedido.CriarPedido(clienteEsperado, itensEsperados);

            var repositorio = new RepositorioPedidoMongoDB(connectionString);

            var retorno = repositorio.CriarPedidoAsync(pedido);

            retorno.Wait();

            var retorno2 = repositorio.BuscarPedidoAsync(pedido.Id);

            retorno2.Wait();
            var pedidoSalvo = retorno2.Result;

            Assert.IsNotNull(pedidoSalvo);
            Assert.AreEqual(pedidoSalvo.Id, pedido.Id);
            Assert.IsNotNull(pedidoSalvo.Cliente);
            Assert.AreEqual(pedidoSalvo.Cliente.Id, pedido.Cliente.Id);
            Assert.IsNotNull(pedidoSalvo.Itens);
            foreach (var item in itensEsperados)
            {
                Assert.IsTrue(pedidoSalvo.Itens.Any(a => a.Id == item.Id));
            }
        }
Exemple #3
0
        public void NaoPodeCriarPedidoSemItens()
        {
            bool   resultadoEsperado = false;
            string mensagemEsperada  = "Nenhum item informado.";

            var pedido = FabricaPedido.CriarPedido(clienteParaTeste, itensParaTeste);

            pedido.Itens = new List <Item>();

            string mensagem;
            var    resultado = pedido.EValidoParaCriar(out mensagem);

            Assert.AreEqual(resultadoEsperado, resultado);
            Assert.AreEqual(mensagemEsperada, mensagem);
        }
Exemple #4
0
        public void NaoPodeCriarPedidoSemCliente()
        {
            bool   resultadoEsperado = false;
            string mensagemEsperada  = "Cliente não informado.";

            var pedido = FabricaPedido.CriarPedido(clienteParaTeste, itensParaTeste);

            pedido.Cliente = null;

            string mensagem;
            var    resultado = pedido.EValidoParaCriar(out mensagem);

            Assert.AreEqual(resultadoEsperado, resultado);
            Assert.AreEqual(mensagemEsperada, mensagem);
        }
Exemple #5
0
        public void NaoPodeCriarPedidoSemId()
        {
            bool   resultadoEsperado = false;
            string mensagemEsperada  = "Identificador não informado.";

            var pedido = FabricaPedido.CriarPedido(clienteParaTeste, itensParaTeste);

            pedido.Id = Guid.Empty;

            string mensagem;
            var    resultado = pedido.EValidoParaCriar(out mensagem);

            Assert.AreEqual(resultadoEsperado, resultado);
            Assert.AreEqual(mensagemEsperada, mensagem);
        }
Exemple #6
0
        public void NaoPodeCriarPedidoCancelado()
        {
            bool   resultadoEsperado = false;
            string mensagemEsperada  = "O Pedido deve ser criado ativo.";

            var pedido = FabricaPedido.CriarPedido(clienteParaTeste, itensParaTeste);

            pedido.Estado = EstadoPedido.Cancelado;

            string mensagem;
            var    resultado = pedido.EValidoParaCriar(out mensagem);

            Assert.AreEqual(resultadoEsperado, resultado);
            Assert.AreEqual(mensagemEsperada, mensagem);
        }
Exemple #7
0
        public void CriacaoDeUmNovoPedido()
        {
            var EstadoPedidoEsperado = EstadoPedido.Ativo;

            Cliente clienteEsperado = new Cliente()
            {
                CPF      = 12345678910,
                Nome     = "Cliente Teste",
                Endereco = new Endereco()
                {
                    Rua         = "Rua Teste",
                    Numero      = 3,
                    Complemento = "101"
                }
            };
            List <Item> itensEsperados = new List <Item>()
            {
                new Item()
                {
                    Id        = 1,
                    Descricao = "Item de Teste 1",
                    Valor     = 1.99M
                },
                new Item()
                {
                    Id        = 2,
                    Descricao = "Item de Teste 2",
                    Valor     = 1000
                }
            };

            var pedido = FabricaPedido.CriarPedido(clienteEsperado, itensEsperados);

            Assert.IsNotNull(pedido, "Pedido nulo");
            Assert.AreEqual(EstadoPedidoEsperado, pedido.Estado, "Estado diferente do esperado");
            Assert.IsNotNull(pedido.Id, "Guid não gerado");
            Assert.AreEqual(clienteEsperado, pedido.Cliente, "Cliente não cadastrado no Pedido");
            Assert.AreEqual(itensEsperados, pedido.Itens, "Itens não cadastrados no Pedido");
            string mensagem;

            Assert.IsTrue(pedido.EValidoParaCriar(out mensagem));
        }
        public void CriarPedido()
        {
            Cliente clienteEsperado = new Cliente()
            {
                Id       = 1,
                CPF      = 12345678910,
                Nome     = "Cliente Teste",
                Endereco = new Endereco()
                {
                    Rua         = "Rua Teste",
                    Numero      = 3,
                    Complemento = "101"
                }
            };
            List <Item> itensEsperados = new List <Item>()
            {
                new Item()
                {
                    Id        = 1,
                    Descricao = "Item de Teste 1",
                    Valor     = 1.99M
                },
                new Item()
                {
                    Id        = 2,
                    Descricao = "Item de Teste 2",
                    Valor     = 1000
                }
            };

            var pedido = FabricaPedido.CriarPedido(clienteEsperado, itensEsperados);

            var repositorio = new RepositorioPedidoMongoDB(connectionString);

            var retorno = repositorio.CriarPedidoAsync(pedido);

            retorno.Wait();
        }
        public void PublicarCopiaDePedido()
        {
            var servico = new MensageriaRabbitMQ("localhost");

            Cliente cliente = new Cliente()
            {
                Id       = 1,
                CPF      = 12345678910,
                Nome     = "Cliente Teste",
                Endereco = new Endereco()
                {
                    Rua         = "Rua Teste",
                    Numero      = 3,
                    Complemento = "101"
                }
            };
            List <Item> itens = new List <Item>()
            {
                new Item()
                {
                    Id        = 1,
                    Descricao = "Item de Teste 1",
                    Valor     = 1.99M
                },
                new Item()
                {
                    Id        = 2,
                    Descricao = "Item de Teste 2",
                    Valor     = 1000
                }
            };

            var pedido = FabricaPedido.CriarPedido(cliente, itens);

            servico.GuardarCopia(pedido);
        }
        public void BuscarPedidosPorCliente()
        {
            Cliente cliente = new Cliente()
            {
                Id       = 10,
                CPF      = 12345678910,
                Nome     = "Cliente Teste",
                Endereco = new Endereco()
                {
                    Rua         = "Rua Teste",
                    Numero      = 3,
                    Complemento = "101"
                }
            };
            List <Pedido> pedidosEsperados = new List <Pedido>();

            for (int i = 0; i < 5; i++)
            {
                var itens = new List <Item>()
                {
                    new Item()
                    {
                        Id        = i,
                        Descricao = "Item de Teste 1",
                        Valor     = i
                    }
                };

                var pedido = FabricaPedido.CriarPedido(cliente, itens);
                pedidosEsperados.Add(pedido);
            }

            var repositorio = new RepositorioPedidoMongoDB(connectionString);

            pedidosEsperados.ForEach(pedido =>
            {
                var retorno = repositorio.CriarPedidoAsync(pedido);
                retorno.Wait();
            });

            var retorno2 = repositorio.BuscarPedidosPorClienteAsync(cliente);

            retorno2.Wait();

            var pedidosSalvos = retorno2.Result;

            pedidosEsperados.ForEach(pedido =>
            {
                var pedidoSalvo = pedidosSalvos.First(a => a.Id == pedido.Id);

                Assert.IsNotNull(pedidoSalvo);
                Assert.AreEqual(pedidoSalvo.Id, pedido.Id);
                Assert.IsNotNull(pedidoSalvo.Cliente);
                Assert.AreEqual(pedidoSalvo.Cliente.Id, pedido.Cliente.Id);
                Assert.IsNotNull(pedidoSalvo.Itens);
                foreach (var item in pedido.Itens)
                {
                    Assert.IsTrue(pedidoSalvo.Itens.Any(a => a.Id == item.Id));
                }
            });
        }
        public void AtualizarPedido()
        {
            EstadoPedido estadoEsperado = EstadoPedido.Cancelado;

            Cliente clienteEsperado = new Cliente()
            {
                Id       = 1,
                CPF      = 12345678910,
                Nome     = "Cliente Teste",
                Endereco = new Endereco()
                {
                    Rua         = "Rua Teste",
                    Numero      = 3,
                    Complemento = "101"
                }
            };
            List <Item> itensEsperados = new List <Item>()
            {
                new Item()
                {
                    Id        = 1,
                    Descricao = "Item de Teste 1",
                    Valor     = 1.99M
                },
                new Item()
                {
                    Id        = 2,
                    Descricao = "Item de Teste 2",
                    Valor     = 1000
                }
            };

            var pedido = FabricaPedido.CriarPedido(clienteEsperado, itensEsperados);

            var repositorio = new RepositorioPedidoMongoDB(connectionString);

            var retorno = repositorio.CriarPedidoAsync(pedido);

            retorno.Wait();

            var retorno2 = repositorio.BuscarPedidoAsync(pedido.Id);

            retorno2.Wait();

            var pedidoSalvo = retorno2.Result;

            Assert.IsNotNull(pedidoSalvo);
            Assert.AreEqual(pedidoSalvo.Id, pedido.Id);
            Assert.IsNotNull(pedidoSalvo.Cliente);
            Assert.AreEqual(pedidoSalvo.Cliente.Id, pedido.Cliente.Id);
            Assert.IsNotNull(pedidoSalvo.Itens);
            foreach (var item in itensEsperados)
            {
                Assert.IsTrue(pedidoSalvo.Itens.Any(a => a.Id == item.Id));
            }

            string mensagem;
            var    resultadoCancelamento = pedidoSalvo.Cancelar(out mensagem);

            Assert.IsTrue(resultadoCancelamento);
            Assert.IsTrue(string.IsNullOrEmpty(mensagem));

            var retorno3 = repositorio.AtualizarPedidoAsync(pedidoSalvo);

            retorno3.Wait();

            var retorno4 = repositorio.BuscarPedidoAsync(pedido.Id);

            retorno4.Wait();
            pedidoSalvo = retorno4.Result;

            Assert.IsNotNull(pedidoSalvo);
            Assert.AreEqual(pedidoSalvo.Id, pedido.Id);
            Assert.IsNotNull(pedidoSalvo.Cliente);
            Assert.AreEqual(pedidoSalvo.Cliente.Id, pedido.Cliente.Id);
            Assert.IsNotNull(pedidoSalvo.Itens);
            foreach (var item in itensEsperados)
            {
                Assert.IsTrue(pedidoSalvo.Itens.Any(a => a.Id == item.Id));
            }

            Assert.AreEqual(estadoEsperado, pedidoSalvo.Estado);
        }
Exemple #12
0
        public async Task <RetornoCriarPedido> CriarPedidoAsync(CriacaoPedidoDTO criacaoPedidoDTO)
        {
            try
            {
                if (criacaoPedidoDTO == null)
                {
                    return new RetornoCriarPedido()
                           {
                               Sucesso = false, Mensagem = "criacaoPedidoDTO nulo."
                           }
                }
                ;

                if (criacaoPedidoDTO.Cliente == null)
                {
                    return new RetornoCriarPedido()
                           {
                               Sucesso = false, Mensagem = "criacaoPedidoDTO.Cliente nulo."
                           }
                }
                ;

                if (criacaoPedidoDTO.Itens == null || !criacaoPedidoDTO.Itens.Any())
                {
                    return new RetornoCriarPedido()
                           {
                               Sucesso = false, Mensagem = "criacaoPedidoDTO.Itens nulo ou vazio."
                           }
                }
                ;

                var cliente = await repositorioCliente.BuscarClienteAsync(criacaoPedidoDTO.Cliente.Id, criacaoPedidoDTO.Cliente.Versao);

                List <Item> itens = new List <Item>();

                foreach (var itemDTO in criacaoPedidoDTO.Itens)
                {
                    var item = await repositorioItem.BuscarItemAsync(itemDTO.Id, itemDTO.Versao);

                    if (item == null)
                    {
                        return new RetornoCriarPedido()
                               {
                                   Sucesso = false, Mensagem = $"Item inválido ou não encontrado. Id {itemDTO.Id}"
                               }
                    }
                    ;

                    itens.Add(item);
                }

                var pedido = FabricaPedido.CriarPedido(cliente, itens);

                string mensagemValidacao;
                if (!pedido.EValidoParaCriar(out mensagemValidacao))
                {
                    return new RetornoCriarPedido()
                           {
                               Sucesso = false, Mensagem = mensagemValidacao
                           }
                }
                ;

                await repositorioPedido.CriarPedidoAsync(pedido);

                servicoMensageria.GuardarCopia(pedido);

                return(new RetornoCriarPedido()
                {
                    Sucesso = true, Id = pedido.Id
                });
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Erro.", criacaoPedidoDTO);
                return(new RetornoCriarPedido()
                {
                    Sucesso = false, Mensagem = MENSAGEM_ERRO_GERNERICO
                });
            }
        }