test: improve coverage and raise threshold to 80% (#154)
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from takopi.runners import tool_actions
|
||||
from takopi.utils.paths import reset_run_base_dir, set_run_base_dir
|
||||
|
||||
|
||||
def test_tool_input_path_picks_first_match() -> None:
|
||||
tool_input = {"path": "src/main.py", "file": "ignored.txt"}
|
||||
assert (
|
||||
tool_actions.tool_input_path(tool_input, path_keys=("file", "path"))
|
||||
== "ignored.txt"
|
||||
)
|
||||
assert (
|
||||
tool_actions.tool_input_path(tool_input, path_keys=("path", "file"))
|
||||
== "src/main.py"
|
||||
)
|
||||
assert tool_actions.tool_input_path(tool_input, path_keys=("missing",)) is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("tool_name", "tool_input", "expected_kind", "expected_title"),
|
||||
[
|
||||
("bash", {"command": "echo hi"}, "command", "echo hi"),
|
||||
("shell", {"command": "pwd"}, "command", "pwd"),
|
||||
("edit", {"path": "src/app.py"}, "file_change", "src/app.py"),
|
||||
("write", {"path": "notes.txt"}, "file_change", "notes.txt"),
|
||||
("read", {"path": "README.md"}, "tool", "read: `README.md`"),
|
||||
("glob", {"pattern": "*.py"}, "tool", "glob: `*.py`"),
|
||||
("grep", {"pattern": "TODO"}, "tool", "grep: TODO"),
|
||||
("find", {"pattern": "*.toml"}, "tool", "find: *.toml"),
|
||||
("ls", {"path": "src"}, "tool", "ls: `src`"),
|
||||
("websearch", {"query": "takopi"}, "web_search", "takopi"),
|
||||
(
|
||||
"webfetch",
|
||||
{"url": "https://example.com"},
|
||||
"web_search",
|
||||
"https://example.com",
|
||||
),
|
||||
("todowrite", {}, "note", "update todos"),
|
||||
("todoread", {}, "note", "read todos"),
|
||||
("askuserquestion", {}, "note", "ask user"),
|
||||
("task", {"description": "do work"}, "subagent", "do work"),
|
||||
("agent", {"prompt": "assist"}, "subagent", "assist"),
|
||||
("unknown", {}, "tool", "unknown"),
|
||||
],
|
||||
)
|
||||
def test_tool_kind_and_title_cases(
|
||||
tool_name: str,
|
||||
tool_input: dict[str, object],
|
||||
expected_kind: str,
|
||||
expected_title: str,
|
||||
) -> None:
|
||||
token = set_run_base_dir(None)
|
||||
try:
|
||||
kind, title = tool_actions.tool_kind_and_title(
|
||||
tool_name,
|
||||
tool_input,
|
||||
path_keys=("path", "file"),
|
||||
)
|
||||
finally:
|
||||
reset_run_base_dir(token)
|
||||
|
||||
assert kind == expected_kind
|
||||
assert title == expected_title
|
||||
|
||||
|
||||
def test_tool_kind_and_title_task_kind_override() -> None:
|
||||
kind, title = tool_actions.tool_kind_and_title(
|
||||
"agent",
|
||||
{"description": "spawn worker"},
|
||||
path_keys=(),
|
||||
task_kind="warning",
|
||||
)
|
||||
|
||||
assert kind == "warning"
|
||||
assert title == "spawn worker"
|
||||
Reference in New Issue
Block a user