feat: plugins and public api (#71)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
from pathlib import Path
|
||||
|
||||
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.transport_runtime import TransportRuntime
|
||||
|
||||
|
||||
def _make_runtime(*, project_default_engine: str | None = None) -> TransportRuntime:
|
||||
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=Path("."),
|
||||
worktrees_dir=Path(".worktrees"),
|
||||
default_engine=project_default_engine,
|
||||
)
|
||||
projects = ProjectsConfig(projects={"proj": project}, default_project=None)
|
||||
return TransportRuntime(router=router, projects=projects)
|
||||
|
||||
|
||||
def test_resolve_engine_uses_project_default() -> None:
|
||||
runtime = _make_runtime(project_default_engine="pi")
|
||||
engine = runtime.resolve_engine(
|
||||
engine_override=None,
|
||||
context=RunContext(project="proj"),
|
||||
)
|
||||
assert engine == "pi"
|
||||
|
||||
|
||||
def test_resolve_engine_prefers_override() -> None:
|
||||
runtime = _make_runtime(project_default_engine="pi")
|
||||
engine = runtime.resolve_engine(
|
||||
engine_override="codex",
|
||||
context=RunContext(project="proj"),
|
||||
)
|
||||
assert engine == "codex"
|
||||
Reference in New Issue
Block a user