test_product_title_exclusion.py 1.27 KB
from types import SimpleNamespace

from config import QueryConfig
from query.product_title_exclusion import (
    ProductTitleExclusionDetector,
    ProductTitleExclusionRegistry,
)


def test_product_title_exclusion_detector_matches_translated_english_token():
    query_config = QueryConfig(
        product_title_exclusion_rules=[
            {
                "zh_trigger_terms": ["修身"],
                "en_trigger_terms": ["fitted"],
                "zh_title_exclusions": ["宽松"],
                "en_title_exclusions": ["loose", "relaxed", "oversized", "baggy", "slouchy"],
            }
        ]
    )
    detector = ProductTitleExclusionDetector(
        ProductTitleExclusionRegistry.from_query_config(query_config),
        tokenizer=lambda text: text.split(),
    )

    parsed_query = SimpleNamespace(
        original_query="修身连衣裙",
        query_normalized="修身 连衣裙",
        rewritten_query="修身 连衣裙",
        translations={"en": "fitted dress"},
    )

    profile = detector.detect(parsed_query)

    assert profile.is_active is True
    assert profile.all_zh_title_exclusions() == ["宽松"]
    assert profile.all_en_title_exclusions() == [
        "loose",
        "relaxed",
        "oversized",
        "baggy",
        "slouchy",
    ]