Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit eaaa73c

Browse files
committed
fix(oas3): add missing warnings for OpenAPI 3.1 functionality
1 parent a76c680 commit eaaa73c

File tree

4 files changed

+48
-0
lines changed

4 files changed

+48
-0
lines changed

packages/openapi3-parser/lib/parser/oas/parseInfoObject.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const R = require('ramda');
22
const { createError } = require('../../elements');
33
const {
44
createInvalidMemberWarning,
5+
createUnsupportedMemberWarning,
56
} = require('../annotations');
67
const {
78
isObject, hasKey, getValue, isExtension,
@@ -16,6 +17,9 @@ const parseContactObject = require('./parseContactObject');
1617
const name = 'Info Object';
1718
const requiredKeys = ['title', 'version'];
1819

20+
const unsupported31Keys = ['summary'];
21+
const isUnsupported31Key = R.anyPass(R.map(hasKey, unsupported31Keys));
22+
1923
/**
2024
* Returns whether the given member element is unsupported
2125
* @param member {MemberElement}
@@ -55,6 +59,14 @@ function parseInfo(context, info) {
5559
// FIXME Support exposing extensions into parse result
5660
[isExtension, () => new namespace.elements.ParseResult()],
5761

62+
[
63+
R.both(
64+
isUnsupported31Key,
65+
R.always(context.isOpenAPIVersionMoreThanOrEqual(3, 1))
66+
),
67+
createUnsupportedMemberWarning(context.namespace, name),
68+
],
69+
5870
// Return a warning for additional properties
5971
[R.T, createInvalidMemberWarning(namespace, name)],
6072
]);

packages/openapi3-parser/lib/parser/oas/parseLicenseObject.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const R = require('ramda');
33
const { createWarning } = require('../../elements');
44
const {
55
createInvalidMemberWarning,
6+
createUnsupportedMemberWarning,
67
} = require('../annotations');
78
const {
89
isObject, hasKey, isExtension,
@@ -14,10 +15,20 @@ const pipeParseResult = require('../../pipeParseResult');
1415
const name = 'License Object';
1516
const requiredKeys = ['name'];
1617

18+
const unsupported31Keys = ['identifier'];
19+
const isUnsupported31Key = R.anyPass(R.map(hasKey, unsupported31Keys));
20+
1721
const parseMember = context => R.cond([
1822
[hasKey('name'), parseString(context, name, false)],
1923
[hasKey('url'), parseString(context, name, false)],
2024
[isExtension, () => new context.namespace.elements.ParseResult()],
25+
[
26+
R.both(
27+
isUnsupported31Key,
28+
R.always(context.isOpenAPIVersionMoreThanOrEqual(3, 1))
29+
),
30+
createUnsupportedMemberWarning(context.namespace, name),
31+
],
2132
[R.T, createInvalidMemberWarning(context.namespace, name)],
2233
]);
2334

packages/openapi3-parser/test/unit/parser/oas/parseInfoObject-test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,19 @@ describe('#parseInfoObject', () => {
9797
expect(parseResult).to.not.contain.annotations;
9898
});
9999

100+
it('provides warning for unsupported OpenAPI 3.1 keys', () => {
101+
context.openapiVersion = { major: 3, minor: 1 };
102+
const object = new namespace.elements.Object({
103+
title: 'My API',
104+
version: '1.0.0',
105+
summary: '',
106+
});
107+
108+
const parseResult = parse(context, object);
109+
110+
expect(parseResult).to.contain.warning("'Info Object' contains unsupported key 'summary'");
111+
});
112+
100113
it('provides warning for invalid keys', () => {
101114
const object = new namespace.elements.Object({
102115
title: 'My API',

packages/openapi3-parser/test/unit/parser/oas/parseLicenseObject-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ describe('#parseLicenseObject', () => {
6969
expect(parseResult).to.not.contain.annotations;
7070
});
7171

72+
it('provides warning for unsupported OpenAPI 3.1 keys', () => {
73+
context.openapiVersion = { major: 3, minor: 1 };
74+
const object = new namespace.elements.Object({
75+
name: 'Apache 2.0',
76+
identifier: 'MIT',
77+
});
78+
79+
const parseResult = parse(context)(object);
80+
81+
expect(parseResult).to.contain.warning("'License Object' contains unsupported key 'identifier'");
82+
});
83+
7284
it('provides warning for invalid keys', () => {
7385
const object = new namespace.elements.Object({
7486
name: 'Apache 2.0',

0 commit comments

Comments
 (0)