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

Commit e05d2f9

Browse files
committed
feat(oas3): use not supported warning for 'webhooks'
1 parent f9724a0 commit e05d2f9

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

packages/openapi3-parser/lib/context.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ class Context {
4141
isOpenAPIVersionLessThan(major, minor) {
4242
return this.openapiVersion.major < major || (this.openapiVersion.major === major && this.openapiVersion.minor < minor);
4343
}
44+
45+
isOpenAPIVersionMoreThanOrEqual(major, minor) {
46+
return this.openapiVersion.major > major || (this.openapiVersion.major === major && this.openapiVersion.minor >= minor);
47+
}
4448
}
4549

4650
module.exports = Context;

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ function parseOASObject(context, object) {
3838
return new namespace.elements.ParseResult([array].concat(parseResult.annotations.elements));
3939
};
4040

41+
const isOpenAPI31OrHigher = () => context.isOpenAPIVersionMoreThanOrEqual(3, 1);
42+
4143
const parseMember = R.cond([
4244
[hasKey('openapi'), parseOpenAPI(context)],
4345
[hasKey('servers'), R.compose(parseServersArray(context, name), getValue)],
@@ -49,6 +51,10 @@ function parseOASObject(context, object) {
4951
// FIXME Support exposing extensions into parse result
5052
[isExtension, () => new namespace.elements.ParseResult()],
5153

54+
[
55+
R.both(hasKey('webhooks'), isOpenAPI31OrHigher),
56+
createUnsupportedMemberWarning(namespace, name),
57+
],
5258
[isUnsupportedKey, createUnsupportedMemberWarning(namespace, name)],
5359

5460
// Return a warning for additional properties

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,38 @@ describe('#parseOpenAPIObject', () => {
239239
expect(parseResult).to.contain.warning("'OpenAPI Object' contains unsupported key 'externalDocs'");
240240
});
241241

242+
it('provides warning for unsupported webhooks key in OpenAPI 3.1', () => {
243+
const object = new namespace.elements.Object({
244+
openapi: '3.1.0',
245+
info: {
246+
title: 'My API',
247+
version: '1.0.0',
248+
},
249+
paths: {},
250+
webhooks: {},
251+
});
252+
253+
const parseResult = parse(context, object);
254+
255+
expect(parseResult.warnings.get(1).toValue()).to.equal("'OpenAPI Object' contains unsupported key 'webhooks'");
256+
});
257+
258+
it('provides warning for invalid key webhooks in OpenAPI 3.0', () => {
259+
const object = new namespace.elements.Object({
260+
openapi: '3.0.0',
261+
info: {
262+
title: 'My API',
263+
version: '1.0.0',
264+
},
265+
paths: {},
266+
webhooks: {},
267+
});
268+
269+
const parseResult = parse(context, object);
270+
271+
expect(parseResult).to.contain.warning("'OpenAPI Object' contains invalid key 'webhooks'");
272+
});
273+
242274
it('provides warning for invalid keys', () => {
243275
const object = new namespace.elements.Object({
244276
openapi: '3.0.0',

0 commit comments

Comments
 (0)