gendesign/tradein-mvp/backend/tests/test_yandex_scrapers_delay_wiring.py
bot-backend eade88bc66 fix(tradein): config обязателен в newbuilding-провайдерах Циана и Яндекса (#2385)
fetch_newbuilding, resolve_cian_zhk_url_via_search, YandexNewbuildingScraper и
resolve_yandex_jk_slug принимали config=None и в этом случае строили
BrowserFetcher(endpoint=None) мимо фабрики, а резолвер Циана — сессию без прокси.
Все боевые вызовы config уже передают, но новый вызывающий без config молча ушёл бы
на env-узел сайдкара мимо пула — именно так потеряли 8 суток в #2767 и сломались
в #3197. Теперь config обязателен по сигнатуре, запасные ветки удалены, фетчер
строит только build_browser_fetcher.

Тесты: кейсы *_without_config (ждали endpoint=None) заменены одним — без config
TypeError до сети, фетчер и сессия не строятся; остальные тестовые вызовы
получили config.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 12:55:32 +05:00

46 lines
2.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Smoke: each Yandex scraper instance reads request_delay_sec from scraper_settings.
Легаси `app.services.scrapers.yandex_detail` / `yandex_valuation` удалены (#2277
финальный шаг scraper_kit-миграции). `yandex_realty` удалён (#2397 Part E2, 0
runtime-импортёров) — его delay-wiring тест убран (kit `YandexRealtyScraper`
delay-provider wiring покрыт `test_kit_serp_proxy_pool.py`). `yandex_newbuilding`
удалён (#2397 финальный шаг E) — переведён на kit-эквивалент, который тоже
использует инжектируемый `delay_provider=` (strangler DI, #2133) вместо прямого
импорта `get_scraper_delay`.
`yandex_detail`/`yandex_valuation` переведены на kit-эквиваленты, которые используют
инжектируемый `delay_provider=` (strangler DI, #2133) вместо прямого импорта
`get_scraper_delay` — тест адаптирован под реальный контракт kit-класса.
"""
from types import SimpleNamespace
from scraper_kit.providers.yandex.detail import YandexDetailScraper
from scraper_kit.providers.yandex.newbuilding import YandexNewbuildingScraper
from scraper_kit.providers.yandex.valuation import YandexValuationScraper
_KIT_CONFIG = SimpleNamespace(
scraper_proxy_url=None,
)
def test_yandex_detail_picks_up_delay():
"""Kit YandexDetailScraper: delay_provider callable вызывается с self.name."""
s = YandexDetailScraper(delay_provider=lambda _name: 9.5)
assert s.request_delay_sec == 9.5
def test_yandex_newbuilding_picks_up_delay():
"""Kit YandexNewbuildingScraper: delay_provider callable вызывается с self.name."""
s = YandexNewbuildingScraper(config=_KIT_CONFIG, delay_provider=lambda _name: 9.5)
assert s.request_delay_sec == 9.5
def test_yandex_valuation_picks_up_delay():
"""Kit YandexValuationScraper: delay_provider callable вызывается с self.name.
Mandatory-config footgun и полное покрытие delay_provider wiring уже проверены
в tests/scrapers/test_yandex_valuation_kit_migration.py — здесь просто smoke,
зеркалящий остальные Yandex-скрапперы в этом файле.
"""
s = YandexValuationScraper(config=_KIT_CONFIG, delay_provider=lambda _name: 9.5)
assert s.request_delay_sec == 9.5