Files
CraftKit/migration/tests/test_frontend_helpers.py
T

52 lines
1.9 KiB
Python

"""前端辅助 Skill 的结构与行为边界测试。"""
from pathlib import Path
import unittest
ROOT = Path(__file__).resolve().parents[2]
DEV_SKILLS = ROOT / "plugins" / "dev" / "skills"
def read_skill(name: str) -> str:
"""读取指定 Skill 的入口及引用文档。"""
folder = DEV_SKILLS / name
files = [folder / "SKILL.md", *sorted((folder / "references").glob("*.md"))]
return "\n".join(path.read_text(encoding="utf-8") for path in files)
class FrontendHelpersTest(unittest.TestCase):
"""验证三个 Skill 能互补协作且不恢复来源专有规则。"""
def test_component_requires_project_evidence(self) -> None:
content = read_skill("component")
self.assertIn(".craftkit/project.json", content)
self.assertIn(".craftkit/standards/frontend/components.md", content)
self.assertIn("不编造结论", content)
self.assertIn("官方文档", content)
self.assertIn("不复制依赖库文档", content)
def test_style_uses_existing_visual_authority(self) -> None:
content = read_skill("style")
self.assertIn("设计令牌", content)
self.assertIn("经用户确认后再修改", content)
self.assertIn("不内置固定矩阵", content)
def test_form_does_not_invent_business_rules(self) -> None:
content = read_skill("form")
self.assertIn("不自行确定字段必填", content)
self.assertIn("不设计接口", content)
self.assertIn("component", content)
def test_precise_skills_replace_router(self) -> None:
self.assertFalse((DEV_SKILLS / "guide").exists())
descriptions = {
name: (DEV_SKILLS / name / "SKILL.md").read_text(encoding="utf-8").split("---", 2)[1]
for name in ("component", "style", "form")
}
self.assertEqual(3, len(set(descriptions.values())))
if __name__ == "__main__":
unittest.main()