Skip to content

Commit

Permalink
Merge pull request #216 from YusukeIwaki/porting/8183
Browse files Browse the repository at this point in the history
feat: respond multiple headers with same key
  • Loading branch information
YusukeIwaki committed May 8, 2022
2 parents f6756af + 32540e8 commit 6d95a21
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
17 changes: 14 additions & 3 deletions lib/puppeteer/http_request.rb
Expand Up @@ -217,8 +217,14 @@ def failure
private def headers_to_array(headers)
return nil unless headers

headers.map do |key, value|
{ name: key, value: value.to_s }
headers.flat_map do |key, value|
if value.is_a?(Enumerable)
value.map do |v|
{ name: key, value: v.to_s }
end
else
{ name: key, value: value.to_s }
end
end
end

Expand Down Expand Up @@ -349,7 +355,12 @@ def respond(status: nil, headers: nil, content_type: nil, body: nil, priority: n

mock_response_headers = {}
headers&.each do |key, value|
mock_response_headers[key.downcase] = value
mock_response_headers[key.downcase] =
if value.is_a?(Enumerable)
value.map(&:to_s)
else
value.to_s
end
end
if content_type
mock_response_headers['content-type'] = content_type
Expand Down
28 changes: 28 additions & 0 deletions spec/integration/request_interception_spec.rb
Expand Up @@ -36,6 +36,34 @@

page.goto(server_empty_page)
end

it 'should allow mocking multiple headers with same key', sinatra: true do
page.request_interception = true
page.on('request') do |request|
request.respond(
status: 200,
headers: {
foo: 'bar',
arr: ['1', '2'],
'set-cookie': ['first=1', 'second=2'],
},
body: 'Hello world',
)
end

response = page.goto(server_empty_page)
cookies = page.cookies
first_cookie = cookies.find { |cookie| cookie['name'] == 'first' }
second_cookie = cookies.find { |cookie| cookie['name'] == 'second' }

expect(response.status).to eq(200)
expect(response.headers['foo']).to eq('bar')
expect(response.headers['arr']).to eq("1\n2")
# request.respond() will not trigger Network.responseReceivedExtraInfo
# fail to get 'set-cookie' header from response
expect(first_cookie['value']).to eq('1')
expect(second_cookie['value']).to eq('2')
end
end

# https://github.com/puppeteer/puppeteer/blob/e2e98376b9a3fa9a2501ddc86ff6407f3b59887d/docs/api.md#cooperative-intercept-mode-and-legacy-intercept-mode
Expand Down

0 comments on commit 6d95a21

Please sign in to comment.