From 727ba52a4d6fd03b390af85553bc28c6a5e165a0 Mon Sep 17 00:00:00 2001 From: Gabi <218829269+GabiNun2@users.noreply.github.com> Date: Thu, 2 Jul 2026 20:50:57 +0300 Subject: [PATCH] Deleted Test-WinUtilPackageManager.ps1 + custom winget and choco installs + remove winget/choco enums and exeptions (#4606) * Update Invoke-WPFGetInstalled.ps1 * Update Install-WinUtilWinget.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilWinget.ps1 * Delete functions/private/Test-WinUtilPackageManager.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilWinget.ps1 * Update Install-WinUtilChoco.ps1 * Update Invoke-WPFGetInstalled.ps1 * Update Invoke-WPFGetInstalled.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilWinget.ps1 * Update Install-WinUtilWinget.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilWinget.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilWinget.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilChoco.ps1 * Update Install-WinUtilWinget.ps1 * Fixed lastrun.json * refactor: remove PackageManagers enum and unused custom exception classes * Update Invoke-WPFUIElements.ps1 * Update Get-WinUtilSelectedPackages.ps1 * Update Set-Preferences.ps1 * Update main.ps1 * Complete package manager enum removal Use string package-manager preferences throughout the remaining helpers and focused tests. Restore the existing Winget install flow and package-manager probe helper so PR 4606 keeps the current WinGet repair method. * Fix string keyed package split --------- Co-authored-by: Chris Titus --- .../private/Get-WinUtilPackageLogSummary.ps1 | 4 +- .../private/Get-WinUtilSelectedPackages.ps1 | 6 +-- functions/private/Install-WinUtilChoco.ps1 | 17 ++------ functions/private/Set-Preferences.ps1 | 8 ---- functions/public/Invoke-WPFGetInstalled.ps1 | 2 +- functions/public/Invoke-WPFInstall.ps1 | 4 +- functions/public/Invoke-WPFUnInstall.ps1 | 5 ++- pester/install-workflow.Tests.ps1 | 38 +++++++----------- pester/package.Tests.ps1 | 40 +++++++------------ pester/preferences-theme.Tests.ps1 | 22 +++------- scripts/main.ps1 | 30 +------------- 11 files changed, 52 insertions(+), 124 deletions(-) diff --git a/functions/private/Get-WinUtilPackageLogSummary.ps1 b/functions/private/Get-WinUtilPackageLogSummary.ps1 index b588c22d..bd138cd0 100644 --- a/functions/private/Get-WinUtilPackageLogSummary.ps1 +++ b/functions/private/Get-WinUtilPackageLogSummary.ps1 @@ -4,7 +4,7 @@ function Get-WinUtilPackageLogSummary { [object[]]$Packages, [Parameter(Mandatory = $true)] - [PackageManagers]$Preference + [string]$Preference ) @($Packages | ForEach-Object { @@ -17,7 +17,7 @@ function Get-WinUtilPackageLogSummary { $packageName = "Unknown package" } - if ($Preference -eq [PackageManagers]::Choco -and -not [string]::IsNullOrWhiteSpace([string]$package.choco) -and $package.choco -ne "na") { + if ($Preference -eq "Choco" -and -not [string]::IsNullOrWhiteSpace([string]$package.choco) -and $package.choco -ne "na") { "$packageName (choco: $($package.choco))" } elseif (-not [string]::IsNullOrWhiteSpace([string]$package.winget) -and $package.winget -ne "na") { "$packageName (winget: $($package.winget))" diff --git a/functions/private/Get-WinUtilSelectedPackages.ps1 b/functions/private/Get-WinUtilSelectedPackages.ps1 index 780bb71b..8ca5ff42 100644 --- a/functions/private/Get-WinUtilSelectedPackages.ps1 +++ b/functions/private/Get-WinUtilSelectedPackages.ps1 @@ -5,7 +5,7 @@ function Get-WinUtilSelectedPackages { [object] $PackageList, [Parameter(Mandatory = $true)] - [PackageManagers] $Preference + [string] $Preference ) if ($PackageList.count -eq 1) { @@ -17,8 +17,8 @@ function Get-WinUtilSelectedPackages { $packagesWinget = [System.Collections.ArrayList]::new() $packagesChoco = [System.Collections.ArrayList]::new() $packages = @{ - ([PackageManagers]::Winget) = $packagesWinget - ([PackageManagers]::Choco) = $packagesChoco + Winget = $packagesWinget + Choco = $packagesChoco } function Add-PackageId { diff --git a/functions/private/Install-WinUtilChoco.ps1 b/functions/private/Install-WinUtilChoco.ps1 index 1590aec8..9c9929f1 100644 --- a/functions/private/Install-WinUtilChoco.ps1 +++ b/functions/private/Install-WinUtilChoco.ps1 @@ -1,16 +1,7 @@ function Install-WinUtilChoco { - - <# - - .SYNOPSIS - Installs Chocolatey if it is not already installed - - #> - if ((Test-WinUtilPackageManager -choco) -eq "installed") { - return + if (-not (Get-Command -Name choco)) { + Write-Host "Chocolatey is not installed. Installing now..." + $installScript = Invoke-WebRequest -Uri https://community.chocolatey.org/install.ps1 -UseBasicParsing + Invoke-Command -ScriptBlock ([scriptblock]::Create($installScript.Content)) } - - Write-Host "Chocolatey is not installed. Installing now..." - $installScript = Invoke-WebRequest -Uri https://community.chocolatey.org/install.ps1 -UseBasicParsing - Invoke-Command -ScriptBlock ([scriptblock]::Create($installScript.Content)) } diff --git a/functions/private/Set-Preferences.ps1 b/functions/private/Set-Preferences.ps1 index 1b411ec7..a82d3ce5 100644 --- a/functions/private/Set-Preferences.ps1 +++ b/functions/private/Set-Preferences.ps1 @@ -60,14 +60,6 @@ function Set-Preferences{ if ($null -eq $sync.preferences.packagemanager) { $sync.preferences.packagemanager = "Winget" } - - # convert packagemanager to enum - if ($sync.preferences.packagemanager -eq "Choco") { - $sync.preferences.packagemanager = [PackageManagers]::Choco - } - elseif ($sync.preferences.packagemanager -eq "Winget") { - $sync.preferences.packagemanager = [PackageManagers]::Winget - } } $iniPath = "$winutildir\preferences.ini" diff --git a/functions/public/Invoke-WPFGetInstalled.ps1 b/functions/public/Invoke-WPFGetInstalled.ps1 index 7b30a8cb..8813a704 100644 --- a/functions/public/Invoke-WPFGetInstalled.ps1 +++ b/functions/public/Invoke-WPFGetInstalled.ps1 @@ -23,7 +23,7 @@ function Invoke-WPFGetInstalled { Invoke-WPFRunspace -ParameterList @(("managerPreference", $managerPreference),("checkbox", $checkbox)) -ScriptBlock { param ( [string]$checkbox, - [PackageManagers]$managerPreference + [string]$managerPreference ) $sync.ProcessRunning = $true Invoke-WPFUIThread -ScriptBlock { Set-WinUtilTaskbaritem -state "Indeterminate" } diff --git a/functions/public/Invoke-WPFInstall.ps1 b/functions/public/Invoke-WPFInstall.ps1 index 243bc8de..d27ba2fc 100644 --- a/functions/public/Invoke-WPFInstall.ps1 +++ b/functions/public/Invoke-WPFInstall.ps1 @@ -29,8 +29,8 @@ function Invoke-WPFInstall { $packagesSorted = Get-WinUtilSelectedPackages -PackageList $PackagesToInstall -Preference $ManagerPreference - $packagesWinget = $packagesSorted[[PackageManagers]::Winget] - $packagesChoco = $packagesSorted[[PackageManagers]::Choco] + $packagesWinget = $packagesSorted['Winget'] + $packagesChoco = $packagesSorted['Choco'] Write-WinUtilLog -Component "Install" -Message "Install package manager split: winget=$(@($packagesWinget).Count), choco=$(@($packagesChoco).Count)" try { diff --git a/functions/public/Invoke-WPFUnInstall.ps1 b/functions/public/Invoke-WPFUnInstall.ps1 index 25ba23e7..a51af86d 100644 --- a/functions/public/Invoke-WPFUnInstall.ps1 +++ b/functions/public/Invoke-WPFUnInstall.ps1 @@ -39,8 +39,9 @@ function Invoke-WPFUnInstall { param($PackagesToUninstall, $ManagerPreference) $packagesSorted = Get-WinUtilSelectedPackages -PackageList $PackagesToUninstall -Preference $ManagerPreference - $packagesWinget = $packagesSorted[[PackageManagers]::Winget] - $packagesChoco = $packagesSorted[[PackageManagers]::Choco] + + $packagesWinget = $packagesSorted['Winget'] + $packagesChoco = $packagesSorted['Choco'] Write-WinUtilLog -Component "Uninstall" -Message "Uninstall package manager split: winget=$(@($packagesWinget).Count), choco=$(@($packagesChoco).Count)" try { diff --git a/pester/install-workflow.Tests.ps1 b/pester/install-workflow.Tests.ps1 index f4d633cb..e7d6751e 100644 --- a/pester/install-workflow.Tests.ps1 +++ b/pester/install-workflow.Tests.ps1 @@ -5,16 +5,6 @@ BeforeAll { $script:repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path - if (-not ("PackageManagers" -as [type])) { - Add-Type @" -public enum PackageManagers -{ - Winget, - Choco -} -"@ - } - . (Join-Path $script:repoRoot "functions\private\Get-WinUtilPackageLogSummary.ps1") . (Join-Path $script:repoRoot "functions\public\Invoke-WPFInstall.ps1") . (Join-Path $script:repoRoot "functions\public\Invoke-WPFUnInstall.ps1") @@ -26,7 +16,7 @@ public enum PackageManagers param($ArgumentList, $ParameterList, [scriptblock]$ScriptBlock) } function Get-WinUtilSelectedPackages { - param($PackageList, [PackageManagers]$Preference) + param($PackageList, [string]$Preference) } function Show-WPFInstallAppBusy { param($text) @@ -82,7 +72,7 @@ public enum PackageManagers ProcessRunning = $ProcessRunning selectedApps = $selectedApps preferences = [pscustomobject]@{ - packagemanager = [PackageManagers]::Winget + packagemanager = "Winget" } configs = @{ applicationsHashtable = $applications @@ -97,15 +87,15 @@ public enum PackageManagers ) $packages = @{} - $packages[[PackageManagers]::Winget] = [System.Collections.Generic.List[string]]::new() - $packages[[PackageManagers]::Choco] = [System.Collections.Generic.List[string]]::new() + $packages["Winget"] = [System.Collections.Generic.List[string]]::new() + $packages["Choco"] = [System.Collections.Generic.List[string]]::new() foreach ($package in $Winget) { - $null = $packages[[PackageManagers]::Winget].Add($package) + $null = $packages["Winget"].Add($package) } foreach ($package in $Choco) { - $null = $packages[[PackageManagers]::Choco].Add($package) + $null = $packages["Choco"].Add($package) } $packages @@ -145,7 +135,7 @@ Describe "Invoke-WPFInstall entrypoint" { @($ParameterList[0][1]).Count -eq 1 -and @($ParameterList[0][1])[0].winget -eq "Git.Git" -and $ParameterList[1][0] -eq "ManagerPreference" -and - $ParameterList[1][1] -eq [PackageManagers]::Winget + $ParameterList[1][1] -eq "Winget" } Should -Invoke -CommandName Show-WinUtilMessage -Times 0 -Exactly Should -Invoke -CommandName Write-WinUtilLog -Times 1 -Exactly -ParameterFilter { @@ -217,10 +207,10 @@ Describe "Invoke-WPFInstall runspace body" { It "installs split winget and choco packages and cleans up on success" { Invoke-WPFInstall - & $script:capturedInstallScriptBlock -PackagesToInstall @($script:package) -ManagerPreference ([PackageManagers]::Winget) + & $script:capturedInstallScriptBlock -PackagesToInstall @($script:package) -ManagerPreference "Winget" Should -Invoke -CommandName Get-WinUtilSelectedPackages -Times 1 -Exactly -ParameterFilter { - @($PackageList).Count -eq 1 -and $Preference -eq [PackageManagers]::Winget + @($PackageList).Count -eq 1 -and $Preference -eq "Winget" } Should -Invoke -CommandName Show-WPFInstallAppBusy -Times 1 -Exactly -ParameterFilter { $text -eq "Installing apps..." @@ -245,7 +235,7 @@ Describe "Invoke-WPFInstall runspace body" { Invoke-WPFInstall - & $script:capturedInstallScriptBlock -PackagesToInstall @($script:package) -ManagerPreference ([PackageManagers]::Winget) + & $script:capturedInstallScriptBlock -PackagesToInstall @($script:package) -ManagerPreference "Winget" Should -Invoke -CommandName Hide-WPFInstallAppBusy -Times 1 -Exactly Should -Invoke -CommandName Invoke-WPFUIThread -Times 1 -Exactly -ParameterFilter { @@ -298,7 +288,7 @@ Describe "Invoke-WPFUnInstall entrypoint" { @($ParameterList[0][1]).Count -eq 1 -and @($ParameterList[0][1])[0].winget -eq "Git.Git" -and $ParameterList[1][0] -eq "ManagerPreference" -and - $ParameterList[1][1] -eq [PackageManagers]::Winget + $ParameterList[1][1] -eq "Winget" } Should -Invoke -CommandName Write-WinUtilLog -Times 1 -Exactly -ParameterFilter { $Component -eq "Uninstall" -and @@ -374,10 +364,10 @@ Describe "Invoke-WPFUnInstall runspace body" { It "uninstalls split winget and choco packages and cleans up on success" { Invoke-WPFUnInstall -PackagesToUninstall @($script:package) - & $script:capturedUninstallScriptBlock -PackagesToUninstall @($script:package) -ManagerPreference ([PackageManagers]::Winget) + & $script:capturedUninstallScriptBlock -PackagesToUninstall @($script:package) -ManagerPreference "Winget" Should -Invoke -CommandName Get-WinUtilSelectedPackages -Times 1 -Exactly -ParameterFilter { - @($PackageList).Count -eq 1 -and $Preference -eq [PackageManagers]::Winget + @($PackageList).Count -eq 1 -and $Preference -eq "Winget" } Should -Invoke -CommandName Show-WPFInstallAppBusy -Times 1 -Exactly -ParameterFilter { $text -eq "Uninstalling apps..." @@ -400,7 +390,7 @@ Describe "Invoke-WPFUnInstall runspace body" { Invoke-WPFUnInstall -PackagesToUninstall @($script:package) - & $script:capturedUninstallScriptBlock -PackagesToUninstall @($script:package) -ManagerPreference ([PackageManagers]::Winget) + & $script:capturedUninstallScriptBlock -PackagesToUninstall @($script:package) -ManagerPreference "Winget" Should -Invoke -CommandName Hide-WPFInstallAppBusy -Times 1 -Exactly Should -Invoke -CommandName Invoke-WPFUIThread -Times 1 -Exactly -ParameterFilter { diff --git a/pester/package.Tests.ps1 b/pester/package.Tests.ps1 index e5a0e468..64949c75 100644 --- a/pester/package.Tests.ps1 +++ b/pester/package.Tests.ps1 @@ -5,16 +5,6 @@ BeforeAll { $script:repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path - if (-not ("PackageManagers" -as [type])) { - Add-Type @" -public enum PackageManagers -{ - Winget, - Choco -} -"@ - } - . (Join-Path $script:repoRoot "functions\private\Get-WinUtilSelectedPackages.ps1") . (Join-Path $script:repoRoot "functions\private\Test-WinUtilPackageManager.ps1") . (Join-Path $script:repoRoot "functions\private\Install-WinUtilProgramWinget.ps1") @@ -35,10 +25,10 @@ Describe "Get-WinUtilSelectedPackages" { [pscustomobject]@{ winget = "VideoLAN.VLC"; choco = "vlc" } ) - $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference ([PackageManagers]::Winget) + $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference "Winget" - (@($result[[PackageManagers]::Winget]) -join "|") | Should -Be "Git.Git|VideoLAN.VLC" - @($result[[PackageManagers]::Choco]).Count | Should -Be 0 + (@($result["Winget"]) -join "|") | Should -Be "Git.Git|VideoLAN.VLC" + @($result["Choco"]).Count | Should -Be 0 } It "uses choco IDs and falls back to winget for na or missing choco IDs" { @@ -48,10 +38,10 @@ Describe "Get-WinUtilSelectedPackages" { [pscustomobject]@{ winget = "Mozilla.Firefox" } ) - $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference ([PackageManagers]::Choco) + $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference "Choco" - (@($result[[PackageManagers]::Choco]) -join "|") | Should -Be "git" - (@($result[[PackageManagers]::Winget]) -join "|") | Should -Be "VideoLAN.VLC|Mozilla.Firefox" + (@($result["Choco"]) -join "|") | Should -Be "git" + (@($result["Winget"]) -join "|") | Should -Be "VideoLAN.VLC|Mozilla.Firefox" } It "skips blank, na, and missing package IDs" { @@ -62,10 +52,10 @@ Describe "Get-WinUtilSelectedPackages" { [pscustomobject]@{ winget = " " } ) - $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference ([PackageManagers]::Winget) + $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference "Winget" - @($result[[PackageManagers]::Winget]).Count | Should -Be 0 - @($result[[PackageManagers]::Choco]).Count | Should -Be 0 + @($result["Winget"]).Count | Should -Be 0 + @($result["Choco"]).Count | Should -Be 0 } It "deduplicates package IDs" { @@ -75,17 +65,17 @@ Describe "Get-WinUtilSelectedPackages" { [pscustomobject]@{ winget = "VideoLAN.VLC"; choco = "vlc" } ) - $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference ([PackageManagers]::Choco) + $result = Get-WinUtilSelectedPackages -PackageList $packages -Preference "Choco" - (@($result[[PackageManagers]::Choco]) -join "|") | Should -Be "git|vlc" - @($result[[PackageManagers]::Winget]).Count | Should -Be 0 + (@($result["Choco"]) -join "|") | Should -Be "git|vlc" + @($result["Winget"]).Count | Should -Be 0 } It "returns empty package lists for an empty selection" { - $result = Get-WinUtilSelectedPackages -PackageList @() -Preference ([PackageManagers]::Winget) + $result = Get-WinUtilSelectedPackages -PackageList @() -Preference "Winget" - @($result[[PackageManagers]::Winget]).Count | Should -Be 0 - @($result[[PackageManagers]::Choco]).Count | Should -Be 0 + @($result["Winget"]).Count | Should -Be 0 + @($result["Choco"]).Count | Should -Be 0 } } diff --git a/pester/preferences-theme.Tests.ps1 b/pester/preferences-theme.Tests.ps1 index c65eba3e..ab1b65a3 100644 --- a/pester/preferences-theme.Tests.ps1 +++ b/pester/preferences-theme.Tests.ps1 @@ -5,16 +5,6 @@ BeforeAll { $script:repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path - if (-not ("PackageManagers" -as [type])) { - Add-Type @" -public enum PackageManagers -{ - Winget, - Choco -} -"@ - } - if (-not ("Windows.Media.SolidColorBrush" -as [type])) { Add-Type @" namespace Windows.Media @@ -213,10 +203,10 @@ Describe "Set-Preferences" { Set-Preferences $script:sync.preferences.theme | Should -Be "Auto" - $script:sync.preferences.packagemanager | Should -Be ([PackageManagers]::Winget) + $script:sync.preferences.packagemanager | Should -Be "Winget" } - It "loads saved preferences and converts the package manager to an enum" { + It "loads saved preferences and keeps the package manager as a string" { $script:testRoot = New-WinUtilPreferencesTestRoot $global:winutildir = $script:testRoot New-WinUtilPreferenceSync @@ -228,7 +218,7 @@ Describe "Set-Preferences" { Set-Preferences $script:sync.preferences.theme | Should -Be "Dark" - $script:sync.preferences.packagemanager | Should -Be ([PackageManagers]::Choco) + $script:sync.preferences.packagemanager | Should -Be "Choco" } It "saves current preferences to preferences.ini" { @@ -236,7 +226,7 @@ Describe "Set-Preferences" { $global:winutildir = $script:testRoot New-WinUtilPreferenceSync -Preferences @{ theme = "Light" - packagemanager = [PackageManagers]::Winget + packagemanager = "Winget" } Set-Preferences -save @@ -256,7 +246,7 @@ Describe "Set-Preferences" { Set-Preferences $script:sync.preferences.theme | Should -Be "Light" - $script:sync.preferences.packagemanager | Should -Be ([PackageManagers]::Choco) + $script:sync.preferences.packagemanager | Should -Be "Choco" Test-Path (Join-Path $script:testRoot "LightTheme.ini") | Should -BeFalse Test-Path (Join-Path $script:testRoot "preferChocolatey.ini") | Should -BeFalse } @@ -270,7 +260,7 @@ Describe "Set-Preferences" { Set-Preferences $script:sync.preferences.theme | Should -Be "Auto" - $script:sync.preferences.packagemanager | Should -Be ([PackageManagers]::Choco) + $script:sync.preferences.packagemanager | Should -Be "Choco" } } diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 44e76f9f..5fb3d257 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -20,32 +20,6 @@ CCC::::::::::::C T:::::::::T T:::::::::T =====Windows Toolbox===== "@ -# Create enums -Add-Type @" -public enum PackageManagers -{ - Winget, - Choco -} -"@ - -# Create classes for different exceptions - -class WingetFailedInstall : Exception { - [string]$additionalData - WingetFailedInstall($Message) : base($Message) {} -} - -class ChocoFailedInstall : Exception { - [string]$additionalData - ChocoFailedInstall($Message) : base($Message) {} -} - -class GenericException : Exception { - [string]$additionalData - GenericException($Message) : base($Message) {} -} - # Load the configuration files $sync.configs.applicationsHashtable = @{} @@ -165,11 +139,11 @@ $xaml.SelectNodes("//*[@Name]") | ForEach-Object {$sync["$("$($psitem.Name)")"] #Persist Package Manager preference across winutil restarts $sync.ChocoRadioButton.Add_Checked({ - $sync.preferences.packagemanager = [PackageManagers]::Choco + $sync.preferences.packagemanager = "Choco" Set-Preferences -save }) $sync.WingetRadioButton.Add_Checked({ - $sync.preferences.packagemanager = [PackageManagers]::Winget + $sync.preferences.packagemanager = "Winget" Set-Preferences -save })