Forge
csharpdeeb25a2
1using AgentClientProtocol;
2using CascadeIDE.Services.CursorAcp;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class CascadeAcpMcpServerCatalogTests
8{
9 [Fact]
10 public void FromExternalServersJson_AutonomousStdio_EnabledOnly()
11 {
12 const string json = """
13 [
14 {"name":"x","command":"cmd","enabled":false},
15 {"name":"git","command":"git-mcp","arguments":["--stdio"],"enabled":true}
16 ]
17 """;
18 var servers = CascadeAcpMcpServerCatalog.FromExternalServersJson(json);
19 Assert.Single(servers);
20 var s = Assert.IsType<StdioMcpServer>(servers[0]);
21 Assert.Equal("git", s.Name);
22 Assert.Equal("git-mcp", s.Command);
23 Assert.Equal(["--stdio"], s.Args);
24 Assert.Empty(s.Env);
25 }
26
27 [Fact]
28 public void FromExternalServersJson_NativeStdio_Deserializes()
29 {
30 const string json = """
31 [{"name":"n","type":"stdio","command":"c","args":[],"env":[]}]
32 """;
33 var servers = CascadeAcpMcpServerCatalog.FromExternalServersJson(json);
34 Assert.Single(servers);
35 Assert.IsType<StdioMcpServer>(servers[0]);
36 }
37
38 [Fact]
39 public void MergeForAcpNewSession_InjectOff_ReturnsUserOnly()
40 {
41 const string json = """
42 [{"name":"git","command":"x","enabled":true}]
43 """;
44 var merged = CascadeAcpMcpServerCatalog.MergeForAcpNewSession(json, acpAutoInjectIdeMcp: false);
45 Assert.Single(merged);
46 Assert.Equal("git", merged[0].Name);
47 }
48
49 [Fact]
50 public void MergeForAcpNewSession_InjectOn_PrependsIdeWhenNoNameConflict()
51 {
52 const string json = """
53 [{"name":"git","command":"x","enabled":true}]
54 """;
55 var merged = CascadeAcpMcpServerCatalog.MergeForAcpNewSession(json, acpAutoInjectIdeMcp: true);
56 Assert.Equal(2, merged.Length);
57 var ide = Assert.IsType<StdioMcpServer>(merged[0]);
58 Assert.Equal(CascadeAcpMcpServerCatalog.AutoInjectIdeMcpServerName, ide.Name);
59 Assert.False(string.IsNullOrEmpty(ide.Command));
60 Assert.Equal(["--mcp-stdio"], ide.Args);
61 Assert.Equal("git", merged[1].Name);
62 }
63
64 [Fact]
65 public void MergeForAcpNewSession_UserCascadeIdeWins_NoDuplicate()
66 {
67 const string json = """
68 [
69 {"name":"cascade-ide","command":"custom.exe","arguments":["--mcp-stdio"],"enabled":true}
70 ]
71 """;
72 var merged = CascadeAcpMcpServerCatalog.MergeForAcpNewSession(json, acpAutoInjectIdeMcp: true);
73 Assert.Single(merged);
74 var s = Assert.IsType<StdioMcpServer>(merged[0]);
75 Assert.Equal("cascade-ide", s.Name);
76 Assert.Equal("custom.exe", s.Command);
77 }
78}
79
View only · write via MCP/CIDE