51 lines
1.9 KiB
C#
51 lines
1.9 KiB
C#
namespace Kompas.Mcp.Tests;
|
|
|
|
/// <summary>Публикуемые навыки должны быть самодостаточны: без ссылок на внутренности репозитория.</summary>
|
|
[Trait("Category", "Unit")]
|
|
public sealed class PluginSkillsTests
|
|
{
|
|
private static string SkillsRoot => Path.Combine(TestPaths.RepoRoot(), "plugin", "skills");
|
|
|
|
public static TheoryData<string> SkillFiles()
|
|
{
|
|
var data = new TheoryData<string>();
|
|
foreach (var file in Directory.GetFiles(SkillsRoot, "*.md", SearchOption.AllDirectories))
|
|
data.Add(file);
|
|
return data;
|
|
}
|
|
|
|
[Theory]
|
|
[MemberData(nameof(SkillFiles))]
|
|
public void Skill_has_no_repository_only_references(string file)
|
|
{
|
|
var text = File.ReadAllText(file);
|
|
string[] forbidden = ["usecases/", "src/Kompas", "kompas-sdk-research", "docs-maintainer", "docs/Kompas3D_SDK"];
|
|
|
|
foreach (var token in forbidden)
|
|
Assert.DoesNotContain(token, text, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Theory]
|
|
[MemberData(nameof(SkillFiles))]
|
|
public void Skill_has_no_stale_tool_count(string file)
|
|
{
|
|
var text = File.ReadAllText(file);
|
|
Assert.DoesNotContain("46 инструментов", text, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void Both_skills_are_present_with_frontmatter()
|
|
{
|
|
foreach (var name in new[] { "kompas-3d", "kompas-fdm-design" })
|
|
{
|
|
var path = Path.Combine(SkillsRoot, name, "SKILL.md");
|
|
Assert.True(File.Exists(path), $"нет навыка {path}");
|
|
|
|
var text = File.ReadAllText(path);
|
|
Assert.StartsWith("---", text, StringComparison.Ordinal);
|
|
Assert.Contains($"name: {name}", text, StringComparison.Ordinal);
|
|
Assert.Contains("description:", text, StringComparison.Ordinal);
|
|
}
|
|
}
|
|
}
|