node-mocks-http
Advanced tools
Comparing version
@@ -8,3 +8,27 @@ /** | ||
const REFERER_HEADER_NAMES = ['referer', 'referrer']; | ||
/** | ||
* Get a header value from the headers object. | ||
* Because headers can be set in multiple ways, their names can be uppercased and lowercased. | ||
* | ||
* @param {Object} headers | ||
* @param {string} name | ||
* @returns | ||
*/ | ||
function getHeaderValue(headers, name) { | ||
const lowerName = name.toLowerCase(); | ||
return headers[ | ||
Object.keys(headers).find((key) => { | ||
const lowerKey = key.toLowerCase(); | ||
return ( | ||
lowerKey === lowerName || | ||
(REFERER_HEADER_NAMES.includes(lowerKey) && REFERER_HEADER_NAMES.includes(lowerName)) | ||
); | ||
}) | ||
]; | ||
} | ||
/** | ||
* Creates a Headers object that implements both Express.js style access | ||
@@ -22,13 +46,6 @@ * and the Web API Headers interface | ||
case 'get': | ||
return (name) => { | ||
const lowerName = name.toLowerCase(); | ||
// Special case for referer/referrer | ||
if (lowerName === 'referer' || lowerName === 'referrer') { | ||
return target.referrer || target.referer; | ||
} | ||
return target[lowerName]; | ||
}; | ||
return (name) => getHeaderValue(target, name); | ||
case 'getAll': | ||
return (name) => { | ||
const value = target[name.toLowerCase()]; | ||
const value = getHeaderValue(target, name); | ||
if (!value) { | ||
@@ -40,3 +57,3 @@ return []; | ||
case 'has': | ||
return (name) => name.toLowerCase() in target; | ||
return (name) => getHeaderValue(target, name) !== undefined; | ||
case 'set': | ||
@@ -88,3 +105,3 @@ return (name, value) => { | ||
default: | ||
return target[typeof prop === 'string' ? prop.toLowerCase() : prop]; | ||
return typeof prop === 'string' ? getHeaderValue(target, prop) : target[prop]; | ||
} | ||
@@ -124,2 +141,2 @@ }, | ||
module.exports = { createHeaders }; | ||
module.exports = { createHeaders, getHeaderValue }; |
@@ -37,3 +37,3 @@ /** | ||
const querystring = require('querystring'); | ||
const { createHeaders } = require('./headers'); | ||
const { createHeaders, getHeaderValue } = require('./headers'); | ||
@@ -134,3 +134,3 @@ const standardRequestOptions = [ | ||
mockRequest.getHeader = function getHeader(name) { | ||
return mockRequest.headers.get(name); | ||
return getHeaderValue(mockRequest.headers, name); | ||
}; | ||
@@ -137,0 +137,0 @@ mockRequest.header = mockRequest.getHeader; |
@@ -5,3 +5,3 @@ { | ||
"description": "Mock 'http' objects for testing Express, Next.js and Koa routing functions", | ||
"version": "1.17.1", | ||
"version": "1.17.2", | ||
"homepage": "https://github.com/eugef/node-mocks-http", | ||
@@ -8,0 +8,0 @@ "bugs": { |
86128
0.46%2224
0.63%