Files
cleveragents-core/robot/helper_tool_registry.py
CoreRasurae 798db9088e
CI / lint (pull_request) Successful in 15s
CI / typecheck (pull_request) Successful in 36s
CI / security (pull_request) Successful in 25s
CI / quality (pull_request) Successful in 19s
CI / build (pull_request) Successful in 23s
CI / integration_tests (pull_request) Successful in 6m49s
CI / coverage (pull_request) Successful in 12m1s
CI / unit_tests (pull_request) Successful in 16m28s
CI / docker (pull_request) Successful in 51s
feat(tool): add tool registry persistence
2026-02-17 20:28:20 +00:00

123 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""Helper script for Robot Framework tool registry smoke tests."""
from __future__ import annotations
import sys
from datetime import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from cleveragents.infrastructure.database.models import Base
from cleveragents.infrastructure.database.repositories import (
DuplicateToolError,
ToolRegistryRepository,
ValidationAttachmentRepository,
)
def _setup():
"""Create in-memory DB and return (session, tool_repo, attachment_repo)."""
engine = create_engine("sqlite:///:memory:", echo=False)
Base.metadata.create_all(engine)
factory = sessionmaker(bind=engine, expire_on_commit=False)
session = factory()
tool_repo = ToolRegistryRepository(session_factory=lambda: session)
attachment_repo = ValidationAttachmentRepository(session_factory=lambda: session)
return session, tool_repo, attachment_repo
def _make_tool(name, source="builtin", tool_type="tool", mode=None):
now = datetime.now().isoformat()
d = {
"name": name,
"description": f"Test tool {name}",
"tool_type": tool_type,
"source": source,
"timeout": 300,
"created_at": now,
"updated_at": now,
"resource_bindings": [],
}
if mode:
d["mode"] = mode
return d
def cmd_register_and_get():
session, repo, _ = _setup()
tool = _make_tool("smoke/read-file")
repo.create(tool)
session.commit()
got = repo.get_by_name("smoke/read-file")
assert got is not None
assert got["name"] == "smoke/read-file"
print("tool-registry-ok")
def cmd_list_filter():
session, repo, _ = _setup()
repo.create(_make_tool("core/tool-a"))
repo.create(_make_tool("local/tool-b", source="custom"))
session.commit()
core_tools = repo.list_all(namespace="core")
assert len(core_tools) == 1
all_tools = repo.list_all()
assert len(all_tools) == 2
print("tool-list-ok")
def cmd_attach_detach():
session, repo, att_repo = _setup()
repo.create(_make_tool("smoke/val-check", tool_type="validation", mode="required"))
session.commit()
att = att_repo.attach(
validation_name="smoke/val-check",
resource_id="res-001",
mode="required",
)
session.commit()
assert att["attachment_id"]
result = att_repo.detach(att["attachment_id"])
session.commit()
assert result is True
print("attach-detach-ok")
def cmd_duplicate_reject():
session, repo, _ = _setup()
repo.create(_make_tool("smoke/dup-test"))
session.commit()
try:
repo.create(_make_tool("smoke/dup-test"))
session.commit()
print("ERROR: should have raised")
sys.exit(1)
except DuplicateToolError:
print("duplicate-reject-ok")
def main():
if len(sys.argv) < 2:
print("Usage: helper_tool_registry.py <command>", file=sys.stderr)
sys.exit(1)
cmd = sys.argv[1]
commands = {
"register-and-get": cmd_register_and_get,
"list-filter": cmd_list_filter,
"attach-detach": cmd_attach_detach,
"duplicate-reject": cmd_duplicate_reject,
}
if cmd not in commands:
print(f"Unknown command: {cmd}", file=sys.stderr)
sys.exit(1)
commands[cmd]()
if __name__ == "__main__":
main()