diff --git a/backend/tests/api/v1/conftest.py b/backend/tests/api/v1/conftest.py index f5741b19..33df9426 100644 --- a/backend/tests/api/v1/conftest.py +++ b/backend/tests/api/v1/conftest.py @@ -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)