Два теста (`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
analyze_parcel() в конце безусловно дёргает
forecast_site_finder_report.delay(...) (best-effort §22-форсайт, обёрнут
в try/except). В тестовой песочнице Celery-брокер (Redis) недоступен,
и .delay() синхронно ждёт kombu reconnect-backoff (~69с) прежде чем
исключение будет проглочено — эта пауза сидела внутри КАЖДОГО теста,
дёргающего POST /analyze без мока форсайт-таски (9 файлов
tests/api/v1/test_analyze_*.py, test_2464*.py — 32 теста, ~2218 из
2503с полного прогона).
Добавлена autouse-фикстура в tests/api/v1/conftest.py по образцу уже
существующей _stub_zone_regulation_resolver — глушит .delay в no-op
MagicMock для всех тестов каталога. Тесты самого enqueue
(test_parcels_forecast.py, test_run_history_and_response_contract.py)
переопределяют тот же target своим per-test patch поверх авто-фикстуры
(nested mock-scope), их проверки не затронуты.
Проверено: 7 целевых файлов (32 теста) — 36.7с суммарно вместо
таймаутов по 90с на файл, все зелёные.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG