Tests/EAI/EAIError.Tests.ps1

BeforeAll {
    if ($Module) {
        $script:DevModuleName = Import-Module $Module -Force -PassThru | Select-Object -ExpandProperty Name
    }
    else {
        $devModule = Join-Path $PSScriptRoot '..' '..' 'Dev.Logic.Monitor.psd1'
        $script:DevModuleName = Import-Module $devModule -Force -PassThru | Select-Object -ExpandProperty Name
    }
}

Describe 'Format-EAIErrorMessage' {
    It 'Appends Edwin trace id when present' {
        InModuleScope -ModuleName $script:DevModuleName {
            $message = Format-EAIErrorMessage -ResponseBody '{"code":422,"message":"Invalid event_time format","id":"7eec5062-abcd-efgh-ijkl-1234567890ab"}' -StatusCode 422

            $message | Should -Be '422: Invalid event_time format (trace id: 7eec5062-abcd-efgh-ijkl-1234567890ab)'
        }
    }

    It 'Appends trace id when errors array is present' {
        InModuleScope -ModuleName $script:DevModuleName {
            $message = Format-EAIErrorMessage -ResponseBody '{"code":422,"message":"Validation failed","errors":["event_time"],"id":"abc-123"}' -StatusCode 422

            $message | Should -Be '422: Validation failed [event_time] (trace id: abc-123)'
        }
    }

    It 'Does not append trace id when id is missing' {
        InModuleScope -ModuleName $script:DevModuleName {
            $message = Format-EAIErrorMessage -ResponseBody '{"code":401,"message":"Credentials are required to access this resource."}' -StatusCode 401

            $message | Should -Be '401: Credentials are required to access this resource.'
        }
    }

    It 'Returns non-JSON response bodies unchanged' {
        InModuleScope -ModuleName $script:DevModuleName {
            Format-EAIErrorMessage -ResponseBody 'Gateway Timeout' -StatusCode 504 | Should -Be 'Gateway Timeout'
        }
    }
}