- config: pydantic-settings по подсистемам, ADMIN_IDS через запятую - texts.yaml + валидация при старте (лишний/пропущенный ключ — ошибка сразу) - меню: reply-клавиатура разделов (Участники — только админам), инлайн «Назад»/«Отмена» с редактированием сообщения на месте, /start, /menu, /help - AccessMiddleware (outer) на сообщениях и кнопках: до #25 пускает только ADMIN_IDS, постороннему — одна фраза в сутки, устаревшие кнопки молча гасятся - heartbeat-файл + HEALTHCHECK в Dockerfile; JSON-логи - FSM пока в памяти (фабрика), хранилище в БД — в #5 - тесты на фейковой сессии aiogram через настоящий Dispatcher Refs #4 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
622 B
Python
25 lines
622 B
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from app.config import AccessSettings, RuntimeSettings, Settings, TelegramSettings
|
|
from app.texts import Texts, load_texts
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
ADMIN = 1001
|
|
OUTSIDER = 2002
|
|
|
|
|
|
@pytest.fixture
|
|
def texts() -> Texts:
|
|
return load_texts(ROOT / "config")
|
|
|
|
|
|
@pytest.fixture
|
|
def settings(tmp_path: Path) -> Settings:
|
|
return Settings(
|
|
telegram=TelegramSettings(bot_token="42:TEST-TOKEN"),
|
|
access=AccessSettings(admin_ids=frozenset({ADMIN})),
|
|
runtime=RuntimeSettings(config_dir=ROOT / "config", heartbeat_file=tmp_path / "hb"),
|
|
)
|