73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
import json
|
|
|
|
import pytest
|
|
from django.contrib import auth
|
|
from django.urls import reverse
|
|
from django_scopes import scopes_disabled
|
|
|
|
from cookbook.tests.factories import RecipeFactory
|
|
|
|
RELATED_URL = 'api:recipe-related'
|
|
|
|
|
|
@pytest.fixture()
|
|
def recipe(request, space_1, u1_s1):
|
|
try:
|
|
params = request.param # request.param is a magic variable
|
|
except AttributeError:
|
|
params = {}
|
|
# step_recipe = params.get('steps__count', 1) # TODO add tests for step recipes
|
|
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))
|
|
|
|
return RecipeFactory.create(
|
|
steps__recipe_count=steps__recipe_count,
|
|
steps__food_recipe_count=steps__food_recipe_count,
|
|
# steps__step_recipe=step_recipe, # TODO add tests for step recipes
|
|
created_by=created_by,
|
|
space=space_1,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("arg", [
|
|
['g1_s1', 200],
|
|
['u1_s1', 200],
|
|
['u1_s2', 404],
|
|
['a1_s1', 200],
|
|
])
|
|
@pytest.mark.parametrize("recipe, related_count", [
|
|
({}, 0),
|
|
({'steps__recipe_count': 1}, 1), # shopping list from recipe with StepRecipe
|
|
({'steps__food_recipe_count': {'step': 0, 'count': 1}}, 1), # shopping list from recipe with food recipe
|
|
({'steps__food_recipe_count': {'step': 0, 'count': 1}, 'steps__recipe_count': 1}, 2), # shopping list from recipe with StepRecipe and food recipe
|
|
], indirect=['recipe'])
|
|
def test_get_related_recipes(request, arg, recipe, related_count, u1_s1, space_2):
|
|
c = request.getfixturevalue(arg[0])
|
|
r = c.get(reverse(RELATED_URL, args={recipe.id}))
|
|
assert r.status_code == arg[1]
|
|
if r.status_code == 200:
|
|
assert len(json.loads(r.content)) == related_count
|
|
|
|
|
|
@pytest.mark.parametrize("recipe", [
|
|
({'steps__recipe_count': 1}), # shopping list from recipe with StepRecipe
|
|
({'steps__food_recipe_count': {'step': 0, 'count': 1}}), # shopping list from recipe with food recipe
|
|
({'steps__food_recipe_count': {'step': 0, 'count': 1}, 'steps__recipe_count': 1}), # shopping list from recipe with StepRecipe and food recipe
|
|
], indirect=['recipe'])
|
|
def test_related_mixed_space(request, recipe, u1_s2, space_2):
|
|
with scopes_disabled():
|
|
recipe.space = space_2
|
|
recipe.save()
|
|
assert len(json.loads(
|
|
u1_s2.get(
|
|
reverse(RELATED_URL, args={recipe.id})).content)) == 0
|
|
|
|
|
|
# TODO if/when related recipes includes multiple levels (related recipes of related recipes) add the following tests
|
|
# -- step recipes included in step recipes
|
|
# -- step recipes included in food recipes
|
|
# -- food recipes included in step recipes
|
|
# -- food recipes included in food recipes
|
|
# -- -- included recipes in the wrong space
|