"""Общие фикстуры. Окружение тестов — `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)