diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-0/src/adapter.ts b/packages/apidom-parser-adapter-openapi-yaml-3-0/src/adapter.ts index 86cc3396a7..5ad521b28d 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-0/src/adapter.ts +++ b/packages/apidom-parser-adapter-openapi-yaml-3-0/src/adapter.ts @@ -13,7 +13,7 @@ export { default as mediaTypes } from './media-types.ts'; * @public */ export const detectionRegExp = - /(?^(["']?)openapi\2\s*:\s*(["']?)(?3\.0\.[0123](?:-rc[012])?)\3(?:\s+|$))|(?"openapi"\s*:\s*"(?3\.0\.[0123](?:-rc[012])?)")/m; + /(?^(["']?)openapi\2\s*:\s*(["']?)(?3\.0\.(?:[1-9]\d*|0))\3(?:\s+|$))|(?"openapi"\s*:\s*"(?3\.0\.(?:[1-9]\d*|0))")/m; /** * @public diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts index 8c07dcc238..46f898daaa 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts +++ b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts @@ -22,8 +22,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 () { @@ -91,12 +91,29 @@ 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.1.145')); + assert.isFalse(adapter.detectionRegExp.test('openapi: 3.1.0')); assert.isFalse(adapter.detectionRegExp.test('openapi: 3.01.0')); assert.isFalse(adapter.detectionRegExp.test('openapi: 3.0.01')); - assert.isFalse(adapter.detectionRegExp.test('openapi: 3.1.0')); - assert.isFalse(adapter.detectionRegExp.test('openapi: 3.1.1')); - assert.isFalse(adapter.detectionRegExp.test('openapi: 3.0.15')); + assert.isFalse(adapter.detectionRegExp.test('openapi: 3.0.1-rc1')); }); }); }); diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.json b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.json index 579d14dad9..fd0bb7f5c9 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.json +++ b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.json @@ -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.", diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.yaml b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.yaml index 33a5243301..bc41f09e67 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.yaml +++ b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/fixtures/sample-api.yaml @@ -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. diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/media-types.ts b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/media-types.ts index 29e8e8ae0d..abaa340fee 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/media-types.ts +++ b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/media-types.ts @@ -6,6 +6,14 @@ import * as openApiYAMLAdapter from '../src/adapter.ts'; describe('given adapter is used in parser', function () { const parser = new ApiDOMParser().use(openApiYAMLAdapter); + context('given OpenAPI 3.0.4 definition in YAML 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+yaml;version=3.0.4'); + }); + }); + context('given OpenAPI 3.0.3 definition in YAML format', function () { specify('should find appropriate media type', async function () { const mediaType = await parser.findMediaType('openapi: "3.0.3"'); @@ -38,9 +46,25 @@ describe('given adapter is used in parser', function () { }); }); - context('given OpenAPI 3.0.3-rc3 definition in YAML format', function () { + context('given OpenAPI 3.0.3-rc2 definition in YAML format', function () { + specify('should not find appropriate media type', async function () { + const mediaType = await parser.findMediaType('openapi: "3.0.3-rc2"'); + + assert.strictEqual(mediaType, 'application/octet-stream'); + }); + }); + + context('given OpenAPI 3.0.3-rc1 definition in YAML format', function () { + specify('should not find appropriate media type', async function () { + const mediaType = await parser.findMediaType('openapi: "3.0.3-rc1"'); + + assert.strictEqual(mediaType, 'application/octet-stream'); + }); + }); + + context('given OpenAPI 3.0.3-rc0 definition in YAML 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.3-rc0"'); assert.strictEqual(mediaType, 'application/octet-stream'); });