Skip to content

Commit ef6ab10

Browse files
committed
Add additional tests
1 parent 38dee63 commit ef6ab10

1 file changed

Lines changed: 265 additions & 0 deletions

File tree

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
using System.Reflection;
2+
using DSCParser.CSharp;
3+
using Xunit;
4+
5+
namespace DSCParser.Tests;
6+
7+
public class RemoveModuleVersionInfoTests
8+
{
9+
private static readonly MethodInfo _removeModuleVersionInfo =
10+
typeof(DscParser).GetMethod("RemoveModuleVersionInfo", BindingFlags.NonPublic | BindingFlags.Static)
11+
?? throw new InvalidOperationException("RemoveModuleVersionInfo method not found");
12+
13+
private static string InvokeRemoveModuleVersionInfo(string content, List<string>? uniqueModules = null)
14+
{
15+
return (string)_removeModuleVersionInfo.Invoke(null, [content, uniqueModules])!;
16+
}
17+
18+
#region Null / Empty Module List
19+
20+
[Fact]
21+
public void NullModuleList_ShouldReturnContentUnchanged()
22+
{
23+
string content = "Import-DscResource -ModuleName TestModule -ModuleVersion 1.0.0.0";
24+
25+
string result = InvokeRemoveModuleVersionInfo(content, null);
26+
27+
Assert.Equal(content, result);
28+
}
29+
30+
[Fact]
31+
public void EmptyModuleList_ShouldReturnContentUnchanged()
32+
{
33+
string content = "Import-DscResource -ModuleName TestModule -ModuleVersion 1.0.0.0";
34+
35+
string result = InvokeRemoveModuleVersionInfo(content, []);
36+
37+
Assert.Equal(content, result);
38+
}
39+
40+
#endregion
41+
42+
#region Basic Removal
43+
44+
[Fact]
45+
public void ModuleVersionAfterModuleName_ShouldRemoveVersionParameter()
46+
{
47+
string content = "Import-DscResource -ModuleName TestModule -ModuleVersion 1.0.0.0";
48+
49+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
50+
51+
Assert.Equal("Import-DscResource -ModuleName TestModule", result);
52+
}
53+
54+
[Fact]
55+
public void ModuleVersionBeforeModuleName_ShouldRemoveVersionParameter()
56+
{
57+
string content = "Import-DscResource -ModuleVersion 1.0.0.0 -ModuleName TestModule";
58+
59+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
60+
61+
Assert.Equal("Import-DscResource -ModuleName TestModule", result);
62+
}
63+
64+
[Fact]
65+
public void QuotedVersion_ShouldRemoveVersionParameter()
66+
{
67+
string content = "Import-DscResource -ModuleName TestModule -ModuleVersion \"1.0.0.0\"";
68+
69+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
70+
71+
Assert.Equal("Import-DscResource -ModuleName TestModule", result);
72+
}
73+
74+
[Fact]
75+
public void SingleQuotedVersion_ShouldRemoveVersionParameter()
76+
{
77+
string content = "Import-DscResource -ModuleName TestModule -ModuleVersion '1.0.0.0'";
78+
79+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
80+
81+
Assert.Equal("Import-DscResource -ModuleName TestModule", result);
82+
}
83+
84+
#endregion
85+
86+
#region Case Insensitivity
87+
88+
[Fact]
89+
public void CaseInsensitiveImportDscResource_ShouldRemoveVersionParameter()
90+
{
91+
string content = "IMPORT-DSCRESOURCE -ModuleName TestModule -ModuleVersion 1.0.0.0";
92+
93+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
94+
95+
Assert.Equal("IMPORT-DSCRESOURCE -ModuleName TestModule", result);
96+
}
97+
98+
[Fact]
99+
public void CaseInsensitiveModuleVersion_ShouldRemoveVersionParameter()
100+
{
101+
string content = "Import-DscResource -ModuleName TestModule -MODULEVERSION 1.0.0.0";
102+
103+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
104+
105+
Assert.Equal("Import-DscResource -ModuleName TestModule", result);
106+
}
107+
108+
[Fact]
109+
public void CaseInsensitiveModuleName_ShouldMatchAndRemoveVersion()
110+
{
111+
string content = "Import-DscResource -ModuleName testmodule -ModuleVersion 1.0.0.0";
112+
113+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
114+
115+
Assert.Equal("Import-DscResource -ModuleName testmodule", result);
116+
}
117+
118+
#endregion
119+
120+
#region Module Filtering
121+
122+
[Fact]
123+
public void ModuleNotInList_ShouldNotRemoveVersion()
124+
{
125+
string content = "Import-DscResource -ModuleName OtherModule -ModuleVersion 2.0.0.0";
126+
127+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
128+
129+
Assert.Equal(content, result);
130+
}
131+
132+
[Fact]
133+
public void MultipleModulesOnlyMatchingOneRemoved_ShouldRemoveOnlyMatching()
134+
{
135+
string content =
136+
"Import-DscResource -ModuleName TestModule -ModuleVersion 1.0.0.0\n" +
137+
"Import-DscResource -ModuleName OtherModule -ModuleVersion 2.0.0.0";
138+
139+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
140+
141+
Assert.Contains("Import-DscResource -ModuleName TestModule\n", result);
142+
Assert.Contains("Import-DscResource -ModuleName OtherModule -ModuleVersion 2.0.0.0", result);
143+
}
144+
145+
[Fact]
146+
public void MultipleModulesInList_ShouldRemoveAllMatching()
147+
{
148+
string content =
149+
"Import-DscResource -ModuleName ModuleA -ModuleVersion 1.0.0.0\n" +
150+
"Import-DscResource -ModuleName ModuleB -ModuleVersion 2.0.0.0\n" +
151+
"Import-DscResource -ModuleName ModuleC -ModuleVersion 3.0.0.0";
152+
153+
string result = InvokeRemoveModuleVersionInfo(content, ["ModuleA", "ModuleC"]);
154+
155+
Assert.Contains("Import-DscResource -ModuleName ModuleA\n", result);
156+
Assert.Contains("Import-DscResource -ModuleName ModuleB -ModuleVersion 2.0.0.0", result);
157+
Assert.Contains("Import-DscResource -ModuleName ModuleC", result);
158+
Assert.DoesNotContain("ModuleA -ModuleVersion", result);
159+
Assert.DoesNotContain("ModuleC -ModuleVersion", result);
160+
}
161+
162+
#endregion
163+
164+
#region Multiline Content
165+
166+
[Fact]
167+
public void MultilineContent_ShouldOnlyAffectImportDscResourceLines()
168+
{
169+
string content =
170+
"Configuration TestConfig\n" +
171+
"{\n" +
172+
" Import-DscResource -ModuleName TestModule -ModuleVersion 1.0.0.0\n" +
173+
" Node localhost\n" +
174+
" {\n" +
175+
" }\n" +
176+
"}";
177+
178+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
179+
180+
Assert.Contains("Import-DscResource -ModuleName TestModule\n", result);
181+
Assert.Contains("Configuration TestConfig", result);
182+
Assert.Contains("Node localhost", result);
183+
Assert.DoesNotContain("-ModuleVersion", result);
184+
}
185+
186+
[Fact]
187+
public void NoImportDscResource_ShouldReturnContentUnchanged()
188+
{
189+
string content =
190+
"Configuration TestConfig\n" +
191+
"{\n" +
192+
" Node localhost { }\n" +
193+
"}";
194+
195+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
196+
197+
Assert.Equal(content, result);
198+
}
199+
200+
#endregion
201+
202+
#region Realistic DSC Configuration
203+
204+
[Fact]
205+
public void RealisticConfiguration_ShouldRemoveVersionFromMatchingModuleOnly()
206+
{
207+
string content =
208+
"Configuration M365TenantConfig\n" +
209+
"{\n" +
210+
" Import-DscResource -ModuleName Microsoft365DSC -ModuleVersion 1.25.0401.1\n" +
211+
" Import-DscResource -ModuleName PSDesiredStateConfiguration -ModuleVersion 1.1\n" +
212+
"\n" +
213+
" Node localhost\n" +
214+
" {\n" +
215+
" EXOGroupSettings \"EXOGroupSettings-TestGroup\"\n" +
216+
" {\n" +
217+
" DisplayName = \"TestGroup\"\n" +
218+
" }\n" +
219+
" }\n" +
220+
"}";
221+
222+
string result = InvokeRemoveModuleVersionInfo(content, ["Microsoft365DSC"]);
223+
224+
Assert.Contains("Import-DscResource -ModuleName Microsoft365DSC\n", result);
225+
Assert.Contains("Import-DscResource -ModuleName PSDesiredStateConfiguration -ModuleVersion 1.1", result);
226+
}
227+
228+
[Fact]
229+
public void VersionWithThreePartNumber_ShouldRemoveVersionParameter()
230+
{
231+
string content = "Import-DscResource -ModuleName TestModule -ModuleVersion 1.2.3";
232+
233+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
234+
235+
Assert.Equal("Import-DscResource -ModuleName TestModule", result);
236+
}
237+
238+
#endregion
239+
240+
#region Edge Cases
241+
242+
[Fact]
243+
public void ImportDscResourceWithoutModuleVersion_ShouldReturnUnchanged()
244+
{
245+
string content = "Import-DscResource -ModuleName TestModule";
246+
247+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
248+
249+
Assert.Equal(content, result);
250+
}
251+
252+
[Fact]
253+
public void ContentWithModuleVersionTextOutsideImport_ShouldNotModify()
254+
{
255+
string content =
256+
"# -ModuleVersion 1.0.0.0 is used here\n" +
257+
"$version = \"-ModuleVersion 5.0\"";
258+
259+
string result = InvokeRemoveModuleVersionInfo(content, ["TestModule"]);
260+
261+
Assert.Equal(content, result);
262+
}
263+
264+
#endregion
265+
}

0 commit comments

Comments
 (0)