63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
from dataclasses import dataclass
|
||
|
|
||
|
import pytest
|
||
|
from mealie.services.scraper import scraper
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class RecipeSiteTestCase:
|
||
|
url: str
|
||
|
expected_slug: str
|
||
|
num_ingredients: int
|
||
|
num_steps: int
|
||
|
|
||
|
|
||
|
test_cases = [
|
||
|
RecipeSiteTestCase(
|
||
|
url="https://www.seriouseats.com/taiwanese-three-cup-chicken-san-bei-gi-recipe",
|
||
|
expected_slug="taiwanese-three-cup-chicken-san-bei-ji-recipe",
|
||
|
num_ingredients=10,
|
||
|
num_steps=3,
|
||
|
),
|
||
|
RecipeSiteTestCase(
|
||
|
url="https://www.rezeptwelt.de/backen-herzhaft-rezepte/schinken-kaese-waffeln-ohne-viel-schnickschnack/4j0bkiig-94d4d-106529-cfcd2-is97x2ml",
|
||
|
expected_slug="schinken-kase-waffeln-ohne-viel-schnickschnack",
|
||
|
num_ingredients=7,
|
||
|
num_steps=1, # Malformed JSON Data, can't parse steps just get one string
|
||
|
),
|
||
|
RecipeSiteTestCase(
|
||
|
url="https://cookpad.com/us/recipes/5544853-sous-vide-smoked-beef-ribs",
|
||
|
expected_slug="sous-vide-smoked-beef-ribs",
|
||
|
num_ingredients=7,
|
||
|
num_steps=12,
|
||
|
),
|
||
|
RecipeSiteTestCase(
|
||
|
url="https://www.greatbritishchefs.com/recipes/jam-roly-poly-recipe",
|
||
|
expected_slug="jam-roly-poly-with-custard",
|
||
|
num_ingredients=13,
|
||
|
num_steps=9,
|
||
|
),
|
||
|
RecipeSiteTestCase(
|
||
|
url="https://recipes.anovaculinary.com/recipe/sous-vide-shrimp",
|
||
|
expected_slug="sous-vide-shrimp",
|
||
|
num_ingredients=5,
|
||
|
num_steps=0,
|
||
|
),
|
||
|
RecipeSiteTestCase(
|
||
|
url="https://www.bonappetit.com/recipe/detroit-style-pepperoni-pizza",
|
||
|
expected_slug="detroit-style-pepperoni-pizza",
|
||
|
num_ingredients=8,
|
||
|
num_steps=5,
|
||
|
),
|
||
|
]
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("recipe_test_data", test_cases)
|
||
|
def test_recipe_parser(recipe_test_data: RecipeSiteTestCase):
|
||
|
recipe = scraper.create_from_url(recipe_test_data.url)
|
||
|
|
||
|
assert recipe.slug == recipe_test_data.expected_slug
|
||
|
assert len(recipe.recipe_instructions) == recipe_test_data.num_steps
|
||
|
assert len(recipe.recipe_ingredient) == recipe_test_data.num_ingredients
|
||
|
assert recipe.org_url == recipe_test_data.url
|