Skip to content

Commit a444b24

Browse files
Merge pull request #15 from OutSystems/rsbo-1286
Added headersFilter in config rules
2 parents 5c1b916 + c29940c commit a444b24

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

lib/httpmock.js

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ function normalizeRule(configRule) {
6161
configRule.status = parseInt(configRule.status || 200);
6262
configRule.method = configRule.method || "";
6363
configRule.urlFilter = configRule.urlFilter || "";
64+
configRule.headersFilter = configRule.headersFilter || null;
6465
configRule.response = configRule.response || "";
6566
configRule.encoding = configRule.encoding || "";
6667
configRule.ignoredHeaders =
@@ -81,27 +82,42 @@ var defaultRule = {
8182
};
8283
normalizeRule(defaultRule);
8384

84-
function getMatchingConfigRule(requestUrl, method) {
85-
var requestUrlNoQueryString = requestUrl.split("?")[0];
85+
function getMatchingConfigRule(requestUrl, method, headers) {
86+
var requestUrlNoQueryString = requestUrl.split("?")[0];
8687
for (var i = 0; i < configArray.length; i++) {
8788
var configRule = configArray[i];
89+
8890
// Match method
8991
if (configRule.method === "" || configRule.method === method) {
9092
// Match Url
91-
if (
92-
new RegExp("^/?" + configRule.urlFilter + "$").test(
93+
if (new RegExp("^/?" + configRule.urlFilter + "$").test(
9394
requestUrlNoQueryString
9495
)
9596
) {
96-
return configRule;
97+
trace("configRule.headersFilter: ", configRule.headersFilter)
98+
if (configRule.headersFilter === null) {
99+
return configRule
100+
} else {
101+
var counter = 0;
102+
// Check if all headers in headersFilter are in request's headers for this config rule
103+
for (const header in configRule.headersFilter) {
104+
if (headers[header] === configRule.headersFilter[header]) {
105+
counter++;
106+
}
107+
}
108+
// Check if condition abbove was met for this config rule
109+
if (counter == Object.keys(configRule.headersFilter).length) {
110+
return configRule;
111+
}
112+
}
97113
}
98114
}
99115
}
100116
return defaultRule;
101117
}
102118

103-
function shouldFilterHeader(headerName, requestUrl, requestMethod) {
104-
var matchingRule = getMatchingConfigRule(requestUrl, requestMethod);
119+
function shouldFilterHeader(headerName, requestUrl, requestMethod, headers) {
120+
var matchingRule = getMatchingConfigRule(requestUrl, requestMethod, headers);
105121
var isToIgnore = !matchingRule.ignoredHeaders.every(function(e) {
106122
return e != headerName;
107123
});
@@ -115,11 +131,11 @@ function shouldFilterHeader(headerName, requestUrl, requestMethod) {
115131
}
116132

117133
function filterHeaders(headers, requestUrl, requestMethod) {
118-
var filtered = {};
134+
var filtered = {};
119135
Object.keys(headers).forEach(function(key) {
120136
if (
121137
!(
122-
shouldFilterHeader(key, requestUrl, requestMethod) ||
138+
shouldFilterHeader(key, requestUrl, requestMethod, headers) ||
123139
(key == "content-length" && headers[key] == "0")
124140
)
125141
) {
@@ -221,8 +237,8 @@ var server = http.createServer(function(request, response) {
221237
console.log(
222238
jsonutils.sortedStringify(requestDetails, { indent: " " })
223239
);
224-
225-
var matchingRule = getMatchingConfigRule(request.url, request.method);
240+
241+
var matchingRule = getMatchingConfigRule(request.url, request.method, request.headers);
226242
trace("Response rule: " + jsonutils.inspect(matchingRule));
227243

228244
handleResponse(request, response, matchingRule);

0 commit comments

Comments
 (0)