arm-tabular-parser/api/tests/unit/test_config.py
Andrey Epifancev 8685441fcd fix: настройки — SERVICE_NAME только tabular-parser, PUBLISH_RETRIES ≥ 0 (M-1, M-3, M-4, M-5)
- 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>
2026-10-04 03:48:34 +04:00

42 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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")