main
py 38 lines 1.44 KB
Raw
1 from helpers import skills, skills_cli
2
3
4 def test_cli_uses_runtime_skill_contract(monkeypatch, tmp_path):
5 monkeypatch.setattr(
6 skills_cli.files,
7 "get_abs_path",
8 lambda *parts: str(tmp_path.joinpath(*parts)),
9 )
10 skill_dir = skills_cli.create_skill(
11 "cli-contract",
12 "Use this skill to verify the shared CLI and runtime contract.",
13 )
14 skills_root = tmp_path / "usr" / "skills"
15 monkeypatch.setattr(skills, "get_skill_roots", lambda agent=None: [str(skills_root)])
16
17 parsed = skills_cli.parse_skill_file(skill_dir / "SKILL.md")
18
19 assert isinstance(parsed, skills.Skill)
20 assert parsed.triggers == ["cli-contract"]
21 assert skills_cli.get_skills_dirs() == [skills_root]
22 assert [skill.name for skill in skills_cli.list_skills()] == ["cli-contract"]
23 assert skills_cli.find_skill("cli-contract").triggers == ["cli-contract"]
24 assert [skill.name for skill in skills_cli.search_skills("cli-contract")] == [
25 "cli-contract"
26 ]
27 assert skills_cli.validate_skill(parsed) == skills.validate_skill(parsed) == []
28
29 invalid_dir = skills_root / "invalid-skill"
30 invalid_dir.mkdir()
31 (invalid_dir / "SKILL.md").write_text(
32 "---\nname: invalid-skill\n---\n\n# Invalid skill\n",
33 encoding="utf-8",
34 )
35 invalid = skills_cli.find_skill("invalid-skill")
36
37 assert invalid is not None
38 assert skills_cli.validate_skill(invalid) == ["Missing required field: description"]