tests/Write-ErrorLog.Tests.ps1
|
BeforeAll { $modulePath = (Resolve-Path "$PSScriptRoot\..\modules\Core.psm1").Path Import-Module $modulePath -Force } AfterAll { Remove-Module Core -Force -ErrorAction SilentlyContinue } Describe "Write-ErrorLog" { Context "Error logging with Message only" { It "logs message with Error level" { $testMessage = "Critical error occurred" $logDir = "$PSScriptRoot\..\logs" if (Test-Path $logDir) { Remove-Item $logDir -Recurse -Force } Write-ErrorLog -Message $testMessage $logFile = Get-ChildItem -Path $logDir -Filter "log_*.csv" | Select-Object -First 1 $content = @(Get-Content -Path $logFile.FullName) $content[-1] | Should -Match "ERROR" $content[-1] | Should -Match $testMessage } } Context "Error logging with Caller parameter" { It "logs message with Error level and Caller" { $testMessage = "Operation failed" $testCaller = "Get-SystemInfo" $logDir = "$PSScriptRoot\..\logs" if (Test-Path $logDir) { Remove-Item $logDir -Recurse -Force } Write-ErrorLog -Message $testMessage -Caller $testCaller $logFile = Get-ChildItem -Path $logDir -Filter "log_*.csv" | Select-Object -First 1 $content = @(Get-Content -Path $logFile.FullName) $content[-1] | Should -Match "ERROR" $content[-1] | Should -Match $testMessage $content[-1] | Should -Match $testCaller } } Context "WhatIf parameter support" { It "accepts WhatIf parameter without error" { $testMessage = "WhatIf test" # Should not throw error when WhatIf is specified { Write-ErrorLog -Message $testMessage -WhatIf } | Should -Not -Throw } It "accepts Confirm parameter without error" { $testMessage = "Confirm test" # Should not throw error when Confirm is specified { Write-ErrorLog -Message $testMessage -Confirm:$false } | Should -Not -Throw } } Context "Parameter validation" { It "throws error when Message is null" { { Write-ErrorLog -Message $null } | Should -Throw } It "throws error when Message is empty string" { { Write-ErrorLog -Message "" } | Should -Throw } } Context "Integration with Write-Log" { It "passes Message parameter to Write-Log" { $testMessage = "Integration test message" $logDir = "$PSScriptRoot\..\logs" if (Test-Path $logDir) { Remove-Item $logDir -Recurse -Force } Write-ErrorLog -Message $testMessage $logFile = Get-ChildItem -Path $logDir -Filter "log_*.csv" | Select-Object -First 1 $content = @(Get-Content -Path $logFile.FullName) # Verify log entry contains both ERROR level and message $logEntry = $content[-1] $logEntry | Should -Match "ERROR" $logEntry | Should -Match $testMessage # Verify CSV format (comma-separated values) ($logEntry -split ',').Count | Should -BeGreaterThan 1 } } } |