test(analyze): авто-стаб geoportal зон-резолвера в api/v1 тестах (CI desync fix)
PR-A сделал get_or_fetch_zone_regulation БЕЗУСЛОВНЫМ в analyze. Analyze-тесты с позиционным DB-моком (_make_db_for_analyze + call_idx/responses[]) не мокали резолвер → новый безусловный вызов делает db.execute (get_cached) и сдвигает последовательность ответов мока → parcel_meta получает чужой ответ = None. Локально проходило (geoportal недоступен с dev-машины → резолвер возвращал None, без db-вызова), в CI падало (раннер на проде ДОСТАЁТ geoportal → зона резолвится → get_cached → desync): FAILED test_parcel_meta_found_in_cad_parcels. Fix: autouse-фикстура в tests/api/v1/conftest.py глушит резолвер в no-op (return None) для всех v1-тестов — блок 9e-bis ничего не синтезирует и не трогает БД (идентично до-PR-A). test_analyze_zoning_regulation.py переопределяет резолвер per-test (patch поверх autouse), поэтому его проверки сохранены. Verify: затронутые analyze-файлы + zoning-файл = 72 passed, 0 failed. ruff чисто. Refs #1891 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
de13bfc64c
commit
2e53f0a1c4
1 changed files with 39 additions and 0 deletions
39
backend/tests/api/v1/conftest.py
Normal file
39
backend/tests/api/v1/conftest.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
"""Общие фикстуры для api/v1 analyze-тестов.
|
||||
|
||||
PR-A (#1891) сделал geoportal зон-резолвер (``get_or_fetch_zone_regulation``)
|
||||
БЕЗУСЛОВНЫМ в ``analyze_parcel`` — раньше он был gated за наличием dump-зоны
|
||||
(``_nspd_zoning is not None``), теперь вызывается для любого ЕКБ-участка с centroid.
|
||||
|
||||
Analyze-тесты с ПОЗИЦИОННЫМ DB-моком (``_make_db_for_analyze`` + ``call_idx``/
|
||||
``responses[...]``) НЕ мокали резолвер (до PR-A он не вызывался). Новый безусловный
|
||||
вызов добавляет ``db.execute`` (get_cached) → сдвигает последовательность ответов
|
||||
мока → последующие запросы (напр. ``parcel_meta``) получают чужой/пустой ответ и
|
||||
становятся ``None``. Локально проходило (резолвер мог не разрезолвить точку), в CI
|
||||
падало (``test_parcel_meta_found_in_cad_parcels``).
|
||||
|
||||
Авто-фикстура по умолчанию глушит резолвер в no-op (``return None``) для ВСЕХ тестов
|
||||
в этом каталоге → блок 9e-bis ничего не синтезирует и не трогает БД (поведение
|
||||
идентично до-PR-A). Тесты, которые проверяют САМ резолвер
|
||||
(``test_analyze_zoning_regulation.py``), переопределяют этот же target своим
|
||||
per-test ``patch`` — он применяется ПОВЕРХ авто-фикстуры (вложенный mock-scope), так
|
||||
что их ожидаемые значения резолвера сохраняются.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Iterator
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _stub_zone_regulation_resolver() -> Iterator[None]:
|
||||
"""No-op geoportal зон-резолвер по умолчанию (без сети, без desync DB-мока).
|
||||
|
||||
``return None`` → ``analyze`` не синтезирует ``nspd_zoning`` и не делает лишних
|
||||
``db.execute``. Тесты резолвера переопределяют ``get_or_fetch_zone_regulation``
|
||||
своим ``patch`` per-test.
|
||||
"""
|
||||
with patch("app.api.v1.parcels.get_or_fetch_zone_regulation", return_value=None):
|
||||
yield
|
||||
Loading…
Add table
Reference in a new issue