78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from takopi.config import ProjectConfig, ProjectsConfig
|
|
from takopi.context import RunContext
|
|
from takopi.router import AutoRouter, RunnerEntry
|
|
from takopi.runners.mock import Return, ScriptRunner
|
|
from takopi.telegram.chat_prefs import ChatPrefsStore
|
|
from takopi.telegram.engine_defaults import resolve_engine_for_message
|
|
from takopi.telegram.topic_state import TopicStateStore
|
|
from takopi.transport_runtime import TransportRuntime
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_resolve_engine_for_message_sources(tmp_path) -> None:
|
|
codex = ScriptRunner([Return(answer="ok")], engine="codex")
|
|
pi = ScriptRunner([Return(answer="ok")], engine="pi")
|
|
router = AutoRouter(
|
|
entries=[
|
|
RunnerEntry(engine=codex.engine, runner=codex),
|
|
RunnerEntry(engine=pi.engine, runner=pi),
|
|
],
|
|
default_engine=codex.engine,
|
|
)
|
|
project = ProjectConfig(
|
|
alias="proj",
|
|
path=tmp_path,
|
|
worktrees_dir=Path(".worktrees"),
|
|
default_engine=pi.engine,
|
|
)
|
|
runtime = TransportRuntime(
|
|
router=router,
|
|
projects=ProjectsConfig(projects={"proj": project}, default_project=None),
|
|
)
|
|
chat_prefs = ChatPrefsStore(tmp_path / "telegram_chat_prefs_state.json")
|
|
topic_store = TopicStateStore(tmp_path / "telegram_topics_state.json")
|
|
await chat_prefs.set_default_engine(1, "pi")
|
|
await topic_store.set_default_engine(1, 10, "codex")
|
|
|
|
resolved = await resolve_engine_for_message(
|
|
runtime=runtime,
|
|
context=RunContext(project="proj"),
|
|
explicit_engine="codex",
|
|
chat_id=1,
|
|
topic_key=(1, 10),
|
|
topic_store=topic_store,
|
|
chat_prefs=chat_prefs,
|
|
)
|
|
assert resolved.source == "directive"
|
|
assert resolved.engine == "codex"
|
|
|
|
await topic_store.clear_default_engine(1, 10)
|
|
resolved = await resolve_engine_for_message(
|
|
runtime=runtime,
|
|
context=RunContext(project="proj"),
|
|
explicit_engine=None,
|
|
chat_id=1,
|
|
topic_key=(1, 10),
|
|
topic_store=topic_store,
|
|
chat_prefs=chat_prefs,
|
|
)
|
|
assert resolved.source == "chat_default"
|
|
assert resolved.engine == "pi"
|
|
|
|
await chat_prefs.clear_default_engine(1)
|
|
resolved = await resolve_engine_for_message(
|
|
runtime=runtime,
|
|
context=RunContext(project="proj"),
|
|
explicit_engine=None,
|
|
chat_id=1,
|
|
topic_key=(1, 10),
|
|
topic_store=topic_store,
|
|
chat_prefs=chat_prefs,
|
|
)
|
|
assert resolved.source == "project_default"
|
|
assert resolved.engine == "pi"
|