Esempio n. 1
0
        private async Task TesteDeCrudIntegracaoAsync()
        {
            IComandaService service        = serviceProvider.GetRequiredService <IComandaService>();
            IUsuarioService usuarioService = serviceProvider.GetRequiredService <IUsuarioService>();
            IProdutoService produtoService = serviceProvider.GetRequiredService <IProdutoService>();

            Comanda comandaNovo = null;
            Usuario usuario     = null;
            Produto produto     = null;
            Produto produto2    = null;

            try
            {
                usuario = await ObterUsuario(usuarioService);

                produto = await ObterProduto(produtoService, $"Produto pedido");

                produto2 = await ObterProduto(produtoService, $"Produto pedido 2");

                Comanda comanda = new Comanda();
                comanda.Garcom = usuario;
                comanda.AdicionarPedido(produto, 1);
                comandaNovo = await service.Add(comanda);

                service.Result.Any().Should().BeFalse();

                Comanda comandaPedidoEmPreparo = await service.AlterarSituacaoPedido(comandaNovo.Id, ComandaPedidoSituacao.Preparando);

                comandaPedidoEmPreparo.Pedidos.All(c => c.Situacao == ComandaPedidoSituacao.Preparando).Should().BeTrue();

                Comanda comandaPedidoPronto = await service.AlterarSituacaoPedido(comandaNovo.Id, ComandaPedidoSituacao.Pronto);

                comandaPedidoPronto.Pedidos.All(c => c.Situacao == ComandaPedidoSituacao.Pronto).Should().BeTrue();

                Comanda comandaPedidoCancelado = await service.AlterarSituacaoPedido(comandaNovo.Id, ComandaPedidoSituacao.Cancelado);

                comandaPedidoCancelado.Pedidos.All(c => c.Situacao == ComandaPedidoSituacao.Cancelado).Should().BeTrue();

                IList <Comanda> comandasAbertas = await service.TotasComandasAbertas();

                comandasAbertas.Any().Should().BeTrue();

                IQueryable <Comanda> comandasAbertasQueryable = service.ComandasAbertas();
                comandasAbertasQueryable.Any().Should().BeTrue();

                comandaNovo = await comandasAbertasQueryable.Where(c => c.Id == comandaNovo.Id)
                              .Include(c => c.Garcom)
                              .Include(c => c.Pedidos)
                              .ThenInclude(c => c.Produto)
                              .FirstOrDefaultAsync();

                comandaNovo.Should().NotBeNull();
                comandaNovo.Id.Should().NotBe(0);
                comandaNovo.Garcom.Nome.Should().Be(usuario.Nome);
                comandaNovo.AdicionarPedido(produto2, 1);
                comandaNovo.FecharConta();
                comandaNovo.Situacao.Should().Be(ComandaSituacao.Fechada);
                comandaNovo.TotalAPagar.Should().Be(20);
                comandaNovo.GorjetaGarcom.Should().Be(2.0M);

                bool resultadoEdicao = await service.Edity(comandaNovo);

                resultadoEdicao.Should().BeTrue();

                IEnumerable <Comanda> entidades = await service.GetAll();

                entidades.Any().Should().BeTrue();

                Comanda comandaById = await service.GetById(comandaNovo.Id);

                comandaById.Should().NotBeNull();

                bool exists = service.Exists(comandaNovo.Id);
                exists.Should().BeTrue();
            }
            finally
            {
                if (comandaNovo != null)
                {
                    bool resultadoExclusao = await service.Delete(comandaNovo.Id);

                    resultadoExclusao.Should().BeTrue();
                }

                if (usuario != null)
                {
                    bool resultadoExclusao = await usuarioService.Delete(usuario.Id);

                    resultadoExclusao.Should().BeTrue();
                }

                if (produto != null)
                {
                    bool resultadoExclusao = await produtoService.Delete(produto.Id);

                    resultadoExclusao.Should().BeTrue();
                }

                if (produto2 != null)
                {
                    bool resultadoExclusao = await produtoService.Delete(produto2.Id);

                    resultadoExclusao.Should().BeTrue();
                }
            }
        }