perf(tests): схлопнуть inline-ожидание NSPD-фетча в analyze-тестах
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 12s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m23s
CI / backend-tests (pull_request) Successful in 6m41s

Два теста (`test_market_price_invalid_cad_returns_404`,
`test_recent_permits_invalid_cad_no_regression`) спали ровно по 16с: ветка
«участка нет в БД» в `analyze_parcel` ждёт появления геометрии циклом
`sleep(_INLINE_FETCH_POLL_INTERVAL_S)` до `_INLINE_FETCH_WAIT_S` (15с), а в
тестах фетч замокан и геометрия не появляется никогда.

Autouse-фикстура каталога ужимает окно до 0.05с при шаге опроса 0.01с. Цикл
остаётся рабочим (несколько итераций), а не выключается нулём — тесты
fast-path'а продолжают видеть опросы; тесты с собственным patch того же
имени переопределяют фикстуру поверх.

tests/api/v1 целиком: 898с → 7.7с, 377 passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
This commit is contained in:
bot-backend 2026-09-12 17:01:22 +03:00
parent 12e2a9949d
commit 464e9e1c67

View file

@ -59,3 +59,22 @@ def _stub_forecast_enqueue() -> Iterator[None]:
"""
with patch("app.workers.tasks.forecast.forecast_site_finder_report.delay", MagicMock()):
yield
@pytest.fixture(autouse=True)
def _fast_inline_fetch_wait(monkeypatch: pytest.MonkeyPatch) -> None:
"""Схлопнуть inline-ожидание NSPD-фетча (#93 graceful fallback) до миллисекунд.
В ``analyze_parcel`` ветка «участка нет в БД» ждёт появления геометрии циклом
``sleep(_INLINE_FETCH_POLL_INTERVAL_S)`` до ``_INLINE_FETCH_WAIT_S`` (15с прод-
значение). В тестах фетч замокан и геометрия не появится никогда каждый такой
тест честно спал 16с (``test_market_price_invalid_cad_returns_404``,
``test_recent_permits_invalid_cad_no_regression``).
Оставляем цикл РАБОЧИМ (несколько итераций по 10мс), а не выключаем его нулём:
тесты, проверяющие сам fast-path «строка появилась на N-м опросе», продолжают
видеть опросы. Тесты с собственным ``patch`` того же имени (напр.
``test_run_history_and_response_contract.py``) переопределяют это поверх.
"""
monkeypatch.setattr("app.api.v1.parcels._INLINE_FETCH_WAIT_S", 0.05)
monkeypatch.setattr("app.api.v1.parcels._INLINE_FETCH_POLL_INTERVAL_S", 0.01)