diff --git a/packages/openapi3-parser/lib/parser/oas/parseInfoObject.js b/packages/openapi3-parser/lib/parser/oas/parseInfoObject.js index fb9ca11bb..d05913bf4 100644 --- a/packages/openapi3-parser/lib/parser/oas/parseInfoObject.js +++ b/packages/openapi3-parser/lib/parser/oas/parseInfoObject.js @@ -2,6 +2,7 @@ const R = require('ramda'); const { createError } = require('../../elements'); const { createInvalidMemberWarning, + createUnsupportedMemberWarning, } = require('../annotations'); const { isObject, hasKey, getValue, isExtension, @@ -16,6 +17,9 @@ const parseContactObject = require('./parseContactObject'); const name = 'Info Object'; const requiredKeys = ['title', 'version']; +const unsupported31Keys = ['summary']; +const isUnsupported31Key = R.anyPass(R.map(hasKey, unsupported31Keys)); + /** * Returns whether the given member element is unsupported * @param member {MemberElement} @@ -55,6 +59,14 @@ function parseInfo(context, info) { // FIXME Support exposing extensions into parse result [isExtension, () => new namespace.elements.ParseResult()], + [ + R.both( + isUnsupported31Key, + R.always(context.isOpenAPIVersionMoreThanOrEqual(3, 1)) + ), + createUnsupportedMemberWarning(context.namespace, name), + ], + // Return a warning for additional properties [R.T, createInvalidMemberWarning(namespace, name)], ]); diff --git a/packages/openapi3-parser/lib/parser/oas/parseLicenseObject.js b/packages/openapi3-parser/lib/parser/oas/parseLicenseObject.js index 128322060..061956b59 100644 --- a/packages/openapi3-parser/lib/parser/oas/parseLicenseObject.js +++ b/packages/openapi3-parser/lib/parser/oas/parseLicenseObject.js @@ -3,6 +3,7 @@ const R = require('ramda'); const { createWarning } = require('../../elements'); const { createInvalidMemberWarning, + createUnsupportedMemberWarning, } = require('../annotations'); const { isObject, hasKey, isExtension, @@ -14,10 +15,20 @@ const pipeParseResult = require('../../pipeParseResult'); const name = 'License Object'; const requiredKeys = ['name']; +const unsupported31Keys = ['identifier']; +const isUnsupported31Key = R.anyPass(R.map(hasKey, unsupported31Keys)); + const parseMember = context => R.cond([ [hasKey('name'), parseString(context, name, false)], [hasKey('url'), parseString(context, name, false)], [isExtension, () => new context.namespace.elements.ParseResult()], + [ + R.both( + isUnsupported31Key, + R.always(context.isOpenAPIVersionMoreThanOrEqual(3, 1)) + ), + createUnsupportedMemberWarning(context.namespace, name), + ], [R.T, createInvalidMemberWarning(context.namespace, name)], ]); diff --git a/packages/openapi3-parser/test/unit/parser/oas/parseInfoObject-test.js b/packages/openapi3-parser/test/unit/parser/oas/parseInfoObject-test.js index 68853e1eb..5f73a158b 100644 --- a/packages/openapi3-parser/test/unit/parser/oas/parseInfoObject-test.js +++ b/packages/openapi3-parser/test/unit/parser/oas/parseInfoObject-test.js @@ -97,6 +97,19 @@ describe('#parseInfoObject', () => { expect(parseResult).to.not.contain.annotations; }); + it('provides warning for unsupported OpenAPI 3.1 keys', () => { + context.openapiVersion = { major: 3, minor: 1 }; + const object = new namespace.elements.Object({ + title: 'My API', + version: '1.0.0', + summary: '', + }); + + const parseResult = parse(context, object); + + expect(parseResult).to.contain.warning("'Info Object' contains unsupported key 'summary'"); + }); + it('provides warning for invalid keys', () => { const object = new namespace.elements.Object({ title: 'My API', diff --git a/packages/openapi3-parser/test/unit/parser/oas/parseLicenseObject-test.js b/packages/openapi3-parser/test/unit/parser/oas/parseLicenseObject-test.js index e424ead02..08846fa53 100644 --- a/packages/openapi3-parser/test/unit/parser/oas/parseLicenseObject-test.js +++ b/packages/openapi3-parser/test/unit/parser/oas/parseLicenseObject-test.js @@ -69,6 +69,18 @@ describe('#parseLicenseObject', () => { expect(parseResult).to.not.contain.annotations; }); + it('provides warning for unsupported OpenAPI 3.1 keys', () => { + context.openapiVersion = { major: 3, minor: 1 }; + const object = new namespace.elements.Object({ + name: 'Apache 2.0', + identifier: 'MIT', + }); + + const parseResult = parse(context)(object); + + expect(parseResult).to.contain.warning("'License Object' contains unsupported key 'identifier'"); + }); + it('provides warning for invalid keys', () => { const object = new namespace.elements.Object({ name: 'Apache 2.0',