Skip to content

Commit 0d1419c

Browse files
authored
Fix array headers (#1598)
* perf(util): handle header array values * test(*): add array headers tests * chore(mock-agent): remove skip in headers test
1 parent 52d1ce5 commit 0d1419c

3 files changed

Lines changed: 34 additions & 2 deletions

File tree

lib/core/util.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,11 @@ function parseHeaders (headers, obj = {}) {
244244
const key = headers[i].toString().toLowerCase()
245245
let val = obj[key]
246246
if (!val) {
247-
obj[key] = headers[i + 1].toString()
247+
if (Array.isArray(headers[i + 1])) {
248+
obj[key] = headers[i + 1]
249+
} else {
250+
obj[key] = headers[i + 1].toString()
251+
}
248252
} else {
249253
if (!Array.isArray(val)) {
250254
val = [val]

test/mock-agent.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2494,3 +2494,30 @@ test('MockAgent - headers in mock dispatcher intercept should be case-insensitiv
24942494

24952495
t.end()
24962496
})
2497+
2498+
test('MockAgent - headers should be array of strings', async (t) => {
2499+
const mockAgent = new MockAgent()
2500+
mockAgent.disableNetConnect()
2501+
setGlobalDispatcher(mockAgent)
2502+
2503+
const mockPool = mockAgent.get('http://localhost:3000')
2504+
2505+
mockPool.intercept({
2506+
path: '/foo',
2507+
method: 'GET'
2508+
}).reply(200, 'foo', {
2509+
headers: {
2510+
'set-cookie': [
2511+
'foo=bar',
2512+
'bar=baz',
2513+
'baz=qux'
2514+
]
2515+
}
2516+
})
2517+
2518+
const { headers } = await request('http://localhost:3000/foo', {
2519+
method: 'GET'
2520+
})
2521+
2522+
t.equal(headers['set-cookie'].length, 3)
2523+
})

test/util.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,12 @@ test('validateHandler', (t) => {
8383
})
8484

8585
test('parseHeaders', (t) => {
86-
t.plan(4)
86+
t.plan(5)
8787
t.same(util.parseHeaders(['key', 'value']), { key: 'value' })
8888
t.same(util.parseHeaders([Buffer.from('key'), Buffer.from('value')]), { key: 'value' })
8989
t.same(util.parseHeaders(['Key', 'Value']), { key: 'Value' })
9090
t.same(util.parseHeaders(['Key', 'value', 'key', 'Value']), { key: ['value', 'Value'] })
91+
t.same(util.parseHeaders(['key', ['value1', 'value2', 'value3']]), { key: ['value1', 'value2', 'value3'] })
9192
})
9293

9394
test('parseRawHeaders', (t) => {

0 commit comments

Comments
 (0)