"""Общие фикстуры для 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