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( """
test_recipe
test_ingredient
""", "html.parser", ) @fixture def mock_blank_page(): return BeautifulSoup("""
""", "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