diff options
Diffstat (limited to '')
-rw-r--r-- | test/mock-utils.js | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/test/mock-utils.js b/test/mock-utils.js new file mode 100644 index 0000000..7799803 --- /dev/null +++ b/test/mock-utils.js @@ -0,0 +1,160 @@ +'use strict' + +const { test } = require('tap') +const { nodeMajor } = require('../lib/core/util') +const { MockNotMatchedError } = require('../lib/mock/mock-errors') +const { + deleteMockDispatch, + getMockDispatch, + getResponseData, + getStatusText, + getHeaderByName +} = require('../lib/mock/mock-utils') + +test('deleteMockDispatch - should do nothing if not able to find mock dispatch', (t) => { + t.plan(1) + + const key = { + url: 'url', + path: 'path', + method: 'method', + body: 'body' + } + + t.doesNotThrow(() => deleteMockDispatch([], key)) +}) + +test('getMockDispatch', (t) => { + t.plan(3) + + t.test('it should find a mock dispatch', (t) => { + t.plan(1) + const dispatches = [ + { + path: 'path', + method: 'method', + consumed: false + } + ] + + const result = getMockDispatch(dispatches, { + path: 'path', + method: 'method' + }) + t.same(result, { + path: 'path', + method: 'method', + consumed: false + }) + }) + + t.test('it should skip consumed dispatches', (t) => { + t.plan(1) + const dispatches = [ + { + path: 'path', + method: 'method', + consumed: true + }, + { + path: 'path', + method: 'method', + consumed: false + } + ] + + const result = getMockDispatch(dispatches, { + path: 'path', + method: 'method' + }) + t.same(result, { + path: 'path', + method: 'method', + consumed: false + }) + }) + + t.test('it should throw if dispatch not found', (t) => { + t.plan(1) + const dispatches = [ + { + path: 'path', + method: 'method', + consumed: false + } + ] + + t.throws(() => getMockDispatch(dispatches, { + path: 'wrong', + method: 'wrong' + }), new MockNotMatchedError('Mock dispatch not matched for path \'wrong\'')) + }) +}) + +test('getResponseData', (t) => { + t.plan(3) + + t.test('it should stringify objects', (t) => { + t.plan(1) + const responseData = getResponseData({ str: 'string', num: 42 }) + t.equal(responseData, '{"str":"string","num":42}') + }) + + t.test('it should return strings untouched', (t) => { + t.plan(1) + const responseData = getResponseData('test') + t.equal(responseData, 'test') + }) + + t.test('it should return buffers untouched', (t) => { + t.plan(1) + const responseData = getResponseData(Buffer.from('test')) + t.ok(Buffer.isBuffer(responseData)) + }) +}) + +test('getStatusText', (t) => { + for (const statusCode of [ + 100, 101, 102, 103, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 226, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 400, + 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 421, 422, 423, 424, 425, 426, + 428, 429, 431, 451, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 510, 511 + ]) { + t.ok(getStatusText(statusCode)) + } + + t.equal(getStatusText(420), 'unknown') + + t.end() +}) + +test('getHeaderByName', (t) => { + const headersRecord = { + key: 'value' + } + + t.equal(getHeaderByName(headersRecord, 'key'), 'value') + t.equal(getHeaderByName(headersRecord, 'anotherKey'), undefined) + + const headersArray = ['key', 'value'] + + t.equal(getHeaderByName(headersArray, 'key'), 'value') + t.equal(getHeaderByName(headersArray, 'anotherKey'), undefined) + + if (nodeMajor >= 16) { + const { Headers } = require('../index') + + const headers = new Headers([ + ['key', 'value'] + ]) + + t.equal(getHeaderByName(headers, 'key'), 'value') + t.equal(getHeaderByName(headers, 'anotherKey'), null) + } + + t.end() +}) |