Skip to content

Commit f94f06b

Browse files
committed
Merge branch 'release/4.10.2'
2 parents 9b0a322 + dfda590 commit f94f06b

File tree

6 files changed

+50
-18
lines changed

6 files changed

+50
-18
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# OpenAPI-Postman Changelog
22

3+
#### v4.10.2 (March 13, 2023)
4+
* Fixed issue where Accept header was generated correctly in convertV2() interface.
5+
36
#### v4.10.1 (March 09, 2023)
47
* Fixed issue where request name generated were not validated correctly.
58
* Fixed test where getOptions() was not using criteria correctly.

libV2/schemaUtils.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,7 +1555,7 @@ let QUERYPARAM = 'query',
15551555
},
15561556

15571557
resolveResponseBody = (context, responseBody = {}) => {
1558-
let responseContent, bodyType, bodyData, headerFamily;
1558+
let responseContent, bodyType, bodyData, headerFamily, acceptHeader;
15591559

15601560
if (_.isEmpty(responseBody)) {
15611561
return responseBody;
@@ -1583,16 +1583,24 @@ let QUERYPARAM = 'query',
15831583
const { indentCharacter } = context.computedOptions,
15841584
rawModeData = !_.isObject(bodyData) && _.isFunction(_.get(bodyData, 'toString')) ?
15851585
bodyData.toString() :
1586-
JSON.stringify(bodyData, null, indentCharacter);
1586+
JSON.stringify(bodyData, null, indentCharacter),
1587+
responseMediaTypes = _.keys(responseContent);
15871588

1589+
if (responseMediaTypes.length > 0) {
1590+
acceptHeader = [{
1591+
key: 'Accept',
1592+
value: responseMediaTypes[0]
1593+
}];
1594+
}
15881595

15891596
return {
15901597
body: rawModeData,
15911598
contentHeader: [{
15921599
key: 'Content-Type',
15931600
value: bodyType
15941601
}],
1595-
bodyType
1602+
bodyType,
1603+
acceptHeader
15961604
};
15971605
},
15981606

@@ -1709,14 +1717,15 @@ let QUERYPARAM = 'query',
17091717
},
17101718

17111719
resolveResponseForPostmanRequest = (context, operationItem, request) => {
1712-
let responses = [];
1720+
let responses = [],
1721+
requestAcceptHeader;
17131722

17141723
_.forOwn(operationItem.responses, (responseSchema, code) => {
17151724
let response,
17161725
{ includeAuthInfoInExample } = context.computedOptions,
17171726
responseAuthHelper,
17181727
auth = request.auth,
1719-
{ body, contentHeader = [], bodyType } = resolveResponseBody(context, responseSchema) || {},
1728+
{ body, contentHeader = [], bodyType, acceptHeader } = resolveResponseBody(context, responseSchema) || {},
17201729
headers = resolveResponseHeaders(context, responseSchema.headers),
17211730
originalRequest = request,
17221731
reqHeaders = _.clone(request.headers) || [],
@@ -1738,6 +1747,11 @@ let QUERYPARAM = 'query',
17381747
});
17391748
}
17401749

1750+
// set accept header value as first found response content's media type
1751+
if (_.isEmpty(requestAcceptHeader)) {
1752+
requestAcceptHeader = acceptHeader;
1753+
}
1754+
17411755
response = {
17421756
name: _.get(responseSchema, 'description'),
17431757
body,
@@ -1750,7 +1764,7 @@ let QUERYPARAM = 'query',
17501764
responses.push(response);
17511765
});
17521766

1753-
return responses;
1767+
return { responses, acceptHeader: requestAcceptHeader };
17541768
};
17551769

