- pyproject.toml: add [tool.ruff] config suppressing E402/W293 globally, F841/E741/E702 in tests, E741 in scripts - inventory.py: split semicolon import (E702) - recipes.py: fix logger -> log (F821 undefined name) - shopping.py: rename l -> lnk in list comprehension (E741) - format_conversion.py: noqa F841 on CUDA flag (used as future hook) - backfill_keywords.py: rename done -> _done (F841) - ingest_purplecarrot.py: drop == True comparison (E712) - Auto-fix: I001 import sorting, F401 unused imports across all files
74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
from app.services.recipe.style_adapter import StyleAdapter
|
|
|
|
# --- Spec-required tests ---
|
|
|
|
def test_italian_style_biases_aromatics():
|
|
"""Garlic and onion appear when they're in both pantry and italian aromatics."""
|
|
adapter = StyleAdapter()
|
|
italian = adapter.get("italian")
|
|
pantry = ["garlic", "onion", "ginger"]
|
|
result = italian.bias_aroma_selection(pantry)
|
|
assert "garlic" in result
|
|
assert "onion" in result
|
|
|
|
|
|
def test_east_asian_method_weights_sum_to_one():
|
|
"""East Asian method_bias weights sum to ~1.0."""
|
|
adapter = StyleAdapter()
|
|
east_asian = adapter.get("east_asian")
|
|
weights = east_asian.method_weights()
|
|
assert abs(sum(weights.values()) - 1.0) < 1e-6
|
|
|
|
|
|
def test_style_adapter_loads_all_five_styles():
|
|
"""Adapter discovers all 5 cuisine YAML files."""
|
|
adapter = StyleAdapter()
|
|
assert len(adapter.styles) == 5
|
|
|
|
|
|
# --- Additional coverage ---
|
|
|
|
def test_load_italian_style():
|
|
adapter = StyleAdapter()
|
|
italian = adapter.get("italian")
|
|
assert italian is not None
|
|
assert "basil" in italian.aromatics or "oregano" in italian.aromatics
|
|
|
|
|
|
def test_bias_aroma_selection_excludes_non_style_items():
|
|
"""bias_aroma_selection does not include items not in the style's aromatics."""
|
|
adapter = StyleAdapter()
|
|
italian = adapter.get("italian")
|
|
pantry = ["butter", "parmesan", "basil", "cumin", "soy sauce"]
|
|
result = italian.bias_aroma_selection(pantry)
|
|
assert "basil" in result
|
|
assert "soy sauce" not in result
|
|
assert "cumin" not in result
|
|
|
|
|
|
def test_preferred_depth_sources():
|
|
"""preferred_depth_sources returns only depth sources present in pantry."""
|
|
adapter = StyleAdapter()
|
|
italian = adapter.get("italian")
|
|
pantry = ["parmesan", "olive oil", "pasta"]
|
|
result = italian.preferred_depth_sources(pantry)
|
|
assert "parmesan" in result
|
|
assert "olive oil" not in result
|
|
|
|
|
|
def test_bias_aroma_selection_adapter_method():
|
|
"""StyleAdapter.bias_aroma_selection returns italian-biased items."""
|
|
adapter = StyleAdapter()
|
|
pantry = ["butter", "parmesan", "basil", "cumin", "soy sauce"]
|
|
biased = adapter.bias_aroma_selection("italian", pantry)
|
|
assert "basil" in biased
|
|
assert "soy sauce" not in biased or "basil" in biased
|
|
|
|
|
|
def test_list_all_styles():
|
|
adapter = StyleAdapter()
|
|
styles = adapter.list_all()
|
|
style_ids = [s.style_id for s in styles]
|
|
assert "italian" in style_ids
|
|
assert "latin" in style_ids
|
|
assert "east_asian" in style_ids
|