forked from Zakaria/hermes-agent
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
from digital_pet_import import load_module
|
|
|
|
|
|
def test_register_adds_pet_command_and_observer_hooks():
|
|
plugin = load_module("__init__.py", "digital_pet_pkg", package=True)
|
|
|
|
class Ctx:
|
|
def __init__(self):
|
|
self.commands = []
|
|
self.hooks = []
|
|
self.skills = []
|
|
|
|
def register_command(self, *args, **kwargs):
|
|
self.commands.append((args, kwargs))
|
|
|
|
def register_hook(self, *args, **kwargs):
|
|
self.hooks.append((args, kwargs))
|
|
|
|
def register_skill(self, *args, **kwargs):
|
|
self.skills.append((args, kwargs))
|
|
|
|
ctx = Ctx()
|
|
plugin.register(ctx)
|
|
|
|
assert ctx.commands[0][0][0] == "pet"
|
|
assert ctx.commands[0][1]["description"].startswith("Summon")
|
|
assert ctx.commands[0][1]["args_hint"] == "[summon|hide|wake|sleep|status|click]"
|
|
assert [entry[0][0] for entry in ctx.hooks] == ["on_session_start", "post_tool_call"]
|
|
|
|
|
|
def test_pet_command_status_and_unknown_do_not_throw(monkeypatch, tmp_path):
|
|
monkeypatch.setenv("HERMES_DIGITAL_PET_STATE", str(tmp_path / "state.json"))
|
|
commands = load_module("commands.py", "digital_pet_pkg", package=True)
|
|
|
|
status = json.loads(commands.handle_pet_command("status"))
|
|
unknown = json.loads(commands.handle_pet_command("nonsense"))
|
|
|
|
assert status["ok"] is True
|
|
assert status["state"]["mode"] == "hidden"
|
|
assert unknown == {
|
|
"ok": False,
|
|
"error": "unknown pet command",
|
|
"usage": "/pet [summon|hide|wake|sleep|status|click]",
|
|
}
|
|
|
|
|
|
def test_pet_command_persists_summon_and_hide(monkeypatch, tmp_path):
|
|
monkeypatch.setenv("HERMES_DIGITAL_PET_STATE", str(tmp_path / "state.json"))
|
|
commands = load_module("commands.py", "digital_pet_pkg", package=True)
|
|
|
|
summoned = json.loads(commands.handle_pet_command("summon"))
|
|
hidden = json.loads(commands.handle_pet_command("hide"))
|
|
|
|
assert summoned["ok"] is True
|
|
assert summoned["state"]["mode"] == "idle"
|
|
assert hidden["ok"] is True
|
|
assert hidden["state"]["mode"] == "hidden"
|
|
assert (tmp_path / "state.json").exists()
|