Forge
csharpdeeb25a2
1using CascadeIDE.Models;
2using CascadeIDE.Services;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class McpExternalServersJsonResolverTests
8{
9 [Fact]
10 public void Resolve_uses_inline_when_path_empty()
11 {
12 var settings = new CascadeIdeSettings
13 {
14 Mcp = new McpSettings { ExternalServersJson = """[{"name":"a","command":"x","arguments":[],"enabled":true}]""" },
15 };
16 Assert.Equal(settings.Mcp.ExternalServersJson, McpExternalServersJsonResolver.ResolveEffectiveJson(settings));
17 }
18
19 [Fact]
20 public void Resolve_uses_file_when_exists()
21 {
22 var dir = Path.Combine(Path.GetTempPath(), "cascade-mcp-json-" + Guid.NewGuid().ToString("N"));
23 Directory.CreateDirectory(dir);
24 var file = Path.Combine(dir, "servers.json");
25 var payload = """[{"name":"fromfile","command":"cmd.exe","arguments":[],"enabled":true}]""";
26 File.WriteAllText(file, payload);
27 try
28 {
29 var settings = new CascadeIdeSettings
30 {
31 Mcp = new McpSettings { ExternalServersJson = "[]", ExternalServersJsonPath = file },
32 };
33 Assert.Equal(payload, McpExternalServersJsonResolver.ResolveEffectiveJson(settings));
34 }
35 finally
36 {
37 try { File.Delete(file); } catch { /* ignore */ }
38 try { Directory.Delete(dir); } catch { /* ignore */ }
39 }
40 }
41
42 [Fact]
43 public void Resolve_falls_back_to_inline_when_file_missing()
44 {
45 var settings = new CascadeIdeSettings
46 {
47 Mcp = new McpSettings
48 {
49 ExternalServersJson = """[{"name":"inline","command":"y","arguments":[],"enabled":true}]""",
50 ExternalServersJsonPath = Path.Combine(Path.GetTempPath(), "nonexistent-" + Guid.NewGuid().ToString("N") + ".json"),
51 },
52 };
53 Assert.Equal(settings.Mcp.ExternalServersJson, McpExternalServersJsonResolver.ResolveEffectiveJson(settings));
54 }
55}
56
View only · write via MCP/CIDE