diff options
Diffstat (limited to 'test/headers-as-array.js')
-rw-r--r-- | test/headers-as-array.js | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/test/headers-as-array.js b/test/headers-as-array.js new file mode 100644 index 0000000..fd8bb5d --- /dev/null +++ b/test/headers-as-array.js @@ -0,0 +1,131 @@ +'use strict' + +const { test } = require('tap') +const { Client, errors } = require('..') +const { createServer } = require('http') + +test('handle headers as array', (t) => { + t.plan(1) + const headers = ['a', '1', 'b', '2', 'c', '3'] + + const server = createServer((req, res) => { + t.match(req.headers, { a: '1', b: '2', c: '3' }) + res.end() + }) + t.teardown(server.close.bind(server)) + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.destroy.bind(client)) + + client.request({ + path: '/', + method: 'GET', + headers + }, () => {}) + }) +}) + +test('handle multi-valued headers as array', (t) => { + t.plan(1) + const headers = ['a', '1', 'b', '2', 'c', '3', 'd', '4', 'd', '5'] + + const server = createServer((req, res) => { + t.match(req.headers, { a: '1', b: '2', c: '3', d: '4, 5' }) + res.end() + }) + t.teardown(server.close.bind(server)) + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.destroy.bind(client)) + + client.request({ + path: '/', + method: 'GET', + headers + }, () => {}) + }) +}) + +test('handle headers with array', (t) => { + t.plan(1) + const headers = { a: '1', b: '2', c: '3', d: ['4'] } + + const server = createServer((req, res) => { + t.match(req.headers, { a: '1', b: '2', c: '3', d: '4' }) + res.end() + }) + t.teardown(server.close.bind(server)) + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.destroy.bind(client)) + + client.request({ + path: '/', + method: 'GET', + headers + }, () => {}) + }) +}) + +test('handle multi-valued headers', (t) => { + t.plan(1) + const headers = { a: '1', b: '2', c: '3', d: ['4', '5'] } + + const server = createServer((req, res) => { + t.match(req.headers, { a: '1', b: '2', c: '3', d: '4, 5' }) + res.end() + }) + t.teardown(server.close.bind(server)) + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.destroy.bind(client)) + + client.request({ + path: '/', + method: 'GET', + headers + }, () => {}) + }) +}) + +test('fail if headers array is odd', (t) => { + t.plan(2) + const headers = ['a', '1', 'b', '2', 'c', '3', 'd'] + + const server = createServer((req, res) => { res.end() }) + t.teardown(server.close.bind(server)) + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.destroy.bind(client)) + + client.request({ + path: '/', + method: 'GET', + headers + }, (err) => { + t.type(err, errors.InvalidArgumentError) + t.equal(err.message, 'headers array must be even') + }) + }) +}) + +test('fail if headers is not an object or an array', (t) => { + t.plan(2) + const headers = 'not an object or an array' + + const server = createServer((req, res) => { res.end() }) + t.teardown(server.close.bind(server)) + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.destroy.bind(client)) + + client.request({ + path: '/', + method: 'GET', + headers + }, (err) => { + t.ok(err instanceof errors.InvalidArgumentError) + t.equal(err.message, 'headers must be an object or an array') + }) + }) +}) |