- SERVICE_NAME: Literal["tabular-parser"] (R-35); в config.py, .env.example, README и CLAUDE.md исправлено «имя queue group» — queue group задаёт константа REQUEST_QUEUE_GROUP в core/nats.py. - PUBLISH_RETRIES: NonNegativeInt — 0 означает одну попытку без повторов, как и принимает NatsConnection. - Удалён неиспользуемый модульный settings = get_settings() из config.py. - pyproject.toml: убран override mypy для raisa_fastapi_protected_api (зависимость удалена D-1). - tests/conftest.py: фабрика minimal_settings (Settings из временного .env с минимальным окружением, окружение процесса скрыто); test_config.py — умолчания при минимальном окружении (M-8), PUBLISH_RETRIES=0/-1, SERVICE_NAME≠tabular-parser. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
42 lines
1.9 KiB
Python
42 lines
1.9 KiB
Python
"""Unit-тесты настроек `src/core/config.py` (spec «Старт с минимальным окружением»; R-35)."""
|
||
|
||
from collections.abc import Callable
|
||
|
||
import pytest
|
||
from pydantic import ValidationError
|
||
|
||
from src.core.config import Settings
|
||
|
||
SettingsFactory = Callable[..., Settings]
|
||
|
||
|
||
def test_minimal_environment_gives_defaults(minimal_settings: SettingsFactory) -> None:
|
||
settings = minimal_settings()
|
||
|
||
assert settings.DEBUG is True
|
||
assert settings.OPENBAO.MINIO.MINIO_BUCKET == "arm-ka"
|
||
assert settings.OPENBAO.NATS.NATS_URL == "nats://localhost:4222"
|
||
assert settings.OPENBAO.NATS.NATS_SEED == ""
|
||
assert settings.OPENBAO.NATS.NATS_JWT == ""
|
||
assert settings.NATS_ENABLED is True
|
||
assert settings.SERVICE_NAME == "tabular-parser"
|
||
assert settings.WORKER_CONCURRENCY == 1
|
||
assert settings.PUBLISH_RETRIES == 3 # noqa: PLR2004 - значение по умолчанию из spec
|
||
assert settings.DONE_CACHE_SIZE == 1000 # noqa: PLR2004 - значение по умолчанию из spec
|
||
|
||
|
||
def test_publish_retries_zero_is_allowed(minimal_settings: SettingsFactory) -> None:
|
||
"""0 — без повторов: одна попытка публикации (NatsConnection принимает publish_retries ≥ 0)."""
|
||
assert minimal_settings("PUBLISH_RETRIES=0\n").PUBLISH_RETRIES == 0
|
||
|
||
|
||
def test_publish_retries_negative_is_rejected(minimal_settings: SettingsFactory) -> None:
|
||
with pytest.raises(ValidationError, match="PUBLISH_RETRIES"):
|
||
minimal_settings("PUBLISH_RETRIES=-1\n")
|
||
|
||
|
||
def test_service_name_other_than_contract_value_is_rejected(minimal_settings: SettingsFactory) -> None:
|
||
"""SERVICE_NAME — `service.name` конвертов контракта: другое значение — ошибка конфигурации при старте."""
|
||
with pytest.raises(ValidationError, match="SERVICE_NAME"):
|
||
minimal_settings("SERVICE_NAME=scan-gateway\n")
|