pytest create recipe with ingredient as header

This commit is contained in:
smilerz
2021-12-22 08:31:32 -06:00
parent 5b287ad484
commit 279faadf46
2 changed files with 35 additions and 14 deletions

View File

@ -7,11 +7,12 @@ from django.contrib import auth
from django.forms import model_to_dict from django.forms import model_to_dict
from django.urls import reverse from django.urls import reverse
from django.utils import timezone 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 pytest_factoryboy import LazyFixture, register
from cookbook.models import Food, Ingredient, ShoppingListEntry, Step 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_LIST_URL = 'api:shoppinglistentry-list'
SHOPPING_RECIPE_URL = 'api:recipe-shopping' 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 params = request.param # request.param is a magic variable
except AttributeError: except AttributeError:
params = {} params = {}
step_recipe = params.get('steps__count', 1) # step_recipe = params.get('steps__count', 1)
steps__recipe_count = params.get('steps__recipe_count', 0) # steps__recipe_count = params.get('steps__recipe_count', 0)
steps__food_recipe_count = params.get('steps__food_recipe_count', {}) # steps__food_recipe_count = params.get('steps__food_recipe_count', {})
created_by = params.get('created_by', auth.get_user(u1_s1)) params['created_by'] = params.get('created_by', auth.get_user(u1_s1))
params['space'] = space_1
return RecipeFactory.create(**params)
return RecipeFactory.create( # return RecipeFactory.create(
steps__recipe_count=steps__recipe_count, # steps__recipe_count=steps__recipe_count,
steps__food_recipe_count=steps__food_recipe_count, # steps__food_recipe_count=steps__food_recipe_count,
created_by=created_by, # created_by=created_by,
space=space_1, # space=space_1,
) # )
@pytest.mark.parametrize("arg", [ @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 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

View File

@ -157,6 +157,8 @@ class IngredientFactory(factory.django.DjangoModelFactory):
unit = factory.SubFactory(UnitFactory, space=factory.SelfAttribute('..space')) unit = factory.SubFactory(UnitFactory, space=factory.SelfAttribute('..space'))
amount = factory.LazyAttribute(lambda x: faker.random_int(min=1, max=10)) amount = factory.LazyAttribute(lambda x: faker.random_int(min=1, max=10))
note = factory.LazyAttribute(lambda x: faker.sentence(nb_words=8)) note = factory.LazyAttribute(lambda x: faker.sentence(nb_words=8))
is_header = False
no_amount = False
space = factory.SubFactory(SpaceFactory) space = factory.SubFactory(SpaceFactory)
class Meta: class Meta:
@ -252,6 +254,7 @@ class StepFactory(factory.django.DjangoModelFactory):
instruction = factory.LazyAttribute(lambda x: ''.join(faker.paragraphs(nb=5))) 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 # 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__count = 10 # default number of ingredients to add
ingredients__header = 0
time = factory.LazyAttribute(lambda x: faker.random_int(min=1, max=1000)) time = factory.LazyAttribute(lambda x: faker.random_int(min=1, max=1000))
order = factory.Sequence(lambda x: x) order = factory.Sequence(lambda x: x)
# file = models.ForeignKey('UserFile', on_delete=models.PROTECT, null=True, blank=True) # file = models.ForeignKey('UserFile', on_delete=models.PROTECT, null=True, blank=True)
@ -286,6 +289,12 @@ class StepFactory(factory.django.DjangoModelFactory):
else: else:
has_recipe = False has_recipe = False
self.ingredients.add(IngredientFactory(space=self.space, food__has_recipe=has_recipe)) 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: elif extracted:
for ing in extracted: for ing in extracted:
self.ingredients.add(ing) self.ingredients.add(ing)
@ -333,12 +342,14 @@ class RecipeFactory(factory.django.DjangoModelFactory):
food_recipe_count = kwargs.get('food_recipe_count', {}) food_recipe_count = kwargs.get('food_recipe_count', {})
num_steps = kwargs.get('count', 0) num_steps = kwargs.get('count', 0)
num_recipe_steps = kwargs.get('recipe_count', 0) num_recipe_steps = kwargs.get('recipe_count', 0)
num_ing_headers = kwargs.get('ingredients__header', 0)
if num_steps > 0: if num_steps > 0:
for i in range(num_steps): for i in range(num_steps):
ing_recipe_count = 0 ing_recipe_count = 0
if food_recipe_count.get('step', None) == i: if food_recipe_count.get('step', None) == i:
ing_recipe_count = food_recipe_count.get('count', 0) 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: if num_recipe_steps > 0:
for j in range(num_recipe_steps): for j in range(num_recipe_steps):
self.steps.add(StepFactory(space=self.space, step_recipe__has_recipe=True, ingredients__count=0)) self.steps.add(StepFactory(space=self.space, step_recipe__has_recipe=True, ingredients__count=0))