Files
Meal-Planner/backend/tests/test_meal_pairings.py
T
admin 7f5757094e
CI / backend (pytest + alembic) (push) Has been cancelled
CI / frontend (build) (push) Has been cancelled
feat(meals): suggest complementary sides
2026-06-29 14:59:30 -07:00

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