64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import sys
|
|
import types
|
|
from pathlib import Path
|
|
|
|
|
|
class FakeHermesContext:
|
|
def __init__(self) -> None:
|
|
self.registered_tools = []
|
|
self.registered_hooks = []
|
|
|
|
def register_tool(self, name, toolset, schema, handler, **kwargs):
|
|
self.registered_tools.append((name, toolset, schema, handler, kwargs))
|
|
|
|
def register_hook(self, hook_name, callback):
|
|
self.registered_hooks.append((hook_name, callback))
|
|
|
|
|
|
def load_plugin_module():
|
|
plugin_dir = Path(__file__).resolve().parents[1]
|
|
if "hermes_plugins" not in sys.modules:
|
|
parent = types.ModuleType("hermes_plugins")
|
|
parent.__path__ = []
|
|
sys.modules["hermes_plugins"] = parent
|
|
spec = importlib.util.spec_from_file_location(
|
|
"hermes_plugins.memory_gateway_agent_test",
|
|
plugin_dir / "__init__.py",
|
|
submodule_search_locations=[str(plugin_dir)],
|
|
)
|
|
module = importlib.util.module_from_spec(spec)
|
|
module.__package__ = "hermes_plugins.memory_gateway_agent_test"
|
|
module.__path__ = [str(plugin_dir)]
|
|
sys.modules["hermes_plugins.memory_gateway_agent_test"] = module
|
|
assert spec.loader is not None
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
def test_register_registers_five_tools():
|
|
module = load_plugin_module()
|
|
ctx = FakeHermesContext()
|
|
|
|
module.register(ctx)
|
|
|
|
assert [item[0] for item in ctx.registered_tools] == [
|
|
"memory_search",
|
|
"memory_append_episode",
|
|
"memory_commit_session",
|
|
"memory_upsert",
|
|
"memory_feedback",
|
|
]
|
|
assert all(item[1] == "memory_gateway" for item in ctx.registered_tools)
|
|
|
|
|
|
def test_registered_handlers_are_callable():
|
|
module = load_plugin_module()
|
|
ctx = FakeHermesContext()
|
|
|
|
module.register(ctx)
|
|
|
|
assert all(callable(item[3]) for item in ctx.registered_tools)
|