From f79ff6a0b11208c058e99c3dc15e7ad89fad7f4d Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 10 Aug 2018 15:16:22 -0700 Subject: [PATCH 01/11] [Feature] Test module loading constraints for module cmdlets --- .../ModuleConstraintChecking.Tests.ps1 | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 new file mode 100644 index 00000000000..369ac1feeb2 --- /dev/null +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 @@ -0,0 +1,193 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +function New-ModuleSpecification +{ + param( + $ModuleName, + $ModuleVersion, + $MaximumVersion, + $RequiredVersion, + $Guid) + + $modSpec = @{} + + if ($ModuleName) + { + $modSpec.ModuleName = $ModuleName + } + + if ($ModuleVersion) + { + $modSpec.ModuleVersion = $ModuleVersion + } + + if ($MaximumVersion) + { + $modSpec.MaximumVersion = $MaximumVersion + } + + if ($RequiredVersion) + { + $modSpec.RequiredVersion = $RequiredVersion + } + + if ($Guid) + { + $modSpec.Guid = $Guid + } + + return $modSpec +} + +Describe "Module cmdlet version constraint checking" -Tags "Feature" { + BeforeAll { + $actualVersion = '2.3' + + $successCases = @( + @{ + ModuleVersion = '2.0' + MaximumVersion = $null + RequiredVersion = $null + }, + @{ + ModuleVersion = '1.0' + MaximumVersion = '3.0' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = '3.0' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = $null + RequiredVersion = $actualVersion + } + ) + + $failCases = @( + @{ + ModuleVersion = '2.5' + MaximumVersion = $null + RequiredVersion = $null + }, + @{ + ModuleVersion = '2.0' + MaximumVersion = '2.2' + RequiredVersion = $null + }, + @{ + ModuleVersion = '3.0' + MaximumVersion = '3.1' + RequiredVersion = $null + }, + @{ + ModuleVersion = '3.0' + MaximumVersion = '2.0' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = '1.7' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = $null + RequiredVersion = '2.2' + } + ) + } + + Context "Checking preloaded modules" { + BeforeAll { + $moduleName = 'TestModule' + $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + Import-Module $modulePath + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldPSModulePath + } + + It "Gets the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $mod = Get-Module -FullyQualifiedName $modSpec + $mod.Name | Should -BeExactly $moduleName + + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } + + It "Does not get the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + Get-Module -FullyQualifiedName $modSpec | Should -Be $null + } + + It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru -ErrorAction Stop + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Required modules" { + + } + + Context "Loading pre-loaded module without extension name" { + + } + + Context "Loading module with the same name but different version" { + + } +} From 12caf35862572b5d76845730dfbe4482b282d844 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 10 Aug 2018 15:45:59 -0700 Subject: [PATCH 02/11] [Feature] Test required module version specification --- .../ModuleConstraintChecking.Tests.ps1 | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 index 369ac1feeb2..060e8b8895c 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 @@ -99,15 +99,16 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { RequiredVersion = '2.2' } ) + + $moduleName = 'TestModule' + $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion } Context "Checking preloaded modules" { BeforeAll { - $moduleName = 'TestModule' - $modulePath = Join-Path $TestDrive $moduleName - New-Item -Path $modulePath -ItemType Directory - $manifestPath = Join-Path $modulePath "$moduleName.psd1" - New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive Import-Module $modulePath @@ -180,11 +181,37 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { } Context "Required modules" { + BeforeAll { + Import-Module $modulePath + $reqModName = 'ReqMod' + $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + } - } + AfterEach { + Get-Module $reqModName | Remove-Module + } - Context "Loading pre-loaded module without extension name" { + AfterAll { + Get-Module $moduleName | Remove-Module + } + It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + $reqMod = Import-Module $reqModPath -PassThru + + $reqMod.Name | Should -Be $reqModName + } + + It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" + } } Context "Loading module with the same name but different version" { From 455ed6ef8bf50fccab3f43cf43876bf4231334e9 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 10 Aug 2018 17:44:16 -0700 Subject: [PATCH 03/11] [Feature] Attempt to test module table modules --- .../ModuleConstraintChecking.Tests.ps1 | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 index 060e8b8895c..7d287f687b3 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 @@ -1,6 +1,9 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. +$PID +Start-Sleep 10 + function New-ModuleSpecification { param( @@ -202,6 +205,7 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec $reqMod = Import-Module $reqModPath -PassThru + $reqMod | Should -Not -Be $null $reqMod.Name | Should -Be $reqModName } @@ -214,7 +218,52 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { } } - Context "Loading module with the same name but different version" { + Context "Version checking with ModuleTable lookup" { + BeforeAll { + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + # For some reason, we need a PSModuleInfo to add something to the module table + Import-Module $modulePath -PassThru | Import-Module + } + + AfterAll { + $env:PSModulePath = $oldPSModulePath + } + + It "Successfully loads module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + } + + It "Does not load the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Successfully loads module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + } + + It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } } } From 41bddea0714ac42e20952dad4c4df14786b11ea6 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 10 Aug 2018 19:03:16 -0700 Subject: [PATCH 04/11] [Feature] Add version parameter and module info tests --- .../ModuleConstraintChecking.Tests.ps1 | 205 ++++++++++++++---- 1 file changed, 162 insertions(+), 43 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 index 7d287f687b3..d6549eeb1d1 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 @@ -2,7 +2,6 @@ # Licensed under the MIT License. $PID -Start-Sleep 10 function New-ModuleSpecification { @@ -43,6 +42,48 @@ function New-ModuleSpecification return $modSpec } +function Invoke-ImportModule +{ + param( + $Module, + $MinimumVersion, + $MaximumVersion, + $RequiredVersion, + [switch]$PassThru, + [switch]$AsCustomObject) + + $ipmoCmd = "Import-Module $Module " + + if ($MinimumVersion) + { + $ipmoCmd += "-MinimumVersion '$MinimumVersion' " + } + + if ($MaximumVersion) + { + $ipmoCmd += "-MaximumVersion '$MaximumVersion' " + } + + if ($RequiredVersion) + { + $ipmoCmd += "-RequiredVersion '$RequiredVersion' " + } + + if ($PassThru) + { + $ipmoCmd += "-PassThru " + } + + if ($AsCustomObject) + { + $ipmoCmd += "-AsCustomObject " + } + + $ipmoCmd += '-ErrorAction Stop ' + + return (Invoke-Expression $ipmoCmd) +} + Describe "Module cmdlet version constraint checking" -Tags "Feature" { BeforeAll { $actualVersion = '2.3' @@ -110,11 +151,11 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion } - Context "Checking preloaded modules" { + Context "Checking preloaded modules with FullyQualifiedName" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath + $moduleInfo = Import-Module $modulePath -PassThru } AfterAll { @@ -181,89 +222,167 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } - } - Context "Required modules" { - BeforeAll { - Import-Module $modulePath - $reqModName = 'ReqMod' - $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion } - AfterEach { - Get-Module $reqModName | Remove-Module + It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Checking preloaded modules with version parameters" { + BeforeAll { + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + $moduleInfo = Import-Module $modulePath -PassThru } AfterAll { Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldPSModulePath } - It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $importedModule = Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec - $reqMod = Import-Module $reqModPath -PassThru - - $reqMod | Should -Not -Be $null - $reqMod.Name | Should -Be $reqModName + (Get-Module $moduleName)[0] | Should -Be $importedModule } - It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec - { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" + $invocation = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } - } - Context "Version checking with ModuleTable lookup" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - # For some reason, we need a PSModuleInfo to add something to the module table - Import-Module $modulePath -PassThru | Import-Module + It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $importedModule = Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + (Get-Module $moduleName)[0] | Should -Be $importedModule } - AfterAll { - $env:PSModulePath = $oldPSModulePath + It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } - It "Successfully loads module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod = Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru $mod.Name | Should -Be $moduleName $mod.Version | Should -Be $actualVersion } - It "Does not load the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $invocation = { + Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } - It "Successfully loads module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + It "Successfully loads module from module info when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod = Invoke-ImportModule -Module $moduleInfo -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru $mod.Name | Should -Be $moduleName $mod.Version | Should -Be $actualVersion } - It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + It "Does not load the module from module info when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $invocation = { + Invoke-ImportModule -Module $moduleInfo -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Required modules" { + BeforeAll { + Import-Module $modulePath + $reqModName = 'ReqMod' + $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + } + + AfterEach { + Get-Module $reqModName | Remove-Module + } + + AfterAll { + Get-Module $moduleName | Remove-Module + } + + It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + $reqMod = Import-Module $reqModPath -PassThru + + $reqMod | Should -Not -Be $null + $reqMod.Name | Should -Be $reqModName + } + + It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" } } } From 4abfcaacb5bd5051e00adb733565b55b60a56efc Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 10 Aug 2018 19:43:26 -0700 Subject: [PATCH 05/11] [Feature] Remove unuseful module info tests --- .../ModuleConstraintChecking.Tests.ps1 | 46 ++++--------------- 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 index d6549eeb1d1..2bfea7732a9 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 @@ -1,8 +1,6 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. -$PID - function New-ModuleSpecification { param( @@ -52,36 +50,37 @@ function Invoke-ImportModule [switch]$PassThru, [switch]$AsCustomObject) - $ipmoCmd = "Import-Module $Module " + $cmdArgs = @{ + Name = $Module + ErrorAction = 'Stop' + } if ($MinimumVersion) { - $ipmoCmd += "-MinimumVersion '$MinimumVersion' " + $cmdArgs.MinimumVersion = $MinimumVersion } if ($MaximumVersion) { - $ipmoCmd += "-MaximumVersion '$MaximumVersion' " + $cmdArgs.MaximumVersion = $MaximumVersion } if ($RequiredVersion) { - $ipmoCmd += "-RequiredVersion '$RequiredVersion' " + $cmdArgs.RequiredVersion = $RequiredVersion } if ($PassThru) { - $ipmoCmd += "-PassThru " + $cmdArgs.PassThru = $true } if ($AsCustomObject) { - $ipmoCmd += "-AsCustomObject " + $cmdArgs.AsCustomObject = $true } - $ipmoCmd += '-ErrorAction Stop ' - - return (Invoke-Expression $ipmoCmd) + return Import-Module @cmdArgs } Describe "Module cmdlet version constraint checking" -Tags "Feature" { @@ -324,31 +323,6 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } - - It "Successfully loads module from module info when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - - $mod = Invoke-ImportModule -Module $moduleInfo -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru - - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - } - - It "Does not load the module from module info when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - - $invocation = { - Invoke-ImportModule -Module $moduleInfo -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } - - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } - - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' - } } Context "Required modules" { From 9fd64e5bbc2d97d1b5da33f355de8f418b4e3799 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 10 Aug 2018 20:56:42 -0700 Subject: [PATCH 06/11] [Feature] Add testing for versioned and rooted modules --- .../ModuleConstraintChecking.Tests.ps1 | 558 ++++++++++++++++-- 1 file changed, 501 insertions(+), 57 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 index 2bfea7732a9..f2f8691240c 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 @@ -83,70 +83,514 @@ function Invoke-ImportModule return Import-Module @cmdArgs } +$actualVersion = '2.3' + +$successCases = @( + @{ + ModuleVersion = '2.0' + MaximumVersion = $null + RequiredVersion = $null + }, + @{ + ModuleVersion = '1.0' + MaximumVersion = '3.0' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = '3.0' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = $null + RequiredVersion = $actualVersion + } +) + +$failCases = @( + @{ + ModuleVersion = '2.5' + MaximumVersion = $null + RequiredVersion = $null + }, + @{ + ModuleVersion = '2.0' + MaximumVersion = '2.2' + RequiredVersion = $null + }, + @{ + ModuleVersion = '3.0' + MaximumVersion = '3.1' + RequiredVersion = $null + }, + @{ + ModuleVersion = '3.0' + MaximumVersion = '2.0' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = '1.7' + RequiredVersion = $null + }, + @{ + ModuleVersion = $null + MaximumVersion = $null + RequiredVersion = '2.2' + } +) + Describe "Module cmdlet version constraint checking" -Tags "Feature" { BeforeAll { - $actualVersion = '2.3' - - $successCases = @( - @{ - ModuleVersion = '2.0' - MaximumVersion = $null - RequiredVersion = $null - }, - @{ - ModuleVersion = '1.0' - MaximumVersion = '3.0' - RequiredVersion = $null - }, - @{ - ModuleVersion = $null - MaximumVersion = '3.0' - RequiredVersion = $null - }, - @{ - ModuleVersion = $null - MaximumVersion = $null - RequiredVersion = $actualVersion + $moduleName = 'TestModule' + $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion + } + + Context "Checking preloaded modules with FullyQualifiedName" { + BeforeAll { + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + $moduleInfo = Import-Module $modulePath -PassThru + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldPSModulePath + } + + It "Gets the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $mod = Get-Module -FullyQualifiedName $modSpec + $mod.Name | Should -BeExactly $moduleName + + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } - ) - - $failCases = @( - @{ - ModuleVersion = '2.5' - MaximumVersion = $null - RequiredVersion = $null - }, - @{ - ModuleVersion = '2.0' - MaximumVersion = '2.2' - RequiredVersion = $null - }, - @{ - ModuleVersion = '3.0' - MaximumVersion = '3.1' - RequiredVersion = $null - }, - @{ - ModuleVersion = '3.0' - MaximumVersion = '2.0' - RequiredVersion = $null - }, - @{ - ModuleVersion = $null - MaximumVersion = '1.7' - RequiredVersion = $null - }, - @{ - ModuleVersion = $null - MaximumVersion = $null - RequiredVersion = '2.2' + + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } - ) - $moduleName = 'TestModule' + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } + + It "Does not get the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + Get-Module -FullyQualifiedName $modSpec | Should -Be $null + } + + It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru -ErrorAction Stop + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + } + + It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Checking preloaded modules with version parameters" { + BeforeAll { + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + $moduleInfo = Import-Module $modulePath -PassThru + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldPSModulePath + } + + It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $importedModule = Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $importedModule = Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $mod = Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + } + + It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Required modules" { + BeforeAll { + Import-Module $modulePath + $reqModName = 'ReqMod' + $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + } + + AfterEach { + Get-Module $reqModName | Remove-Module + } + + AfterAll { + Get-Module $moduleName | Remove-Module + } + + It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + $reqMod = Import-Module $reqModPath -PassThru + + $reqMod | Should -Not -Be $null + $reqMod.Name | Should -Be $reqModName + } + + It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" + } + } +} + +Describe "Root module version checking" -Tags "Feature" { + BeforeAll { + $moduleName = 'RootedModule' $modulePath = Join-Path $TestDrive $moduleName + $rootModuleName = 'Root.psm1' + $rootModulePath = Join-Path $modulePath $rootModuleName New-Item -Path $modulePath -ItemType Directory + New-Item -Force -Path $rootModulePath -ItemType File -Value 'function Test-RootModule { 87 }' $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -RootModule $rootModuleName + } + + Context "Checking preloaded modules with FullyQualifiedName" { + BeforeAll { + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + $moduleInfo = Import-Module $modulePath -PassThru + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldPSModulePath + } + + It "Gets the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $mod = Get-Module -FullyQualifiedName $modSpec + $mod.Name | Should -BeExactly $moduleName + + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } + + It "Does not get the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + Get-Module -FullyQualifiedName $modSpec | Should -Be $null + } + + It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru -ErrorAction Stop + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + } + + It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Checking preloaded modules with version parameters" { + BeforeAll { + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + $moduleInfo = Import-Module $modulePath -PassThru + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldPSModulePath + } + + It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $importedModule = Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $importedModule = Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + (Get-Module $moduleName)[0] | Should -Be $importedModule + } + + It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $mod = Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + } + + It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $invocation = { + Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) + { + $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + + $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "Required modules" { + BeforeAll { + Import-Module $modulePath + $reqModName = 'ReqMod' + $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + } + + AfterEach { + Get-Module $reqModName | Remove-Module + } + + AfterAll { + Get-Module $moduleName | Remove-Module + } + + It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + $reqMod = Import-Module $reqModPath -PassThru + + $reqMod | Should -Not -Be $null + $reqMod.Name | Should -Be $reqModName + } + + It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" + } + } +} + +Describe "Versioned directory module version checking" -Tags "Feature" { + BeforeAll { + $moduleName = 'VersionedModule' + $modulePath = Join-Path $TestDrive $moduleName + $versionPath = Join-Path $modulePath $actualVersion + New-Item -Path $versionPath -ItemType Directory + $manifestPath = Join-Path $versionPath "$moduleName.psd1" New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion } @@ -200,7 +644,7 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { (Get-Module $moduleName)[0] | Should -Be $importedModule } - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { + It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion From c704c4d07798e30f43a8010ed3b90c152970a46d Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Mon, 13 Aug 2018 14:39:25 -0700 Subject: [PATCH 07/11] [Feature] Add GUID module specification checking tests --- ...g.Tests.ps1 => ModuleConstraint.Tests.ps1} | 340 +++++++++++++++++- 1 file changed, 334 insertions(+), 6 deletions(-) rename test/powershell/Modules/Microsoft.PowerShell.Core/{ModuleConstraintChecking.Tests.ps1 => ModuleConstraint.Tests.ps1} (67%) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 similarity index 67% rename from test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 rename to test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 index f2f8691240c..e6c096fd722 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraintChecking.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 @@ -84,6 +84,7 @@ function Invoke-ImportModule } $actualVersion = '2.3' +$actualGuid = [guid]'9b945229-65fd-4629-ae99-88e2618377ff' $successCases = @( @{ @@ -154,7 +155,7 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $moduleInfo = Import-Module $modulePath -PassThru + Import-Module $modulePath } AfterAll { @@ -245,7 +246,7 @@ Describe "Module cmdlet version constraint checking" -Tags "Feature" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $moduleInfo = Import-Module $modulePath -PassThru + Import-Module $modulePath } AfterAll { @@ -377,7 +378,7 @@ Describe "Root module version checking" -Tags "Feature" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $moduleInfo = Import-Module $modulePath -PassThru + Import-Module $modulePath } AfterAll { @@ -468,7 +469,7 @@ Describe "Root module version checking" -Tags "Feature" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $moduleInfo = Import-Module $modulePath -PassThru + Import-Module $modulePath } AfterAll { @@ -598,7 +599,7 @@ Describe "Versioned directory module version checking" -Tags "Feature" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $moduleInfo = Import-Module $modulePath -PassThru + Import-Module $modulePath } AfterAll { @@ -689,7 +690,7 @@ Describe "Versioned directory module version checking" -Tags "Feature" { BeforeAll { $oldPSModulePath = $env:PSModulePath $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $moduleInfo = Import-Module $modulePath -PassThru + Import-Module $modulePath } AfterAll { @@ -804,3 +805,330 @@ Describe "Versioned directory module version checking" -Tags "Feature" { } } } + +Describe "Module GUID checking logic" -Tags "Feature" { + BeforeAll { + $guidSuccessCases = [System.Collections.ArrayList]::new() + foreach ($case in $successCases) + { + $guidSuccessCases.Add($case) + $guidSuccessCases.Add(($case + @{ Guid = $actualGuid })) + } + + $guidFailCases = [System.Collections.ArrayList]::new() + foreach ($case in $failCases) + { + $guidFailCases.Add($case) + $guidFailCases.Add(($case + @{ Guid = $actualGuid })) + $guidFailCases.Add(($case + @{ Guid = [guid]::NewGuid() })) + } + } + + Context "FullyQualifiedName finding a loaded a psd1 module" { + BeforeAll { + $moduleName = 'GuidModule' + $modulePath = Join-Path $TestDrive $moduleName + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-Item -Path $modulePath -ItemType Directory + New-ModuleManifest -Path $manifestPath -Guid $actualGuid -ModuleVersion $actualVersion + + $oldModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + Import-Module $modulePath + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldModulePath + } + + It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + } + + It "Loads the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Loads the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Loads the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } + + It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "FullyQualifiedName loading a rooted module" { + BeforeAll { + $moduleName = 'GuidRootedModule' + $modulePath = Join-Path $TestDrive $moduleName + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-Item -Path $modulePath -ItemType Directory + $rootModuleName = 'RootModule.psm1' + $rootModulePath = Join-Path $modulePath $rootModuleName + New-Item -Path $rootModulePath -ItemType File -Value "function Test-GuidRootModule { 128 }" + New-ModuleManifest -Path $manifestPath -Guid $actualGuid -ModuleVersion $actualVersion -RootModule $rootModuleName + + $oldModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + Import-Module $modulePath + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldModulePath + } + + It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + } + + It "Loads the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Loads the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Loads the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } + + It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + } + + Context "FullyQualifiedName loading a module in a versioned directory" { + BeforeAll { + $moduleName = 'GuidModule' + $modulePath = Join-Path $TestDrive $moduleName + $versionPath = Join-Path $modulePath $actualVersion + $manifestPath = Join-Path $versionPath "$moduleName.psd1" + New-Item -Path $versionPath -ItemType Directory + New-ModuleManifest -Path $manifestPath -Guid $actualGuid -ModuleVersion $actualVersion + + $oldModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + Import-Module $modulePath + } + + AfterAll { + Get-Module $moduleName | Remove-Module + $env:PSModulePath = $oldModulePath + } + + It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + } + + It "Loads the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Loads the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Loads the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + } + + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } + + It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + } +} From ffb5b9c24a8cf5d21f6932423392e16a5a5a7d90 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Mon, 13 Aug 2018 18:02:07 -0700 Subject: [PATCH 08/11] [Feature] Restructure tests, including first import scenarios --- .../ModuleConstraint.Tests.ps1 | 1964 +++++++++++------ 1 file changed, 1334 insertions(+), 630 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 index e6c096fd722..f5c037a4721 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 @@ -142,416 +142,1053 @@ $failCases = @( } ) -Describe "Module cmdlet version constraint checking" -Tags "Feature" { +$guidSuccessCases = [System.Collections.ArrayList]::new() +foreach ($case in $successCases) +{ + [void]$guidSuccessCases.Add($case + @{ Guid = $null }) + [void]$guidSuccessCases.Add(($case + @{ Guid = $actualGuid })) +} + +$guidFailCases = [System.Collections.ArrayList]::new() +foreach ($case in $failCases) +{ + [void]$guidFailCases.Add($case + @{ Guid = $null }) + [void]$guidFailCases.Add(($case + @{ Guid = $actualGuid })) + [void]$guidFailCases.Add(($case + @{ Guid = [guid]::NewGuid() })) +} + +Describe "Module loading with version constraints" -Tags "Feature" { BeforeAll { $moduleName = 'TestModule' $modulePath = Join-Path $TestDrive $moduleName New-Item -Path $modulePath -ItemType Directory $manifestPath = Join-Path $modulePath "$moduleName.psd1" - New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion - } + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid - Context "Checking preloaded modules with FullyQualifiedName" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath - } + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + } - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldPSModulePath - } + AfterAll { + $env:PSModulePath = $oldPSModulePath + } - It "Gets the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + AfterEach { + Get-Module $moduleName | Remove-Module + } - $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -BeExactly $moduleName + It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not get the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - Get-Module -FullyQualifiedName $modSpec | Should -Be $null - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' - } + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru -ErrorAction Stop - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } } - Context "Checking preloaded modules with version parameters" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } + + It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldPSModulePath + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $importedModule = Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Does not load the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - (Get-Module $moduleName)[0] | Should -Be $importedModule + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $invocation = { - Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + It "Does not load the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } +} - It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $importedModule = Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru +Describe "Versioned directory loading with module constraints" -Tags "Feature" { + BeforeAll { + $moduleName = 'TestModule' + $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory + $versionPath = Join-Path $modulePath $actualVersion + New-Item -Path $versionPath -ItemType Directory + $manifestPath = Join-Path $versionPath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid + + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive + } + + AfterAll { + $env:PSModulePath = $oldPSModulePath + } + + AfterEach { + Get-Module $moduleName | Remove-Module + } + + It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $invocation = { - Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $mod = Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } - It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - $invocation = { - Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } } - Context "Required modules" { - BeforeAll { - Import-Module $modulePath - $reqModName = 'ReqMod' - $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - AfterEach { - Get-Module $reqModName | Remove-Module + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } + + It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - AfterAll { - Get-Module $moduleName | Remove-Module + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Does not load the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec - $reqMod = Import-Module $reqModPath -PassThru + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } - $reqMod | Should -Not -Be $null - $reqMod.Name | Should -Be $reqModName + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Does not load the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec - { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } + + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } } -Describe "Root module version checking" -Tags "Feature" { +Describe "Rooted module loading with module constraints" -Tags "Feature" { BeforeAll { - $moduleName = 'RootedModule' + $moduleName = 'TestModule' $modulePath = Join-Path $TestDrive $moduleName - $rootModuleName = 'Root.psm1' - $rootModulePath = Join-Path $modulePath $rootModuleName New-Item -Path $modulePath -ItemType Directory - New-Item -Force -Path $rootModulePath -ItemType File -Value 'function Test-RootModule { 87 }' + $rootModuleName = 'RootModule.psm1' + $rootModulePath = Join-Path $modulePath $rootModuleName + New-Item -Path $rootModulePath -ItemType File -Value 'function Test-RootModule { 178 }' $manifestPath = Join-Path $modulePath "$moduleName.psd1" - New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -RootModule $rootModuleName + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid -RootModule $rootModuleName + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive } - Context "Checking preloaded modules with FullyQualifiedName" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath - } + AfterAll { + $env:PSModulePath = $oldPSModulePath + } - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldPSModulePath + AfterEach { + Get-Module $moduleName | Remove-Module + } + + It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } - It "Gets the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -BeExactly $moduleName + It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not get the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - Get-Module -FullyQualifiedName $modSpec | Should -Be $null + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + } - It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru -ErrorAction Stop - (Get-Module $moduleName)[0] | Should -Be $importedModule + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } + + It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + It "Does not load the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } +} + +Describe "Preloaded module specification checking" -Tags "Feature" { + BeforeAll { + $moduleName = 'TestModule' + $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid + + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + Import-Module $modulePath + } + + AfterAll { + $env:PSModulePath = $oldPSModulePath + Get-Module $moduleName | Remove-Module + } + + It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } } - Context "Checking preloaded modules with version parameters" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath + It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } + + It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldPSModulePath + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $importedModule = Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $invocation = { - Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + } - It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $importedModule = Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + $mod = Get-Module -FullyQualifiedName $modSpec - $invocation = { - Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + $mod | Should -Be $null + } + + It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + It "Does not load the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $mod = Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Does not load the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $invocation = { - Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + It "Does not load the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } Context "Required modules" { BeforeAll { - Import-Module $modulePath $reqModName = 'ReqMod' $reqModPath = Join-Path $TestDrive "$reqModName.psd1" } @@ -560,10 +1197,6 @@ Describe "Root module version checking" -Tags "Feature" { Get-Module $reqModName | Remove-Module } - AfterAll { - Get-Module $moduleName | Remove-Module - } - It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) @@ -585,194 +1218,286 @@ Describe "Root module version checking" -Tags "Feature" { } } -Describe "Versioned directory module version checking" -Tags "Feature" { +Describe "Preloaded modules with versioned directory version checking" -Tag "Feature" { BeforeAll { - $moduleName = 'VersionedModule' + $moduleName = 'TestModule' $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory $versionPath = Join-Path $modulePath $actualVersion New-Item -Path $versionPath -ItemType Directory $manifestPath = Join-Path $versionPath "$moduleName.psd1" - New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion - } + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid - Context "Checking preloaded modules with FullyQualifiedName" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath - } + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldPSModulePath - } + Import-Module $modulePath + } - It "Gets the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + AfterAll { + $env:PSModulePath = $oldPSModulePath + Get-Module $moduleName | Remove-Module + } - $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -BeExactly $moduleName + It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } + $mod = Get-Module -FullyQualifiedName $modSpec - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } - It "Does not get the loaded module when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - Get-Module -FullyQualifiedName $modSpec | Should -Be $null - } + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $importedModule = Import-Module -FullyQualifiedName $modSpec -PassThru -ErrorAction Stop - (Get-Module $moduleName)[0] | Should -Be $importedModule + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } - It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid + } + } - It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + } - It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } } - Context "Checking preloaded modules with version parameters" { - BeforeAll { - $oldPSModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath - } + It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldPSModulePath + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + } - It "Imports the loaded module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $importedModule = Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - (Get-Module $moduleName)[0] | Should -Be $importedModule - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - It "Does not import the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + $mod = Get-Module -FullyQualifiedName $modSpec + + $mod | Should -Be $null + } - $invocation = { - Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' - } + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - It "Imports the loaded module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $importedModule = Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - (Get-Module $moduleName)[0] | Should -Be $importedModule - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - It "Does not import the module from module path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases -Pending { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $invocation = { - Invoke-ImportModule -Module $moduleName -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } + + It "Does not load the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Successfully loads module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $mod = Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -PassThru + It "Does not load the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not load the module from manifest path when ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $invocation = { - Invoke-ImportModule -Module $manifestPath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion - } + It "Does not load the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - if ($ModuleVersion -and $MaximumVersion -and [version]$ModuleVersion -gt [version]$MaximumVersion) - { - $invocation | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' - return - } + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + } - $invocation | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' } Context "Required modules" { BeforeAll { - Import-Module $modulePath $reqModName = 'ReqMod' $reqModPath = Join-Path $TestDrive "$reqModName.psd1" } @@ -781,10 +1506,6 @@ Describe "Versioned directory module version checking" -Tags "Feature" { Get-Module $reqModName | Remove-Module } - AfterAll { - Get-Module $moduleName | Remove-Module - } - It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { param($ModuleVersion, $MaximumVersion, $RequiredVersion) @@ -806,329 +1527,312 @@ Describe "Versioned directory module version checking" -Tags "Feature" { } } -Describe "Module GUID checking logic" -Tags "Feature" { +Describe "Preloaded rooted module specification checking" -Tags "Feature" { BeforeAll { - $guidSuccessCases = [System.Collections.ArrayList]::new() - foreach ($case in $successCases) - { - $guidSuccessCases.Add($case) - $guidSuccessCases.Add(($case + @{ Guid = $actualGuid })) - } - - $guidFailCases = [System.Collections.ArrayList]::new() - foreach ($case in $failCases) - { - $guidFailCases.Add($case) - $guidFailCases.Add(($case + @{ Guid = $actualGuid })) - $guidFailCases.Add(($case + @{ Guid = [guid]::NewGuid() })) - } - } + $moduleName = 'TestModule' + $modulePath = Join-Path $TestDrive $moduleName + New-Item -Path $modulePath -ItemType Directory + $rootModuleName = 'RootModule.psm1' + $rootModulePath = Join-Path $modulePath $rootModuleName + New-Item -Path $rootModulePath -ItemType File -Value 'function Test-RootModule { 43 }' + $manifestPath = Join-Path $modulePath "$moduleName.psd1" + New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid -RootModule $rootModuleName - Context "FullyQualifiedName finding a loaded a psd1 module" { - BeforeAll { - $moduleName = 'GuidModule' - $modulePath = Join-Path $TestDrive $moduleName - $manifestPath = Join-Path $modulePath "$moduleName.psd1" - New-Item -Path $modulePath -ItemType Directory - New-ModuleManifest -Path $manifestPath -Guid $actualGuid -ModuleVersion $actualVersion + $oldPSModulePath = $env:PSModulePath + $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - $oldModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath - } + Import-Module $modulePath + } - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldModulePath - } + AfterAll { + $env:PSModulePath = $oldPSModulePath + Get-Module $moduleName | Remove-Module + } - It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $mod = Get-Module -FullyQualifiedName $modSpec + $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -Be $moduleName + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion } + } - It "Loads the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } - - It "Loads the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } - - It "Loads the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } - - It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - $mod = Get-Module -FullyQualifiedName $modSpec - - $mod | Should -Be $null + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } - It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' - } + It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - It "Does not load the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Version | Should -Be $actualVersion + $mod.Guid | Should -Be $actualGuid + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } - - It "Does not load the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } - } - - Context "FullyQualifiedName loading a rooted module" { - BeforeAll { - $moduleName = 'GuidRootedModule' - $modulePath = Join-Path $TestDrive $moduleName - $manifestPath = Join-Path $modulePath "$moduleName.psd1" - New-Item -Path $modulePath -ItemType Directory - $rootModuleName = 'RootModule.psm1' - $rootModulePath = Join-Path $modulePath $rootModuleName - New-Item -Path $rootModulePath -ItemType File -Value "function Test-GuidRootModule { 128 }" - New-ModuleManifest -Path $manifestPath -Guid $actualGuid -ModuleVersion $actualVersion -RootModule $rootModuleName - - $oldModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } - - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldModulePath + if ($Guid) + { + $mod.Guid | Should -Be $actualGuid } + } - It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $mod = Get-Module -FullyQualifiedName $modSpec + $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion + } + if ($Guid) + { $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion } + } - It "Loads the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } - - It "Loads the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } - - It "Loads the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + } - It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod = Get-Module -FullyQualifiedName $modSpec + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod | Should -Be $null + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion } - - It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion } - - It "Does not load the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } + } - It "Does not load the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $mod.Name | Should -Be $moduleName + $mod.Guid | Should -Be $actualGuid + $mod.Version | Should -Be $actualVersion + if ($ModuleVersion) + { + $mod.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $mod.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $mod.Version | Should -Be $RequiredVersion } } - Context "FullyQualifiedName loading a module in a versioned directory" { - BeforeAll { - $moduleName = 'GuidModule' - $modulePath = Join-Path $TestDrive $moduleName - $versionPath = Join-Path $modulePath $actualVersion - $manifestPath = Join-Path $versionPath "$moduleName.psd1" - New-Item -Path $versionPath -ItemType Directory - New-ModuleManifest -Path $manifestPath -Guid $actualGuid -ModuleVersion $actualVersion + It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $oldModulePath = $env:PSModulePath - $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive - Import-Module $modulePath - } + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - AfterAll { - Get-Module $moduleName | Remove-Module - $env:PSModulePath = $oldModulePath - } + $mod = Get-Module -FullyQualifiedName $modSpec - It "Gets the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + $mod | Should -Be $null + } - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod = Get-Module -FullyQualifiedName $modSpec + $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - } + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - It "Loads the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - } + It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - It "Loads the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + It "Does not load the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Loads the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $mod = Import-Module -FullyQualifiedName $modSpec -PassThru + It "Does not load the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $mod = Get-Module -FullyQualifiedName $modSpec + It "Does not load the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - $mod | Should -Be $null + $sb = { + Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion } - It "Does not load the module from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion)) + { + $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand' + return + } + $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + } - $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + Context "Required modules" { + BeforeAll { + $reqModName = 'ReqMod' + $reqModPath = Join-Path $TestDrive "$reqModName.psd1" + } - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + AfterEach { + Get-Module $reqModName | Remove-Module } - It "Does not load the module from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) + It "Successfully loads a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $successCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) - $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + $reqMod = Import-Module $reqModPath -PassThru - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $reqMod | Should -Not -Be $null + $reqMod.Name | Should -Be $reqModName } - It "Does not load the module from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases -Pending { - param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid) - - $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid + It "Does not load a module when the required module has ModuleVersion=, MaximumVersion=, RequiredVersion=" -TestCases $failCases { + param($ModuleVersion, $MaximumVersion, $RequiredVersion) - { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand' + $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion + New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec + { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand" } - } } From b4f80f1e2122c2ddc7c3aaa499aa6264cf6ca458 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Thu, 16 Aug 2018 14:15:24 -0700 Subject: [PATCH 09/11] [Feature] Refactor positive module assertions --- .../ModuleConstraint.Tests.ps1 | 987 ++++++------------ 1 file changed, 337 insertions(+), 650 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 index f5c037a4721..cc861e33a5d 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 @@ -83,6 +83,39 @@ function Invoke-ImportModule return Import-Module @cmdArgs } +function Assert-ModuleIsCorrect +{ + param( + $Module, + [string]$Name, + [guid]$Guid, + [version]$Version, + [version]$MinVersion, + [version]$MaxVersion, + [version]$RequiredVersion + ) + + $Module | Should -Not -Be $null + $Module.Name | Should -Be $ModuleName + $Module.Guid | Should -Be $Guid + if ($Version) + { + $Module.Version | Should -Be $Version + } + if ($ModuleVersion) + { + $Module.Version | Should -BeGreaterOrEqual $ModuleVersion + } + if ($MaximumVersion) + { + $Module.Version | Should -BeLessOrEqual $MaximumVersion + } + if ($RequiredVersion) + { + $Module.Version | Should -Be $RequiredVersion + } +} + $actualVersion = '2.3' $actualGuid = [guid]'9b945229-65fd-4629-ae99-88e2618377ff' @@ -184,25 +217,14 @@ Describe "Module loading with version constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -212,25 +234,14 @@ Describe "Module loading with version constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -240,25 +251,14 @@ Describe "Module loading with version constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -266,21 +266,14 @@ Describe "Module loading with version constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -288,21 +281,14 @@ Describe "Module loading with version constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -310,21 +296,14 @@ Describe "Module loading with version constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { @@ -464,25 +443,14 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -492,25 +460,14 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -518,21 +475,14 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -540,21 +490,14 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -562,21 +505,14 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { @@ -688,25 +624,14 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -716,25 +641,14 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -744,25 +658,14 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -770,21 +673,14 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -792,21 +688,14 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -814,21 +703,14 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { @@ -937,25 +819,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -965,25 +836,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -993,25 +853,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1021,25 +870,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1047,21 +885,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1069,21 +900,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1091,21 +915,14 @@ Describe "Preloaded module specification checking" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { @@ -1246,25 +1063,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1274,25 +1080,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1302,25 +1097,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1330,25 +1114,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1356,21 +1129,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1378,21 +1144,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1400,21 +1159,14 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { @@ -1556,25 +1308,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Get-Module -FullyQualifiedName $modSpec - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1584,25 +1325,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1612,25 +1342,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { @@ -1640,25 +1359,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from absolute path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1666,21 +1374,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1688,21 +1389,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module with version constraints from the manifest when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $successCases { @@ -1710,21 +1404,14 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru - $mod.Name | Should -Be $moduleName - $mod.Guid | Should -Be $actualGuid - $mod.Version | Should -Be $actualVersion - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Does not get the module when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidFailCases { From c3f62a7d8cc016e9929595c12e2ce97c83081e86 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Thu, 16 Aug 2018 14:57:32 -0700 Subject: [PATCH 10/11] [Feature] Fix missed assertion --- .../ModuleConstraint.Tests.ps1 | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 index cc861e33a5d..c7342eda576 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 @@ -415,25 +415,14 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { $mod = Import-Module -FullyQualifiedName $modSpec -PassThru - $mod.Name | Should -Be $moduleName - $mod.Version | Should -Be $actualVersion - $mod.Guid | Should -Be $actualGuid - if ($ModuleVersion) - { - $mod.Version | Should -BeGreaterOrEqual $ModuleVersion - } - if ($MaximumVersion) - { - $mod.Version | Should -BeLessOrEqual $MaximumVersion - } - if ($RequiredVersion) - { - $mod.Version | Should -Be $RequiredVersion - } - if ($Guid) - { - $mod.Guid | Should -Be $actualGuid - } + Assert-ModuleIsCorrect ` + -Module $mod ` + -Name $moduleName ` + -Version $actualVersion ` + -Guid $actualGuid ` + -MinVersion $ModuleVersion ` + -MaxVersion $MaximumVersion ` + -RequiredVersion $RequiredVersion } It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=, MaximumVersion=, RequiredVersion=, Guid=" -TestCases $guidSuccessCases { From fe34591fd4bfd89abd565162e670f33ab84da226 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Fri, 17 Aug 2018 11:09:13 -0700 Subject: [PATCH 11/11] [Feature] Use default parameters for test assertion --- .../ModuleConstraint.Tests.ps1 | 127 +----------------- 1 file changed, 5 insertions(+), 122 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 index c7342eda576..cc2c202a14d 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/ModuleConstraint.Tests.ps1 @@ -87,9 +87,9 @@ function Assert-ModuleIsCorrect { param( $Module, - [string]$Name, - [guid]$Guid, - [version]$Version, + [string]$Name = $moduleName, + [guid]$Guid = $actualGuid, + [version]$Version = $actualVersion, [version]$MinVersion, [version]$MaxVersion, [version]$RequiredVersion @@ -186,8 +186,8 @@ $guidFailCases = [System.Collections.ArrayList]::new() foreach ($case in $failCases) { [void]$guidFailCases.Add($case + @{ Guid = $null }) - [void]$guidFailCases.Add(($case + @{ Guid = $actualGuid })) - [void]$guidFailCases.Add(($case + @{ Guid = [guid]::NewGuid() })) + [void]$guidFailCases.Add($case + @{ Guid = $actualGuid }) + [void]$guidFailCases.Add($case + @{ Guid = [guid]::NewGuid() }) } Describe "Module loading with version constraints" -Tags "Feature" { @@ -219,9 +219,6 @@ Describe "Module loading with version constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -236,9 +233,6 @@ Describe "Module loading with version constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -253,9 +247,6 @@ Describe "Module loading with version constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -268,9 +259,6 @@ Describe "Module loading with version constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -283,9 +271,6 @@ Describe "Module loading with version constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -298,9 +283,6 @@ Describe "Module loading with version constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -417,9 +399,6 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -434,9 +413,6 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -451,9 +427,6 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -466,9 +439,6 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -481,9 +451,6 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -496,9 +463,6 @@ Describe "Versioned directory loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -615,9 +579,6 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -632,9 +593,6 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -649,9 +607,6 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -664,9 +619,6 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -679,9 +631,6 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -694,9 +643,6 @@ Describe "Rooted module loading with module constraints" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -810,9 +756,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -827,9 +770,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -844,9 +784,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -861,9 +798,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -876,9 +810,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -891,9 +822,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -906,9 +834,6 @@ Describe "Preloaded module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1054,9 +979,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1071,9 +993,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1088,9 +1007,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1105,9 +1021,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1120,9 +1033,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1135,9 +1045,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1150,9 +1057,6 @@ Describe "Preloaded modules with versioned directory version checking" -Tag "Fea Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1299,9 +1203,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1316,9 +1217,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1333,9 +1231,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1350,9 +1245,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1365,9 +1257,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1380,9 +1269,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion @@ -1395,9 +1281,6 @@ Describe "Preloaded rooted module specification checking" -Tags "Feature" { Assert-ModuleIsCorrect ` -Module $mod ` - -Name $moduleName ` - -Version $actualVersion ` - -Guid $actualGuid ` -MinVersion $ModuleVersion ` -MaxVersion $MaximumVersion ` -RequiredVersion $RequiredVersion