Пример #1
0
        public async Task <ActionResult <DishViewCook> > PostDish(DishViewCook dishView)
        {
            if (CurrentUser.Role != Role.Cook)
            {
                return(NotAllowed());
            }

            var dish = GetDataModel(dishView);

            Clear(dish);

            dataBase.Dishes.Add(dish);

            var saveResult = await dataBase.SaveChanges();

            if (saveResult.IsFail)
            {
                return(ResponseFromApiResult(saveResult));
            }

            var createdDish = GetDish(dish.Id).Value;

            return(CreatedAtAction("GetDish", new
            {
                id = dish.Id
            }, createdDish));
        }
Пример #2
0
        public static DishViewCook GetRandomDish(ProductView[] registeredProducts)
        {
            var dish = new DishViewCook
            {
                Name          = GetRandomString(),
                Description   = GetRandomString(100),
                Recipe        = GetRandomString(500),
                PortionWeight = random.Next(50, 500)
            };

            var ingredientsCount = random.Next(1, registeredProducts.Length);
            var someProducts     = registeredProducts
                                   .OrderBy(x => random.Next())
                                   .Take(ingredientsCount);

            var ingredients = new List <IngredientView>();

            foreach (var product in someProducts)
            {
                ingredients.Add(new IngredientView
                {
                    ProductId = product.Id,
                    Weight    = random.Next(1000)
                });
            }

            dish.Ingredients = ingredients.ToArray();
            return(dish);
        }
Пример #3
0
        private Dish GetDataModel(DishViewCook dishView)
        {
            var dishDataModel = mapper.Map <Dish>(dishView);

            dishDataModel.CreatedBy = CurrentUser.Id;

            return(dishDataModel);
        }
Пример #4
0
        public async Task Should_do_everything()
        {
            var cooker = await env.RegisterNewUser();

            var product = new ProductView
            {
                Name         = "Яблоко",
                Calories     = 42,
                Carbohydrate = 10,
                Fat          = 1,
                Protein      = 1
            };

            var createdProduct = await cooker.Client.Post("/api/products", product);

            createdProduct.EnsureStatusCode(HttpStatusCode.Created);
            product = createdProduct.Value;

            var dish = new DishViewCook
            {
                Name        = "Варенье",
                Ingredients = new[]
                {
                    new IngredientView
                    {
                        ProductId = product.Id,
                        Weight    = 150
                    }
                },
                PortionWeight = 200
            };
            var createdDish = await cooker.Client.Post("/api/dishes", dish);

            createdDish.EnsureStatusCode(HttpStatusCode.Created);
            dish = createdDish.Value;

            var menu = new MenuView
            {
                Date    = new DateTime(2019, 11, 22),
                DishIds = new List <int>
                {
                    dish.Id
                }
            };
            var createdMenu = await cooker.Client.Post("/api/menus", menu);

            createdMenu.EnsureStatusCode(HttpStatusCode.Created);
            menu = createdMenu.Value;

            var user = await env.RegisterNewUser(Role.Customer);

            var getUserMenu = await user.Client.Get <MenuView>($"/api/menus/{menu.Id}");

            getUserMenu.EnsureStatusCode(HttpStatusCode.OK);
            var userMenu = getUserMenu.Value;

            userMenu.Should().BeEquivalentTo(menu);

            var getUserDish = await user.Client.Get <DishViewCustomer>($"/api/dishes/{menu.DishIds[0]}");

            getUserDish.EnsureStatusCode(HttpStatusCode.OK);
            var userDish = getUserDish.Value;

            var getUserProduct = await user.Client.Get <ProductView>($"/api/products/{dish.Ingredients[0].ProductId}");

            getUserProduct.EnsureStatusCode(HttpStatusCode.NotFound);

            var order = new OrderView
            {
                MenuId  = userMenu.Id,
                DishIds = new[]
                {
                    userDish.Id
                }
            };

            var createdOrder = await cooker.Client.Post("/api/orders", order);

            createdOrder.EnsureStatusCode(HttpStatusCode.Created);
            order = createdOrder.Value;
        }
