mirror of
https://github.com/launchdarkly/ai-tooling.git
synced 2026-09-14 20:00:40 +08:00
117 lines
3.2 KiB
Python
117 lines
3.2 KiB
Python
import tempfile
|
|
import textwrap
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from scripts import validate_skills
|
|
|
|
|
|
class ValidateSkillsTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self._temp_dirs = []
|
|
|
|
def tearDown(self):
|
|
for temp_dir in self._temp_dirs:
|
|
temp_dir.cleanup()
|
|
|
|
def test_parse_frontmatter_missing_opening(self):
|
|
lines = ["name: test", "---", "content"]
|
|
parsed, err = validate_skills.parse_frontmatter(lines)
|
|
self.assertIsNone(parsed)
|
|
self.assertIn("opening frontmatter", err)
|
|
|
|
def test_parse_frontmatter_missing_closing(self):
|
|
lines = ["---", "name: test", "description: ok"]
|
|
parsed, err = validate_skills.parse_frontmatter(lines)
|
|
self.assertIsNone(parsed)
|
|
self.assertIn("closing frontmatter", err)
|
|
|
|
def test_validate_skill_requires_name_and_description(self):
|
|
content = textwrap.dedent(
|
|
"""\
|
|
---
|
|
name: test-skill
|
|
---
|
|
|
|
# Title
|
|
Body
|
|
"""
|
|
)
|
|
path = self._write_temp_skill(content)
|
|
errors = validate_skills.validate_skill(path)
|
|
self.assertIn("description", " ".join(errors))
|
|
|
|
def test_validate_skill_requires_body(self):
|
|
content = textwrap.dedent(
|
|
"""\
|
|
---
|
|
name: test-skill
|
|
description: ok
|
|
---
|
|
"""
|
|
)
|
|
path = self._write_temp_skill(content)
|
|
errors = validate_skills.validate_skill(path)
|
|
self.assertIn("markdown content", " ".join(errors))
|
|
|
|
def test_validate_skill_name_must_match_directory(self):
|
|
content = textwrap.dedent(
|
|
"""\
|
|
---
|
|
name: test-skill
|
|
description: ok
|
|
---
|
|
|
|
# Title
|
|
Body
|
|
"""
|
|
)
|
|
path = self._write_temp_skill(content, dir_name="other-skill")
|
|
errors = validate_skills.validate_skill(path)
|
|
self.assertIn("parent directory", " ".join(errors))
|
|
|
|
def test_validate_skill_name_constraints(self):
|
|
content = textwrap.dedent(
|
|
"""\
|
|
---
|
|
name: Test-Skill
|
|
description: ok
|
|
---
|
|
|
|
# Title
|
|
Body
|
|
"""
|
|
)
|
|
path = self._write_temp_skill(content, dir_name="Test-Skill")
|
|
errors = validate_skills.validate_skill(path)
|
|
self.assertIn("lowercase", " ".join(errors))
|
|
|
|
def test_validate_skill_happy_path(self):
|
|
content = textwrap.dedent(
|
|
"""\
|
|
---
|
|
name: test-skill
|
|
description: ok
|
|
---
|
|
|
|
# Title
|
|
Body
|
|
"""
|
|
)
|
|
path = self._write_temp_skill(content)
|
|
errors = validate_skills.validate_skill(path)
|
|
self.assertEqual(errors, [])
|
|
|
|
def _write_temp_skill(self, content: str, dir_name: str = "test-skill") -> Path:
|
|
temp_dir = tempfile.TemporaryDirectory()
|
|
self._temp_dirs.append(temp_dir)
|
|
skill_dir = Path(temp_dir.name) / dir_name
|
|
skill_dir.mkdir(parents=True, exist_ok=True)
|
|
path = skill_dir / "SKILL.md"
|
|
path.write_text(content, encoding="utf-8")
|
|
return path
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|