Skip to content

Commit 7d93474

Browse files
committed
Fixed issue where deprecated params were reported missing even for includeDeprecated=false
1 parent b181b87 commit 7d93474

File tree

1 file changed

+60
-25
lines changed

1 file changed

+60
-25
lines changed

libV2/validationUtils.js

Lines changed: 60 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,7 +1130,8 @@ function resolveFormParamSchema (schema, schemaKey, encodingObj, requestParams,
11301130
in: 'query', // serialization follows same behaviour as query params
11311131
description: _.get(schema, 'description', _.get(metaInfo, 'description', '')),
11321132
pathPrefix: _.get(metaInfo, 'pathPrefix'),
1133-
isComposite: _.get(metaInfo, 'isComposite', false)
1133+
isComposite: _.get(metaInfo, 'isComposite', false),
1134+
deprecated: _.get(schema, 'deprecated', _.get(metaInfo, 'deprecated'))
11341135
};
11351136
encodingValue = _.get(encodingObj, schemaKey);
11361137

@@ -1167,7 +1168,8 @@ function resolveFormParamSchema (schema, schemaKey, encodingObj, requestParams,
11671168
in: 'query', // serialization follows same behaviour as query params
11681169
description: _.get(propSchema, 'description') || _.get(metaInfo, 'description') || '',
11691170
required: _.get(metaInfo, 'required'),
1170-
isComposite: _.get(metaInfo, 'isComposite', false)
1171+
isComposite: _.get(metaInfo, 'isComposite', false),
1172+
deprecated: _.get(propSchema, 'deprecated') || _.get(metaInfo, 'deprecated')
11711173
},
11721174
parentPropName = resolvedPropName.indexOf('[') === -1 ? resolvedPropName :
11731175
resolvedPropName.slice(0, resolvedPropName.indexOf('[')),
@@ -1184,6 +1186,10 @@ function resolveFormParamSchema (schema, schemaKey, encodingObj, requestParams,
11841186
resolvedProp.required = true;
11851187
}
11861188

