| 1 | using CascadeIDE.Models; |
| 2 | using CascadeIDE.Services; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests; |
| 6 | |
| 7 | public sealed class SettingsDefaultsLoaderTests |
| 8 | { |
| 9 | [Fact] |
| 10 | public void GetEmbeddedDefaultsToml_ContainsFontsIntercom() |
| 11 | { |
| 12 | var text = SettingsDefaultsLoader.GetEmbeddedDefaultsToml(); |
| 13 | Assert.Contains("[fonts.intercom]", text, StringComparison.Ordinal); |
| 14 | Assert.Contains("prose_pt = 14", text, StringComparison.Ordinal); |
| 15 | Assert.Contains("prose_pt_forward = 14", text, StringComparison.Ordinal); |
| 16 | Assert.Contains("[intercom]", text, StringComparison.Ordinal); |
| 17 | Assert.Contains("feed_metrics = \"comfortable\"", text, StringComparison.Ordinal); |
| 18 | } |
| 19 | |
| 20 | [Fact] |
| 21 | public void DeserializeEffective_WithoutUserToml_UsesEmbeddedProsePt() |
| 22 | { |
| 23 | var s = SettingsDefaultsLoader.CreateDefault(); |
| 24 | Assert.Equal(14, s.Fonts.Intercom.ProsePt); |
| 25 | Assert.Equal(14, s.Fonts.Intercom.ProsePtForward); |
| 26 | Assert.Equal(16, s.Fonts.Intercom.ComposerPt); |
| 27 | Assert.Equal(14, s.Fonts.Editor.SizePt); |
| 28 | Assert.Equal(14f, s.Fonts.Intercom.ResolveProsePt(forwardHost: false)); |
| 29 | Assert.Equal(14f, s.Fonts.Intercom.ResolveProsePt(forwardHost: true)); |
| 30 | Assert.Equal(16f, s.Fonts.Intercom.ResolveComposerPt(forwardHost: false)); |
| 31 | } |
| 32 | |
| 33 | [Fact] |
| 34 | public void CreateDefault_MatchesFactoryAiAndWorkspace() |
| 35 | { |
| 36 | var s = SettingsDefaultsLoader.CreateDefault(); |
| 37 | Assert.Equal("local", s.Ai.Mode); |
| 38 | Assert.Equal("Flight", s.Workspace.Mode); |
| 39 | Assert.Equal("intercom", s.Workspace.PrimaryWorkSurface); |
| 40 | Assert.True(s.HybridIndex.Enabled); |
| 41 | Assert.Equal("rg", s.CommandPalette.GoToSearch.Backend); |
| 42 | Assert.True(s.Intercom.UseComfortableFeedMetrics()); |
| 43 | Assert.Equal(IntercomFeedMetricsModes.Comfortable, s.Intercom.FeedMetrics); |
| 44 | } |
| 45 | |
| 46 | [Fact] |
| 47 | public void DeserializeEffective_UserOverridesOnlyProsePt_KeepsForwardFromDefaults() |
| 48 | { |
| 49 | const string user = |
| 50 | """ |
| 51 | [fonts.intercom] |
| 52 | prose_pt = 18 |
| 53 | """; |
| 54 | |
| 55 | var s = SettingsDefaultsLoader.DeserializeEffective(user); |
| 56 | Assert.Equal(18, s.Fonts.Intercom.ProsePt); |
| 57 | Assert.Equal(14, s.Fonts.Intercom.ProsePtForward); |
| 58 | Assert.Equal("Segoe UI", s.Fonts.Intercom.ProseFamily); |
| 59 | } |
| 60 | |
| 61 | [Fact] |
| 62 | public void DeserializeEffective_UserAiSection_DoesNotClearEmbeddedFonts() |
| 63 | { |
| 64 | const string user = |
| 65 | """ |
| 66 | [ai] |
| 67 | mode = "mcp_only" |
| 68 | """; |
| 69 | |
| 70 | var s = SettingsDefaultsLoader.DeserializeEffective(user); |
| 71 | Assert.Equal("mcp_only", s.Ai.Mode); |
| 72 | Assert.Equal(14, s.Fonts.Intercom.ProsePt); |
| 73 | } |
| 74 | } |
| 75 | |