feat(plugin): скелет плагина kompas и тест согласованности манифеста
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "kompas",
|
||||
"displayName": "КОМПАС-3D",
|
||||
"version": "0.0.0",
|
||||
"description": "Управление КОМПАС-3D из Claude Code: детали, сборки, чертежи, STEP — через MCP-сервер",
|
||||
"author": { "name": "Shahovalov Mikhail", "email": "miha.shahovalov@gmail.com" },
|
||||
"homepage": "https://git.shahovalov.ru/mikhail/kompas3d-mcp",
|
||||
"repository": "https://git.shahovalov.ru/mikhail/kompas3d-mcp",
|
||||
"keywords": ["cad", "kompas", "3d", "step", "mcp"]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": "0.0.0",
|
||||
"sourceSha": "",
|
||||
"url": "",
|
||||
"sha256": ""
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Kompas.Mcp.Tests;
|
||||
|
||||
/// <summary>Манифест плагина и пин версии сервера должны быть согласованы между собой.</summary>
|
||||
[Trait("Category", "Unit")]
|
||||
public sealed class PluginManifestTests
|
||||
{
|
||||
private static string PluginRoot => Path.Combine(TestPaths.RepoRoot(), "plugin");
|
||||
|
||||
private static JsonElement Read(params string[] relativeParts)
|
||||
{
|
||||
var path = Path.Combine(new[] { PluginRoot }.Concat(relativeParts).ToArray());
|
||||
Assert.True(File.Exists(path), $"нет файла {path}");
|
||||
return JsonDocument.Parse(File.ReadAllText(path)).RootElement.Clone();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Manifest_NameIsKompas()
|
||||
{
|
||||
var manifest = Read(".claude-plugin", "plugin.json");
|
||||
Assert.Equal("kompas", manifest.GetProperty("name").GetString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Manifest_VersionMatchesLock()
|
||||
{
|
||||
var manifest = Read(".claude-plugin", "plugin.json");
|
||||
var serverLock = Read("server.lock.json");
|
||||
Assert.Equal(manifest.GetProperty("version").GetString(),
|
||||
serverLock.GetProperty("version").GetString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Lock_WhenReleased_HasUrlAndSha256()
|
||||
{
|
||||
var serverLock = Read("server.lock.json");
|
||||
// 0.0.0 — состояние «релиз ещё не публиковался»; url/sha256 заполняет релизный workflow.
|
||||
if (serverLock.GetProperty("version").GetString() == "0.0.0")
|
||||
return;
|
||||
|
||||
Assert.False(string.IsNullOrWhiteSpace(serverLock.GetProperty("url").GetString()));
|
||||
Assert.Matches("^[0-9a-f]{64}$", serverLock.GetProperty("sha256").GetString() ?? "");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user