Spaces:
Sleeping
Sleeping
File size: 2,351 Bytes
f69e608 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | """
Unit tests for hybrid retrieval engine.
"""
import pytest
from modules.data_simulation import generate_catalog
from modules.retrieval import HybridRetriever
@pytest.fixture(scope="module")
def retriever():
catalog = generate_catalog()
return HybridRetriever(catalog)
class TestHybridRetriever:
"""Tests for the hybrid retrieval system."""
def test_returns_correct_count(self, retriever):
results = retriever.search("running shoes", top_k=4)
assert len(results) == 4
def test_results_have_scores(self, retriever):
results = retriever.search("water bottle")
for r in results:
assert "score" in r
assert "product" in r
assert 0.0 <= r["score"] <= 1.0
def test_price_filtering_under_30(self, retriever):
results = retriever.search("shoes under $30", top_k=4)
for r in results:
assert r["product"]["price"] <= 30.0, (
f"Product '{r['product']['title']}' costs ${r['product']['price']} "
f"but should be under $30"
)
def test_price_filtering_under_50(self, retriever):
results = retriever.search("I only have $50 to spend", top_k=4)
for r in results:
assert r["product"]["price"] <= 50.0
def test_eco_category_relevance(self, retriever):
results = retriever.search("eco-friendly sustainable products", top_k=4)
eco_count = sum(1 for r in results if r["product"]["category"] == "eco-friendly")
assert eco_count >= 2, f"Expected ≥2 eco products, got {eco_count}"
def test_winter_category_relevance(self, retriever):
results = retriever.search("warm winter jacket for cold weather", top_k=4)
winter_count = sum(1 for r in results if r["product"]["category"] == "winter")
assert winter_count >= 2, f"Expected ≥2 winter products, got {winter_count}"
def test_results_sorted_by_score(self, retriever):
results = retriever.search("fitness watch with GPS", top_k=4)
scores = [r["score"] for r in results]
assert scores == sorted(scores, reverse=True), "Results not sorted by score"
def test_empty_query_returns_results(self, retriever):
results = retriever.search("", top_k=4)
assert len(results) == 4 # Should gracefully handle empty queries
|