Tests/LoggerService.Tests.ps1

$ErrorActionPreference = 'Stop'

Describe 'LoggerService (configure and dispatch)' {
    BeforeAll {
        $modulePath = Join-Path $PSScriptRoot '..\ITFabrik.Logger.psd1'
        Import-Module $modulePath -Force
    }

    BeforeEach { InModuleScope 'ITFabrik.Logger' { [LoggerService]::Reset() } }

    It 'initializes service and sets StepManagerLogger' { InModuleScope 'ITFabrik.Logger' {
        Initialize-LoggerService -Reset
        (Get-Variable -Name StepManagerLogger -Scope Global -ErrorAction Stop).Value | Should -BeOfType [scriptblock]
    } }

    It 'dispatches to all registered sinks' { InModuleScope 'ITFabrik.Logger' {
        Mock Invoke-SMConsoleLogger -ModuleName 'ITFabrik.Logger' {}
        Mock Invoke-FileSink -ModuleName 'ITFabrik.Logger' {}
        Mock Invoke-WebSink -ModuleName 'ITFabrik.Logger' {}

        Initialize-LoggerService -Reset
        Register-LoggerSink -Type Console
        Register-LoggerSink -Type File -Path (Join-Path $env:TEMP ("disp_{0}.log" -f ([guid]::NewGuid().ToString('N'))))
        # Web sink registration is not exposed publicly; tested separately in WebSink.Tests.ps1

        & $Global:StepManagerLogger 'Comp' 'Hello' 'Warning' 1

        Should -Invoke -CommandName Invoke-SMConsoleLogger -Times 1 -Exactly
        Should -Invoke -CommandName Invoke-FileSink -Times 1 -Exactly
        # Web sink not registered here
    } }
}