Forge
csharp54977619
1using McpToolManifest;
2using Xunit;
3
4namespace McpToolManifest.Tests;
5
6public sealed class McpToolManifestReaderTests
7{
8 [Fact]
9 public void Load_and_Validate_sample_manifest()
10 {
11 var path = Path.Combine(AppContext.BaseDirectory, "TestData", "sample.manifest.json");
12 var doc = McpToolManifestReader.Load(path);
13 var errors = McpToolManifestReader.Validate(doc);
14 Assert.Empty(errors);
15 Assert.Equal("sample-mcp", doc.McpId);
16 Assert.Equal(2, doc.Tools.Count);
17 }
18
19 [Fact]
20 public void Validate_rejects_duplicate_tool_names()
21 {
22 var doc = new McpToolManifestDocument
23 {
24 SchemaVersion = 1,
25 McpId = "x",
26 Tools =
27 [
28 new McpToolManifestTool { Name = "a" },
29 new McpToolManifestTool { Name = "a" }
30 ]
31 };
32 var errors = McpToolManifestReader.Validate(doc);
33 Assert.Contains(errors, e => e.Contains("duplicate", StringComparison.OrdinalIgnoreCase));
34 }
35
36 [Fact]
37 public void Compare_reports_catalog_manifest_mismatch()
38 {
39 var diff = ToolCatalogNameComparer.Compare(["a", "b"], ["a", "c"]);
40 Assert.Equal(2, diff.Count);
41 Assert.Contains(diff, s => s.Contains("not in catalog: b"));
42 Assert.Contains(diff, s => s.Contains("not in manifest: c"));
43 }
44}
45
View only · write via MCP/CIDE