diff --git a/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/operation/SecurityVisitor.ts b/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/operation/SecurityVisitor.ts index 02bf57f16..fa797dd3a 100644 --- a/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/operation/SecurityVisitor.ts +++ b/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/operation/SecurityVisitor.ts @@ -30,7 +30,7 @@ class SecurityVisitor extends Mixin(SpecificationVisitor, FallbackVisitor) { if (isReferenceLikeElement(item)) { element = this.toRefractedElement(['document', 'objects', 'Reference'], item); - element.setMetaProperty('referenced-element', 'operationSecurity'); + element.setMetaProperty('referenced-element', 'securityScheme'); } else { element = this.toRefractedElement(['document', 'objects', 'SecurityScheme'], item); } diff --git a/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/server/SecurityVisitor.ts b/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/server/SecurityVisitor.ts index 5c0a80356..a2f0dbaae 100644 --- a/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/server/SecurityVisitor.ts +++ b/packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/server/SecurityVisitor.ts @@ -30,7 +30,7 @@ class SecurityVisitor extends Mixin(SpecificationVisitor, FallbackVisitor) { if (isReferenceLikeElement(item)) { element = this.toRefractedElement(['document', 'objects', 'Reference'], item); - element.setMetaProperty('referenced-element', 'serverSecurity'); + element.setMetaProperty('referenced-element', 'securityScheme'); } else { element = this.toRefractedElement(['document', 'objects', 'SecurityScheme'], item); } diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/components-security-schemes/dereferenced.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/components-security-schemes/dereferenced.json new file mode 100644 index 000000000..964b03fa5 --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/components-security-schemes/dereferenced.json @@ -0,0 +1,15 @@ +[ + { + "asyncapi": "3.0.0", + "components": { + "securitySchemes": { + "scheme1": { + "type": "apiKey" + }, + "scheme2": { + "type": "apiKey" + } + } + } + } +] diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/components-security-schemes/root.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/components-security-schemes/root.json new file mode 100644 index 000000000..e08ab4593 --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/components-security-schemes/root.json @@ -0,0 +1,13 @@ +{ + "asyncapi": "3.0.0", + "components": { + "securitySchemes": { + "scheme1": { + "type": "apiKey" + }, + "scheme2": { + "$ref": "#/components/securitySchemes/scheme1" + } + } + } +} diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-object/dereferenced.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-object/dereferenced.json new file mode 100644 index 000000000..5451fd6be --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-object/dereferenced.json @@ -0,0 +1,18 @@ +[{ + "asyncapi": "3.0.0", + "components": { + "operations": { + "operation1": { + "security": [{ + "type": "string" + }] + }, + "operation2": { + "security": [{ + "type": "string" + }] + } + } + } +}] + diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-object/root.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-object/root.json new file mode 100644 index 000000000..1d334c84e --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-object/root.json @@ -0,0 +1,18 @@ +{ + "asyncapi": "3.0.0", + "components": { + "operations": { + "operation1": { + "security": [{ + "type": "string" + }] + }, + "operation2": { + "security": [{ + "$ref": "#/components/operations/operation1/security/0" + }] + } + } + } +} + diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-trait-object/dereferenced.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-trait-object/dereferenced.json new file mode 100644 index 000000000..ac4df1e25 --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-trait-object/dereferenced.json @@ -0,0 +1,17 @@ +[{ + "asyncapi": "3.0.0", + "components": { + "operationTraits": { + "operationTrait1": { + "security": [{ + "type": "apiKey" + }] + }, + "operationTrait2": { + "security": [{ + "type": "apiKey" + }] + } + } + } +}] \ No newline at end of file diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-trait-object/root.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-trait-object/root.json new file mode 100644 index 000000000..6e3281faf --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/operation-trait-object/root.json @@ -0,0 +1,18 @@ +{ + "asyncapi": "3.0.0", + "components": { + "operationTraits": { + "operationTrait1": { + "security": [{ + "type": "apiKey" + }] + }, + "operationTrait2": { + "security": [{ + "$ref": "#/components/operationTraits/operationTrait1/security/0" + }] + } + } + } +} + diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/server-object/dereferenced.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/server-object/dereferenced.json new file mode 100644 index 000000000..158d2d973 --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/server-object/dereferenced.json @@ -0,0 +1,11 @@ +[{ + "asyncapi": "3.0.0", + "servers": { + "server1": { + "security": [{ "type": "apiKey"}] + }, + "server2": { + "security": [{ "type": "apiKey"}] + } + } +}] diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/server-object/root.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/server-object/root.json new file mode 100644 index 000000000..e28d4160d --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/fixtures/server-object/root.json @@ -0,0 +1,11 @@ +{ + "asyncapi": "3.0.0", + "servers": { + "server1": { + "security": [{ "$ref": "#/servers/server2/security/0" }] + }, + "server2": { + "security": [{ "type": "apiKey" }] + } + } +} diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/index.ts b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/index.ts new file mode 100644 index 000000000..70a71ddaf --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/security-scheme-object/index.ts @@ -0,0 +1,72 @@ +import path from 'node:path'; +import { assert } from 'chai'; +import { toValue } from '@swagger-api/apidom-core'; +import { mediaTypes } from '@swagger-api/apidom-ns-asyncapi-3'; +import { fileURLToPath } from 'node:url'; + +import { loadJsonFile } from '../../../../helpers.ts'; +import { dereference } from '../../../../../src/index.ts'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const rootFixturePath = path.join(__dirname, 'fixtures'); + +describe('dereference', function () { + context('strategies', function () { + context('asyncapi-3', function () { + context('Security Scheme Object', function () { + context('given in components/securitySchemes field', function () { + const fixturePath = path.join(rootFixturePath, 'components-security-schemes'); + + specify('should dereference', async function () { + const rootFilePath = path.join(fixturePath, 'root.json'); + const actual = await dereference(rootFilePath, { + parse: { mediaType: mediaTypes.latest('json') }, + }); + const expected = loadJsonFile(path.join(fixturePath, 'dereferenced.json')); + + assert.deepEqual(toValue(actual), expected); + }); + }); + context('given in servers/security field', function () { + const fixturePath = path.join(rootFixturePath, 'server-object'); + + specify('should dereference', async function () { + const rootFilePath = path.join(fixturePath, 'root.json'); + const actual = await dereference(rootFilePath, { + parse: { mediaType: mediaTypes.latest('json') }, + }); + + const expected = loadJsonFile(path.join(fixturePath, 'dereferenced.json')); + assert.deepEqual(toValue(actual), expected); + }); + }); + context('given in operation/security field', function () { + const fixturePath = path.join(rootFixturePath, 'operation-object'); + + specify('should dereference', async function () { + const rootFilePath = path.join(fixturePath, 'root.json'); + const actual = await dereference(rootFilePath, { + parse: { mediaType: mediaTypes.latest('json') }, + }); + + const expected = loadJsonFile(path.join(fixturePath, 'dereferenced.json')); + assert.deepEqual(toValue(actual), expected); + }); + }); + context('given in operationTraits/security field', function () { + const fixturePath = path.join(rootFixturePath, 'operation-trait-object'); + + specify('should dereference', async function () { + const rootFilePath = path.join(fixturePath, 'root.json'); + const actual = await dereference(rootFilePath, { + parse: { mediaType: mediaTypes.latest('json') }, + }); + + const expected = loadJsonFile(path.join(fixturePath, 'dereferenced.json')); + assert.deepEqual(toValue(actual), expected); + }); + }); + }); + }); + }); +});