"""Tests for agent frontmatter schema validation (WP-0007 T03).""" from __future__ import annotations from pathlib import Path from kaizen_agentic.registry import AgentRegistry REPO_AGENTS = Path(__file__).parent.parent / "agents" def _registry(tmp_path: Path, files: dict) -> AgentRegistry: agents = tmp_path / "agents" agents.mkdir(parents=True) for filename, content in files.items(): (agents / filename).write_text(content) return AgentRegistry(agents) class TestFrontmatterSchema: def test_repo_agents_are_schema_valid(self): # The shipped agents/ must always pass the schema. assert AgentRegistry(REPO_AGENTS).validate_frontmatter_schema() == {} def test_good_agent_passes(self, tmp_path: Path): reg = _registry( tmp_path, { "agent-good.md": ( "---\nname: good\ndescription: A fine agent\n" "category: testing\nmemory: enabled\n---\nbody\n" ) }, ) assert reg.validate_frontmatter_schema() == {} def test_missing_required_fields(self, tmp_path: Path): reg = _registry( tmp_path, {"agent-x.md": "---\nname: x\ncategory: testing\n---\nbody\n"}, ) errors = reg.validate_frontmatter_schema()["agent-x.md"] assert any("description" in e for e in errors) def test_invalid_category(self, tmp_path: Path): reg = _registry( tmp_path, { "agent-x.md": ( "---\nname: x\ndescription: d\ncategory: nonsense\n---\nb\n" ) }, ) errors = reg.validate_frontmatter_schema()["agent-x.md"] assert any("invalid category" in e for e in errors) def test_invalid_memory(self, tmp_path: Path): reg = _registry( tmp_path, { "agent-x.md": ( "---\nname: x\ndescription: d\ncategory: testing\n" "memory: maybe\n---\nb\n" ) }, ) errors = reg.validate_frontmatter_schema()["agent-x.md"] assert any("invalid memory" in e for e in errors) def test_missing_frontmatter(self, tmp_path: Path): reg = _registry(tmp_path, {"agent-x.md": "just text, no frontmatter\n"}) assert reg.validate_frontmatter_schema()["agent-x.md"] == [ "missing YAML frontmatter" ]