playbook/tests/test_superpowers_list_sync.py

56 lines
2.1 KiB
Python

import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SKILLS_MD = ROOT / "SKILLS.md"
SOURCES_LIST = ROOT / "codex" / "skills" / ".sources" / "superpowers.list"
UI_UX_SKILL_DIR = ROOT / "codex" / "skills" / "ui-ux-pro-max"
UI_UX_SKILL_FILE = UI_UX_SKILL_DIR / "SKILL.md"
UI_UX_SOURCE_FILE = UI_UX_SKILL_DIR / "SOURCE.md"
SOURCE_REF = "来源:`codex/skills/.sources/superpowers.list`(第三方来源清单)。"
def read_sources_list() -> list[str]:
return [
line.strip()
for line in SOURCES_LIST.read_text(encoding="utf-8").splitlines()
if line.strip() and not line.strip().startswith("#")
]
def read_skills_md() -> str:
return SKILLS_MD.read_text(encoding="utf-8")
class SuperpowersListSyncTests(unittest.TestCase):
def test_superpowers_section_routes_to_source_list(self):
self.assertTrue(read_sources_list())
text = read_skills_md()
self.assertIn(SOURCE_REF, text)
self.assertEqual(text.count("Third-party Skills (superpowers)"), 1)
self.assertNotIn("<!-- superpowers:skills:start -->", text)
self.assertNotIn("<!-- superpowers:skills:end -->", text)
def test_superpowers_source_list_includes_ui_ux_pro_max(self):
self.assertIn("ui-ux-pro-max", read_sources_list())
def test_ui_ux_pro_max_skill_is_synced_as_self_contained_package(self):
self.assertTrue(UI_UX_SKILL_FILE.exists())
self.assertTrue((UI_UX_SKILL_DIR / "data").is_dir())
self.assertTrue((UI_UX_SKILL_DIR / "scripts" / "search.py").exists())
self.assertTrue(UI_UX_SOURCE_FILE.exists())
skill_text = UI_UX_SKILL_FILE.read_text(encoding="utf-8")
source_text = UI_UX_SOURCE_FILE.read_text(encoding="utf-8")
self.assertIn("name: ui-ux-pro-max", skill_text)
self.assertIn("python3 scripts/search.py", skill_text)
self.assertNotIn("python3 skills/ui-ux-pro-max/scripts/search.py", skill_text)
self.assertIn("https://github.com/nextlevelbuilder/ui-ux-pro-max-skill", source_text)
if __name__ == "__main__":
unittest.main()