Files
NotesAgentic/backend/tests/test_agent_service_tools.py
T

80 lines
3.0 KiB
Python

import asyncio
from app.agent.tools import ToolExecutionContext
from app.container import build_container
from app.contracts import ToolCall
def execute(container, name: str, arguments: dict, call_id: str = "call_service_tool"):
return asyncio.run(container.tools.execute(
ToolCall(tool_call_id=call_id, name=name, arguments=arguments),
ToolExecutionContext(run_id="run_service_tools", tool_call_id=call_id),
))
def test_service_tool_catalog_is_registered_with_permissions() -> None:
container = build_container()
expected = {
"function_plot.compose": None,
"notes.rename": "notes.write",
"notes.delete": "notes.delete",
"tasks.read": "tasks.read",
"tasks.delete": "tasks.write",
"audio.transcription_status": "attachments.read",
"skills.list": None,
"skills.create": "skills.write",
"skills.update": "skills.write",
"plugins.list": None,
"plugins.create": "plugins.write",
}
assert {name: container.tools.get(name).definition.permission for name in expected} == expected
assert container.skills.get("chat-operator").status.value == "ready"
def test_function_plot_tool_builds_a_valid_markdown_block() -> None:
container = build_container()
result = execute(container, "function_plot.compose", {
"expressions": ["sin(x)", "x^2 / 5"],
"domain": [-6, 6],
"y_range": [-2, 8],
"xlabel": "x",
"ylabel": "y",
})
assert result.success is True
assert result.output["markdown"].startswith("```function-plot\n")
assert "domain: -6, 6" in result.output["source"]
assert result.output["expression_count"] == 2
assert result.output["node_count"] > 0
assert result.output["persisted"] is False
def test_function_plot_tool_rejects_unsafe_expressions() -> None:
container = build_container()
result = execute(container, "function_plot.compose", {"expressions": ["__import__('os')"]})
assert result.success is False
assert result.error_code == "FUNCTION_PLOT_INVALID"
def test_plugin_create_installs_a_disabled_safe_declarative_plugin() -> None:
container = build_container()
result = execute(container, "plugins.create", {
"plugin_id": "agent-sample",
"name": "Agent Sample",
"description": "A bounded declarative test plugin.",
"tools": [{
"name": "agent-sample.uppercase",
"description": "Uppercase the supplied text.",
"handler": "uppercase",
}],
}, "call_create_plugin_a1")
assert result.success is True
assert result.output["created"] is True
assert result.output["enabled"] is False
assert result.output["requires_enable"] is True
assert result.output["safety_profile"] == "declarative-host-handlers-only"
assert container.tools.contains("agent-sample.uppercase") is False
installed = container.plugins.get("agent-sample")
assert installed.status.value == "installed"
assert installed.enabled is False