48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
"""Тесты общего seed price-brackets констант (avito/cian/yandex)."""
|
||
|
||
from itertools import pairwise
|
||
|
||
from app.services.scrapers.price_brackets import (
|
||
_EKB_SECONDARY,
|
||
CITY_PRICE_SEED_BRACKETS,
|
||
get_price_seed_brackets,
|
||
)
|
||
|
||
|
||
def test_default_returns_ekb():
|
||
"""get_price_seed_brackets() без аргумента возвращает EKB-сетку."""
|
||
assert get_price_seed_brackets() == _EKB_SECONDARY
|
||
assert get_price_seed_brackets("ekaterinburg") == _EKB_SECONDARY
|
||
|
||
|
||
def test_unknown_city_falls_back_to_ekb():
|
||
"""Неизвестный город → fallback на EKB (не KeyError)."""
|
||
assert get_price_seed_brackets("atlantis") == _EKB_SECONDARY
|
||
|
||
|
||
def test_last_bracket_is_open():
|
||
"""Последний брекет ОТКРЫТ (hi=None) — catch-all хвоста люкса без потолка."""
|
||
brackets = get_price_seed_brackets()
|
||
assert brackets[-1][1] is None
|
||
# Только последний брекет открыт — остальные закрыты.
|
||
for lo, hi in brackets[:-1]:
|
||
assert hi is not None
|
||
assert hi > lo
|
||
|
||
|
||
def test_brackets_are_contiguous():
|
||
"""Закрытые брекеты соприкасаются: hi[i] == lo[i+1] (без дыр/перекрытий)."""
|
||
brackets = get_price_seed_brackets()
|
||
for (lo, hi), (next_lo, _next_hi) in pairwise(brackets):
|
||
assert hi == next_lo, f"разрыв между [{lo},{hi}] и [{next_lo},...]"
|
||
|
||
|
||
def test_first_bracket_starts_at_zero():
|
||
"""Первый брекет стартует с 0 (вся вторичка с нижнего края)."""
|
||
assert get_price_seed_brackets()[0][0] == 0
|
||
|
||
|
||
def test_city_dict_contains_ekaterinburg():
|
||
"""City-dict готов под multi-city — сейчас единственный ключ ekaterinburg."""
|
||
assert "ekaterinburg" in CITY_PRICE_SEED_BRACKETS
|
||
assert CITY_PRICE_SEED_BRACKETS["ekaterinburg"] is _EKB_SECONDARY
|