Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/PluginManifestTests.cs
T

46 lines
1.7 KiB
C#

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() ?? "");
}
}