Tests/ConvertTo-UrlQueryString.tests.ps1
Import-Module $PSScriptRoot\.. -Force Describe 'ConvertTo-UrlQueryString functionality' -Tags Unit { InModuleScope UrlQueryStringParser { It 'Converts a complex example dict correctly' { $exampleOrderedDict = [ordered] @{ foo="bar" oogy=$true array='one','two','three','four' baz="quux" boogy=$true empty='' donotshow=$false last=$true } ConvertTo-UrlQueryString $exampleOrderedDict | Should -Be "?foo=bar&oogy&array=one&array=two&array=three&array=four&baz=quux&boogy&empty=&last" } It 'Converts properly with empty ContinuationOfString' { ConvertTo-UrlQueryString @{foo=$true} -ContinuationOfString '' | Should -Be '?foo' } It 'Converts properly with non-empty ContinuationOfString' { ConvertTo-UrlQueryString @{foo=$true} -ContinuationOfString '?bar=baz'| Should -Be '?bar=baz&foo' } It 'Converts an empty dict with non-empty -ContinuationOfString to just be -ContinuationOfString.' { ConvertTo-UrlQueryString @{} -ContinuationOfString '?bar=baz' | Should -Be "?bar=baz" } It 'Converts empty dict to empty UrlQueryString' { ConvertTo-UrlQueryString @{} | Should -Be "" } It 'Converts dict with $null values to empty UrlQueryString' { ConvertTo-UrlQueryString @{foo=$null;bar=$null} | Should -Be "" } It 'Skips encoding spaces when -DoMinimalEncode is set' { ConvertTo-UrlQueryString @{foo='bar baz quux'} -DoMinimalEncode | Should -Be "?foo=bar baz quux" } It 'Encodes $ in keys' { ConvertTo-UrlQueryString @{'$foo'='bar'} | Should -Be "?%24foo=bar" } It 'Skips encoding $ in keys when -DoMinimalEncode is set.' { ConvertTo-UrlQueryString @{'$foo'='bar'} -DoMinimalEncode | Should -Be "?`$foo=bar" } It 'Encodes other various characters correctly when -DoMinimalEncode is set.' { ConvertTo-UrlQueryString ([ordered]@{ allow = 'example equals= colon: at@ slash/ brackets[[] dollar$ comma, semicolon; question? parens()) star* exclaim! space space' disallow = "example hash# ampersand& percent% plus+ tab`t linebreak`r`n " }) -DoMinimalEncode | Should -Be ( '?allow=example equals= colon: at@ slash/ brackets[[] dollar$ comma, semicolon; question? parens()) star* exclaim! space space' + '&disallow=example hash%23 ampersand%26 percent%25 plus%2B tab%09 linebreak%0D%0A ' ) } It 'Encodes spaces correctly when -DoMinimalEncode is not set.' { ConvertTo-UrlQueryString @{foo='bar baz quux'} | Should -Be "?foo=bar%20baz%20quux" } } } |