arm-scan-gateway/api/tests/conftest.py
Andrey Epifancev ad3fb34dba Срез 0 [fix C-1]: пакет src не создаёт приложение — эмулятор стартует без настроек шлюза
`api/src/__init__.py` оставлен только с docstring: `python -m src.scan_emulator` больше не импортирует `src.app`
и не требует `OPENBAO__*`. `run_server.py` импортирует `app` из `src.app`, `get_settings` — из `src.core.config`.
Регрессионный тест: subprocess эмулятора с окружением только PATH/ENV_FILE/SCAN_HOTFOLDER_PATH -> код 2,
сообщение про корень горячей папки, без ValidationError.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 05:01:16 +04:00

55 lines
2.3 KiB
Python
Raw 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/.env.test`: его подключает pytest.ini (`ENV_FILE=.env.test`, путь от
каталога api/), поэтому `import src.app` (он создаёт приложение) работает без своей настройки окружения
и без инфраструктуры."""
import sys
from collections.abc import Iterator
import pytest
from loguru import logger
@pytest.fixture(autouse=True)
def _fresh_settings():
"""get_settings кэшируется (lru_cache): сбрасываем кэш до и после каждого теста."""
# Импорт отложен намеренно: модули тестов импортируют `src.app`, а он создаёт приложение и читает окружение
from src.core.config import get_settings # noqa: PLC0415
get_settings.cache_clear()
yield
get_settings.cache_clear()
@pytest.fixture
def minimal_env_file(tmp_path, monkeypatch):
"""Env-файл только с обязательными настройками (без `.env.test`): для проверки значений по умолчанию."""
env_file = tmp_path / "minimal.env"
env_file.write_text(
"\n".join(
[
"OPENBAO__MINIO__MINIO_URL=localhost:9000",
"OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin",
"OPENBAO__MINIO__MINIO_ADMIN_PASSWORD=minioadmin",
"OPENBAO__MINIO__MINIO_BUCKET=arm-ka",
"OPENBAO__NATS__NATS_URL=nats://localhost:4222",
"SCAN_HOTFOLDER_PATH=/tmp/scan-gateway-test-hotfolder",
]
)
)
monkeypatch.setenv("ENV_FILE", str(env_file))
return env_file
@pytest.fixture
def log_lines() -> Iterator[list[str]]:
"""Перехват loguru: строки `LEVEL|сообщение` вместо stderr (pytest запускается с --capture=no, вывод чистый).
Обработчик stderr по умолчанию восстанавливается после теста.
"""
lines: list[str] = []
logger.remove()
logger.add(lambda message: lines.append(str(message)), level="DEBUG", format="{level}|{message}")
yield lines
logger.remove()
logger.add(sys.stderr)