17561770
module.exports = {
@@ -1771,7 +1785,6 @@ module.exports = {
17711785
{ pathVariables, collectionVariables } = filterCollectionAndPathVariables(url, pathParams),
17721786
requestBody = resolveRequestBodyForPostmanRequest(context, operationItem[method]),
17731787
request,
1774-
responses,
17751788
securitySchema = _.get(operationItem, [method, 'security']),
17761789
authHelper = generateAuthForCollectionFromOpenAPI(context.openapi, securitySchema);
17771790

@@ -1795,7 +1808,12 @@ module.exports = {
17951808
auth: authHelper
17961809
};
17971810

1798-
responses = resolveResponseForPostmanRequest(context, operationItem[method], request);
1811+
const { responses, acceptHeader } = resolveResponseForPostmanRequest(context, operationItem[method], request);
1812+
1813+
// add accept header if found and not present already
1814+
if (!_.isEmpty(acceptHeader)) {
1815+
request.headers = _.concat(request.headers, acceptHeader);
1816+
}
17991817

18001818
return {
18011819
request: {

libV2/validationUtils.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,10 +2461,11 @@ function checkResponses (context, transaction, transactionPathPrefix, schemaPath
24612461
if (options.suggestAvailableFixes) {
24622462
let generatedResponse,
24632463
resolvedResponse,
2464-
originalRequest = _.omit(_.get(transaction, 'request', {}), 'response');
2464+
originalRequest = _.omit(_.get(transaction, 'request', {}), 'response'),
2465+
resolvedResponses = resolveResponseForPostmanRequest(context,
2466+
{ responses: { [responseCode]: responseObj } }, originalRequest);
24652467

2466-
resolvedResponse = _.head(resolveResponseForPostmanRequest(context,
2467-
{ responses: { [responseCode]: responseObj } }, originalRequest));
2468+
resolvedResponse = _.head(resolvedResponses.responses);
24682469
generatedResponse = utils.generatePmResponseObject(resolvedResponse);
24692470

24702471
if (_.isFunction(generatedResponse.toJSON)) {

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openapi-to-postmanv2",
3-
"version": "4.10.1",
3+
"version": "4.10.2",
44
"description": "Convert a given OpenAPI specification to Postman Collection v2.0",
55
"homepage": "https://github.com/postmanlabs/openapi-to-postman",
66
"bugs": "https://github.com/postmanlabs/openapi-to-postman/issues",

test/unit/convertV2.test.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,9 @@ describe('The convert v2 Function', function() {
380380
keepImplicitHeaders: false
381381
}, (err, conversionResult) => {
382382
expect(err).to.be.null;
383-
expect(conversionResult.output[0].data.item[0].item[0].request.header).to.not.ok;
383+
expect(conversionResult.output[0].data.item[0].item[0].request.header.length).to.eql(1);
384+
expect(conversionResult.output[0].data.item[0].item[0].request.header[0].key).to.eql('Accept');
385+
expect(conversionResult.output[0].data.item[0].item[0].request.header[0].value).to.eql('application/json');
384386
done();
385387
});
386388
});
@@ -2006,7 +2008,9 @@ describe('The convert v2 Function', function() {
20062008
expect(conversionResult.output[0].data.auth.apikey[1].value).to.equal('{{apiKey}}');
20072009

20082010
const item = conversionResult.output[0].data.item[0].item[0].item[0];
2009-
expect(item.request.header).to.not.be.ok;
2011+
expect(item.request.header.length).to.eql(1);
2012+
expect(item.request.header[0].key).to.eql('Accept');
2013+
expect(item.request.header[0].value).to.eql('application/json');
20102014
expect(item.response[0].originalRequest.header[0]).to.be.eql({
20112015
description: {
20122016
content: 'Added as a part of security scheme: apikey',
@@ -2028,8 +2032,12 @@ describe('The convert v2 Function', function() {
20282032
expect(conversionResult.result).to.equal(true);
20292033

20302034
const item = conversionResult.output[0].data.item[0].item[0].item[0];
2031-
expect(item.request.header).to.not.be.ok;
2032-
expect(item.response[0].originalRequest.header).to.not.be.ok;
2035+
expect(item.request.header.length).to.eql(1);
2036+
expect(item.request.header[0].key).to.eql('Accept');
2037+
expect(item.request.header[0].value).to.eql('application/json');
2038+
expect(item.response[0].originalRequest.header.length).to.eql(1);
2039+
expect(item.response[0].originalRequest.header[0].key).to.eql('Accept');
2040+
expect(item.response[0].originalRequest.header[0].value).to.eql('application/json');
20332041

20342042
done();
20352043
});
@@ -2051,7 +2059,9 @@ describe('The convert v2 Function', function() {
20512059

20522060
const item = conversionResult.output[0].data.item[0].item[0].item[0];
20532061

2054-
expect(item.request.header).to.not.be.ok;
2062+
expect(item.request.header.length).to.eql(1);
2063+
expect(item.request.header[0].key).to.eql('Accept');
2064+
expect(item.request.header[0].value).to.eql('application/json');
20552065
expect(item.response[0].originalRequest.header[0]).to.be.eql({
20562066
description: {
20572067
content: 'Added as a part of security scheme: oauth1',

0 commit comments

Comments
 (0)