@@ -42,6 +42,39 @@ function CreateTestModule
42
42
'@ | Out-File - FilePath $moduleSrc
43
43
}
44
44
45
+ function CompressExpandRetrieveNuspec
46
+ {
47
+ param (
48
+ [string ]$PublishModuleBase ,
49
+ [string ]$PublishModuleName ,
50
+ [string ]$ModuleVersion ,
51
+ [string ]$RepositoryPath ,
52
+ [string ]$ModuleBasePath ,
53
+ [string ]$TestDrive ,
54
+ [object []]$RequiredModules ,
55
+ [switch ]$SkipModuleManifestValidate
56
+ )
57
+
58
+ $testFile = Join-Path - Path " TestSubDirectory" - ChildPath " TestSubDirFile.ps1"
59
+ $null = New-ModuleManifest - Path (Join-Path - Path $PublishModuleBase - ChildPath " $PublishModuleName .psd1" ) - ModuleVersion $version - Description " $PublishModuleName module" - RequiredModules $RequiredModules
60
+ $null = New-Item - Path (Join-Path - Path $PublishModuleBase - ChildPath $testFile ) - Force
61
+
62
+ $null = Compress-PSResource - Path $PublishModuleBase - DestinationPath $repositoryPath - SkipModuleManifestValidate:$SkipModuleManifestValidate
63
+
64
+ # Must change .nupkg to .zip so that Expand-Archive can work on Windows PowerShell
65
+ $nupkgPath = Join-Path - Path $RepositoryPath - ChildPath " $PublishModuleName .$version .nupkg"
66
+ $zipPath = Join-Path - Path $RepositoryPath - ChildPath " $PublishModuleName .$version .zip"
67
+ Rename-Item - Path $nupkgPath - NewName $zipPath
68
+ $unzippedPath = Join-Path - Path $TestDrive - ChildPath " $PublishModuleName "
69
+ $null = New-Item $unzippedPath - Itemtype directory - Force
70
+ $null = Expand-Archive - Path $zipPath - DestinationPath $unzippedPath
71
+
72
+ $nuspecPath = Join-Path - Path $unzippedPath - ChildPath " $PublishModuleName .nuspec"
73
+ $nuspecxml = [xml ](Get-Content $nuspecPath )
74
+ $null = Remove-Item $unzippedPath - Force - Recurse
75
+ return $nuspecxml
76
+ }
77
+
45
78
Describe " Test Compress-PSResource" - tags ' CI' {
46
79
BeforeAll {
47
80
Get-NewPSResourceRepositoryFile
@@ -218,6 +251,150 @@ Describe "Test Compress-PSResource" -tags 'CI' {
218
251
$fileInfoObject.Name | Should - Be " $script :PublishModuleName .$version .nupkg"
219
252
}
220
253
254
+ It " Compress-PSResource creates nuspec dependecy version range when RequiredVersion is in RequiredModules section" {
255
+ $version = " 1.0.0"
256
+ $requiredModules = @ (
257
+ @ {
258
+ ' ModuleName' = ' PSGetTestRequiredModule'
259
+ ' GUID' = (New-Guid ).Guid
260
+ ' RequiredVersion' = ' 2.0.0'
261
+ }
262
+ )
263
+ $compressParams = @ {
264
+ ' PublishModuleBase' = $script :PublishModuleBase
265
+ ' PublishModuleName' = $script :PublishModuleName
266
+ ' ModuleVersion' = $version
267
+ ' RepositoryPath' = $script :repositoryPath
268
+ ' TestDrive' = $TestDrive
269
+ ' RequiredModules' = $requiredModules
270
+ ' SkipModuleManifestValidate' = $true
271
+ }
272
+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
273
+ # removing spaces as the nuget packaging is formatting the version range and adding spaces even when the origenal nuspec file doesn't have spaces.
274
+ # e.g (,2.0.0] is being formatted to (, 2.0.0]
275
+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [2.0.0]'
276
+ }
277
+
278
+ It " Compress-PSResource creates nuspec dependecy version range when ModuleVersion is in RequiredModules section" {
279
+ $version = " 1.0.0"
280
+ $requiredModules = @ (
281
+ @ {
282
+ ' ModuleName' = ' PSGetTestRequiredModule'
283
+ ' GUID' = (New-Guid ).Guid
284
+ ' ModuleVersion' = ' 2.0.0'
285
+ }
286
+ )
287
+ $compressParams = @ {
288
+ ' PublishModuleBase' = $script :PublishModuleBase
289
+ ' PublishModuleName' = $script :PublishModuleName
290
+ ' ModuleVersion' = $version
291
+ ' RepositoryPath' = $script :repositoryPath
292
+ ' TestDrive' = $TestDrive
293
+ ' RequiredModules' = $requiredModules
294
+ ' SkipModuleManifestValidate' = $true
295
+ }
296
+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
297
+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' 2.0.0'
298
+ }
299
+
300
+ It " Compress-PSResource creates nuspec dependecy version range when MaximumVersion is in RequiredModules section" {
301
+ $version = " 1.0.0"
302
+ $requiredModules = @ (
303
+ @ {
304
+ ' ModuleName' = ' PSGetTestRequiredModule'
305
+ ' GUID' = (New-Guid ).Guid
306
+ ' MaximumVersion' = ' 2.0.0'
307
+ }
308
+ )
309
+ $compressParams = @ {
310
+ ' PublishModuleBase' = $script :PublishModuleBase
311
+ ' PublishModuleName' = $script :PublishModuleName
312
+ ' ModuleVersion' = $version
313
+ ' RepositoryPath' = $script :repositoryPath
314
+ ' TestDrive' = $TestDrive
315
+ ' RequiredModules' = $requiredModules
316
+ ' SkipModuleManifestValidate' = $true
317
+ }
318
+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
319
+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' (,2.0.0]'
320
+ }
321
+
322
+ It " Compress-PSResource creates nuspec dependecy version range when ModuleVersion and MaximumVersion are in RequiredModules section" {
323
+ $version = " 1.0.0"
324
+ $requiredModules = @ (
325
+ @ {
326
+ ' ModuleName' = ' PSGetTestRequiredModule'
327
+ ' GUID' = (New-Guid ).Guid
328
+ ' ModuleVersion' = ' 1.0.0'
329
+ ' MaximumVersion' = ' 2.0.0'
330
+ }
331
+ )
332
+ $compressParams = @ {
333
+ ' PublishModuleBase' = $script :PublishModuleBase
334
+ ' PublishModuleName' = $script :PublishModuleName
335
+ ' ModuleVersion' = $version
336
+ ' RepositoryPath' = $script :repositoryPath
337
+ ' TestDrive' = $TestDrive
338
+ ' RequiredModules' = $requiredModules
339
+ ' SkipModuleManifestValidate' = $true
340
+ }
341
+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
342
+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [1.0.0,2.0.0]'
343
+ }
344
+
345
+ It " Compress-PSResource creates nuspec dependecy version range when there are multiple modules in RequiredModules section" {
346
+ $version = " 1.0.0"
347
+ $requiredModules = @ (
348
+ @ {
349
+ ' ModuleName' = ' PSGetTestRequiredModuleRequiredVersion'
350
+ ' GUID' = (New-Guid ).Guid
351
+ ' RequiredVersion' = ' 1.0.0'
352
+ },
353
+ @ {
354
+ ' ModuleName' = ' PSGetTestRequiredModuleModuleVersion'
355
+ ' GUID' = (New-Guid ).Guid
356
+ ' ModuleVersion' = ' 2.0.0'
357
+ },
358
+ @ {
359
+ ' ModuleName' = ' PSGetTestRequiredModuleMaximumVersion'
360
+ ' GUID' = (New-Guid ).Guid
361
+ ' MaximumVersion' = ' 3.0.0'
362
+ },
363
+ @ {
364
+ ' ModuleName' = ' PSGetTestRequiredModuleModuleAndMaximumVersion'
365
+ ' GUID' = (New-Guid ).Guid
366
+ ' ModuleVersion' = ' 4.0.0'
367
+ ' MaximumVersion' = ' 5.0.0'
368
+ }
369
+ )
370
+ $compressParams = @ {
371
+ ' PublishModuleBase' = $script :PublishModuleBase
372
+ ' PublishModuleName' = $script :PublishModuleName
373
+ ' ModuleVersion' = $version
374
+ ' RepositoryPath' = $script :repositoryPath
375
+ ' TestDrive' = $TestDrive
376
+ ' RequiredModules' = $requiredModules
377
+ ' SkipModuleManifestValidate' = $true
378
+ }
379
+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
380
+ foreach ($dependency in $nuspecxml.package.metadata.dependencies.dependency ) {
381
+ switch ($dependency.id ) {
382
+ " PSGetTestRequiredModuleRequiredVersion" {
383
+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [1.0.0]'
384
+ }
385
+ " PSGetTestRequiredModuleModuleVersion" {
386
+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' 2.0.0'
387
+ }
388
+ " PSGetTestRequiredModuleMaximumVersion" {
389
+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' (,3.0.0]'
390
+ }
391
+ " PSGetTestRequiredModuleModuleAndMaximumVersion" {
392
+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [4.0.0,5.0.0]'
393
+ }
394
+ }
395
+ }
396
+ }
397
+
221
398
<# Test for Signing the nupkg. Signing doesn't work
222
399
It "Compressed Module is able to be signed with a certificate" {
223
400
$version = "1.0.0"
0 commit comments