Skip to content

Commit

Permalink
feat(parser-adapter-openapi-json-3-0): add support for OpenAPI 3.0.4 (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
char0n authored Dec 24, 2024
1 parent 6f1d4a6 commit 174ca57
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export { default as mediaTypes } from './media-types.ts';
/**
* @public
*/
export const detectionRegExp = /"openapi"\s*:\s*"(?<version_json>3\.0\.([0123]))"/;
export const detectionRegExp = /"openapi"\s*:\s*"(?<version_json>3\.0\.(?:[1-9]\d*|0))"/;

/**
* @public
Expand Down
22 changes: 19 additions & 3 deletions packages/apidom-parser-adapter-openapi-json-3-0/test/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ describe('adapter', function () {
assert.isFalse(await adapter.detect('{"openapi": "3.1.0"}'));
});

specify('should not detect patch version bump', async function () {
assert.isFalse(await adapter.detect('{"openapi": "3.0.4"}'));
specify('should detect patch version bump', async function () {
assert.isTrue(await adapter.detect('{"openapi": "3.0.24"}'));
});

specify('should not detect minor and patch version bump', async function () {
Expand Down Expand Up @@ -75,8 +75,24 @@ describe('adapter', function () {
});

context('detectionRegExp', function () {
specify('should detect version ranges in forward compatible way', function () {
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.0"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.1"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.2"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.3"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.4"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.5"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.6"'));
assert.isTrue(adapter.detectionRegExp.test('"openapi": "3.0.145"'));
});

specify('should reject rc version ranges', function () {
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.0.0-rc2"'));
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.0.0-rc1"'));
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.0.0-rc0"'));
});

specify('should reject invalid version ranges', function () {
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.0.4"'));
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.1.145"'));
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.1.0"'));
assert.isFalse(adapter.detectionRegExp.test('"openapi": "3.01.0"'));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"openapi": "3.0.3",
"openapi": "3.0.4",
"info": {
"title": "Sample Pet Store App",
"description": "This is a sample server for a pet store.",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
openapi: 3.0.3
openapi: 3.0.4
info:
title: Sample Pet Store App
description: This is a sample server for a pet store.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ import * as openApiJsonAdapter from '../src/adapter.ts';
describe('given adapter is used in parser', function () {
const parser = new ApiDOMParser().use(openApiJsonAdapter);

context('given OpenAPI 3.0.4 definition in JSON format', function () {
specify('should find appropriate media type', async function () {
const mediaType = await parser.findMediaType('{"openapi": "3.0.4"}');

assert.strictEqual(mediaType, 'application/vnd.oai.openapi+json;version=3.0.4');
});
});

context('given OpenAPI 3.0.3 definition in JSON format', function () {
specify('should find appropriate media type', async function () {
const mediaType = await parser.findMediaType('{"openapi": "3.0.3"}');
Expand Down Expand Up @@ -38,9 +46,25 @@ describe('given adapter is used in parser', function () {
});
});

context('given OpenAPI 3.0.3-rc3 definition in JSON format', function () {
context('given OpenAPI 3.0.0-rc2 definition in JSON format', function () {
specify('should not find appropriate media type', async function () {
const mediaType = await parser.findMediaType('{"openapi": "3.0.0-rc2"}');

assert.strictEqual(mediaType, 'application/octet-stream');
});
});

context('given OpenAPI 3.0.0-rc1 definition in JSON format', function () {
specify('should not find appropriate media type', async function () {
const mediaType = await parser.findMediaType('{"openapi": "3.0.0-rc1"}');

assert.strictEqual(mediaType, 'application/octet-stream');
});
});

context('given OpenAPI 3.0.0-rc0 definition in JSON format', function () {
specify('should not find appropriate media type', async function () {
const mediaType = await parser.findMediaType('{"openapi": "3.0.3-rc3"}');
const mediaType = await parser.findMediaType('{"openapi": "3.0.0-rc0"}');

assert.strictEqual(mediaType, 'application/octet-stream');
});
Expand Down

0 comments on commit 174ca57

Please sign in to comment.