diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/components-server-variables/dereferenced.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/components-server-variables/dereferenced.json new file mode 100644 index 000000000..cd9308143 --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/components-server-variables/dereferenced.json @@ -0,0 +1,15 @@ +[ + { + "asyncapi": "3.0.0", + "components": { + "serverVariables": { + "variable1": { + "enum": ["a", "b", "c"] + }, + "variable2": { + "enum": ["a", "b", "c"] + } + } + } + } +] diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/components-server-variables/root.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/components-server-variables/root.json new file mode 100644 index 000000000..0de7adb7e --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/components-server-variables/root.json @@ -0,0 +1,13 @@ +{ + "asyncapi": "3.0.0", + "components": { + "serverVariables": { + "variable1": { + "enum": ["a", "b", "c"] + }, + "variable2": { + "$ref": "#/components/serverVariables/variable1" + } + } + } +} diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/server-variables/dereferenced.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/server-variables/dereferenced.json new file mode 100644 index 000000000..9815b40be --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/server-variables/dereferenced.json @@ -0,0 +1,21 @@ +[ + { + "asyncapi": "3.0.0", + "components": { + "servers": { + "server1": { + "host": "http://example.com", + "protocol": "protocol", + "variables": { + "variable1": { + "enum": ["a", "b", "c"] + }, + "variable2": { + "enum": ["a", "b", "c"] + } + } + } + } + } + } +] diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/server-variables/root.json b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/server-variables/root.json new file mode 100644 index 000000000..e2be97108 --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/fixtures/server-variables/root.json @@ -0,0 +1,19 @@ +{ + "asyncapi": "3.0.0", + "components": { + "servers": { + "server1": { + "host": "http://example.com", + "protocol": "protocol", + "variables": { + "variable1": { + "enum": ["a", "b", "c"] + }, + "variable2": { + "$ref": "#/components/servers/server1/variables/variable1" + } + } + } + } + } +} diff --git a/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/index.ts b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/index.ts new file mode 100644 index 000000000..f771f669d --- /dev/null +++ b/packages/apidom-reference/test/dereference/strategies/asyncapi-3/server-variable/index.ts @@ -0,0 +1,47 @@ +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('ServerVariable Object', function () { + context('given in server/variables field', function () { + const fixturePath = path.join(rootFixturePath, 'server-variables'); + + 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 components/serverVariables field', function () { + const fixturePath = path.join(rootFixturePath, 'components-server-variables'); + + 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); + }); + }); + }); + }); + }); +});