diff --git a/cookbook/tests/api/test_api_shopping_recipe.py b/cookbook/tests/api/test_api_shopping_recipe.py index 00349cb3..6b0630c8 100644 --- a/cookbook/tests/api/test_api_shopping_recipe.py +++ b/cookbook/tests/api/test_api_shopping_recipe.py @@ -7,11 +7,12 @@ from django.contrib import auth from django.forms import model_to_dict from django.urls import reverse from django.utils import timezone -from django_scopes import scopes_disabled +from django_scopes import scope, scopes_disabled from pytest_factoryboy import LazyFixture, register from cookbook.models import Food, Ingredient, ShoppingListEntry, Step -from cookbook.tests.factories import MealPlanFactory, RecipeFactory, StepFactory, UserFactory +from cookbook.tests.factories import (IngredientFactory, MealPlanFactory, RecipeFactory, + StepFactory, UserFactory) SHOPPING_LIST_URL = 'api:shoppinglistentry-list' SHOPPING_RECIPE_URL = 'api:recipe-shopping' @@ -37,17 +38,19 @@ def recipe(request, space_1, u1_s1): params = request.param # request.param is a magic variable except AttributeError: params = {} - step_recipe = params.get('steps__count', 1) - steps__recipe_count = params.get('steps__recipe_count', 0) - steps__food_recipe_count = params.get('steps__food_recipe_count', {}) - created_by = params.get('created_by', auth.get_user(u1_s1)) + # step_recipe = params.get('steps__count', 1) + # steps__recipe_count = params.get('steps__recipe_count', 0) + # steps__food_recipe_count = params.get('steps__food_recipe_count', {}) + params['created_by'] = params.get('created_by', auth.get_user(u1_s1)) + params['space'] = space_1 + return RecipeFactory.create(**params) - return RecipeFactory.create( - steps__recipe_count=steps__recipe_count, - steps__food_recipe_count=steps__food_recipe_count, - created_by=created_by, - space=space_1, - ) + # return RecipeFactory.create( + # steps__recipe_count=steps__recipe_count, + # steps__food_recipe_count=steps__food_recipe_count, + # created_by=created_by, + # space=space_1, + # ) @pytest.mark.parametrize("arg", [ @@ -226,4 +229,11 @@ def test_shopping_recipe_mixed_authors(u1_s1, u2_s1): assert len(json.loads(u2_s1.get(reverse(SHOPPING_LIST_URL)).content)) == 0 -# TODO test failing to adding recipe with ingredients that are not food +# TODO test adding recipe with ingredients that are not food +@pytest.mark.parametrize("recipe", [{'steps__ingredients__header': 1}], indirect=['recipe']) +def test_shopping_with_header_ingredient(u1_s1, recipe): + # with scope(space=recipe.space): + # recipe.step_set.first().ingredient_set.add(IngredientFactory(ingredients__header=1)) + u1_s1.put(reverse(SHOPPING_RECIPE_URL, args={recipe.id})) + assert len(json.loads(u1_s1.get(reverse(SHOPPING_LIST_URL)).content)) == 10 + assert len(json.loads(u1_s1.get(reverse('api:ingredient-list')).content)) == 11 diff --git a/cookbook/tests/factories/__init__.py b/cookbook/tests/factories/__init__.py index 539f61c4..ed1fbf09 100644 --- a/cookbook/tests/factories/__init__.py +++ b/cookbook/tests/factories/__init__.py @@ -157,6 +157,8 @@ class IngredientFactory(factory.django.DjangoModelFactory): unit = factory.SubFactory(UnitFactory, space=factory.SelfAttribute('..space')) amount = factory.LazyAttribute(lambda x: faker.random_int(min=1, max=10)) note = factory.LazyAttribute(lambda x: faker.sentence(nb_words=8)) + is_header = False + no_amount = False space = factory.SubFactory(SpaceFactory) class Meta: @@ -252,6 +254,7 @@ class StepFactory(factory.django.DjangoModelFactory): instruction = factory.LazyAttribute(lambda x: ''.join(faker.paragraphs(nb=5))) # TODO add optional recipe food, make dependent on recipe, make number of recipes a Params ingredients__count = 10 # default number of ingredients to add + ingredients__header = 0 time = factory.LazyAttribute(lambda x: faker.random_int(min=1, max=1000)) order = factory.Sequence(lambda x: x) # file = models.ForeignKey('UserFile', on_delete=models.PROTECT, null=True, blank=True) @@ -286,6 +289,12 @@ class StepFactory(factory.django.DjangoModelFactory): else: has_recipe = False self.ingredients.add(IngredientFactory(space=self.space, food__has_recipe=has_recipe)) + num_header = kwargs.get('header', 0) + ####################################################### + ####################################################### + if num_header > 0: + for i in range(num_header): + self.ingredients.add(IngredientFactory(food=None, unit=None, amount=0, is_header=True, space=self.space)) elif extracted: for ing in extracted: self.ingredients.add(ing) @@ -333,12 +342,14 @@ class RecipeFactory(factory.django.DjangoModelFactory): food_recipe_count = kwargs.get('food_recipe_count', {}) num_steps = kwargs.get('count', 0) num_recipe_steps = kwargs.get('recipe_count', 0) + num_ing_headers = kwargs.get('ingredients__header', 0) if num_steps > 0: for i in range(num_steps): ing_recipe_count = 0 if food_recipe_count.get('step', None) == i: ing_recipe_count = food_recipe_count.get('count', 0) - self.steps.add(StepFactory(space=self.space, ingredients__food_recipe_count=ing_recipe_count)) + self.steps.add(StepFactory(space=self.space, ingredients__food_recipe_count=ing_recipe_count, ingredients__header=num_ing_headers)) + num_ing_headers+-1 if num_recipe_steps > 0: for j in range(num_recipe_steps): self.steps.add(StepFactory(space=self.space, step_recipe__has_recipe=True, ingredients__count=0))