mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 14:07:55 +00:00
* fix(channels): wire channel→agent handler and fix Telegram send pipeline * format code * add supported tests
162 lines
4.9 KiB
Python
162 lines
4.9 KiB
Python
"""Tests for MCP templates (Phase 16.3)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from openjarvis.tools.templates.loader import ToolTemplate, discover_templates
|
|
|
|
|
|
class TestToolTemplate:
|
|
def test_create_template(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "test_tool",
|
|
"description": "A test tool",
|
|
"action": {"type": "transform", "transform": "upper"},
|
|
}
|
|
)
|
|
assert template.spec.name == "test_tool"
|
|
|
|
def test_execute_upper_transform(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "upper",
|
|
"description": "Uppercase",
|
|
"action": {"type": "transform", "transform": "upper"},
|
|
}
|
|
)
|
|
result = template.execute(input="hello")
|
|
assert result.success
|
|
assert result.content == "HELLO"
|
|
|
|
def test_execute_lower_transform(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "lower",
|
|
"description": "Lowercase",
|
|
"action": {"type": "transform", "transform": "lower"},
|
|
}
|
|
)
|
|
result = template.execute(input="HELLO")
|
|
assert result.success
|
|
assert result.content == "hello"
|
|
|
|
def test_execute_reverse_transform(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "reverse",
|
|
"description": "Reverse",
|
|
"action": {"type": "transform", "transform": "reverse"},
|
|
}
|
|
)
|
|
result = template.execute(input="hello")
|
|
assert result.success
|
|
assert result.content == "olleh"
|
|
|
|
def test_execute_length_transform(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "length",
|
|
"description": "Length",
|
|
"action": {"type": "transform", "transform": "length"},
|
|
}
|
|
)
|
|
result = template.execute(input="hello")
|
|
assert result.success
|
|
assert result.content == "5"
|
|
|
|
def test_execute_json_pretty_transform(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "json",
|
|
"description": "JSON pretty",
|
|
"action": {"type": "transform", "transform": "json_pretty"},
|
|
}
|
|
)
|
|
result = template.execute(input='{"a":1}')
|
|
assert result.success
|
|
assert '"a": 1' in result.content
|
|
|
|
def test_execute_json_pretty_invalid(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "json",
|
|
"description": "JSON pretty",
|
|
"action": {"type": "transform", "transform": "json_pretty"},
|
|
}
|
|
)
|
|
result = template.execute(input="not json")
|
|
assert not result.success
|
|
|
|
def test_execute_python_action(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "py",
|
|
"description": "Python",
|
|
"action": {"type": "python", "expression": "str(len(input))"},
|
|
}
|
|
)
|
|
result = template.execute(input="hello")
|
|
assert result.success
|
|
assert result.content == "5"
|
|
|
|
def test_execute_identity_transform(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "identity",
|
|
"description": "Identity",
|
|
"action": {"type": "transform", "transform": "identity"},
|
|
}
|
|
)
|
|
result = template.execute(input="unchanged")
|
|
assert result.success
|
|
assert result.content == "unchanged"
|
|
|
|
def test_unknown_action_type(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "bad",
|
|
"description": "Bad",
|
|
"action": {"type": "unknown"},
|
|
}
|
|
)
|
|
result = template.execute()
|
|
assert not result.success
|
|
|
|
def test_template_metadata(self):
|
|
template = ToolTemplate(
|
|
{
|
|
"name": "test",
|
|
"description": "test",
|
|
"action": {"type": "transform"},
|
|
}
|
|
)
|
|
assert template.spec.metadata.get("template") is True
|
|
|
|
|
|
class TestDiscoverTemplates:
|
|
def test_discover_builtin(self):
|
|
templates = discover_templates()
|
|
# Should find at least some builtin templates
|
|
if templates:
|
|
names = {t.spec.name for t in templates}
|
|
assert len(names) > 0
|
|
|
|
def test_discover_nonexistent_dir(self, tmp_path):
|
|
templates = discover_templates(tmp_path / "nonexistent")
|
|
assert templates == []
|
|
|
|
def test_discover_custom_dir(self, tmp_path):
|
|
# Create a custom template
|
|
toml_content = """
|
|
[tool]
|
|
name = "custom"
|
|
description = "Custom tool"
|
|
[tool.action]
|
|
type = "transform"
|
|
transform = "upper"
|
|
"""
|
|
(tmp_path / "custom.toml").write_text(toml_content)
|
|
templates = discover_templates(tmp_path)
|
|
assert len(templates) == 1
|
|
assert templates[0].spec.name == "custom"
|