tests/functions/Get-MtGitHubResponseHeaderValue.Tests.ps1
|
BeforeAll { Import-Module "$PSScriptRoot/../../Maester.psd1" -Force } Describe 'Get-MtGitHubResponseHeaderValue' { Context 'Null headers' { It 'Returns $null when Headers is $null' { InModuleScope Maester { Get-MtGitHubResponseHeaderValue -Headers $null -Name 'x-ratelimit-remaining' | Should -BeNullOrEmpty } } } Context 'IDictionary headers (PS 5.1 WebHeaderCollection style)' { It 'Returns value for exact-case match' { InModuleScope Maester { $headers = @{ 'x-ratelimit-remaining' = '42' } Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'x-ratelimit-remaining' | Should -Be '42' } } It 'Returns value for different-case header name' { InModuleScope Maester { $headers = @{ 'X-RateLimit-Remaining' = '10' } Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'x-ratelimit-remaining' | Should -Be '10' } } It 'Returns first element when header value is an array' { InModuleScope Maester { $headers = @{ 'Link' = @('<https://api.github.com/next>; rel="next"', '<https://api.github.com/last>; rel="last"') } $result = Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'Link' $result | Should -Be '<https://api.github.com/next>; rel="next"' } } It 'Returns $null when header is not present' { InModuleScope Maester { $headers = @{ 'content-type' = 'application/json' } Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'x-ratelimit-remaining' | Should -BeNullOrEmpty } } } Context 'HttpResponseHeaders with GetValues (PS 7 style)' { It 'Returns value when GetValues succeeds' { InModuleScope Maester { $headers = [PSCustomObject]@{} $headers | Add-Member -MemberType ScriptMethod -Name GetValues -Value { param([string]$name) if ($name -eq 'x-ratelimit-reset') { return @('1700000000') } throw "Header '$name' not found" } $result = Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'x-ratelimit-reset' $result | Should -Be '1700000000' } } It 'Returns $null when GetValues throws for unknown header' { InModuleScope Maester { $headers = [PSCustomObject]@{} $headers | Add-Member -MemberType ScriptMethod -Name GetValues -Value { param([string]$name) throw "Header '$name' not found" } Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'x-ratelimit-remaining' | Should -BeNullOrEmpty } } } Context 'HttpResponseHeaders with TryGetValues (PS 7 style)' { It 'Returns value when TryGetValues succeeds' { InModuleScope Maester { $headers = [PSCustomObject]@{} $headers | Add-Member -MemberType ScriptMethod -Name TryGetValues -Value { param([string]$name, [ref]$values) if ($name -eq 'retry-after') { $values.Value = @('30') return $true } return $false } $result = Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'retry-after' $result | Should -Be '30' } } It 'Returns $null when TryGetValues returns false' { InModuleScope Maester { $headers = [PSCustomObject]@{} $headers | Add-Member -MemberType ScriptMethod -Name TryGetValues -Value { param([string]$name, [ref]$values) $null = $name $null = $values return $false } Get-MtGitHubResponseHeaderValue -Headers $headers -Name 'x-ratelimit-remaining' | Should -BeNullOrEmpty } } } } |