Fix brand-only and price-aware ranking
This commit is contained in:
1 parent
e23fdcfc0d
commit
39c6d2bcbf
3 files changed
+132
-11
No files matched your search
+38
-1
@@ -134,12 +134,49 @@ def test_makita_transliterations_share_the_same_brand_alias(
|
||||
|
||||
assert result.status == "ambiguous"
|
||||
assert [candidate.sku for candidate in result.candidates] == [
|
||||
"INS-0010",
|
||||
"INS-0017",
|
||||
"INS-0010",
|
||||
"INS-0003",
|
||||
]
|
||||
|
||||
|
||||
def test_cheap_preference_orders_candidates_by_ascending_price(
|
||||
matcher: CatalogMatcher,
|
||||
) -> None:
|
||||
result = matcher.match("шуруповерт как у макиты, только дешевле")
|
||||
prices_by_sku = {item.sku: item.price for item in matcher.items}
|
||||
candidate_prices = [
|
||||
prices_by_sku[candidate.sku] for candidate in result.candidates
|
||||
]
|
||||
|
||||
assert candidate_prices == sorted(candidate_prices)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"brand", ["ToolKraft", "toolkraft", "тулкрафт", "тул крафт"]
|
||||
)
|
||||
def test_brand_only_toolkraft_query_returns_catalog_items(
|
||||
matcher: CatalogMatcher, brand: str
|
||||
) -> None:
|
||||
result = matcher.match(brand)
|
||||
|
||||
assert result.status == "ambiguous"
|
||||
assert [candidate.sku for candidate in result.candidates] == [
|
||||
"INS-0022",
|
||||
"INS-0023",
|
||||
"INS-0024",
|
||||
]
|
||||
|
||||
|
||||
def test_unknown_toolkraft_model_does_not_fall_back_to_brand_results(
|
||||
matcher: CatalogMatcher,
|
||||
) -> None:
|
||||
result = matcher.match("ToolKraft TK-999")
|
||||
|
||||
assert result.status == "not_found"
|
||||
assert result.candidates == []
|
||||
|
||||
|
||||
@pytest.mark.parametrize("query", ["шурпуоверт на 12в", "шураыввавёрт на 12в"])
|
||||
def test_product_type_survives_typos(matcher: CatalogMatcher, query: str) -> None:
|
||||
result = matcher.match(query)
|
||||
|
||||
@@ -57,7 +57,7 @@ EXPECTED_RESULTS: dict[str, ExpectedResult] = {
|
||||
"лента фум 12 мм": ("matched", ("RAS-0060",)),
|
||||
"перчатки нитриловые есть?": ("matched", ("PER-0002",)),
|
||||
"проф труба 20х20 стенка полтора": ("matched", ("TRB-0002",)),
|
||||
"шурик на 12в недорогой": ("ambiguous", ("INS-0010", "INS-0017", "INS-0003")),
|
||||
"шурик на 12в недорогой": ("ambiguous", ("INS-0017", "INS-0010", "INS-0003")),
|
||||
"болгарка на 230 какая есть": ("ambiguous", ("INS-0014", "INS-0028", "INS-0007")),
|
||||
"гкл 9.5 сколько лист": ("matched", ("GKL-0001",)),
|
||||
"хомуты пластиковые 4.8х400": ("matched", ("RAS-0014",)),
|
||||
@@ -82,7 +82,7 @@ EXPECTED_RESULTS: dict[str, ExpectedResult] = {
|
||||
"сверло нужно": ("ambiguous", ("BIT-0060", "BIT-0061", "BIT-0062")),
|
||||
"какие есть диски": ("ambiguous", ("DSK-0011", "DSK-0012", "DSK-0013")),
|
||||
"перфоратор посоветуйте": ("ambiguous", ("INS-0012", "INS-0026", "INS-0005")),
|
||||
"шуруповерт как у макиты, только дешевле": ("ambiguous", ("INS-0010", "INS-0017", "INS-0003")),
|
||||
"шуруповерт как у макиты, только дешевле": ("ambiguous", ("INS-0017", "INS-0010", "INS-0003")),
|
||||
"здравствуйте, вы до скольки работаете?": ("not_found", ()),
|
||||
"можно оплатить картой при получении?": ("not_found", ()),
|
||||
"где находится ваш магазин": ("not_found", ()),
|
||||
@@ -120,7 +120,7 @@ EXPECTED_RESULTS: dict[str, ExpectedResult] = {
|
||||
"фанера 18 мм": ("not_found", ()),
|
||||
"дрель prowerk pw-750": ("matched", ("INS-0008",)),
|
||||
"аккумуляторная дрель 18в": ("not_found", ()),
|
||||
"шуруповёрт 12 вольт самый дешёвый": ("ambiguous", ("INS-0010", "INS-0017", "INS-0003")),
|
||||
"шуруповёрт 12 вольт самый дешёвый": ("ambiguous", ("INS-0017", "INS-0010", "INS-0003")),
|
||||
"перфоратор sds plus 800 вт": ("not_found", ()),
|
||||
"болгарка 125": ("ambiguous", ("INS-0013", "INS-0027", "INS-0006")),
|
||||
"ушм 230 мм 2200 вт": ("not_found", ()),
|
||||
|
||||
Reference in new issue
Block a user