gendesign/backend/tests/api/v1/conftest.py
Light1YT 2e53f0a1c4
All checks were successful
CI / openapi-codegen-check (pull_request) Successful in 1m46s
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Successful in 11m26s
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>
2026-06-24 04:33:17 +05:00

39 lines
2.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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