a78fbea711
* add better feedback on failed scrape * fix json download link * add better recipe parser * dump deps * fix force open on mobile * formatting * rewrite scraper to use new library * fix failing tests * bookmarklet support * bookmarklet instructions * recipes changelog Co-authored-by: hay-kot <hay-kot@pm.me>
62 lines
2.1 KiB
Python
62 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
|