Forge
csharpdeeb25a2
1using System.Text.Json;
2using CascadeIDE.Models;
3using CascadeIDE.Services;
4using Xunit;
5
6namespace CascadeIDE.Tests;
7
8public sealed class CodeNavigationPresetsLoaderTests
9{
10 [Fact]
11 public void ToPresetMergeJsonFromBundledToml_Contains_Bundled_Preset_Ids()
12 {
13 var json = CodeNavigationPresetsLoader.ToPresetMergeJsonFromBundledToml(
14 CodeNavigationPresetsLoader.GetEmbeddedBundledPresetsToml());
15 Assert.Contains("peers_only", json);
16 Assert.Contains("no_namespace_noise", json);
17 }
18
19 [Fact]
20 public void MergeBundledWithUser_Adds_New_Preset()
21 {
22 var bundled = new List<CodeNavigationPresetEntry>
23 {
24 new() { Id = "a", IncludeKinds = ["partial_peer"] }
25 };
26 var user = new List<CodeNavigationPresetEntry>
27 {
28 new() { Id = "b", ExcludeKinds = ["same_namespace"] }
29 };
30 var merged = CodeNavigationPresetsLoader.MergeBundledWithUser(bundled, user);
31 Assert.Equal(2, merged.Count);
32 Assert.Contains(merged, x => x.Id == "a");
33 Assert.Contains(merged, x => x.Id == "b");
34 }
35
36 [Fact]
37 public void MergeBundledWithUser_User_Replaces_Same_Id()
38 {
39 var bundled = new List<CodeNavigationPresetEntry>
40 {
41 new() { Id = "peers_only", IncludeKinds = ["partial_peer"] }
42 };
43 var user = new List<CodeNavigationPresetEntry>
44 {
45 new() { Id = "peers_only", IncludeKinds = ["project_peer"] }
46 };
47 var merged = CodeNavigationPresetsLoader.MergeBundledWithUser(bundled, user);
48 Assert.Single(merged);
49 Assert.Equal("project_peer", Assert.Single(merged[0].IncludeKinds!));
50 }
51
52 [Fact]
53 public void GetEffectivePresetsJson_Repository_overrides_bundled_User_overrides_repository()
54 {
55 var tmp = Path.Combine(Path.GetTempPath(), "cascade_nav_repo_" + Guid.NewGuid());
56 Directory.CreateDirectory(Path.Combine(tmp, ".cascade"));
57 File.WriteAllText(
58 Path.Combine(tmp, ".cascade", "workspace.toml"),
59 """
60 [[code_navigation.presets]]
61 id = "peers_only"
62 include_kinds = ["same_namespace"]
63 """);
64
65 var jsonRepoOnly = CodeNavigationPresetsLoader.GetEffectivePresetsJson(new CodeNavigationSettings(), tmp);
66 using (var doc = JsonDocument.Parse(jsonRepoOnly))
67 {
68 var inc = doc.RootElement.GetProperty("peers_only").GetProperty("include_kinds").EnumerateArray().Select(x => x.GetString()).ToArray();
69 Assert.Contains("same_namespace", inc);
70 }
71
72 var user = new CodeNavigationSettings
73 {
74 Presets =
75 [
76 new CodeNavigationPresetEntry { Id = "peers_only", IncludeKinds = ["project_peer"] }
77 ]
78 };
79 var jsonUserWins = CodeNavigationPresetsLoader.GetEffectivePresetsJson(user, tmp);
80 using (var doc = JsonDocument.Parse(jsonUserWins))
81 {
82 var inc = doc.RootElement.GetProperty("peers_only").GetProperty("include_kinds").EnumerateArray().Select(x => x.GetString()).ToArray();
83 Assert.Single(inc);
84 Assert.Equal("project_peer", inc[0]);
85 }
86 }
87}
88
View only · write via MCP/CIDE