Skip to content

Commit bece53a

Browse files
committed
Added content-type based examplee key matching first
1 parent 02db67f commit bece53a

File tree

1 file changed

+35
-28
lines changed

1 file changed

+35
-28
lines changed

libV2/schemaUtils.js

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,13 +1111,27 @@ let QUERYPARAM = 'query',
11111111
}
11121112

11131113
requestExample = _.find(requestBodyExamples, (example, index) => {
1114-
if (example.key === responseExample.key) {
1114+
if (
1115+
example.contentType === responseExample.contentType &&
1116+
_.toLower(example.key) === _.toLower(responseExample.key)
1117+
) {
11151118
requestBodyExamples[index].isUsed = true;
11161119
return true;
11171120
}
11181121
return false;
11191122
});
11201123

1124+
// If exact content type is not matching, pick first content type with same example key
1125+
if (!requestExample) {
1126+
requestExample = _.find(requestBodyExamples, (example, index) => {
1127+
if (_.toLower(example.key) === _.toLower(responseExample.key)) {
1128+
requestBodyExamples[index].isUsed = true;
1129+
return true;
1130+
}
1131+
return false;
1132+
});
1133+
}
1134+
11211135
if (!requestExample) {
11221136
if (requestBodyExamples[index] && !requestBodyExamples[index].isUsed) {
11231137
requestExample = requestBodyExamples[index];
@@ -1141,8 +1155,8 @@ let QUERYPARAM = 'query',
11411155
pmExamples.push({
11421156
request: getExampleData(context, { [requestExample.key]: requestExample.value }),
11431157
response: responseExampleData,
1144-
name: _.get(responseExample, 'value.summary') || _.get(requestExample, 'value.summary') ||
1145-
(responseExample.key === '_default' ? requestExample.key : responseExample.key)
1158+
name: _.get(responseExample, 'value.summary') || (responseExample.key !== '_default' && responseExample.key) ||
1159+
_.get(requestExample, 'value.summary') || requestExample.key || 'Example'
11461160
});
11471161
});
11481162

@@ -1166,8 +1180,9 @@ let QUERYPARAM = 'query',
11661180
pmExamples.push({
11671181
request: getExampleData(context, { [requestBodyExamples[i].key]: requestBodyExamples[i].value }),
11681182
response: responseExampleData,
1169-
name: _.get(requestBodyExamples[i], 'value.summary') || _.get(responseExample, 'value.summary') ||
1170-
requestBodyExamples[i].key
1183+
name: _.get(requestBodyExamples[i], 'value.summary') ||
1184+
(requestBodyExamples[i].key !== '_default' && requestBodyExamples[i].key) ||
1185+
_.get(responseExample, 'value.summary') || 'Example'
11711186
});
11721187
}
11731188
}
@@ -1257,14 +1272,7 @@ let QUERYPARAM = 'query',
12571272
example = requestBodySchema.example;
12581273
}
12591274

1260-
if (
1261-
isExampleBody &&
1262-
shouldGenerateFromExample &&
1263-
(!_.isEmpty(examples))
1264-
) {
1265-
responseExamples = examples;
1266-
}
1267-
else if (shouldGenerateFromExample && (example !== undefined || examples)) {
1275+
if (shouldGenerateFromExample && (example !== undefined || examples)) {
12681276
/**
12691277
* Here it could be example or examples (plural)
12701278
* For examples, we'll pick the first example
@@ -1325,18 +1333,26 @@ let QUERYPARAM = 'query',
13251333
}
13261334
}
13271335

1336+
// Generate multiple examples when either request or response contains more than one example
13281337
if (
13291338
isExampleBody &&
13301339
shouldGenerateFromExample &&
1331-
(!_.isEmpty(examples) || !_.isEmpty(requestBodyExamples))
1340+
(_.size(examples) > 1 || _.size(requestBodyExamples) > 1)
13321341
) {
13331342
responseExamples = [{
13341343
key: '_default',
1335-
value: bodyData
1344+
value: bodyData,
1345+
contentType: bodyType
13361346
}];
13371347

13381348
if (!_.isEmpty(examples)) {
1339-
responseExamples = _.map(examples, (example, key) => { return { key, value: example }; });
1349+
responseExamples = _.map(examples, (example, key) => {
1350+
return {
1351+
key,
1352+
value: example,
1353+
contentType: bodyType
1354+
};
1355+
});
13401356
}
13411357
return generateExamples(context, responseExamples, requestBodyExamples, requestBodySchema, isBodyTypeXML);
13421358
}
@@ -1495,16 +1511,6 @@ let QUERYPARAM = 'query',
14951511
}
14961512
});
14971513

1498-
// prefer XML type of body if no JSON body is available
1499-
if (!bodyType) {
1500-
_.forOwn(content, (value, key) => {
1501-
if (content.hasOwnProperty(key) && getHeaderFamily(key) === HEADER_TYPE.XML) {
1502-
bodyType = key;
1503-
return false;
1504-
}
1505-
});
1506-
}
1507-
15081514
// use first available type of body if no JSON or XML body is available
15091515
if (!bodyType) {
15101516
// take the first property it has
@@ -1838,7 +1844,6 @@ let QUERYPARAM = 'query',
18381844
exampleName = bodyData.name;
18391845

18401846
if ((bodyType === TEXT_XML || bodyType === APP_XML || headerFamily === HEADER_TYPE.XML)) {
1841-
requestBodyData && (requestBodyData = getXmlVersionContent(requestBodyData));
18421847
responseBodyData && (responseBodyData = getXmlVersionContent(responseBodyData));
18431848
}
18441849

@@ -2023,7 +2028,9 @@ let QUERYPARAM = 'query',
20232028
const exampleData = getExampleData(context, { [name]: exampleObj });
20242029

20252030
if (isBodyTypeXML) {
2026-
exampleObj.value = getXMLExampleData(context, exampleData, resolveSchema(context, content.schema));
2031+
let bodyData = getXMLExampleData(context, exampleData, resolveSchema(context, content.schema));
2032+
2033+
exampleObj.value = getXmlVersionContent(bodyData);
20272034
}
20282035
}
20292036

0 commit comments

Comments
 (0)