1189+
if (_.isUndefined(metaInfo.required) && _.includes(_.get(schema, 'required'), propName)) {
1190+
resolvedProp.required = true;
1191+
}
1192+
11871193
pSerialisationInfo = getParamSerialisationInfo(resolvedProp, PARAMETER_SOURCE.REQUEST,
11881194
components, options);
11891195
isPropSeparable = _.includes(['form', 'deepObject'], pSerialisationInfo.style);
@@ -1217,7 +1223,8 @@ function resolveFormParamSchema (schema, schemaKey, encodingObj, requestParams,
12171223
else if (isPropSeparable && propSchema.type === 'object' && pSerialisationInfo.explode) {
12181224
let localMetaInfo = _.isEmpty(metaInfo) ? (metaInfo = {
12191225
required: resolvedProp.required,
1220-
description: resolvedProp.description
1226+
description: resolvedProp.description,
1227+
deprecated: _.get(resolvedProp, 'deprecated')
12211228
}) : metaInfo,
12221229
nextSchemaKey = _.isEmpty(schemaKey) ? propName : `${schemaKey}[${propName}]`;
12231230

@@ -1235,7 +1242,8 @@ function resolveFormParamSchema (schema, schemaKey, encodingObj, requestParams,
12351242
isResolvedParam: true,
12361243
required: resolvedProp.required,
12371244
description: resolvedProp.description,
1238-
isComposite: _.get(metaInfo, 'isComposite', false)
1245+
isComposite: _.get(metaInfo, 'isComposite', false),
1246+
deprecated: _.get(resolvedProp, 'deprecated') || _.get(metaInfo, 'deprecated')
12391247
});
12401248
});
12411249
}
@@ -1288,7 +1296,8 @@ function resolveFormParamSchema (schema, schemaKey, encodingObj, requestParams,
12881296
description: _.get(additionalPropSchema, 'description') || _.get(metaInfo, 'description') || '',
12891297
required: false,
12901298
isResolvedParam: true,
1291-
isComposite: true
1299+
isComposite: true,
1300+
deprecated: _.get(additionalPropSchema, 'deprecated') || _.get(metaInfo, 'deprecated')
12921301
});
12931302
}
12941303
});
@@ -1729,7 +1738,8 @@ function checkQueryParams (context, queryParams, transactionPathPrefix, schemaPa
17291738
let schemaParams = _.filter(schemaPath.parameters, (param) => { return param.in === 'query'; }),
17301739
requestQueryParams = [],
17311740
resolvedSchemaParams = [],
1732-
mismatchProperty = 'QUERYPARAM';
1741+
mismatchProperty = 'QUERYPARAM',
1742+
{ includeDeprecated } = context.computedOptions;
17331743

17341744
if (options.validationPropertiesToIgnore.includes(mismatchProperty)) {
17351745
return callback(null, []);
@@ -1755,6 +1765,7 @@ function checkQueryParams (context, queryParams, transactionPathPrefix, schemaPa
17551765
metaInfo = {
17561766
required: _.get(param, 'required') || false,
17571767
description: _.get(param, 'description'),
1768+
deprecated: _.get(param, 'deprecated') || false,
17581769
pathPrefix
17591770
};
17601771

@@ -1826,6 +1837,10 @@ function checkQueryParams (context, queryParams, transactionPathPrefix, schemaPa
18261837
});
18271838

18281839
_.each(filteredSchemaParams, (qp) => {
1840+
if (qp.deprecated && !includeDeprecated) {
1841+
return;
1842+
}
1843+
18291844
if (!_.find(requestQueryParams, (param) => {
18301845
return param.key === qp.name;
18311846
})) {
@@ -1876,7 +1891,8 @@ function checkRequestHeaders (context, headers, transactionPathPrefix, schemaPat
18761891

18771892
return !_.includes(IMPLICIT_HEADERS, _.toLower(_.get(header, 'key')));
18781893
}),
1879-
mismatchProperty = 'HEADER';
1894+
mismatchProperty = 'HEADER',
1895+
{ includeDeprecated } = context.computedOptions;
18801896

18811897
if (options.validationPropertiesToIgnore.includes(mismatchProperty)) {
18821898
return callback(null, []);
@@ -1931,7 +1947,8 @@ function checkRequestHeaders (context, headers, transactionPathPrefix, schemaPat
19311947
let mismatches = [],
19321948
mismatchObj,
19331949
reqBody = _.get(schemaPath, 'requestBody'),
1934-
contentHeaderMismatches = [];
1950+
contentHeaderMismatches = [],
1951+
filteredHeaders;
19351952

19361953
// resolve $ref in request body if present
19371954
if (reqBody) {
@@ -1943,17 +1960,24 @@ function checkRequestHeaders (context, headers, transactionPathPrefix, schemaPat
19431960
schemaPathPrefix + '.requestBody.content', _.get(reqBody, 'content'),
19441961
mismatchProperty, options);
19451962
}
1946-
_.each(_.filter(schemaHeaders, (h) => {
1963+
1964+
filteredHeaders = _.filter(schemaHeaders, (h) => {
19471965
// exclude non-required, non-composite and implicit header from further validation
19481966
const isImplicitHeader = _.includes(IMPLICIT_HEADERS, _.toLower(h.name));
19491967

19501968
if (VALIDATE_OPTIONAL_PARAMS) {
19511969
return !h.isComposite && !isImplicitHeader;
19521970
}
19531971
return h.required && !h.isComposite && !isImplicitHeader;
1954-
}), (header) => {
1972+
});
1973+
1974+
_.each(filteredHeaders, (header) => {
19551975
if (!_.find(reqHeaders, (param) => { return param.key === header.name; })) {
19561976

1977+
if (header.deprecated && !includeDeprecated) {
1978+
return;
1979+
}
1980+
19571981
// assign parameter example(s) as schema examples;
19581982
assignParameterExamples(header);
19591983

@@ -1998,7 +2022,8 @@ function checkResponseHeaders (context, schemaResponse, headers, transactionPath
19982022

19992023
return !_.includes(IMPLICIT_HEADERS, _.toLower(_.get(header, 'key')));
20002024
}),
2001-
mismatchProperty = 'RESPONSE_HEADER';
2025+
mismatchProperty = 'RESPONSE_HEADER',
2026+
{ includeDeprecated } = context.computedOptions;
20022027

20032028
if (options.validationPropertiesToIgnore.includes(mismatchProperty)) {
20042029
return callback(null, []);
@@ -2055,23 +2080,28 @@ function checkResponseHeaders (context, schemaResponse, headers, transactionPath
20552080
let mismatches = [],
20562081
mismatchObj,
20572082
contentHeaderMismatches = checkContentTypeHeader(headers, transactionPathPrefix,
2058-
schemaPathPrefix + '.content', _.get(schemaResponse, 'content'), mismatchProperty, options);
2083+
schemaPathPrefix + '.content', _.get(schemaResponse, 'content'), mismatchProperty, options),
2084+
filteredHeaders = _.filter(schemaHeaders, (h, hName) => {
2085+
// exclude empty headers from validation
2086+
if (_.isEmpty(h)) {
2087+
return false;
2088+
}
2089+
h.name = hName;
20592090

2060-
_.each(_.filter(schemaHeaders, (h, hName) => {
2061-
// exclude empty headers from validation
2062-
if (_.isEmpty(h)) {
2063-
return false;
2064-
}
2065-
h.name = hName;
2091+
// exclude non-required, non-composite and implicit header from further validation
2092+
const isImplicitHeader = _.includes(IMPLICIT_HEADERS, _.toLower(hName));
20662093

2067-
// exclude non-required, non-composite and implicit header from further validation
2068-
const isImplicitHeader = _.includes(IMPLICIT_HEADERS, _.toLower(hName));
2094+
if (VALIDATE_OPTIONAL_PARAMS) {
2095+
return !h.isComposite && !isImplicitHeader;
2096+
}
2097+
return h.required && !h.isComposite && !isImplicitHeader;
2098+
});
20692099

2070-
if (VALIDATE_OPTIONAL_PARAMS) {
2071-
return !h.isComposite && !isImplicitHeader;
2100+
_.each(filteredHeaders, (header) => {
2101+
if (header.deprecated && !includeDeprecated) {
2102+
return;
20722103
}
2073-
return h.required && !h.isComposite && !isImplicitHeader;
2074-
}), (header) => {
2104+
20752105
if (!_.find(resHeaders, (param) => { return param.key === header.name; })) {
20762106

20772107
// assign parameter example(s) as schema examples;
@@ -2112,7 +2142,8 @@ function checkRequestBody (context, requestBody, transactionPathPrefix, schemaPa
21122142
// check for body modes
21132143
let jsonSchemaBody,
21142144
jsonContentType,
2115-
mismatchProperty = 'BODY';
2145+
mismatchProperty = 'BODY',
2146+
{ includeDeprecated } = context.computedOptions;
21162147

21172148
if (options.validationPropertiesToIgnore.includes(mismatchProperty)) {
21182149
return callback(null, []);
@@ -2247,6 +2278,10 @@ function checkRequestBody (context, requestBody, transactionPathPrefix, schemaPa
22472278
});
22482279

22492280
_.each(filteredSchemaParams, (uParam) => {
2281+
if (uParam.deprecated && !includeDeprecated) {
2282+
return;
2283+
}
2284+
22502285
// report mismatches only for required properties
22512286
if (!_.find(filteredUrlEncodedBody, (param) => { return param.key === uParam.name; })) {
22522287
mismatchObj = {

0 commit comments

Comments
 (0)