"""Настройки: чтение ENV_FILE и значения по умолчанию (без БД и сети).""" import os from pathlib import Path import pytest from src.core.config import Settings API_DIR = Path(__file__).resolve().parent.parent @pytest.fixture def clean_env(monkeypatch: pytest.MonkeyPatch) -> pytest.MonkeyPatch: """Убирает из окружения процесса переменные, которые перебили бы значения из env-файла.""" for key in list(os.environ): if key.startswith(("OPENBAO__", "AUTH_", "OUTBOX_", "ACK_")) or key in {"NATS_ENABLED", "DEBUG"}: monkeypatch.delenv(key) return monkeypatch def test_env_test_is_read(clean_env: pytest.MonkeyPatch) -> None: """.env.test читается: порты временной тестовой инфраструктуры.""" s = Settings(_env_file=API_DIR / ".env.test") # type: ignore[call-arg] assert s.OPENBAO.DATABASE.DATABASE_URL.endswith("localhost:55432/armka") assert s.OPENBAO.NATS.NATS_URL == "nats://localhost:54222" assert s.AUTH_DEV_ISSUER is True assert s.NATS_ENABLED is False def test_defaults(clean_env: pytest.MonkeyPatch) -> None: """Значения по умолчанию: claim email и параметры outbox.""" s = Settings(_env_file=API_DIR / ".env.test") # type: ignore[call-arg] assert s.AUTH_EMAIL_CLAIM == "email" assert (s.OUTBOX_POLL_SECONDS, s.ACK_TIMEOUT_SECONDS, s.OUTBOX_MAX_REPUBLISH) == (5, 30, 3) def test_empty_nats_seed_and_jwt_allowed(clean_env: pytest.MonkeyPatch) -> None: """Пустые NATS_SEED/NATS_JWT допустимы (подключение без nkeys).""" s = Settings(_env_file=API_DIR / ".env.example") # type: ignore[call-arg] assert s.OPENBAO.NATS.NATS_SEED == "" assert s.OPENBAO.NATS.NATS_JWT == "" assert s.NATS_ENABLED is True