81 lines
2.1 KiB
Python
81 lines
2.1 KiB
Python
from recipe_graph import scrape
|
|
from bs4 import BeautifulSoup
|
|
from recipe_graph.db import RecipeSite, Recipe, RecipeIngredient, RecipeIngredientParts
|
|
|
|
from pytest import fixture
|
|
|
|
|
|
@fixture
|
|
def mock_site():
|
|
return RecipeSite(
|
|
name="mock-site",
|
|
ingredient_class="mock-ing",
|
|
name_class="mock-name",
|
|
base_url="example-site/mock-site",
|
|
)
|
|
|
|
|
|
# TODO: should probably load HTML from file
|
|
@fixture
|
|
def mock_page():
|
|
return BeautifulSoup(
|
|
"""
|
|
<header></header><body>
|
|
<div class="mock-name">test_recipe</div>
|
|
<div class="mock-ing">test_ingredient</div>
|
|
</body>
|
|
""",
|
|
"html.parser",
|
|
)
|
|
|
|
|
|
@fixture
|
|
def mock_blank_page():
|
|
return BeautifulSoup(""" <header></header><body> </body> """, "html.parser")
|
|
|
|
|
|
@fixture
|
|
def mock_recipe():
|
|
return Recipe(name="test_recipe", identifier="mock_1")
|
|
|
|
|
|
@fixture
|
|
def mock_url():
|
|
return "example-site/mock-site"
|
|
|
|
|
|
def test_load_page():
|
|
page = scrape.load_page("https://www.google.com")
|
|
assert type(page) == BeautifulSoup
|
|
|
|
page = scrape.load_page("https://www.google.com/some-nonsense")
|
|
assert page == None
|
|
|
|
|
|
def test_ingredient_regex():
|
|
regex = scrape.ingredient_regex(["cup"], ["crushed"])
|
|
assert (
|
|
regex.pattern
|
|
== "((?:[\\d\\./\\u00BC-\\u00BE\\u2150-\\u215E]*\\s?(?:\\(.+\\))?)*)((?:(?:[cC]up)e?s?)?)((?:(?:(?:[cC]rushed)(?:ly)?)| )*)([a-zA-Z '\\-]+),?(.*)"
|
|
)
|
|
regex = scrape.ingredient_regex(["cup", "ounce"], ["crushed", "ground"])
|
|
assert (
|
|
regex.pattern
|
|
== "((?:[\\d\\./\\u00BC-\\u00BE\\u2150-\\u215E]*\\s?(?:\\(.+\\))?)*)((?:(?:[cC]up|[oO]unce)e?s?)?)((?:(?:(?:[cC]rushed|[gG]round)(?:ly)?)| )*)([a-zA-Z '\\-]+),?(.*)"
|
|
)
|
|
|
|
|
|
def test_parse_recipe_name(mock_site, mock_page, mock_recipe, mock_url):
|
|
expected_name = mock_recipe.name
|
|
mock_recipe.name = None
|
|
|
|
mock_recipe = scrape.parse_recipe_name(
|
|
mock_site,
|
|
mock_page,
|
|
mock_recipe,
|
|
mock_url,
|
|
)
|
|
assert mock_recipe.name == expected_name
|
|
# assert False
|
|
|