@@ -42,6 +42,39 @@ function CreateTestModule
4242'@ | Out-File - FilePath $moduleSrc
4343}
4444
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+
4578Describe " Test Compress-PSResource" - tags ' CI' {
4679 BeforeAll {
4780 Get-NewPSResourceRepositoryFile
@@ -218,6 +251,156 @@ Describe "Test Compress-PSResource" -tags 'CI' {
218251 $fileInfoObject.Name | Should - Be " $script :PublishModuleName .$version .nupkg"
219252 }
220253
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+ }
273+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
274+ # removing spaces as the nuget packaging is formatting the version range and adding spaces even when the original nuspec file doesn't have spaces.
275+ # e.g (,2.0.0] is being formatted to (, 2.0.0]
276+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [2.0.0]'
277+ }
278+
279+ It " Compress-PSResource creates nuspec dependecy version range when ModuleVersion is in RequiredModules section" {
280+ $version = " 1.0.0"
281+ $requiredModules = @ (
282+ @ {
283+ ' ModuleName' = ' PSGetTestRequiredModule'
284+ ' GUID' = (New-Guid ).Guid
285+ ' ModuleVersion' = ' 2.0.0'
286+ }
287+ )
288+ $compressParams = @ {
289+ ' PublishModuleBase' = $script :PublishModuleBase
290+ ' PublishModuleName' = $script :PublishModuleName
291+ ' ModuleVersion' = $version
292+ ' RepositoryPath' = $script :repositoryPath
293+ ' TestDrive' = $TestDrive
294+ ' RequiredModules' = $requiredModules
295+ ' SkipModuleManifestValidate' = $true
296+
297+ }
298+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
299+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' 2.0.0'
300+ }
301+
302+ It " Compress-PSResource creates nuspec dependecy version range when MaximumVersion is in RequiredModules section" {
303+ $version = " 1.0.0"
304+ $requiredModules = @ (
305+ @ {
306+ ' ModuleName' = ' PSGetTestRequiredModule'
307+ ' GUID' = (New-Guid ).Guid
308+ ' MaximumVersion' = ' 2.0.0'
309+ }
310+ )
311+ $compressParams = @ {
312+ ' PublishModuleBase' = $script :PublishModuleBase
313+ ' PublishModuleName' = $script :PublishModuleName
314+ ' ModuleVersion' = $version
315+ ' RepositoryPath' = $script :repositoryPath
316+ ' TestDrive' = $TestDrive
317+ ' RequiredModules' = $requiredModules
318+ ' SkipModuleManifestValidate' = $true
319+
320+ }
321+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
322+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' (,2.0.0]'
323+ }
324+
325+ It " Compress-PSResource creates nuspec dependecy version range when ModuleVersion and MaximumVersion are in RequiredModules section" {
326+ $version = " 1.0.0"
327+ $requiredModules = @ (
328+ @ {
329+ ' ModuleName' = ' PSGetTestRequiredModule'
330+ ' GUID' = (New-Guid ).Guid
331+ ' ModuleVersion' = ' 1.0.0'
332+ ' MaximumVersion' = ' 2.0.0'
333+ }
334+ )
335+ $compressParams = @ {
336+ ' PublishModuleBase' = $script :PublishModuleBase
337+ ' PublishModuleName' = $script :PublishModuleName
338+ ' ModuleVersion' = $version
339+ ' RepositoryPath' = $script :repositoryPath
340+ ' TestDrive' = $TestDrive
341+ ' RequiredModules' = $requiredModules
342+ ' SkipModuleManifestValidate' = $true
343+
344+ }
345+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
346+ $nuspecxml.package.metadata.dependencies.dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [1.0.0,2.0.0]'
347+ }
348+
349+ It " Compress-PSResource creates nuspec dependecy version range when there are multiple modules in RequiredModules section" {
350+ $version = " 1.0.0"
351+ $requiredModules = @ (
352+ @ {
353+ ' ModuleName' = ' PSGetTestRequiredModuleRequiredVersion'
354+ ' GUID' = (New-Guid ).Guid
355+ ' RequiredVersion' = ' 1.0.0'
356+ },
357+ @ {
358+ ' ModuleName' = ' PSGetTestRequiredModuleModuleVersion'
359+ ' GUID' = (New-Guid ).Guid
360+ ' ModuleVersion' = ' 2.0.0'
361+ },
362+ @ {
363+ ' ModuleName' = ' PSGetTestRequiredModuleMaximumVersion'
364+ ' GUID' = (New-Guid ).Guid
365+ ' MaximumVersion' = ' 3.0.0'
366+ },
367+
368+ @ {
369+ ' ModuleName' = ' PSGetTestRequiredModuleModuleAndMaximumVersion'
370+ ' GUID' = (New-Guid ).Guid
371+ ' ModuleVersion' = ' 4.0.0'
372+ ' MaximumVersion' = ' 5.0.0'
373+ }
374+ )
375+ $compressParams = @ {
376+ ' PublishModuleBase' = $script :PublishModuleBase
377+ ' PublishModuleName' = $script :PublishModuleName
378+ ' ModuleVersion' = $version
379+ ' RepositoryPath' = $script :repositoryPath
380+ ' TestDrive' = $TestDrive
381+ ' RequiredModules' = $requiredModules
382+ ' SkipModuleManifestValidate' = $true
383+
384+ }
385+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
386+ foreach ($dependency in $nuspecxml.package.metadata.dependencies.dependency ) {
387+ switch ($dependency.id ) {
388+ " PSGetTestRequiredModuleRequiredVersion" {
389+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [1.0.0]'
390+ }
391+ " PSGetTestRequiredModuleModuleVersion" {
392+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' 2.0.0'
393+ }
394+ " PSGetTestRequiredModuleMaximumVersion" {
395+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' (,3.0.0]'
396+ }
397+ " PSGetTestRequiredModuleModuleAndMaximumVersion" {
398+ $dependency.version.replace (' ' , ' ' ) | Should - BeExactly ' [4.0.0,5.0.0]'
399+ }
400+ }
401+ }
402+ }
403+
221404<# Test for Signing the nupkg. Signing doesn't work
222405 It "Compressed Module is able to be signed with a certificate" {
223406 $version = "1.0.0"
0 commit comments