Testing/Unit/PowerShell/Support/Reset-CyberAssessmentDependencies.Tests.ps1
|
Import-Module (Join-Path -Path $PSScriptRoot -ChildPath '../../../../Modules/Support') InModuleScope 'Support' { Describe "Reset-CyberAssessmentDependencies" { BeforeAll { # Load the actual RequiredVersions.ps1 data for testing $RequiredVersionsPath = Join-Path -Path $PSScriptRoot -ChildPath "..\..\..\..\RequiredVersions.ps1" if (Test-Path -Path $RequiredVersionsPath) { . $RequiredVersionsPath $script:RealModuleList = $ModuleList } else { throw "Could not find RequiredVersions.ps1 at expected path: $RequiredVersionsPath" } } BeforeEach { # Mock output functions Mock Write-Information { } Mock Write-Output { } Mock Write-Warning { } Mock Write-Error { } # Mock PowerShellGet functions to prevent actual installation Mock Install-Module { } Mock Uninstall-Module { } Mock Update-Module { } Mock Get-InstalledModule { return $null } } Context "WhatIf mode testing (safe execution)" { It "Should analyze missing modules without installing them" { Mock Get-Module { return $null } # No modules installed $result = Reset-CyberAssessmentDependencies -Scope CurrentUser -WhatIf $result.WhatIfMode | Should -Be $true $result.ModulesToInstall.Count | Should -Be $script:RealModuleList.Count $result.ActionsCompleted | Should -Be 0 # No actual actions in WhatIf mode $result.ActionsNeeded | Should -Be $script:RealModuleList.Count # Verify no actual PowerShellGet operations were called Assert-MockCalled Install-Module -Times 0 Assert-MockCalled Uninstall-Module -Times 0 } It "Should handle PowerShell version check correctly" { # This test verifies the function loads and checks version properly Mock Get-Module { return $null } { Reset-CyberAssessmentDependencies -Scope CurrentUser -WhatIf } | Should -Not -Throw } It "Should return proper object structure" { Mock Get-Module { return $null } $result = Reset-CyberAssessmentDependencies -Scope CurrentUser -WhatIf # Verify return object has expected properties $result.PSObject.Properties.Name | Should -Contain 'Status' $result.PSObject.Properties.Name | Should -Contain 'ModulesToInstall' $result.PSObject.Properties.Name | Should -Contain 'ActionsNeeded' $result.PSObject.Properties.Name | Should -Contain 'WhatIfMode' $result.PSObject.Properties.Name | Should -Contain 'Scope' } It "Should identify all required modules for installation" { Mock Get-Module { return $null } $result = Reset-CyberAssessmentDependencies -Scope CurrentUser -WhatIf # Check that all expected modules are identified foreach ($expectedModule in $script:RealModuleList) { $found = $result.ModulesToInstall | Where-Object { $_.Name -eq $expectedModule.ModuleName } $found | Should -Not -BeNullOrEmpty -Because "Module $($expectedModule.ModuleName) should be in install list" } } } Context "Parameter validation" { It "Should accept valid Scope values" { Mock Get-Module { return $null } { Reset-CyberAssessmentDependencies -Scope CurrentUser -WhatIf } | Should -Not -Throw { Reset-CyberAssessmentDependencies -Scope AllUsers -WhatIf } | Should -Not -Throw } It "Should work with WhatIf parameter" { Mock Get-Module { return $null } $result = Reset-CyberAssessmentDependencies -WhatIf -Scope CurrentUser $result.WhatIfMode | Should -Be $true } } } } |