tests/Test-AutoUpdate.ps1
|
#Requires -Version 7 $ErrorActionPreference = 'Stop' . (Join-Path $PSScriptRoot '_TestHelpers.ps1') $connectRoot = Split-Path $PSScriptRoot -Parent Import-Module (Join-Path $connectRoot 'SailPoint.Connect.psd1') -Force try { # 1) Get-SailPointConnectUpdate when skip env var is set $env:SAILPOINT_CONNECT_SKIP_UPDATE_CHECK = '1' $skipCheck = Get-SailPointConnectUpdate Assert-True $skipCheck.Skipped 'Get-SailPointConnectUpdate respects SAILPOINT_CONNECT_SKIP_UPDATE_CHECK' Assert-True (-not $skipCheck.UpdateAvailable) 'UpdateAvailable is false when skipped' Remove-Item env:SAILPOINT_CONNECT_SKIP_UPDATE_CHECK -ErrorAction SilentlyContinue # 2) Get-SailPointConnectUpdate with mock higher version $env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION = '9.9.9' $mockCheck = Get-SailPointConnectUpdate Assert-True $mockCheck.UpdateAvailable 'Get-SailPointConnectUpdate detects higher mock version' Assert-Equal '9.9.9' $mockCheck.LatestVersion.ToString() 'LatestVersion matches mock version' Assert-Equal '1.4.0' $mockCheck.CurrentVersion.ToString() 'CurrentVersion matches active version' # 3) Get-SailPointConnectUpdate with mock lower version $env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION = '1.0.0' $lowerCheck = Get-SailPointConnectUpdate Assert-True (-not $lowerCheck.UpdateAvailable) 'UpdateAvailable is false when mock version is lower' Remove-Item env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION -ErrorAction SilentlyContinue # 4) Update-SailPointConnect -CheckOnly $env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION = '2.0.0' $checkOnlyResult = Update-SailPointConnect -CheckOnly Assert-True $checkOnlyResult.UpdateAvailable 'Update-SailPointConnect -CheckOnly reports available update' # 5) Update-SailPointConnect -WhatIf (ShouldProcess) $whatIfResult = Update-SailPointConnect -WhatIf Assert-True (-not $whatIfResult.Updated) 'Update-SailPointConnect with WhatIf does not apply update' # 6) Update-SailPointConnect with mock success action $env:SAILPOINT_CONNECT_MOCK_UPDATE_ACTION = 'Success' $updateSuccess = Update-SailPointConnect Assert-True $updateSuccess.Success 'Update-SailPointConnect succeeds with mock update' Assert-True $updateSuccess.Updated 'Update-SailPointConnect reports Updated = true' # 7) Update-SailPointConnect when already up to date and no force $env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION = '1.4.0' $upToDate = Update-SailPointConnect Assert-True $upToDate.Success 'Update-SailPointConnect succeeds when already up to date' Assert-True (-not $upToDate.Updated) 'Update-SailPointConnect does not reinstall when already up to date' # 8) Update-SailPointConnect with mock failure action $env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION = '2.5.0' $env:SAILPOINT_CONNECT_MOCK_UPDATE_ACTION = 'Fail' $failed = $false try { Update-SailPointConnect } catch { $failed = $true } Assert-True $failed 'Update-SailPointConnect raises terminating exception on install failure' Remove-Item env:SAILPOINT_CONNECT_MOCK_UPDATE_ACTION -ErrorAction SilentlyContinue Remove-Item env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION -ErrorAction SilentlyContinue # 9) Invoke-SailPointConnect -CheckUpdate in non-interactive mode $env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION = '3.0.0' $invCheck = Invoke-SailPointConnect -CheckUpdate -NonInteractive Assert-True ($null -ne $invCheck) 'Invoke-SailPointConnect -CheckUpdate returns result' Assert-True $invCheck.UpdateAvailable 'Invoke-SailPointConnect -CheckUpdate identifies update' # 10) Invoke-SailPointConnect -Update in non-interactive mode $env:SAILPOINT_CONNECT_MOCK_UPDATE_ACTION = 'Success' $invUpdate = Invoke-SailPointConnect -Update -NonInteractive Assert-True $invUpdate.Success 'Invoke-SailPointConnect -Update succeeds' Assert-True $invUpdate.Updated 'Invoke-SailPointConnect -Update reports updated' # 11) Invoke-SailPointConnect -Platform Update in non-interactive mode $invPlatformUpdate = Invoke-SailPointConnect -Platform Update -NonInteractive Assert-True $invPlatformUpdate.Success 'Invoke-SailPointConnect -Platform Update succeeds' # 12) Confirm-SailPointConnectUpdate in non-interactive mode is silent and returns false Initialize-OperatorConsole -NonInteractive $confirmNonInt = Confirm-SailPointConnectUpdate -Wizard -Force Assert-True (-not $confirmNonInt) 'Confirm-SailPointConnectUpdate is non-blocking and false in non-interactive mode' # 13) Invoke-SailPointConnect parameter check $cmd = Get-Command Invoke-SailPointConnect Assert-True ($cmd.Parameters.ContainsKey('Update')) 'Invoke-SailPointConnect has -Update switch' Assert-True ($cmd.Parameters.ContainsKey('CheckUpdate')) 'Invoke-SailPointConnect has -CheckUpdate switch' Assert-True ($cmd.Parameters.ContainsKey('SkipUpdateCheck')) 'Invoke-SailPointConnect has -SkipUpdateCheck switch' $platformAttr = $cmd.Parameters['Platform'].Attributes | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] } Assert-True ($platformAttr.ValidValues -contains 'Update') 'Invoke-SailPointConnect -Platform includes Update in ValidateSet' # 14) Aliases exist and resolve $aliasCmd = Get-Command 'update-sailpoint-connect' Assert-Equal 'Update-SailPointConnect' $aliasCmd.Definition 'update-sailpoint-connect alias maps to Update-SailPointConnect' } finally { Remove-Item env:SAILPOINT_CONNECT_SKIP_UPDATE_CHECK -ErrorAction SilentlyContinue Remove-Item env:SAILPOINT_CONNECT_MOCK_LATEST_VERSION -ErrorAction SilentlyContinue Remove-Item env:SAILPOINT_CONNECT_MOCK_UPDATE_ACTION -ErrorAction SilentlyContinue } Write-Host "PASS ($script:AssertionCount assertions)" |