77 lines
3.0 KiB
Python
77 lines
3.0 KiB
Python
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
from tests.conftest import requires_agent_modules
|
|
|
|
|
|
def _write_skill(root: Path, name: str):
|
|
skill_dir = root / "skills" / name
|
|
skill_dir.mkdir(parents=True, exist_ok=True)
|
|
(skill_dir / "SKILL.md").write_text(
|
|
f"---\nname: {name}\ndescription: {name} skill\n---\n\n# {name}\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
|
|
def _write_config(home: Path, disabled):
|
|
home.mkdir(parents=True, exist_ok=True)
|
|
(home / "config.yaml").write_text(
|
|
yaml.safe_dump({"skills": {"disabled": list(disabled)}}, sort_keys=False),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
|
|
def _load_config(home: Path):
|
|
return yaml.safe_load((home / "config.yaml").read_text(encoding="utf-8")) or {}
|
|
|
|
|
|
@requires_agent_modules
|
|
def test_skills_list_reads_disabled_state_from_active_profile(monkeypatch, tmp_path):
|
|
"""#3066: the skill directory and disabled toggle state must use the same profile."""
|
|
from api import profiles, routes
|
|
|
|
default_home = tmp_path / "default"
|
|
active_home = tmp_path / "profiles" / "auditor"
|
|
for name in ("alpha", "beta"):
|
|
_write_skill(active_home, name)
|
|
_write_config(default_home, ["alpha"])
|
|
_write_config(active_home, ["beta"])
|
|
|
|
monkeypatch.setenv("HERMES_HOME", str(default_home))
|
|
monkeypatch.setattr(profiles, "get_active_hermes_home", lambda: active_home)
|
|
|
|
listed = routes._skills_list_from_dir(active_home / "skills")["skills"]
|
|
by_name = {skill["name"]: skill for skill in listed}
|
|
|
|
assert by_name["alpha"]["disabled"] is False
|
|
assert by_name["beta"]["disabled"] is True
|
|
|
|
|
|
@requires_agent_modules
|
|
def test_skill_toggle_writes_active_profile_config_not_default(monkeypatch, tmp_path):
|
|
"""#3066: WebUI toggle writes the active profile config, not default HERMES_HOME."""
|
|
from api import profiles, routes
|
|
|
|
default_home = tmp_path / "default"
|
|
active_home = tmp_path / "profiles" / "trader"
|
|
_write_skill(active_home, "gamma")
|
|
_write_config(default_home, [])
|
|
_write_config(active_home, ["gamma"])
|
|
|
|
monkeypatch.setenv("HERMES_HOME", str(default_home))
|
|
monkeypatch.setattr(profiles, "get_active_hermes_home", lambda: active_home)
|
|
monkeypatch.setattr(routes, "reload_config", lambda: None)
|
|
monkeypatch.setattr(routes, "j", lambda _handler, payload: payload)
|
|
monkeypatch.setattr(routes, "bad", lambda _handler, message, status=400: {"error": message, "status": status})
|
|
|
|
enabled_response = routes._handle_skill_toggle(None, {"name": "gamma", "enabled": True})
|
|
assert enabled_response == {"ok": True, "name": "gamma", "enabled": True}
|
|
assert _load_config(active_home)["skills"]["disabled"] == []
|
|
assert _load_config(default_home)["skills"]["disabled"] == []
|
|
|
|
disabled_response = routes._handle_skill_toggle(None, {"name": "gamma", "enabled": False})
|
|
assert disabled_response == {"ok": True, "name": "gamma", "enabled": False}
|
|
assert _load_config(active_home)["skills"]["disabled"] == ["gamma"]
|
|
assert _load_config(default_home)["skills"]["disabled"] == []
|