Filter roots by specification version

Filter roots by specification version
This commit is contained in:
Luis Tejeda
2022-04-26 12:06:03 -05:00
committed by Erik Mendoza
parent e040455f46
commit f3030247ea
3 changed files with 79 additions and 16 deletions

View File

@@ -68,8 +68,14 @@ function added(path, referencesInNode) {
*/
function getReferences (currentNode) {
let referencesInNode = [],
currentContent = currentNode.content;
const OASObject = parse.getOasObject(currentContent);
currentContent = currentNode.content,
OASObject;
if (currentNode.parsed) {
OASObject = currentNode.parsed;
}
else {
OASObject = parse.getOasObject(currentContent);
}
traverseUtility(OASObject).forEach((property) => {
if (property) {
let hasReferenceTypeKey;

View File

@@ -88,7 +88,9 @@ const { formatDataPath, checkIsCorrectType, isKnownType,
crypto = require('crypto'),
DEFAULT_SCHEMA_UTILS = require('./30XUtils/schemaUtils30X'),
{ getRelatedFiles } = require('./relatedFiles');
{ getRelatedFiles } = require('./relatedFiles'),
{ compareVersion } = require('./common/versionUtils.js'),
parse = require('./parse');
/* eslint-enable */
// See https://github.com/json-schema-faker/json-schema-faker/tree/master/docs#available-options
@@ -4852,16 +4854,24 @@ module.exports = {
* @param {object} rootFiles - rootFile:{path:string}
* @param {array} inputData - [{path:string}]}
* @param {string} origin - process origin
* @param {string} version - process specification version
*
* @returns {object} root files information and data input
*/
mapProcessRelatedFiles(rootFiles, inputData, origin) {
let data = rootFiles.map((root) => {
mapProcessRelatedFiles(rootFiles, inputData, origin, version) {
let parsedRootFiles = rootFiles.map((rootFile) => {
let parsedContent = parse.getOasObject(rootFile.content);
return { fileName: rootFile.fileName, content: rootFile.content, parsed: parsedContent };
}).filter((rootWithParsedContent) => {
return compareVersion(version, rootWithParsedContent.parsed.oasObject.openapi);
}),
data = parsedRootFiles.map((root) => {
let { relatedFiles, missingRelatedFiles } = getRelatedFiles(root, inputData, origin);
return {
rootFile: { path: root.fileName },
relatedFiles,
missingRelatedFiles };
missingRelatedFiles
};
});
return data;
},
@@ -4890,7 +4900,7 @@ module.exports = {
};
if (inputRelatedFiles.rootFiles && inputRelatedFiles.rootFiles.length > 0) {
res.output.data = this.mapProcessRelatedFiles(inputRelatedFiles.rootFiles, inputRelatedFiles.data,
inputRelatedFiles.origin);
inputRelatedFiles.origin, version);
}
return res;
}

View File

@@ -7,6 +7,7 @@ let expect = require('chai').expect,
PET_STORE_SEPARATED = '../data/petstore separate yaml/spec',
RELATED_FILES = '../data/relatedFiles',
PET_STORE_SEPARATED_COMMON = '../data/petstore separate yaml/common',
VALID_OPENAPI_31_PATH = '../data/valid_openapi31X',
validPetstore = path.join(__dirname, VALID_OPENAPI_PATH + '/petstore.yaml'),
petstoreSeparatedPet = path.join(__dirname, PET_STORE_SEPARATED + '/Pet.yaml'),
petstoreSeparatedError = path.join(__dirname, PET_STORE_SEPARATED_COMMON + '/Error.yaml'),
@@ -18,10 +19,8 @@ let expect = require('chai').expect,
internalRefOnly = path.join(__dirname, VALID_OPENAPI_PATH + '/deepObjectLengthProperty.yaml'),
circularRef = path.join(__dirname, RELATED_FILES + '/circularRef.yaml'),
oldPet = path.join(__dirname, RELATED_FILES + '/oldPet.yaml'),
pet = path.join(__dirname, RELATED_FILES + '/Pet.yaml');
// petstoreSeparatedJson = path.join(__dirname, PET_STORE_SEPARATED_JSON + '/swagger.json'),
// petstoreSeparatedPetJson = path.join(__dirname, PET_STORE_SEPARATED_JSON + '/Pet.json'),
// validHopService31x = path.join(__dirname, VALID_OPENAPI_31_PATH + '/yaml/hopService.yaml');
pet = path.join(__dirname, RELATED_FILES + '/Pet.yaml'),
validHopService31x = path.join(__dirname, VALID_OPENAPI_31_PATH + '/yaml/hopService.yaml');
describe('detectRelatedFiles method', function() {
@@ -220,4 +219,52 @@ describe('detectRelatedFiles method', function() {
expect(res.output.data[0].relatedFiles.length).to.equal(4);
expect(res.output.data[0].missingRelatedFiles.length).to.equal(0);
});
it('should filter root according to the version 3.1', async function() {
let contentFilePet = fs.readFileSync(validPetstore, 'utf8'),
contentFileHop = fs.readFileSync(validHopService31x, 'utf8'),
input = {
type: 'folder',
specificationVersion: '3.1',
rootFiles: [
{
path: '/petstore.yaml',
content: contentFilePet
},
{
path: '/hopService.yaml',
content: contentFileHop
}
],
data: [
]
};
const res = await Converter.detectRelatedFiles(input);
expect(res).to.not.be.empty;
expect(res.result).to.be.true;
expect(res.output.data[0].rootFile.path).to.equal('/hopService.yaml');
});
it('should filter root according to the version default', async function() {
let contentFilePet = fs.readFileSync(validPetstore, 'utf8'),
contentFileHop = fs.readFileSync(validHopService31x, 'utf8'),
input = {
type: 'folder',
rootFiles: [
{
path: '/petstore.yaml',
content: contentFilePet
},
{
path: '/hopService.yaml',
content: contentFileHop
}
],
data: [
]
};
const res = await Converter.detectRelatedFiles(input);
expect(res).to.not.be.empty;
expect(res.result).to.be.true;
expect(res.output.data[0].rootFile.path).to.equal('/petstore.yaml');
});
});