@parallel=false
Feature: encoding tests
Scenario: special characters in the url
Given url demoBaseUrl + '/encoding/�Ill~Formed@RequiredString!'
When method get
Then status 200
And match response == '�Ill~Formed@RequiredString!'
Scenario: special characters in the path
Given url demoBaseUrl
And path 'encoding', '�Ill~Formed@RequiredString!'
When method get
Then status 200
And match response == '�Ill~Formed@RequiredString!'
Scenario: question mark in the url
Given url demoBaseUrl + '/encoding/index.php%3F/api/v2'
And path 'hello'
When method get
Then status 200
And match response == 'hello'
Scenario: append trailing / to url
Given url demoBaseUrl
And path 'encoding', 'hello', ''
When method get
Then status 200
And match response == 'hello/'
Scenario: path escapes special characters
Given url demoBaseUrl
And path 'encoding', '"<>#{}|\^[]`'
When method get
Then status 200
And match response == '"<>#{}|\^[]`'
Scenario: leading / in path is not required
Given url demoBaseUrl
And path 'encoding', 'hello'
When method get
Then status 200
And match response == 'hello'
Scenario: manually decode before using as the url
* def encoded = 'encoding%2Ffoo%2Bbar'
* def decoded = karate.urlDecode(encoded)
Given url demoBaseUrl + '/' + decoded
When method get
Then status 200
And match response == 'foo+bar'
Scenario: path but with forward-slashes
Given url demoBaseUrl + '/encoding'
And path '/hello/world/123/'
When method get
Then status 200
And match response == 'hello/world/123'
Scenario: german xml
Given url demoBaseUrl
And path 'echo'
And request Müller
And header Content-Type = 'application/xml; charset=utf-8'
When method post
Then status 200
And xml response = response
And match response == Müller
Scenario: french json
Given url demoBaseUrl
And path 'echo'
And request { givenName: 'oliàèôç' }
And header Content-Type = 'application/json; charset=utf-8'
When method post
Then status 200
And match response == { givenName: 'oliàèôç' }
Scenario: french json ISO-8859-1
Given url demoBaseUrl
And path 'echo'
And request { givenName: 'oliàèôç' }
And header Content-Type = 'application/json; charset=ISO-8859-1'
When method post
Then status 200
And match response == { givenName: '#string' }
* def contentType = karate.prevRequest.headers['Content-Type'][0]
* match contentType contains 'application/json'
* match contentType contains 'charset=ISO-8859-1'
Scenario: french & german form field
Given url demoBaseUrl
And path 'echo', 'message'
And form field text = 'oliàèôç Müller'
And header Content-Type = 'application/x-www-form-urlencoded'
When method post
Then status 200
And match response == 'oliàèôç Müller'
Scenario: french & german multipart
Given url demoBaseUrl
Given path 'files'
And multipart file myFile = { read: '../upload/karate-logo.jpg', filename: 'karate-logo.jpg', contentType: 'image/jpg' }
And multipart field message = 'oliàèôç Müller'
And header Content-Type = 'multipart/form-data; charset=utf-8'
When method post
Then status 200
And match response == { id: '#uuid', filename: 'karate-logo.jpg', message: 'oliàèôç Müller', contentType: 'image/jpg' }
Scenario: multipart but forcing the charset to NOT be sent
Given url demoBaseUrl
Given path 'files'
And multipart file myFile = { read: '../upload/karate-logo.jpg', filename: 'karate-logo.jpg', contentType: 'image/jpg' }
And multipart field message = 'oliàèôç Müller'
# this ensures that "charset" does NOT appear in the Content-Type header
# which is often required as some servers don't like it
And configure charset = null
When method post
Then status 200
And match response == { id: '#uuid', filename: 'karate-logo.jpg', message: 'oliàèôç Müller', contentType: 'image/jpg' }