Private/Runtime/Tests/New-OpenApiHttpContent.Tests.ps1
|
BeforeAll { $env:TCS_CONFIG_ROOT = Join-Path -Path $TestDrive -ChildPath 'config' $env:TCS_SKIP_UPDATE_CHECK = '1' $env:TCS_TELEMETRY_OPTOUT = '1' $ModuleRoot = Split-Path -Path (Split-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -Parent) -Parent Import-Module -Name (Join-Path -Path $ModuleRoot -ChildPath 'tcs.openapi.psd1') -Force # Windows PowerShell 5.1 does not load System.Net.Http by default Add-Type -AssemblyName 'System.Net.Http' } AfterAll { Remove-Module -Name tcs.openapi -Force -ErrorAction SilentlyContinue } Describe 'New-OpenApiHttpContent' { It 'serialises JSON with charset utf-8' { InModuleScope -ModuleName tcs.openapi { $content = New-OpenApiHttpContent -Body ([ordered]@{ a = $null; b = @(1) }) -ContentType 'application/json' $content.Headers.ContentType.ToString() | Should -Be 'application/json; charset=utf-8' $content.ReadAsStringAsync().GetAwaiter().GetResult() | Should -Be '{"a":null,"b":[1]}' } } It 'keeps content type parameters and a given charset' { InModuleScope -ModuleName tcs.openapi { $content = New-OpenApiHttpContent -Body @{ a = 1 } -ContentType 'application/merge-patch+json; charset=utf-16' $content.Headers.ContentType.MediaType | Should -Be 'application/merge-patch+json' $content.Headers.ContentType.CharSet | Should -Be 'utf-16' } } It 'sends explicit null as JSON null' { InModuleScope -ModuleName tcs.openapi { (New-OpenApiHttpContent -Body $null -ContentType 'application/json').ReadAsStringAsync().GetAwaiter().GetResult() | Should -Be 'null' } } It 'encodes forms, text and binary bodies' { InModuleScope -ModuleName tcs.openapi { $form = New-OpenApiHttpContent -Body ([ordered]@{ a = 'x y' }) -ContentType 'application/x-www-form-urlencoded' $form.ReadAsStringAsync().GetAwaiter().GetResult() | Should -Be 'a=x%20y' $text = New-OpenApiHttpContent -Body '<a/>' -ContentType 'application/xml' $text.Headers.ContentType.ToString() | Should -Be 'application/xml; charset=utf-8' $binary = New-OpenApiHttpContent -Body ([byte[]](9, 8)) -ContentType 'application/octet-stream' $binary.Headers.ContentType.ToString() | Should -Be 'application/octet-stream' $binary.ReadAsByteArrayAsync().GetAwaiter().GetResult() | Should -Be ([byte[]](9, 8)) } } It 'returns multipart content as one object' { InModuleScope -ModuleName tcs.openapi { $content = New-OpenApiHttpContent -Body @{ a = 'b' } -ContentType 'multipart/form-data' # The content is a collection of parts; it must come back as the multipart object itself , $content | Should -BeOfType ([System.Net.Http.MultipartFormDataContent]) } } } |