Skip to content

Commit 945ed82

Browse files
Enhance Settings & Welcome Pages and MCP Installation Flow (AST-107883) (#310)
1 parent 88ec397 commit 945ed82

40 files changed

Lines changed: 3830 additions & 222 deletions
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
using ast_visual_studio_extension.CxPreferences;
2+
using System.Runtime.Serialization;
3+
using Xunit;
4+
5+
namespace ast_visual_studio_extension_tests.cx_unit_tests.cx_extension_test
6+
{
7+
public class CxOneAssistSettingsModuleTests
8+
{
9+
/// <summary>
10+
/// Creates a CxOneAssistSettingsModule without invoking the DialogPage
11+
/// base constructor, which requires a running VS Shell environment.
12+
/// Field-initializer defaults are applied manually.
13+
/// </summary>
14+
private static CxOneAssistSettingsModule CreateModule()
15+
{
16+
var module = (CxOneAssistSettingsModule)FormatterServices
17+
.GetUninitializedObject(typeof(CxOneAssistSettingsModule));
18+
module.AscaCheckBox = true;
19+
module.OssRealtimeCheckBox = true;
20+
module.SecretDetectionRealtimeCheckBox = true;
21+
module.ContainersRealtimeCheckBox = true;
22+
module.IacRealtimeCheckBox = true;
23+
module.ContainersTool = "docker";
24+
module.UserPrefAscaRealtime = true;
25+
module.UserPrefOssRealtime = true;
26+
module.UserPrefSecretDetectionRealtime = true;
27+
module.UserPrefContainersRealtime = true;
28+
module.UserPrefIacRealtime = true;
29+
return module;
30+
}
31+
32+
[Fact]
33+
public void EnableAllRealtimeScanners_ShouldEnableAll()
34+
{
35+
var module = CreateModule();
36+
module.EnableAllRealtimeScanners();
37+
Assert.True(module.AscaCheckBox);
38+
Assert.True(module.OssRealtimeCheckBox);
39+
Assert.True(module.SecretDetectionRealtimeCheckBox);
40+
Assert.True(module.ContainersRealtimeCheckBox);
41+
Assert.True(module.IacRealtimeCheckBox);
42+
}
43+
44+
[Fact]
45+
public void DisableAllRealtimeScanners_ShouldDisableAll()
46+
{
47+
var module = CreateModule();
48+
module.DisableAllRealtimeScanners();
49+
Assert.False(module.AscaCheckBox);
50+
Assert.False(module.OssRealtimeCheckBox);
51+
Assert.False(module.SecretDetectionRealtimeCheckBox);
52+
Assert.False(module.ContainersRealtimeCheckBox);
53+
Assert.False(module.IacRealtimeCheckBox);
54+
}
55+
56+
[Fact]
57+
public void SaveAndApplyUserPreferences_ShouldRestoreSettings()
58+
{
59+
var module = CreateModule();
60+
module.AscaCheckBox = false;
61+
module.OssRealtimeCheckBox = true;
62+
module.SecretDetectionRealtimeCheckBox = false;
63+
module.ContainersRealtimeCheckBox = true;
64+
module.IacRealtimeCheckBox = false;
65+
module.SaveCurrentSettingsAsUserPreferences();
66+
67+
// Change values
68+
module.EnableAllRealtimeScanners();
69+
module.ApplyUserPreferencesToRealtimeSettings();
70+
71+
Assert.False(module.AscaCheckBox);
72+
Assert.True(module.OssRealtimeCheckBox);
73+
Assert.False(module.SecretDetectionRealtimeCheckBox);
74+
Assert.True(module.ContainersRealtimeCheckBox);
75+
Assert.False(module.IacRealtimeCheckBox);
76+
}
77+
78+
[Fact]
79+
public void AutoEnableRealtimeScanners_ShouldRespectUserPreferences()
80+
{
81+
var module = CreateModule();
82+
module.AscaCheckBox = false;
83+
module.OssRealtimeCheckBox = false;
84+
module.SecretDetectionRealtimeCheckBox = false;
85+
module.ContainersRealtimeCheckBox = false;
86+
module.IacRealtimeCheckBox = false;
87+
module.SaveCurrentSettingsAsUserPreferences();
88+
89+
// Should restore user preferences
90+
module.AutoEnableRealtimeScanners();
91+
Assert.False(module.AscaCheckBox);
92+
Assert.False(module.OssRealtimeCheckBox);
93+
Assert.False(module.SecretDetectionRealtimeCheckBox);
94+
Assert.False(module.ContainersRealtimeCheckBox);
95+
Assert.False(module.IacRealtimeCheckBox);
96+
}
97+
98+
[Fact]
99+
public void DisableRealtimeScannersPreservingPreferences_ShouldDisableAllAndPreserve()
100+
{
101+
var module = CreateModule();
102+
module.AscaCheckBox = true;
103+
module.OssRealtimeCheckBox = false;
104+
module.SecretDetectionRealtimeCheckBox = true;
105+
module.ContainersRealtimeCheckBox = false;
106+
module.IacRealtimeCheckBox = true;
107+
module.DisableRealtimeScannersPreservingPreferences();
108+
Assert.False(module.AscaCheckBox);
109+
Assert.False(module.OssRealtimeCheckBox);
110+
Assert.False(module.SecretDetectionRealtimeCheckBox);
111+
Assert.False(module.ContainersRealtimeCheckBox);
112+
Assert.False(module.IacRealtimeCheckBox);
113+
// Restore
114+
module.ApplyUserPreferencesToRealtimeSettings();
115+
Assert.True(module.AscaCheckBox);
116+
Assert.False(module.OssRealtimeCheckBox);
117+
Assert.True(module.SecretDetectionRealtimeCheckBox);
118+
Assert.False(module.ContainersRealtimeCheckBox);
119+
Assert.True(module.IacRealtimeCheckBox);
120+
}
121+
}
122+
}
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
using ast_visual_studio_extension.CxPreferences;
2+
using System.Runtime.Serialization;
3+
using Xunit;
4+
5+
namespace ast_visual_studio_extension_tests.cx_unit_tests.cx_extension_test
6+
{
7+
public class CxPreferencesModuleTests
8+
{
9+
/// <summary>
10+
/// Creates a CxPreferencesModule without invoking the DialogPage
11+
/// base constructor, which requires a running VS Shell environment.
12+
/// All CxPreferencesModule properties default to CLR defaults (null/false),
13+
/// which matches the field-initializer defaults in the production class.
14+
/// </summary>
15+
private static CxPreferencesModule CreateModule()
16+
{
17+
return (CxPreferencesModule)FormatterServices
18+
.GetUninitializedObject(typeof(CxPreferencesModule));
19+
}
20+
21+
[Fact]
22+
public void RestoreAuthenticatedSession_DefaultsToFalse()
23+
{
24+
var module = CreateModule();
25+
Assert.False(module.RestoreAuthenticatedSession);
26+
}
27+
28+
[Fact]
29+
public void RestoreAuthenticatedSession_CanBeSetAndPersisted()
30+
{
31+
var module = CreateModule();
32+
module.RestoreAuthenticatedSession = true;
33+
Assert.True(module.RestoreAuthenticatedSession);
34+
}
35+
36+
[Fact]
37+
public void ApiKey_DefaultsToNull()
38+
{
39+
var module = CreateModule();
40+
Assert.Null(module.ApiKey);
41+
}
42+
43+
[Fact]
44+
public void ApiKey_CanBeSet()
45+
{
46+
var module = CreateModule();
47+
string testKey = "test-api-key-12345";
48+
module.ApiKey = testKey;
49+
Assert.Equal(testKey, module.ApiKey);
50+
}
51+
52+
[Fact]
53+
public void AdditionalParameters_DefaultsToNull()
54+
{
55+
var module = CreateModule();
56+
Assert.Null(module.AdditionalParameters);
57+
}
58+
59+
[Fact]
60+
public void AdditionalParameters_CanBeSet()
61+
{
62+
var module = CreateModule();
63+
string testParams = "--param1 value1 --param2 value2";
64+
module.AdditionalParameters = testParams;
65+
Assert.Equal(testParams, module.AdditionalParameters);
66+
}
67+
68+
[Fact]
69+
public void GetCxConfig_ReturnsConfigWithApiKeyAndParameters()
70+
{
71+
var module = CreateModule();
72+
string testKey = "test-key";
73+
string testParams = "--test";
74+
module.ApiKey = testKey;
75+
module.AdditionalParameters = testParams;
76+
77+
var config = module.GetCxConfig();
78+
79+
Assert.NotNull(config);
80+
Assert.Equal(testKey, config.ApiKey);
81+
Assert.Equal(testParams, config.AdditionalParameters);
82+
}
83+
84+
[Fact]
85+
public void GetCxConfig_WithNullValues_ReturnsConfigWithNullValues()
86+
{
87+
var module = CreateModule();
88+
module.ApiKey = null;
89+
module.AdditionalParameters = null;
90+
91+
var config = module.GetCxConfig();
92+
93+
Assert.NotNull(config);
94+
Assert.Null(config.ApiKey);
95+
Assert.Null(config.AdditionalParameters);
96+
}
97+
98+
[Fact]
99+
public void GetCxConfig_WithEmptyStrings_ReturnsConfigWithEmptyStrings()
100+
{
101+
var module = CreateModule();
102+
module.ApiKey = "";
103+
module.AdditionalParameters = "";
104+
105+
var config = module.GetCxConfig();
106+
107+
Assert.NotNull(config);
108+
Assert.Equal("", config.ApiKey);
109+
Assert.Equal("", config.AdditionalParameters);
110+
}
111+
112+
[Theory]
113+
[InlineData("abc123")]
114+
[InlineData("very-long-api-key-with-special-chars!@#$%")]
115+
[InlineData("")]
116+
[InlineData(null)]
117+
public void ApiKey_SupportsDifferentFormats(string apiKey)
118+
{
119+
var module = CreateModule();
120+
module.ApiKey = apiKey;
121+
Assert.Equal(apiKey, module.ApiKey);
122+
}
123+
124+
[Theory]
125+
[InlineData("--scan-type sast")]
126+
[InlineData("")]
127+
[InlineData(null)]
128+
public void AdditionalParameters_SupportsDifferentFormats(string parameters)
129+
{
130+
var module = CreateModule();
131+
module.AdditionalParameters = parameters;
132+
Assert.Equal(parameters, module.AdditionalParameters);
133+
}
134+
135+
[Fact]
136+
public void MultiplePropertyChanges_ArePersisted()
137+
{
138+
var module = CreateModule();
139+
140+
module.ApiKey = "key1";
141+
module.AdditionalParameters = "params1";
142+
module.RestoreAuthenticatedSession = true;
143+
144+
Assert.Equal("key1", module.ApiKey);
145+
Assert.Equal("params1", module.AdditionalParameters);
146+
Assert.True(module.RestoreAuthenticatedSession);
147+
148+
// Change values
149+
module.ApiKey = "key2";
150+
module.AdditionalParameters = "params2";
151+
module.RestoreAuthenticatedSession = false;
152+
153+
Assert.Equal("key2", module.ApiKey);
154+
Assert.Equal("params2", module.AdditionalParameters);
155+
Assert.False(module.RestoreAuthenticatedSession);
156+
}
157+
}
158+
}

0 commit comments

Comments
 (0)