| 1 | using CascadeIDE.Models; |
| 2 | using CascadeIDE.Services; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests; |
| 6 | |
| 7 | public 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 | |