Skip to content

Commit a7ceea9

Browse files
authored
Merge pull request #103 from apiaddicts/develop
Develop
2 parents 31a9513 + 7cf0eb1 commit a7ceea9

File tree

10 files changed

+96
-25
lines changed

10 files changed

+96
-25
lines changed

index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,11 @@ _.forEach(endpointsParsed, function (endpointParsed, i) {
9494
//GENERATOR-------------------------------- */
9595
let endpointsPostman = [];
9696
const endpoints = require('./src/generator/endpoints.js')(endpointsParsed);
97+
const cloneDeep = _.cloneDeep;
9798

98-
_.forEach(endpoints, function (endpoint, i) {
99-
for (let index = 0; index < endpoint.count; index++) {
99+
_.forEach(endpoints, function (originalEndpoint, i) {
100+
for (let index = 0; index < originalEndpoint.count; index++) {
101+
let endpoint = cloneDeep(originalEndpoint);
100102
endpoint = require('./src/generator/testStatus.js')(endpoint);
101103
endpoint = require('./src/generator/testBody.js')(endpoint, configurationFile);
102104
endpoint = require('./src/generator/contentType.js')(endpoint);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openapi2postman",
3-
"version": "2.2.4",
3+
"version": "2.2.5",
44
"description": "openapi2postman",
55
"bin": {
66
"o2p": "index.js"

src/parser/openapi3/body.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ const _ = require('lodash')
77
module.exports = function() {
88

99
const MAX_DEPTH_LEVEL = 20;
10-
10+
let seenSchemas = new WeakSet();
11+
1112
return function get(verb, path, bodyResponse) {
1213
if (!_.isObject(global.definition.paths)) {
1314
require('../../utils/error.js')('paths is required')
@@ -110,6 +111,17 @@ module.exports = function() {
110111
}
111112

112113
function replaceAllOfs(schema){
114+
if (!_.isObject(schema)) return schema;
115+
116+
// Detectar ciclos por identidad
117+
if (seenSchemas.has(schema)) {
118+
return {
119+
type: "string",
120+
description: "Circular schema avoided"
121+
};
122+
}
123+
seenSchemas.add(schema);
124+
113125
let result = {}
114126
for (let i in schema) {
115127
if (i === 'allOf' && _.isArray(schema[i])){
@@ -151,11 +163,11 @@ module.exports = function() {
151163
}
152164
result = _.merge(result, merged)
153165
} else if ( _.isArray(schema[i]) && i !== 'required') {
154-
const arrayResult = []
155-
for (let k in schema[i]) {
156-
arrayResult.push(replaceAllOfs(schema[i][k]))
166+
if (schema[i].every(v => !_.isObject(v))) {
167+
result[i] = [...schema[i]];
168+
} else {
169+
result[i] = schema[i].map(item => replaceAllOfs(item));
157170
}
158-
result[i] = arrayResult
159171
} else if ( _.isObject(schema[i]) && i !== 'required') {
160172
// result.type = 'object';
161173
result[i] = _.merge(result[i],replaceAllOfs(schema[i]))

src/parser/openapi3/queryParams.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ module.exports = function() {
1515
// parameters = replaceRefs(parameters);
1616
let queryParams = _.filter(parameters, ['in', 'query'])
1717
const result = []
18-
_.forEach(queryParams, function(queryParam) {
18+
_.forEach(queryParams, function(queryParam) {
19+
const param = queryParam.schema ? queryParam : getContentProperty(queryParam);
1920
result.push({
2021
name: queryParam.name,
21-
type: queryParam.schema.type,
22+
type: param.schema.type,
2223
required : queryParam.required,
23-
example: getExamples(queryParam)
24+
example: getExamples(param)
2425
});
2526
});
2627
return result
@@ -68,4 +69,11 @@ module.exports = function() {
6869
}
6970
}
7071

72+
function getContentProperty(query){
73+
const queryContent = query.content;
74+
for (const key in queryContent) {
75+
return queryContent[key];
76+
}
77+
}
78+
7179
}()

src/parser/openapiAuthorizationDefinition.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ module.exports = function() {
1414

1515
}
1616
const data = parseUrl(definition.flows)
17-
return generateDefinition(data)
17+
const authKey = _.keys(global.definition.security[0])[0]
18+
return generateDefinition(data,authKey)
1819
}
1920

20-
function generateDefinition(data){
21+
function generateDefinition(data,auth){
2122
const postmanCollection = {
2223
info: {
2324
_postman_id: "2e397e19-7819-4425-bbb8-e2b7283336a4",
@@ -37,9 +38,9 @@ module.exports = function() {
3738
" pm.response.to.have.status(200);",
3839
"});",
3940
"",
40-
"var json = JSON.parse(responseBody);",
41+
"var json = pm.response.json();",
4142
"",
42-
"pm.environment.set(\"OAuth2\", \"Bearer \"+json.data.access_token);"
43+
`pm.environment.set(\"${auth}\", \"Bearer \"+json.data.access_token);`
4344
],
4445
type: "text/javascript"
4546
}

src/parser/swagger2/body.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
const _ = require('lodash');
66

77
module.exports = function() {
8+
9+
let seenSchemas = new WeakSet();
10+
811

912
return function get(verb, path, bodyResponse) {
1013
if (!_.isObject(global.definition.paths)) {
@@ -38,6 +41,18 @@ module.exports = function() {
3841
};
3942

4043
function replaceRefs(schema){
44+
45+
if (!_.isObject(schema)) return schema;
46+
47+
// Detectar ciclos por identidad
48+
if (seenSchemas.has(schema)) {
49+
return {
50+
type: "string",
51+
description: "Circular schema avoided"
52+
};
53+
}
54+
seenSchemas.add(schema);
55+
4156
let result = {};
4257
for (let i in schema) {
4358
if (i === '$ref'){

src/parser/swagger2/pathParameters.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
const _ = require('lodash');
66

77
module.exports = function() {
8+
let seenSchemas = new WeakSet();
89

910
return function get(verb,path){
1011
if (!_.isObject(global.definition.paths)) {
@@ -23,6 +24,17 @@ module.exports = function() {
2324
}
2425

2526
function replaceRefs(schema){
27+
if (!_.isObject(schema)) return schema;
28+
29+
// Detectar ciclos por identidad
30+
if (seenSchemas.has(schema)) {
31+
return {
32+
type: "string",
33+
description: "Circular schema avoided"
34+
};
35+
}
36+
seenSchemas.add(schema);
37+
2638
let result = {};
2739
for (let i in schema) {
2840
if (i === '$ref'){

src/swagger2json/array.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ module.exports = function() {
1010
if (!swagger.items){
1111
require('../utils/error.js')('There is a array without items');
1212
}
13+
if(swagger.items.oneOf) delete swagger.items.oneOf;
14+
if(swagger.items.anyOf) delete swagger.items.anyOf;
1315
if (!swagger.items.properties){
14-
swagger.items.properties = _.cloneDeep(swagger.items);
16+
swagger.items.properties = _.cloneDeep(swagger.items);
1517
}
1618
if (!(swagger.items.properties.type && typeof swagger.items.properties.type === 'string')){
1719
let keys = _.keys(swagger.items.properties);

src/swagger2json/index.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,22 @@ const _ = require('lodash');
77
module.exports = function() {
88

99
return function get(swagger, name, parent,index){
10+
if (typeof swagger !== 'object' || swagger === null) {
11+
swagger = { type: 'string' };
12+
}
1013

11-
if (!swagger.type && swagger.properties){
12-
swagger.type = 'object';
13-
} else if (swagger.oneOf) {
14-
swagger.type = 'oneOf';
15-
} else if (swagger.anyOf) {
16-
swagger.type = 'anyOf';
14+
if (!swagger.type) {
15+
if (swagger.properties) {
16+
swagger.type = 'object';
17+
} else if (swagger.items) {
18+
swagger.type = 'array';
19+
} else if (swagger.oneOf) {
20+
swagger.type = 'oneOf';
21+
} else if (swagger.anyOf) {
22+
swagger.type = 'anyOf';
23+
} else {
24+
swagger.type = 'string';
25+
}
1726
}
1827

1928
let wrongParam = false;

src/swagger2json/object.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ const _ = require('lodash');
77
module.exports = function() {
88

99
return function get(swagger,parent){
10-
if (!swagger.properties){
11-
require('../utils/error.js')(`There is an object without properties: ${swagger}`);
12-
}
10+
11+
validationProperties(swagger);
12+
1313
let notInclude = false;
1414
if (parent && global.requiredParamsCatch && _.has(swagger, 'required')){
1515
if(!global.configurationFile.minimal_endpoints){
@@ -35,6 +35,7 @@ module.exports = function() {
3535
}
3636
const object = {};
3737
_.forEach(swagger.properties,function(property,name){
38+
if(!property.type) return object;
3839
if (notInclude === false || notInclude !== name){
3940
let newParent = parent ? parent+'.'+name : undefined;
4041
object[name] = require('./index.js')(property,name,newParent);
@@ -43,4 +44,13 @@ module.exports = function() {
4344
return object;
4445
};
4546

47+
function validationProperties(swagger){
48+
if(!swagger.properties || Object.keys(swagger.properties).length === 0){
49+
if(swagger.additionalProperties && swagger.additionalProperties !== false){
50+
return {}
51+
}
52+
require('../utils/error.js')(`There is an object without properties: ${JSON.stringify(swagger)}`);
53+
}
54+
}
55+
4656
}()

0 commit comments

Comments
 (0)