Public Access
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
import pytest
|
|
|
|
from app.services.matcher import build_match_pool, rank_candidates
|
|
|
|
|
|
def test_build_match_pool_includes_aliases() -> None:
|
|
ingredients = [
|
|
{"id": "i1", "name": "Chicken Thighs", "aliases": ["chicken thigh"]},
|
|
{"id": "i2", "name": "Chicken Breast", "aliases": []},
|
|
]
|
|
pool = build_match_pool(ingredients)
|
|
# 1 name + 1 alias for i1, 1 name for i2 = 3 entries
|
|
assert len(pool) == 3
|
|
assert ("Chicken Thighs", "i1") in pool
|
|
assert ("chicken thigh", "i1") in pool
|
|
|
|
|
|
def test_rank_candidates_top_n_with_threshold() -> None:
|
|
pool = [
|
|
("Chicken Thighs", "i1"),
|
|
("chicken thigh", "i1"),
|
|
("Chicken Breast", "i2"),
|
|
("Pork Chops", "i3"),
|
|
]
|
|
ranked = rank_candidates(
|
|
target="Foster Farms Chicken Thighs Family Pack",
|
|
pool=pool,
|
|
top_n=3,
|
|
threshold=0.75,
|
|
)
|
|
ids = [item["ingredient_id"] for item in ranked]
|
|
assert ids[0] == "i1"
|
|
assert all(item["confidence"] >= 0.75 for item in ranked)
|
|
|
|
|
|
def test_rank_candidates_drops_below_threshold() -> None:
|
|
pool = [("Pork Chops", "i3")]
|
|
ranked = rank_candidates(
|
|
target="Frosted Flakes Cereal 18oz",
|
|
pool=pool,
|
|
top_n=3,
|
|
threshold=0.75,
|
|
)
|
|
assert ranked == []
|