diff options
Diffstat (limited to 'tests/Agent.Core.Tests/ConfigurationTests.cs')
| -rw-r--r-- | tests/Agent.Core.Tests/ConfigurationTests.cs | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/tests/Agent.Core.Tests/ConfigurationTests.cs b/tests/Agent.Core.Tests/ConfigurationTests.cs index 2c52b0c..79c746d 100644 --- a/tests/Agent.Core.Tests/ConfigurationTests.cs +++ b/tests/Agent.Core.Tests/ConfigurationTests.cs @@ -1,5 +1,6 @@ using Agent.App.Cli; using Agent.App.Configuration; +using Agent.Core.Skills; namespace Agent.Core.Tests; @@ -43,16 +44,52 @@ public sealed class ConfigurationTests } [Fact] - public void SkillLoader_supports_legacy_markdown_and_standard_skill_directories() + public void SkillLoader_loads_standard_skill_directories_only() { using var directory = new TestDirectory(); + // Legacy single markdown — should be ignored (not loaded). directory.File("skills/legacy.md", "legacy skill"); - directory.File("skills/python-via-uv/SKILL.md", "standard skill"); + // Standard skill directory with frontmatter. + directory.File("skills/python-via-uv/SKILL.md", "---\nname: python-via-uv\ndescription: Python execution skill.\n---\n# Python via uv\nInstructions here."); + // Non-SKILL.md files in skill directory should not be loaded as skills. directory.File("skills/python-via-uv/reference.md", "must not be loaded as a skill"); - string[] skills = SkillLoader.Load(Path.Combine(directory.Path, "skills")); + var skills = SkillLoader.Load(Path.Combine(directory.Path, "skills")); - Assert.Equal(["legacy skill", "standard skill"], skills); + Assert.Single(skills); + Assert.Equal("python-via-uv", skills[0].Name); + Assert.Equal("Python execution skill.", skills[0].Description); + Assert.Contains("Instructions here.", skills[0].Instructions); + } + + [Fact] + public void SkillLoader_rejects_missing_frontmatter() + { + using var directory = new TestDirectory(); + directory.File("skills/no-frontmatter/SKILL.md", "# No frontmatter\nJust body."); + + Assert.Throws<SkillLoadException>(() => SkillLoader.Load(Path.Combine(directory.Path, "skills"))); + } + + [Fact] + public void SkillLoader_rejects_name_mismatch() + { + using var directory = new TestDirectory(); + directory.File("skills/wrong-name/SKILL.md", "---\nname: different-name\ndescription: A skill.\n---\nBody."); + + Assert.Throws<SkillLoadException>(() => SkillLoader.Load(Path.Combine(directory.Path, "skills"))); + } + + [Fact] + public void SkillLoader_rejects_duplicate_names() + { + using var directory = new TestDirectory(); + directory.File("skills/dup-skill/SKILL.md", "---\nname: dup-skill\ndescription: First.\n---\nBody1."); + // Create a second directory with the same skill name (via symlink or junction is not needed; + // just create another dir that also has name: dup-skill in frontmatter). + directory.File("skills/dup-skill-copy/SKILL.md", "---\nname: dup-skill\ndescription: Second.\n---\nBody2."); + + Assert.Throws<SkillLoadException>(() => SkillLoader.Load(Path.Combine(directory.Path, "skills"))); } private static string CreateValidConfiguration(TestDirectory directory) |
