refactor(telegram): boundary types (#90)
This commit is contained in:
@@ -9,6 +9,11 @@ from takopi.config import ProjectsConfig
|
||||
from takopi.model import EngineId
|
||||
from takopi.router import AutoRouter, RunnerEntry
|
||||
from takopi.runners.mock import Return, ScriptRunner
|
||||
from takopi.settings import (
|
||||
TelegramFilesSettings,
|
||||
TelegramTopicsSettings,
|
||||
TelegramTransportSettings,
|
||||
)
|
||||
from takopi.telegram import backend as telegram_backend
|
||||
from takopi.transport_runtime import TransportRuntime
|
||||
|
||||
@@ -20,8 +25,13 @@ def test_build_startup_message_includes_missing_engines(tmp_path: Path) -> None:
|
||||
missing = ScriptRunner([Return(answer="ok")], engine=pi)
|
||||
router = AutoRouter(
|
||||
entries=[
|
||||
RunnerEntry(engine=codex, runner=runner, available=True),
|
||||
RunnerEntry(engine=pi, runner=missing, available=False, issue="missing"),
|
||||
RunnerEntry(engine=codex, runner=runner),
|
||||
RunnerEntry(
|
||||
engine=pi,
|
||||
runner=missing,
|
||||
status="missing_cli",
|
||||
issue="missing",
|
||||
),
|
||||
],
|
||||
default_engine=codex,
|
||||
)
|
||||
@@ -40,6 +50,44 @@ def test_build_startup_message_includes_missing_engines(tmp_path: Path) -> None:
|
||||
assert "projects: `none`" in message
|
||||
|
||||
|
||||
def test_build_startup_message_surfaces_unavailable_engine_reasons(
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
codex = EngineId("codex")
|
||||
pi = EngineId("pi")
|
||||
claude = EngineId("claude")
|
||||
runner = ScriptRunner([Return(answer="ok")], engine=codex)
|
||||
bad_cfg = ScriptRunner([Return(answer="ok")], engine=pi)
|
||||
load_err = ScriptRunner([Return(answer="ok")], engine=claude)
|
||||
|
||||
router = AutoRouter(
|
||||
entries=[
|
||||
RunnerEntry(engine=codex, runner=runner),
|
||||
RunnerEntry(engine=pi, runner=bad_cfg, status="bad_config", issue="bad"),
|
||||
RunnerEntry(
|
||||
engine=claude,
|
||||
runner=load_err,
|
||||
status="load_error",
|
||||
issue="failed",
|
||||
),
|
||||
],
|
||||
default_engine=codex,
|
||||
)
|
||||
runtime = TransportRuntime(
|
||||
router=router,
|
||||
projects=ProjectsConfig(projects={}, default_project=None),
|
||||
watch_config=True,
|
||||
)
|
||||
|
||||
message = telegram_backend._build_startup_message(
|
||||
runtime, startup_pwd=str(tmp_path)
|
||||
)
|
||||
|
||||
assert "agents: `codex" in message
|
||||
assert "misconfigured: pi" in message
|
||||
assert "failed to load: claude" in message
|
||||
|
||||
|
||||
def test_telegram_backend_build_and_run_wires_config(
|
||||
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
@@ -55,7 +103,7 @@ def test_telegram_backend_build_and_run_wires_config(
|
||||
codex = EngineId("codex")
|
||||
runner = ScriptRunner([Return(answer="ok")], engine=codex)
|
||||
router = AutoRouter(
|
||||
entries=[RunnerEntry(engine=codex, runner=runner, available=True)],
|
||||
entries=[RunnerEntry(engine=codex, runner=runner)],
|
||||
default_engine=codex,
|
||||
)
|
||||
runtime = TransportRuntime(
|
||||
@@ -80,13 +128,14 @@ def test_telegram_backend_build_and_run_wires_config(
|
||||
monkeypatch.setattr(telegram_backend, "run_main_loop", fake_run_main_loop)
|
||||
monkeypatch.setattr(telegram_backend, "TelegramClient", _FakeClient)
|
||||
|
||||
transport_config = {
|
||||
"bot_token": "token",
|
||||
"chat_id": 321,
|
||||
"voice_transcription": True,
|
||||
"files": {"enabled": True, "allowed_user_ids": [1, 2]},
|
||||
"topics": {"enabled": True, "scope": "main"},
|
||||
}
|
||||
transport_config = TelegramTransportSettings(
|
||||
bot_token="token",
|
||||
chat_id=321,
|
||||
voice_transcription=True,
|
||||
voice_max_bytes=1234,
|
||||
files=TelegramFilesSettings(enabled=True, allowed_user_ids=[1, 2]),
|
||||
topics=TelegramTopicsSettings(enabled=True, scope="main"),
|
||||
)
|
||||
|
||||
telegram_backend.TelegramBackend().build_and_run(
|
||||
transport_config=transport_config,
|
||||
@@ -100,18 +149,19 @@ def test_telegram_backend_build_and_run_wires_config(
|
||||
kwargs = captured["kwargs"]
|
||||
assert cfg.chat_id == 321
|
||||
assert cfg.voice_transcription is True
|
||||
assert cfg.voice_max_bytes == 1234
|
||||
assert cfg.files.enabled is True
|
||||
assert cfg.files.allowed_user_ids == frozenset({1, 2})
|
||||
assert cfg.files.allowed_user_ids == [1, 2]
|
||||
assert cfg.topics.enabled is True
|
||||
assert cfg.bot.token == "token"
|
||||
assert kwargs["watch_config"] is True
|
||||
assert kwargs["transport_id"] == "telegram"
|
||||
|
||||
|
||||
def test_build_files_config_defaults() -> None:
|
||||
cfg = telegram_backend._build_files_config({})
|
||||
def test_telegram_files_settings_defaults() -> None:
|
||||
cfg = TelegramFilesSettings()
|
||||
|
||||
assert cfg.enabled is False
|
||||
assert cfg.auto_put is True
|
||||
assert cfg.uploads_dir == "incoming"
|
||||
assert cfg.allowed_user_ids == frozenset()
|
||||
assert cfg.allowed_user_ids == []
|
||||
|
||||
Reference in New Issue
Block a user