68 lines
2.9 KiB
Python
68 lines
2.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:
|
|
"""Значения по умолчанию классов настроек: env-файла нет, заданы только обязательные OPENBAO__*."""
|
|
required = {
|
|
"OPENBAO__DATABASE__DATABASE_URL": "postgresql+asyncpg://u:p@localhost:5432/d",
|
|
"OPENBAO__MINIO__MINIO_URL": "localhost:9000",
|
|
"OPENBAO__MINIO__MINIO_ADMIN_LOGIN": "login",
|
|
"OPENBAO__MINIO__MINIO_ADMIN_PASSWORD": "password",
|
|
"OPENBAO__MINIO__MINIO_BUCKET": "bucket",
|
|
"OPENBAO__NATS__NATS_URL": "nats://localhost:4222",
|
|
"OPENBAO__SMB__SMB_HOST": "host",
|
|
"OPENBAO__SMB__SMB_PATH": "path",
|
|
"OPENBAO__SMB__SMB_LOGIN": "login",
|
|
"OPENBAO__SMB__SMB_PASSWORD": "password",
|
|
}
|
|
for key, value in required.items():
|
|
clean_env.setenv(key, value)
|
|
s = Settings(_env_file=None) # type: ignore[call-arg]
|
|
assert s.DEBUG is False
|
|
assert s.AUTH_DEV_ISSUER is False
|
|
assert s.AUTH_DEV_SECRET == ""
|
|
assert s.AUTH_JWKS_URL == ""
|
|
assert s.AUTH_PUBLIC_KEY == ""
|
|
assert s.AUTH_ISSUER == ""
|
|
assert s.AUTH_AUDIENCE == ""
|
|
assert s.AUTH_EMAIL_CLAIM == "email"
|
|
assert s.NATS_ENABLED is False
|
|
assert (s.OUTBOX_POLL_SECONDS, s.ACK_TIMEOUT_SECONDS, s.OUTBOX_MAX_REPUBLISH) == (5, 30, 3)
|
|
assert s.OPENBAO.NATS.NATS_SEED == ""
|
|
assert s.OPENBAO.NATS.NATS_JWT == ""
|
|
|
|
|
|
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
|