Files
aiturk-hermes-ide/tests/skills/test_setup_wizard_generator_skill.py

88 lines
2.5 KiB
Python

"""Tests for optional-skills/devops/setup-wizard-generator (template integrity)."""
import re
import subprocess
from pathlib import Path
import pytest
import yaml
SKILL_DIR = (
Path(__file__).resolve().parents[2]
/ "optional-skills"
/ "devops"
/ "setup-wizard-generator"
)
SKILL_MD = SKILL_DIR / "SKILL.md"
TEMPLATE = SKILL_DIR / "templates" / "template.sh"
class TestFrontmatter:
def _fm(self):
text = SKILL_MD.read_text(encoding="utf-8")
m = re.match(r"^---\n(.*?)\n---\n", text, re.DOTALL)
assert m, "SKILL.md missing YAML frontmatter"
return yaml.safe_load(m.group(1))
def test_name_matches_directory(self):
assert self._fm()["name"] == "setup-wizard-generator"
def test_description_length(self):
assert len(self._fm()["description"]) <= 60
def test_license_and_platforms(self):
fm = self._fm()
assert fm["license"] == "MIT"
assert "linux" in fm["platforms"]
class TestTemplate:
def test_template_exists(self):
assert TEMPLATE.is_file()
def test_bash_syntax(self):
proc = subprocess.run(
["bash", "-n", str(TEMPLATE)], capture_output=True, text=True
)
assert proc.returncode == 0, proc.stderr
def test_stages_marker_present(self):
text = TEMPLATE.read_text(encoding="utf-8")
assert "STAGES" in text, "authoring marker missing"
def test_library_helpers_defined(self):
text = TEMPLATE.read_text(encoding="utf-8")
for helper in (
"stage()",
"say()",
"step()",
"open_url()",
"write_env()",
"set_secret()",
"finish()",
):
assert helper in text, f"missing library helper {helper}"
def test_ask_secret_defined(self):
# secret entry must exist (hidden input path)
assert "ask_secret" in TEMPLATE.read_text(encoding="utf-8")
def test_total_stages_variable(self):
assert re.search(
r"^TOTAL_STAGES=", TEMPLATE.read_text(encoding="utf-8"), re.MULTILINE
)
class TestSkillBody:
def test_references_template_path(self):
assert "templates/template.sh" in SKILL_MD.read_text(encoding="utf-8")
def test_no_upstream_harness_residue(self):
text = SKILL_MD.read_text(encoding="utf-8").lower()
for token in ("claude", "/wizard", "slash command"):
assert token not in text, f"upstream residue: {token}"
if __name__ == "__main__":
raise SystemExit(pytest.main([__file__, "-q"]))