- 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>
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""Общие фикстуры тестов."""
|
||
|
||
import os
|
||
from collections.abc import Callable
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
|
||
from src.core.config import Settings
|
||
|
||
# Переменные, которые читает Settings: убираются из окружения процесса, чтобы тест видел только свой файл
|
||
_SETTINGS_ENV_PREFIXES = (
|
||
"OPENBAO__",
|
||
"SERVER__",
|
||
"DEBUG",
|
||
"ROOT_PATH",
|
||
"VERSION",
|
||
"SERVICE_NAME",
|
||
"NATS_ENABLED",
|
||
"WORKER_CONCURRENCY",
|
||
"PUBLISH_RETRIES",
|
||
"DONE_CACHE_SIZE",
|
||
)
|
||
|
||
# Минимальное окружение spec «Старт с минимальным окружением»: MinIO, адрес NATS и DEBUG; без seed/jwt, БД и SMB
|
||
MINIMAL_ENV = """\
|
||
DEBUG=true
|
||
OPENBAO__MINIO__MINIO_URL=localhost:9000
|
||
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
|
||
OPENBAO__MINIO__MINIO_ADMIN_PASSWORD=minioadmin
|
||
OPENBAO__MINIO__MINIO_BUCKET=arm-ka
|
||
OPENBAO__NATS__NATS_URL=nats://localhost:4222
|
||
"""
|
||
|
||
|
||
@pytest.fixture
|
||
def minimal_settings(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> Callable[[str], Settings]:
|
||
"""Фабрика Settings только из временного `.env` с `MINIMAL_ENV` и строками `extra` (окружение процесса скрыто)."""
|
||
for name in list(os.environ):
|
||
if name.upper().startswith(_SETTINGS_ENV_PREFIXES):
|
||
monkeypatch.delenv(name)
|
||
|
||
def build(extra: str = "") -> Settings:
|
||
env_file = tmp_path / ".env"
|
||
env_file.write_text(MINIMAL_ENV + extra, encoding="utf-8")
|
||
return Settings(_env_file=env_file) # type: ignore[call-arg]
|
||
|
||
return build
|