tst/Common/Get-AssertionMessage.Tests.ps1

InModuleScope -ModuleName Assert {
    Describe "Get-AssertionMessage" {
        It "returns correct message when no tokens are provided" {
            $expected = "Static failure message."
            $customMessage = "Static failure message."
            Get-AssertionMessage -Message $customMessage -Expected 1 -Actual 2 | Verify-Equal $expected
        }

        It "returns correct message when named tokens are provided" {
            $expected = "We expected string to be 1, but got 2."
            $customMessage = "We expected string to be <expected>, but got <actual>."
            Get-AssertionMessage -Message $customMessage -Expected 1 -Actual 2 | Verify-Equal $expected
        }

        It "returns correct message when complex objects are provided" {
            $expected = "We expected string to be PSObject{Age=28; Name=Jakub}, but got 2."
            $customMessage = "We expected string to be <expected>, but got <actual>."
            Get-AssertionMessage -Message $customMessage -Expected (New-PSObject @{Name='Jakub';Age=28}) -Actual 2 | Verify-Equal $expected
        }

        It "returns correct message when type tokens are provided" {
            $expected = "We expected string to be PSObject, but got int."
            $customMessage = "We expected string to be <expectedType>, but got <actualType>."
            Get-AssertionMessage -Message $customMessage -Expected (New-PSObject @{Name='Jakub';Age=28}) -Actual 2 | Verify-Equal $expected
        }

         It "returns correct type message when `$null is provided" {
            $expected = "Expected type is <null>, and actual type is <null>."
            $customMessage = "Expected type is <expectedType>, and actual type is <actualType>."
            Get-AssertionMessage -Message $customMessage -Expected $null -Actual $null | Verify-Equal $expected
        }

         It "returns correct message when option is provided" {
            $expected = "Expected 'a', but got 'b'. Used options: CaseSensitive, IgnoreWhitespace."
            $customMessage = "Expected 'a', but got 'b'. <options>"
            Get-AssertionMessage -Message $customMessage -Expected 'a' -Actual 'b' -Option "CaseSensitive","IgnoreWhitespace" | Verify-Equal $expected
        }

        It "returns correct message when additional data are provided" { 
            $expected = "but 3 of them '1, 2, 3' did not pass the filter."

            $customMessage = "but <actualFilteredCount> of them '<actualFiltered>' did not pass the filter."
            $data = @{ 
                actualFilteredCount = 3
                actualFiltered = 1, 2, 3
            }

            Get-AssertionMessage -Message $customMessage -Data $data | Verify-Equal $expected
        }
    }
}