Files
hrynco-kswitcher/tests/update_progress.ps1
T

32 lines
2.3 KiB
PowerShell

param([string]$PreviewDirectory = (Join-Path $PSScriptRoot '../build/update-preview'), [switch]$Network)
$ErrorActionPreference = 'Stop'
. (Join-Path $PSScriptRoot '../resources/update.ps1') -Library
[IO.Directory]::CreateDirectory($PreviewDirectory) | Out-Null
Start-UpdateProgress
try {
if ($script:progressWindow.Status -ne 'Checking for updates') { throw 'Initial progress stage missing' }
Show-UpdateProgress 'Downloading update' '42% - 1.6 / 3.9 MB' 42
if ($script:progressWindow.Percent -ne 42) { throw 'Determinate download progress missing' }
$script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'download.png'))
if ($Network) {
Receive-File 'https://gitea.hrynco.com/api/v1/repos/hrynco/hrynco-kswitcher/releases?limit=100' (Join-Path $PreviewDirectory 'releases.json') 2MB 'Downloading update'
if ($script:progressWindow.Percent -ne 100) { throw 'Real download did not finish at 100 percent' }
}
foreach ($stage in @('Verifying download','Preparing installation','Closing KSwitcher','Installing update','Restarting KSwitcher','Restoring previous version')) {
Show-UpdateProgress $stage 'Update stage under test'
if ($script:progressWindow.Status -ne $stage -or $script:progressWindow.Percent -ne -1) { throw "Invalid progress stage: $stage" }
}
$script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'rollback.png'))
$script:progressWindow.Finish('Update completed','KSwitcher 0.6.11 is now running.',$true)
if ($script:progressWindow.Status -ne 'Update completed' -or $script:progressWindow.Percent -ne 100) { throw 'Completion state missing' }
Start-Sleep -Milliseconds 800 # Let the native progress-bar animation finish before capturing it.
$script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'complete.png'))
$script:progressWindow.Finish('Update failed',"The updated application did not confirm startup.`r`nThe previous version has been restored and restarted.",$false)
if ($script:progressWindow.Status -ne 'Update failed' -or $script:progressWindow.Percent -ne 0) { throw 'Failure state missing' }
$script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'failed.png'))
'Passed updater progress UI checks'
} finally {
$script:progressWindow.Dispose()
$script:progressWindow = $null
}