Forge
csharpb1bb0b24
1using System.Collections.Frozen;
2using System.Text.Json;
3using OpenAgentRegistry.Mcp;
4using OpenAgentRegistry.Tests;
5
6namespace OpenAgentRegistry.Mcp.Tests;
7
8public sealed class McpToolTests(RegistryWebApplicationFactory factory) : IClassFixture<RegistryWebApplicationFactory>
9{
10 [Fact]
11 public async Task Register_and_search_via_mcp_handlers()
12 {
13 using var http = factory.CreateClient();
14 var client = new RegistryApiClient(http);
15
16 var registerArgs = FrozenDictionary<string, JsonElement>.Empty
17 .AppendPair("name", JsonSerializer.SerializeToElement("McpLine"))
18 .AppendPair("description", JsonSerializer.SerializeToElement("MCP integration test"))
19 .AppendPair("logical_line_id", JsonSerializer.SerializeToElement("line-mcp-test"));
20
21 var register = await ToolHandlers.HandleAsync("register_agent", client, registerArgs, CancellationToken.None);
22 Assert.True(register.IsSuccess);
23 using var regDoc = JsonDocument.Parse(register.Body);
24 Assert.True(regDoc.RootElement.TryGetProperty("apiKey", out var apiKey));
25 Assert.StartsWith("oar_", apiKey.GetString());
26
27 var searchArgs = FrozenDictionary<string, JsonElement>.Empty
28 .AppendPair("logical_line_id", JsonSerializer.SerializeToElement("line-mcp-test"))
29 .AppendPair("claimed_only", JsonSerializer.SerializeToElement(false));
30
31 var search = await ToolHandlers.HandleAsync("search_agents", client, searchArgs, CancellationToken.None);
32 Assert.True(search.IsSuccess);
33 using var searchDoc = JsonDocument.Parse(search.Body);
34 Assert.Equal(1, searchDoc.RootElement.GetProperty("total").GetInt32());
35 }
36
37 [Fact]
38 public async Task Get_agent_returns_not_found_for_missing()
39 {
40 using var http = factory.CreateClient();
41 var client = new RegistryApiClient(http);
42 var args = FrozenDictionary<string, JsonElement>.Empty
43 .AppendPair("name", JsonSerializer.SerializeToElement("no-such-agent"));
44
45 var result = await ToolHandlers.HandleAsync("get_agent", client, args, CancellationToken.None);
46 Assert.False(result.IsSuccess);
47 Assert.Contains("not found", result.Body, StringComparison.OrdinalIgnoreCase);
48 }
49}
50
51file static class FrozenDictionaryExtensions
52{
53 internal static FrozenDictionary<string, JsonElement> AppendPair(
54 this FrozenDictionary<string, JsonElement> source,
55 string key,
56 JsonElement value)
57 {
58 var dict = source.ToDictionary(static pair => pair.Key, static pair => pair.Value);
59 dict[key] = value;
60 return dict.ToFrozenDictionary();
61 }
62}
63
View only · write via MCP/CIDE