83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import json
|
|
import pytest
|
|
|
|
from django.urls import reverse
|
|
|
|
from ._recipes import (
|
|
ALLRECIPES, AMERICAS_TEST_KITCHEN, CHEF_KOCH, COOKPAD,
|
|
COOKS_COUNTRY, DELISH, FOOD_NETWORK, GIALLOZAFFERANO, JOURNAL_DES_FEMMES,
|
|
MADAME_DESSERT, MARMITON, TASTE_OF_HOME, TUDOGOSTOSO)
|
|
|
|
IMPORT_SOURCE_URL = 'api_recipe_from_source'
|
|
DATA_DIR = "cookbook/tests/other/test_data/"
|
|
# These were chosen arbitrarily from:
|
|
# Top 10 recipe websites listed here https://www.similarweb.com/top-websites/category/food-and-drink/cooking-and-recipes/
|
|
# plus the test that previously existed
|
|
# plus the custom scraper that was created
|
|
# TODO thoughtfully add recipes that test specific scenerios
|
|
|
|
|
|
@pytest.mark.parametrize("arg", [
|
|
['a_u', 302],
|
|
['g1_s1', 302],
|
|
['u1_s1', 400],
|
|
['a1_s1', 400],
|
|
])
|
|
def test_import_permission(arg, request):
|
|
c = request.getfixturevalue(arg[0])
|
|
assert c.get(reverse(IMPORT_SOURCE_URL)).status_code == arg[1]
|
|
|
|
|
|
@pytest.mark.parametrize("arg", [
|
|
ALLRECIPES,
|
|
AMERICAS_TEST_KITCHEN,
|
|
CHEF_KOCH,
|
|
COOKPAD,
|
|
COOKS_COUNTRY,
|
|
DELISH,
|
|
FOOD_NETWORK,
|
|
GIALLOZAFFERANO,
|
|
JOURNAL_DES_FEMMES,
|
|
MADAME_DESSERT,
|
|
MARMITON,
|
|
TASTE_OF_HOME,
|
|
TUDOGOSTOSO
|
|
])
|
|
def test_recipe_import(arg, u1_s1):
|
|
for f in arg['file']:
|
|
with open(DATA_DIR + f, 'r', encoding='UTF-8') as d:
|
|
response = u1_s1.post(
|
|
reverse(IMPORT_SOURCE_URL),
|
|
{
|
|
'data': d.read(),
|
|
'url': arg['url'],
|
|
'mode': 'source'
|
|
},
|
|
files={'foo': 'bar'}
|
|
)
|
|
recipe = json.loads(response.content)['recipe_json']
|
|
for key in list(set(arg) - set(['file', 'url'])):
|
|
if type(arg[key]) == list:
|
|
assert len(recipe[key]) == len(arg[key])
|
|
if key == 'keywords':
|
|
valid_keywords = [i['text'] for i in arg[key]]
|
|
for k in recipe[key]:
|
|
assert k['text'] in valid_keywords
|
|
elif key == 'recipeIngredient':
|
|
valid_ing = ["{:g}{}{}{}{}".format(
|
|
i['amount'],
|
|
i['unit']['text'],
|
|
i['ingredient']['text'],
|
|
i['note'],
|
|
i['original'])
|
|
for i in arg[key]]
|
|
for i in recipe[key]:
|
|
assert "{:g}{}{}{}{}".format(
|
|
i['amount'],
|
|
i['unit']['text'],
|
|
i['ingredient']['text'],
|
|
i['note'],
|
|
i['original']) in valid_ing
|
|
else:
|
|
assert recipe[key] == arg[key]
|