Files
Chris TitusandGitHub 29595f90e2 Fix progress, update profiles, and documentation links (#4845)
* Improve O&O ShutUp10++ download flow

* Refine Windows Update profile behavior and docs

* Fix documentation link regressions

* Restore updates when applying recommended profile
2026-07-15 23:36:46 -05:00

140 lines
5.2 KiB
PowerShell

#===========================================================================
# Tests - O&O ShutUp10++ Download Workflow
#===========================================================================
BeforeAll {
$script:repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
. (Join-Path $script:repoRoot "functions\private\Save-WinUtilFile.ps1")
. (Join-Path $script:repoRoot "functions\public\Invoke-WPFOOSU.ps1")
function Invoke-WPFRunspace {
param($ArgumentList, $ParameterList, [scriptblock]$ScriptBlock)
}
function Set-WinUtilTweaksProgressIndicator {
param($Visible, $Label, $Percent)
}
function Show-WinUtilMessage {
param($Message, $Title, $Button, $Icon)
}
function Write-WinUtilLog {
param($Message, $Level, $Component)
}
function script:New-WinUtilOOSUTestContext {
param([bool]$ProcessRunning = $false)
$script:sync = [Hashtable]::Synchronized(@{
ProcessRunning = $ProcessRunning
winutildir = $TestDrive
Form = [pscustomobject]@{
Dispatcher = [pscustomobject]@{}
}
})
}
}
Describe "Save-WinUtilFile" {
It "copies a download and reports its percentage" {
$sourcePath = Join-Path $TestDrive "source.bin"
$destinationPath = Join-Path $TestDrive "destination.bin"
$sourceBytes = [byte[]](0..255)
[System.IO.File]::WriteAllBytes($sourcePath, $sourceBytes)
$reportedProgress = [System.Collections.Generic.List[int]]::new()
Save-WinUtilFile -Uri ([uri]$sourcePath) -DestinationPath $destinationPath -ProgressCallback {
param($percent)
$reportedProgress.Add($percent)
}
[System.IO.File]::ReadAllBytes($destinationPath) | Should -Be $sourceBytes
$reportedProgress[-1] | Should -Be 100
}
}
Describe "Invoke-WPFOOSU" {
BeforeEach {
New-WinUtilOOSUTestContext
$script:capturedScriptBlock = $null
$script:capturedParameterList = $null
Mock Invoke-WPFRunspace {
$script:capturedScriptBlock = $ScriptBlock
$script:capturedParameterList = $ParameterList
[pscustomobject]@{ MockHandle = $true }
}
Mock Set-WinUtilTweaksProgressIndicator { }
Mock Show-WinUtilMessage { }
Mock Write-WinUtilLog { }
Mock Start-Process { }
Mock Write-Error { }
}
AfterEach {
Remove-Variable -Name sync -Scope Script -ErrorAction SilentlyContinue
Remove-Variable -Name capturedScriptBlock -Scope Script -ErrorAction SilentlyContinue
Remove-Variable -Name capturedParameterList -Scope Script -ErrorAction SilentlyContinue
}
It "queues the download in a background runspace" {
Invoke-WPFOOSU
$script:sync.ProcessRunning | Should -BeTrue
Should -Invoke Invoke-WPFRunspace -Times 1 -Exactly
$script:capturedParameterList[0][0] | Should -Be "downloadPath"
$script:capturedParameterList[0][1] | Should -Be (Join-Path $TestDrive "ooshutup10.exe")
}
It "does not start while another process is running" {
New-WinUtilOOSUTestContext -ProcessRunning $true
Invoke-WPFOOSU
Should -Invoke Show-WinUtilMessage -Times 1 -Exactly -ParameterFilter {
$Message -eq "Another process is currently running." -and
$Title -eq "WinUtil" -and
$Button -eq "OK" -and
$Icon -eq "Warning"
}
Should -Not -Invoke Invoke-WPFRunspace
}
It "maps download progress to the window indicator and launches O&O ShutUp10++" {
Mock Save-WinUtilFile {
& $ProgressCallback 35
& $ProgressCallback 100
}
Invoke-WPFOOSU
& $script:capturedScriptBlock -downloadPath $script:capturedParameterList[0][1]
Should -Invoke Set-WinUtilTweaksProgressIndicator -Times 1 -Exactly -ParameterFilter {
$Visible -eq $true -and $Label -eq "Downloading O&O ShutUp10++ (0%)" -and $Percent -eq 0
}
Should -Invoke Set-WinUtilTweaksProgressIndicator -Times 1 -Exactly -ParameterFilter {
$Visible -eq $true -and $Label -eq "Downloading O&O ShutUp10++ (35%)" -and $Percent -eq 35
}
Should -Invoke Set-WinUtilTweaksProgressIndicator -Times 1 -Exactly -ParameterFilter {
$Visible -eq $true -and $Label -eq "O&O ShutUp10++ launched" -and $Percent -eq 100
}
Should -Invoke Start-Process -Times 1 -Exactly -ParameterFilter {
$FilePath -eq (Join-Path $TestDrive "ooshutup10.exe")
}
$script:sync.ProcessRunning | Should -BeFalse
}
It "shows failure progress and clears the running state when the download fails" {
Mock Save-WinUtilFile { throw "download failed" }
Invoke-WPFOOSU
& $script:capturedScriptBlock -downloadPath $script:capturedParameterList[0][1]
Should -Invoke Set-WinUtilTweaksProgressIndicator -Times 1 -Exactly -ParameterFilter {
$Visible -eq $true -and $Label -eq "O&O ShutUp10++ download failed" -and $Percent -eq 100
}
Should -Not -Invoke Start-Process
Should -Invoke Write-Error -Times 1 -Exactly
$script:sync.ProcessRunning | Should -BeFalse
}
}