2022-10-23 13:28:55 -05:00
|
|
|
#region Configurable Variables
|
|
|
|
|
|
|
|
<#
|
|
|
|
.NOTES
|
|
|
|
Use this section to configure testing variables. IE if the number of tabs change in the GUI update that variable here.
|
|
|
|
All variables need to be global to be passed between contexts
|
|
|
|
|
|
|
|
#>
|
|
|
|
|
|
|
|
$global:FormName = "Chris Titus Tech's Windows Utility"
|
|
|
|
|
|
|
|
#endregion Configurable Variables
|
|
|
|
|
|
|
|
#region Load Variables needed for testing
|
|
|
|
|
|
|
|
#Config Files
|
2022-11-14 15:48:10 -06:00
|
|
|
$global:configs = @{}
|
|
|
|
|
|
|
|
(
|
2022-11-29 17:54:18 -06:00
|
|
|
"applications"
|
2022-11-14 15:48:10 -06:00
|
|
|
) | ForEach-Object {
|
|
|
|
$global:configs["$PSItem"] = Get-Content .\config\$PSItem.json | ConvertFrom-Json
|
|
|
|
}
|
2022-10-23 13:28:55 -05:00
|
|
|
|
|
|
|
#GUI
|
|
|
|
$global:inputXML = get-content MainWindow.xaml
|
|
|
|
$global:inputXML = $global:inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^<Win.*', '<Window'
|
|
|
|
[xml]$global:XAML = $global:inputXML
|
|
|
|
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
|
|
|
|
$global:reader = (New-Object System.Xml.XmlNodeReader $global:xaml)
|
2022-11-14 15:48:10 -06:00
|
|
|
$global:Form = [Windows.Markup.XamlReader]::Load( $global:reader )
|
|
|
|
$global:xaml.SelectNodes("//*[@Name]") | ForEach-Object { Set-Variable -Name "Global:WPF$($_.Name)" -Value $global:Form.FindName($_.Name) -Scope global }
|
2022-10-23 13:28:55 -05:00
|
|
|
|
|
|
|
#dotsource original script to pull in all variables and ensure no errors
|
|
|
|
$script = Get-Content .\winutil.ps1
|
2022-11-29 17:54:18 -06:00
|
|
|
$output = $script[0..($script.count - 4)] | Out-File .\pester.ps1
|
|
|
|
|
2022-10-23 13:28:55 -05:00
|
|
|
|
|
|
|
#endregion Load Variables needed for testing
|
|
|
|
|
|
|
|
#===========================================================================
|
2022-11-29 17:54:18 -06:00
|
|
|
# Tests - Application Installs
|
2022-10-23 13:28:55 -05:00
|
|
|
#===========================================================================
|
|
|
|
|
2022-11-29 17:54:18 -06:00
|
|
|
Describe "Application Installs" {
|
2022-10-23 13:28:55 -05:00
|
|
|
Context "Application installs" {
|
|
|
|
It "Imports with no errors" {
|
2022-11-14 15:48:10 -06:00
|
|
|
$global:configs.Applications | should -Not -BeNullOrEmpty
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
2022-11-29 17:54:18 -06:00
|
|
|
}
|
|
|
|
Context "Winget Install" {
|
|
|
|
$global:configs.applications.install | Get-Member -MemberType NoteProperty | ForEach-Object {
|
|
|
|
$TestCase = @{ name = $psitem.name }
|
|
|
|
It "$($psitem.name) should include Winget Install" -TestCases $TestCase{
|
|
|
|
param($name)
|
|
|
|
$null -eq $global:configs.applications.install.$name.winget | should -Befalse -because "$name Did not include a Winget Install"
|
|
|
|
}
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
2022-11-29 17:54:18 -06:00
|
|
|
}
|
|
|
|
Context "GUI Applications Checkbox" {
|
|
|
|
(get-variable | Where-Object {$psitem.name -like "*install*" -and $psitem.value.GetType().name -eq "CheckBox"}).name -replace 'Global:','' | ForEach-Object {
|
2022-10-23 13:28:55 -05:00
|
|
|
|
2022-11-29 17:54:18 -06:00
|
|
|
$TestCase = @{ name = $psitem }
|
|
|
|
It "$($psitem) should include application.json " -TestCases $TestCase{
|
|
|
|
param($name)
|
|
|
|
$null -eq $global:configs.applications.install.$name | should -Befalse -because "$name Does not have entry in applications.json"
|
|
|
|
}
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
|
|
|
}
|
2022-11-29 17:54:18 -06:00
|
|
|
}
|
2022-10-23 13:28:55 -05:00
|
|
|
|
2022-11-29 17:54:18 -06:00
|
|
|
#===========================================================================
|
|
|
|
# Tests - Tweak Presets
|
|
|
|
#===========================================================================
|
2022-10-23 13:28:55 -05:00
|
|
|
|
2022-11-29 17:54:18 -06:00
|
|
|
Describe "Tweak Presets" {
|
|
|
|
Context "Json Import" {
|
|
|
|
It "Imports with no errors" {
|
|
|
|
$global:configs.preset | should -Not -BeNullOrEmpty
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
2022-11-29 17:54:18 -06:00
|
|
|
}
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
#===========================================================================
|
|
|
|
# Tests - GUI
|
|
|
|
#===========================================================================
|
|
|
|
|
|
|
|
Describe "GUI" {
|
|
|
|
Context "XML" {
|
|
|
|
It "Imports with no errors" {
|
|
|
|
$global:XAML | should -Not -BeNullOrEmpty
|
|
|
|
}
|
|
|
|
It "Title should be $global:FormName" {
|
|
|
|
$global:XAML.window.Title | should -Be $global:FormName
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Context "Form" {
|
|
|
|
It "Imports with no errors" {
|
2022-11-14 15:48:10 -06:00
|
|
|
$global:Form | should -Not -BeNullOrEmpty
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
|
|
|
It "Title should match XML" {
|
2022-11-14 15:48:10 -06:00
|
|
|
$global:Form.title | should -Be $global:XAML.window.Title
|
2022-10-23 13:28:55 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#===========================================================================
|
2022-11-29 17:54:18 -06:00
|
|
|
# Tests - GUI Functions
|
2022-10-23 13:28:55 -05:00
|
|
|
#===========================================================================
|
|
|
|
|
|
|
|
Describe "GUI Functions" {
|
2022-11-29 17:54:18 -06:00
|
|
|
BeforeEach -Scriptblock {. ./pester.ps1}
|
2022-10-23 13:28:55 -05:00
|
|
|
|
|
|
|
It "GUI should load with no errors" {
|
|
|
|
$WPFTab1BT | should -Not -BeNullOrEmpty
|
|
|
|
$WPFundoall | should -Not -BeNullOrEmpty
|
|
|
|
$WPFPanelDISM | should -Not -BeNullOrEmpty
|
|
|
|
$WPFPanelAutologin | should -Not -BeNullOrEmpty
|
|
|
|
$WPFUpdatesdefault | should -Not -BeNullOrEmpty
|
|
|
|
$WPFFixesUpdate | should -Not -BeNullOrEmpty
|
|
|
|
$WPFUpdatesdisable | should -Not -BeNullOrEmpty
|
|
|
|
$WPFUpdatessecurity | should -Not -BeNullOrEmpty
|
|
|
|
$WPFFeatureInstall | should -Not -BeNullOrEmpty
|
|
|
|
$WPFundoall | should -Not -BeNullOrEmpty
|
|
|
|
$WPFDisableDarkMode | should -Not -BeNullOrEmpty
|
|
|
|
$WPFEnableDarkMode | should -Not -BeNullOrEmpty
|
|
|
|
$WPFtweaksbutton | should -Not -BeNullOrEmpty
|
|
|
|
$WPFminimal | should -Not -BeNullOrEmpty
|
|
|
|
$WPFlaptop | should -Not -BeNullOrEmpty
|
|
|
|
$WPFdesktop | should -Not -BeNullOrEmpty
|
|
|
|
$WPFInstallUpgrade | should -Not -BeNullOrEmpty
|
|
|
|
$WPFinstall | should -Not -BeNullOrEmpty
|
|
|
|
}
|
2022-11-14 15:48:10 -06:00
|
|
|
|
2022-11-29 17:54:18 -06:00
|
|
|
Context "Get-CheckBoxes" {
|
|
|
|
It "Get-CheckBoxes Install should return data" {
|
|
|
|
. .\pester.ps1
|
2022-11-14 15:48:10 -06:00
|
|
|
|
2022-11-29 17:27:36 -06:00
|
|
|
$TestCheckBoxes = @(
|
|
|
|
"WPFInstallvc2015_32"
|
|
|
|
"WPFInstallvscode"
|
|
|
|
"WPFInstallgit"
|
|
|
|
)
|
|
|
|
|
|
|
|
$OutputResult = New-Object System.Collections.Generic.List[System.Object]
|
|
|
|
$TestCheckBoxes | ForEach-Object {
|
|
|
|
|
|
|
|
$global:configs.applications.Install.$psitem.winget -split ";" | ForEach-Object {
|
|
|
|
$OutputResult.Add($psitem)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$OutputResult = Sort-Object -InputObject $OutputResult
|
|
|
|
|
|
|
|
$TestCheckBoxes | ForEach-Object {(Get-Variable $PSItem).value.ischecked = $true}
|
|
|
|
$Output = Get-CheckBoxes -Group WPFInstall | Sort-Object
|
|
|
|
$Output | should -Not -BeNullOrEmpty -Because "Output did not containe applications to install"
|
|
|
|
$Output | Should -Not -Be $OutputResult -Because "Output contains duplicate values"
|
|
|
|
$Output | Should -Be $($OutputResult | Select-Object -Unique | Sort-Object) -Because "Output doesn't match"
|
|
|
|
$TestCheckBoxes | ForEach-Object {(Get-Variable $PSItem).value.ischecked | should -be $false}
|
2022-11-14 15:48:10 -06:00
|
|
|
}
|
2022-11-29 17:54:18 -06:00
|
|
|
|
|
|
|
Context "Set-Presets" {
|
|
|
|
$global:configs.preset | Get-Member -MemberType NoteProperty | ForEach-Object {
|
|
|
|
$TestCase = @{ name = $psitem.name }
|
|
|
|
It "preset $($psitem.name) should modify the correct values" -TestCases $TestCase {
|
|
|
|
param($name)
|
|
|
|
Set-Presets $name
|
|
|
|
get-variable $global:configs.preset.$name | Select-Object -ExpandProperty value | Select-Object -ExpandProperty ischecked | Where-Object {$psitem -eq $false} | should -BeNullOrEmpty
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|