Functions/Write-OutputMessage.Tests.ps1

describe "BitTitan.Runbooks.Common/Write-OutputMessage" -Tags "module", "unit" {

    # Import the function to test
    . "$($PSScriptRoot)\Write-OutputMessage.ps1"

    # Declare mocks
    mock Write-Information {}
    mock Write-Warning {}
    mock Write-Error {}

    it "writes a string to information" {
        # Call the function
        $output = Write-OutputMessage "message" -ToInformation -AppendNewLines 0

        # Verify mocks
        Assert-MockCalled Write-Information -Times 1 -Exactly -ParameterFilter {
            $MessageData -eq "message"
        } -Scope it
        Assert-MockCalled Write-Warning -Times 0 -Exactly -Scope it
        Assert-MockCalled Write-Error -Times 0 -Exactly -Scope it

        # Verify output
        $output | Should Be "message"
    }

    it "writes a string to warning" {
        # Call the function
        $output = Write-OutputMessage "message" -ToWarning -AppendNewLines 0

        # Verify mocks
        Assert-MockCalled Write-Information -Times 0 -Exactly -Scope it
        Assert-MockCalled Write-Warning -Times 1 -Exactly -ParameterFilter {
            $Message -eq "message"
        } -Scope it
        Assert-MockCalled Write-Error -Times 0 -Exactly -Scope it

        # Verify output
        $output | Should Be "message"
    }

    it "writes a string to error" {
        # Call the function
        $output = Write-OutputMessage "message" -ToError -AppendNewLines 0

        # Verify mocks
        Assert-MockCalled Write-Information -Times 0 -Exactly -Scope it
        Assert-MockCalled Write-Warning -Times 0 -Exactly -Scope it
        Assert-MockCalled Write-Error -Times 1 -Exactly -ParameterFilter {
            $Message -eq "message"
        } -Scope it

        # Verify output
        $output | Should Be "message"
    }

    it "appends newlines to the string before returning" {
        # Call the function
        $output = Write-OutputMessage "message" -AppendNewLines 3 -ToInformation

        # Verify output
        $output | Should Be "message`r`n`r`n`r`n"
    }
}