arm-core/api/tests/test_config.py
Andrey Epifancev dff1e050b9 feat: Settings читает ENV_FILE, поля auth/NATS/outbox, .env.example и .env.test
NATS_SEED/NATS_JWT необязательны (пусто — подключение без nkeys); в app.py
разбор seed защищён от пустого значения (подключение переедет в задаче 22).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:17:19 +04:00

44 lines
1.9 KiB
Python

"""Настройки: чтение 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