test(tradein/scraper-kit): prove yandex_valuation kit path safe for #2337 (#2336) #2345

Merged
lekss361 merged 1 commit from feat/tradein-migrate-yandex-valuation-kit into main 2026-07-03 23:04:14 +00:00
Owner

Closes #2336 (Group E3 эпика #2277 — sub-issue #2308, core valuation).

Контекст

Kit-сторона (scraper_kit.providers.yandex.valuation.YandexValuationScraper) уже была
полностью портирована ранее (strangler-copy #2133) и уже wired в admin.py (Group A/#2305).
Production-код не тронут — только новый тест-файл.

Callers

Только estimator.py:66,598 импортирует legacy-класс. admin.py уже использует kit-версию.

Два footguns

  1. config: ScraperConfig обязателен → TypeError без него, но проглатывается тем же паттерном
    blanket except что и cian_valuation (#2335) — estimator.py:596-606, WARNING без
    exc_info=True, GlitchTip (event_level=ERROR) не поймает.
  2. Новый: delay_provider — без него kit тихо использует хардкод 5.0s вместо
    DB-admin-настроенного throttle через get_scraper_delay. Не крашит, просто отменяет
    anti-ban tuning.

Тесты (6, все реальные проверки, не tautological)

  • Mandatory-config TypeError
  • delay_provider hardcoded-fallback (5.0s) без wiring
  • delay_provider реально используется (12.5 mock → scraper.request_delay_sec == 12.5,
    не просто "mock вызван")
  • delay_provider получает правильный source-key ("yandex_valuation")
  • Full construction+parse parity через harness с реальным config/delay_provider wiring
  • Divergence-catch sanity (мутация year_built)

Проверено

  • Новый файл: 6/6 passed
  • Полный backend suite: 3223 passed / 6 skipped / 1 pre-existing unrelated failure
  • ruff check — чисто
  • Code-review: APPROVE — независимо подтвердил все claims, сверил с sibling-находкой в E2
    (#2335) по observability gap, подтвердил consistency между E1/E2/E3

Дальше

#2337 должен wire оба параметра (config=RealScraperConfig() +
delay_provider=get_scraper_delay) на call site — тесты из этого PR специально существуют,
чтобы поймать регрессию там.

Closes #2336 (Group E3 эпика #2277 — sub-issue #2308, core valuation). ## Контекст Kit-сторона (`scraper_kit.providers.yandex.valuation.YandexValuationScraper`) уже была полностью портирована ранее (strangler-copy #2133) и уже wired в `admin.py` (Group A/#2305). Production-код не тронут — только новый тест-файл. ## Callers Только `estimator.py:66,598` импортирует legacy-класс. `admin.py` уже использует kit-версию. ## Два footguns 1. `config: ScraperConfig` обязателен → TypeError без него, но проглатывается тем же паттерном blanket except что и cian_valuation (#2335) — `estimator.py:596-606`, WARNING без `exc_info=True`, GlitchTip (`event_level=ERROR`) не поймает. 2. **Новый:** `delay_provider` — без него kit тихо использует хардкод `5.0s` вместо DB-admin-настроенного throttle через `get_scraper_delay`. Не крашит, просто отменяет anti-ban tuning. ## Тесты (6, все реальные проверки, не tautological) - Mandatory-config TypeError - delay_provider hardcoded-fallback (5.0s) без wiring - delay_provider реально используется (12.5 mock → `scraper.request_delay_sec == 12.5`, не просто "mock вызван") - delay_provider получает правильный source-key ("yandex_valuation") - Full construction+parse parity через harness с реальным config/delay_provider wiring - Divergence-catch sanity (мутация `year_built`) ## Проверено - Новый файл: 6/6 passed - Полный backend suite: 3223 passed / 6 skipped / 1 pre-existing unrelated failure - ruff check — чисто - Code-review: ✅ APPROVE — независимо подтвердил все claims, сверил с sibling-находкой в E2 (#2335) по observability gap, подтвердил consistency между E1/E2/E3 ## Дальше #2337 должен wire оба параметра (`config=RealScraperConfig()` + `delay_provider=get_scraper_delay`) на call site — тесты из этого PR специально существуют, чтобы поймать регрессию там.
lekss361 added 1 commit 2026-07-03 22:59:30 +00:00
test(tradein/scraper-kit): prove yandex_valuation kit-wiring safety (#2336)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 17s
CI / changes (pull_request) Successful in 16s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 1m50s
7546868535
Group E3 recon confirmed `scraper_kit.providers.yandex.valuation` is already a
strangler-copy (#2133) and already used via admin.py's debug route (#2305,
Group A) with the established config=RealScraperConfig()/delay_provider=
get_scraper_delay convention. estimator.py (the real caller, #2337's scope)
still imports the legacy module directly with no arguments -- not touched here.

Adds regression coverage for the two confirmed footguns before #2337 switches
that call site:
- mandatory `config: ScraperConfig` raises TypeError when omitted (same
  discipline as the cian_valuation footgun, #2335)
- optional `delay_provider` silently falls back to hardcoded 5.0s when not
  wired, discarding admin-tuned anti-ban throttling (scraper_settings.
  get_scraper_delay)

Also extends the existing `.parse()` golden-parity test (test_scraper_kit_
yandex_golden_parity.py, SimpleNamespace config) with an assert_parity-based
proof over the REAL production construction path (RealScraperConfig() +
get_scraper_delay), plus a harness-catches-divergence sanity check.

No production code changed -- app/services/scrapers/yandex_valuation.py and
scraper_kit/providers/yandex/valuation.py are both pre-existing.
lekss361 merged commit f872f5636b into main 2026-07-03 23:04:14 +00:00
lekss361 deleted branch feat/tradein-migrate-yandex-valuation-kit 2026-07-03 23:04:14 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2345
No description provided.