Public Access
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from types import SimpleNamespace
|
|
|
|
from app.models import MealType
|
|
from app.services.meal_pairings import components_with_suggested_sides, suggest_sides_for_recipe
|
|
|
|
|
|
def _recipe(**kwargs):
|
|
defaults = {
|
|
"name": "Grilled Chicken Breast",
|
|
"protein_type": "chicken",
|
|
"cuisine_tags": [],
|
|
"ingredients": [],
|
|
"side_dishes": [],
|
|
}
|
|
defaults.update(kwargs)
|
|
return SimpleNamespace(**defaults)
|
|
|
|
|
|
def test_simple_protein_gets_vegetable_and_carb_pairing():
|
|
sides = suggest_sides_for_recipe(_recipe(), MealType.DINNER)
|
|
|
|
assert sides is not None
|
|
assert sides["vegetable"] == "roasted broccoli"
|
|
assert sides["carb"] == "rice pilaf or roasted potatoes"
|
|
|
|
|
|
def test_complete_meal_does_not_get_extra_pairing():
|
|
recipe = _recipe(name="Chicken Pasta Bake", protein_type="chicken")
|
|
|
|
assert suggest_sides_for_recipe(recipe, MealType.DINNER) is None
|
|
|
|
|
|
def test_breakfast_does_not_get_side_pairing():
|
|
recipe = _recipe(name="Turkey Sausage", protein_type="turkey")
|
|
|
|
assert suggest_sides_for_recipe(recipe, MealType.BREAKFAST) is None
|
|
|
|
|
|
def test_recipe_side_dishes_are_used_when_present():
|
|
recipe = _recipe(side_dishes=[{"name": "green salad"}, {"name": "garlic bread"}])
|
|
|
|
sides = suggest_sides_for_recipe(recipe, "dinner")
|
|
|
|
assert sides is not None
|
|
assert sides["items"] == ["green salad", "garlic bread"]
|
|
|
|
|
|
def test_components_preserve_existing_scores():
|
|
components = components_with_suggested_sides(
|
|
_recipe(),
|
|
MealType.DINNER,
|
|
{"savings": 0.25},
|
|
)
|
|
|
|
assert components["savings"] == 0.25
|
|
assert components["suggested_sides"]["needed"] is True
|