| 1 | using McpToolManifest; |
| 2 | |
| 3 | namespace AIGuiders.SampleMcp.Tests; |
| 4 | |
| 5 | public sealed class McpToolManifestTests |
| 6 | { |
| 7 | [Fact] |
| 8 | public void Mcp_tools_manifest_matches_ToolCatalog_names_and_descriptions() |
| 9 | { |
| 10 | var manifestPath = Path.Combine(AppContext.BaseDirectory, "mcp-tools.manifest.json"); |
| 11 | Assert.True(File.Exists(manifestPath), $"Missing copied manifest: {manifestPath}"); |
| 12 | |
| 13 | var doc = McpToolManifestReader.Load(manifestPath); |
| 14 | var validation = McpToolManifestReader.Validate(doc); |
| 15 | Assert.True(validation.Count == 0, string.Join(Environment.NewLine, validation)); |
| 16 | |
| 17 | Assert.Equal("sample-mcp", doc.McpId); |
| 18 | |
| 19 | var catalog = ToolCatalog.Build() |
| 20 | .ToDictionary(t => t.Name!, t => t.Description, StringComparer.Ordinal); |
| 21 | |
| 22 | var nameDiff = ToolCatalogNameComparer.Compare(doc.Tools.Select(t => t.Name), catalog.Keys); |
| 23 | Assert.True(nameDiff.Count == 0, string.Join(Environment.NewLine, nameDiff)); |
| 24 | |
| 25 | var manifestByName = doc.Tools.ToDictionary(t => t.Name, t => t.Description, StringComparer.Ordinal); |
| 26 | Assert.Equal(catalog.Count, manifestByName.Count); |
| 27 | foreach (var (name, expectedDesc) in catalog) |
| 28 | Assert.Equal(expectedDesc, manifestByName[name]); |
| 29 | } |
| 30 | } |
| 31 | |
| 32 | |