@@ -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,150 @@ 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+ $nuspecxml = CompressExpandRetrieveNuspec @compressParams
273+ # removing spaces as the nuget packaging is formatting the version range and adding spaces even when the original 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+
221398<# Test for Signing the nupkg. Signing doesn't work
222399 It "Compressed Module is able to be signed with a certificate" {
223400 $version = "1.0.0"
0 commit comments