Пример #5
0
        public async Task Should_calculate_correct_nutritional_values()
        {
            // arrange
            var user = await env.RegisterNewUser();

            var products = new[]
            {
                new ProductView
                {
                    Name         = Generator.GetRandomString(),
                    Protein      = 20,
                    Fat          = 2,
                    Carbohydrate = 8,
                    Calories     = 130
                },
                new ProductView
                {
                    Name         = Generator.GetRandomString(),
                    Protein      = 10,
                    Fat          = 5,
                    Carbohydrate = 15,
                    Calories     = 145
                },
            };

            await RegisterProducts(user.Client, products);

            var ingredients = new[]
            {
                new IngredientView
                {
                    ProductId = products[0].Id,
                    Weight    = 50
                },
                new IngredientView
                {
                    ProductId = products[1].Id,
                    Weight    = 100
                }
            };

            var newDish = new DishViewCook
            {
                Name          = Generator.GetRandomString(),
                PortionWeight = 300,
                Ingredients   = ingredients
            };

            // act
            var createResult = await user.Client.Post("/api/Dishes", newDish);

            createResult.EnsureStatusCode(HttpStatusCode.Created);

            var getResult = await user.Client.Get <DishViewCook>($"/api/Dishes/{createResult.Value.Id}");

            getResult.EnsureStatusCode(HttpStatusCode.OK);

            var dish = getResult.Value;

            dish.Ingredients.Select(i => i.Product).Should()
            .BeEquivalentTo(products, o => o.WithStrictOrdering());

            // assert
            dish.PortionWeight.Should().Be(newDish.PortionWeight);
            dish.PortionProtein.Should().Be(40);
            dish.PortionFat.Should().Be(12);
            dish.PortionCarbohydrate.Should().Be(38);
            dish.PortionCalories.Should().Be(420);
        }
Пример #6
0
        public async Task Should_create_dish_and_retrieve_it()
        {
            // arrange
            var user = await env.RegisterNewUser();

            var products = new[]
            {
                new ProductView
                {
                    Name         = "Яблоко",
                    Calories     = 42,
                    Carbohydrate = 10,
                    Fat          = 1,
                    Protein      = 1
                },
                new ProductView
                {
                    Name         = "Яйцо куриное",
                    Calories     = 42,
                    Carbohydrate = 10,
                    Fat          = 1,
                    Protein      = 1
                },
                new ProductView
                {
                    Name         = "Мука",
                    Calories     = 42,
                    Carbohydrate = 10,
                    Fat          = 1,
                    Protein      = 1
                },
                new ProductView
                {
                    Name         = "Сахар",
                    Calories     = 42,
                    Carbohydrate = 10,
                    Fat          = 1,
                    Protein      = 1
                }
            };

            await RegisterProducts(user.Client, products);

            var ingredients = new[]
            {
                new IngredientView
                {
                    Weight    = 400,
                    ProductId = products[0].Id
                },
                new IngredientView
                {
                    Weight    = 65,
                    ProductId = products[1].Id
                },
                new IngredientView
                {
                    Weight    = 100,
                    ProductId = products[2].Id
                },
                new IngredientView
                {
                    Weight    = 40,
                    ProductId = products[3].Id
                }
            };

            var newDish = new DishViewCook
            {
                Name          = "Яблочные оладьи",
                PortionWeight = 150,
                Ingredients   = ingredients,
                Description   = "Ароматные, нежные, кисло-сладкие оладушки с ярким вкусом печеного яблочка",
                Recipe        = "1. Яблоко очистите от кожуры и натрите на мелкой тёрке.\r\n2. Кефир взбейте с яйцами." +
                                "\r\n3. Добавьте муку, соль, сахар и соду. Перемешайте, чтобы масса получилась без комков." +
                                "\r\n4. Засыпьте тёртое яблоко. Снова хорошо размешайте.\r\n5. В сковороде разогрейте масло " +
                                "на среднем огне. Сформируйте оладьи и обжаривайте по 2–4 минуты с каждой стороны."
            };

            // act
            var createResult = await user.Client.Post("/api/Dishes", newDish);

            createResult.EnsureStatusCode(HttpStatusCode.Created);

            var getResult = await user.Client.Get <DishViewCook>($"/api/Dishes/{createResult.Value.Id}");

            getResult.EnsureStatusCode(HttpStatusCode.OK);

            getResult.Value.Ingredients.Select(i => i.Product).Should()
            .BeEquivalentTo(products, o => o.WithStrictOrdering());
            foreach (var ingredient in getResult.Value.Ingredients)
            {
                ingredient.Product = null;
            }

            // assert
            getResult.Value.Should()
            .BeEquivalentTo(newDish, options => options
                            .WithStrictOrdering()
                            .Excluding(dish => dish.Id)
                            .Excluding(dish => dish.PortionCalories)
                            .Excluding(dish => dish.PortionProtein)
                            .Excluding(dish => dish.PortionFat)
                            .Excluding(dish => dish.PortionCarbohydrate)
                            .Excluding(dish => dish.CreatedBy)
                            .Excluding(dish => dish.CreatedDate));
        }