Tests/Get-WorkloadSessionStatus.Tests.ps1
|
Describe 'Get-WorkloadSessionStatus' { BeforeAll { $modulePath = Join-Path (Join-Path $PSScriptRoot '..') 'WinslopFix.psd1' Import-Module $modulePath -Force -ErrorAction Stop } AfterAll { Remove-Module WinslopFix -Force -ErrorAction SilentlyContinue } Context 'When no WorkloadsSessionHost processes are running' { BeforeAll { Mock -ModuleName WinslopFix Get-WinslopFixProcess { return @() } -ParameterFilter { $ProcessName -eq 'WorkloadsSessionHost' } } It 'returns a summary object with zero instances' { $result = Get-WorkloadSessionStatus $result | Should -Not -BeNullOrEmpty $result.Status | Should -Be 'NoProcessesFound' $result.InstanceCount | Should -Be 0 $result.TotalMemoryMB | Should -Be 0 } } Context 'When WorkloadsSessionHost processes are running' { BeforeAll { $mockProcesses = @( [PSCustomObject]@{ Id = 1234 ProcessName = 'WorkloadsSessionHost' PrivateMemorySize64 = 500MB TotalProcessorTime = [TimeSpan]::FromSeconds(30) StartTime = (Get-Date).AddSeconds(-120) } [PSCustomObject]@{ Id = 5678 ProcessName = 'WorkloadsSessionHost' PrivateMemorySize64 = 250MB TotalProcessorTime = [TimeSpan]::FromSeconds(10) StartTime = (Get-Date).AddSeconds(-60) } ) Mock -ModuleName WinslopFix Get-WinslopFixProcess { return $mockProcesses } -ParameterFilter { $ProcessName -eq 'WorkloadsSessionHost' } } It 'returns one object per process plus a summary' { $results = @(Get-WorkloadSessionStatus) # 2 processes + 1 summary = 3 objects $results.Count | Should -Be 3 } It 'returns correct PID values' { $results = @(Get-WorkloadSessionStatus) $results[0].PID | Should -Be 1234 $results[1].PID | Should -Be 5678 } It 'calculates memory in MB' { $results = @(Get-WorkloadSessionStatus) $results[0].MemoryMB | Should -BeGreaterThan 400 $results[1].MemoryMB | Should -BeGreaterThan 200 } It 'includes an aggregate summary as the last object' { $results = @(Get-WorkloadSessionStatus) $summary = $results[-1] $summary.Status | Should -Match 'Summary' $summary.PID | Should -BeNullOrEmpty $summary.MemoryMB | Should -BeGreaterThan 700 } It 'calculates process age in seconds' { $results = @(Get-WorkloadSessionStatus) $results[0].AgeSeconds | Should -BeGreaterOrEqual 100 $results[1].AgeSeconds | Should -BeGreaterOrEqual 50 } } Context 'With custom ProcessName' { BeforeAll { Mock -ModuleName WinslopFix Get-WinslopFixProcess { return @() } -ParameterFilter { $ProcessName -eq 'CustomProcess' } } It 'accepts a custom process name parameter' { $result = Get-WorkloadSessionStatus -ProcessName 'CustomProcess' $result.ProcessName | Should -Be 'CustomProcess' } } } |