mirror of
https://github.com/postmanlabs/openapi-to-postman.git
synced 2022-11-29 22:05:00 +03:00
add inline objects to ref map
This commit is contained in:
@@ -323,7 +323,9 @@ function getReferences (currentNode, isOutOfRoot, pathSolver, parentFilename, ve
|
||||
[, local] = tempRef.split(localPointer),
|
||||
nodeFromData,
|
||||
refHasContent = false,
|
||||
parseResult;
|
||||
parseResult,
|
||||
newRefInDoc,
|
||||
inline;
|
||||
|
||||
newValue = Object.assign({}, this.node);
|
||||
nodeFromData = findNodeFromPath(tempRef, allData);
|
||||
@@ -337,15 +339,21 @@ function getReferences (currentNode, isOutOfRoot, pathSolver, parentFilename, ve
|
||||
}
|
||||
this.update({ $ref: tempRef });
|
||||
|
||||
if (nodeTrace.length === 0) {
|
||||
inline = true;
|
||||
newRefInDoc = localPointer + jsonPointerLevelSeparator + traceToParent.join(jsonPointerLevelSeparator);
|
||||
}
|
||||
|
||||
nodeReferenceDirectory[tempRef] = {
|
||||
local,
|
||||
keyInComponents: nodeTrace,
|
||||
node: newValue,
|
||||
reference: referenceInDocument,
|
||||
reference: inline ? newRefInDoc : referenceInDocument,
|
||||
traceToParent,
|
||||
parentNodeKey: parentFilename,
|
||||
mainKeyInTrace: nodeTrace[nodeTrace.length - 1],
|
||||
refHasContent
|
||||
refHasContent,
|
||||
inline
|
||||
};
|
||||
|
||||
mainKeys[componentKey] = tempRef;
|
||||
@@ -469,7 +477,6 @@ function generateComponentsObject (documentContext, rootContent, refTypeResolver
|
||||
}
|
||||
else {
|
||||
refData.nodeContent = documentContext.nodeContents[nodeRef];
|
||||
refData.inline = refData.keyInComponents.length === 0;
|
||||
}
|
||||
if (local) {
|
||||
let contentFromTrace = getContentFromTrace(refData.nodeContent, local);
|
||||
@@ -524,14 +531,17 @@ function generateComponentsWrapper(parsedOasObject) {
|
||||
* Generates a map of generated refernce to the original reference
|
||||
*
|
||||
* @param {object} globalReferences - Global references present at each root file context
|
||||
* @returns {object} referncce map
|
||||
* @returns {object} reference map
|
||||
*/
|
||||
function getReferenceMap(globalReferences) {
|
||||
const output = {};
|
||||
|
||||
_.forEach(globalReferences, (globalReference, refKey) => {
|
||||
if (_.isString(refKey) && _.isString(globalReference.reference)) {
|
||||
output[globalReference.reference] = refKey;
|
||||
output[globalReference.reference] = {
|
||||
path: refKey,
|
||||
type: globalReference.inline ? 'inline' : 'component'
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
12
test/data/toBundleExamples/referenced_path/cat.yaml
Normal file
12
test/data/toBundleExamples/referenced_path/cat.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
format: int64
|
||||
name:
|
||||
type: string
|
||||
favFood:
|
||||
type: string
|
||||
9
test/data/toBundleExamples/referenced_path/path.yaml
Normal file
9
test/data/toBundleExamples/referenced_path/path.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
description: Returns all pets alesuada ac...
|
||||
operationId: findPets
|
||||
responses:
|
||||
"200":
|
||||
description: pet response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "./pet.yaml"
|
||||
12
test/data/toBundleExamples/referenced_path/pet.yaml
Normal file
12
test/data/toBundleExamples/referenced_path/pet.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
format: int64
|
||||
name:
|
||||
type: string
|
||||
tag:
|
||||
type: string
|
||||
30
test/data/toBundleExamples/referenced_path/root.yaml
Normal file
30
test/data/toBundleExamples/referenced_path/root.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
openapi: "3.0.2"
|
||||
info:
|
||||
version: 1.0.0
|
||||
title: Swagger Petstore
|
||||
description: A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification
|
||||
termsOfService: http://swagger.io/terms/
|
||||
contact:
|
||||
name: Swagger API Team
|
||||
email: apiteam@swagger.io
|
||||
url: http://swagger.io
|
||||
license:
|
||||
name: Apache 2.0
|
||||
url: https://www.apache.org/licenses/LICENSE-2.0.html
|
||||
paths:
|
||||
/pets:
|
||||
get:
|
||||
$ref: "./path.yaml"
|
||||
/cat:
|
||||
get:
|
||||
description: Returns one cat
|
||||
operationId: findcat
|
||||
responses:
|
||||
"200":
|
||||
description: cat response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "./cat.yaml"
|
||||
|
||||
@@ -42,7 +42,8 @@ let expect = require('chai').expect,
|
||||
schemaCollision = path.join(__dirname, BUNDLES_FOLDER + '/schema_collision_from_responses'),
|
||||
schemaCollisionWRootComponent = path.join(__dirname, BUNDLES_FOLDER + '/schema_collision_w_root_components'),
|
||||
nestedExamplesAsValue = path.join(__dirname, BUNDLES_FOLDER + '/nested_examples_as_value'),
|
||||
referencedProperties = path.join(__dirname, BUNDLES_FOLDER + '/referenced_properties');
|
||||
referencedProperties = path.join(__dirname, BUNDLES_FOLDER + '/referenced_properties'),
|
||||
referencedPath = path.join(__dirname, BUNDLES_FOLDER + '/referenced_path');
|
||||
|
||||
describe('bundle files method - 3.0', function () {
|
||||
it('Should return bundled file as json - schema_from_response', async function () {
|
||||
@@ -2359,6 +2360,57 @@ describe('bundle files method - 3.0', function () {
|
||||
expect(res.result).to.be.true;
|
||||
expect(JSON.stringify(JSON.parse(res.output.data[0].bundledContent), null, 2)).to.be.equal(expected);
|
||||
});
|
||||
|
||||
it('Should return correct map with inline and components resolving', async function () {
|
||||
let contentRootFile = fs.readFileSync(referencedPath + '/root.yaml', 'utf8'),
|
||||
path = fs.readFileSync(referencedPath + '/path.yaml', 'utf8'),
|
||||
pet = fs.readFileSync(referencedPath + '/pet.yaml', 'utf8'),
|
||||
cat = fs.readFileSync(referencedPath + '/cat.yaml', 'utf8'),
|
||||
expected = {
|
||||
'#/paths//pets/get': {
|
||||
path: '/path.yaml',
|
||||
type: 'inline'
|
||||
},
|
||||
'#/components/schemas/_cat.yaml': {
|
||||
path: '/cat.yaml',
|
||||
type: 'component'
|
||||
}
|
||||
},
|
||||
input = {
|
||||
type: 'multiFile',
|
||||
specificationVersion: '3.0',
|
||||
rootFiles: [
|
||||
{
|
||||
path: '/root.yaml'
|
||||
}
|
||||
],
|
||||
data: [
|
||||
{
|
||||
path: '/root.yaml',
|
||||
content: contentRootFile
|
||||
},
|
||||
{
|
||||
path: '/pet.yaml',
|
||||
content: pet
|
||||
},
|
||||
{
|
||||
path: '/path.yaml',
|
||||
content: path
|
||||
},
|
||||
{
|
||||
path: '/cat.yaml',
|
||||
content: cat
|
||||
}
|
||||
],
|
||||
options: { includeReferenceMap: true },
|
||||
bundleFormat: 'JSON'
|
||||
};
|
||||
const res = await Converter.bundle(input);
|
||||
|
||||
expect(res).to.not.be.empty;
|
||||
expect(res.result).to.be.true;
|
||||
expect(res.output.data[0].referenceMap).to.deep.equal(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getReferences method when node does not have any reference', function() {
|
||||
|
||||
Reference in New Issue
Block a user