mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2026-08-09 09:31:15 +10:00
* Improve O&O ShutUp10++ download flow * Refine Windows Update profile behavior and docs * Fix documentation link regressions * Restore updates when applying recommended profile
140 lines
5.2 KiB
PowerShell
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
|
|
}
|
|
}
|