import { describe, it, expect } from '@jest/globals'; import openApiToBruno from '../../../src/openapi/openapi-to-bruno'; describe('openapi-circular-references', () => { it('should handle simple circular references in schema correctly', async () => { const brunoCollection = openApiToBruno(circularRefsData); expect(brunoCollection).toMatchObject(circularRefsOutput); }); it('should handle complex circular reference chains correctly', async () => { const brunoCollection = openApiToBruno(complexCircularRefsData); expect(brunoCollection).toMatchObject(circularRefsOutput); }); }); const circularRefsData = { components: { schemas: { schema_1: { additionalProperties: false, description: 'schema_1', properties: { conditions: { $ref: '#/components/schemas/schema_1' } }, type: 'object' }, schema_2: { additionalProperties: false, description: 'schema_2', properties: { conditionGroup: { description: 'nested schema_1', items: { $ref: '#/components/schemas/schema_1' }, type: 'array' }, operation: { description: 'operation', enum: ['ANY', 'ALL'], type: 'string' } }, type: 'object' } } }, info: { description: 'circular reference openapi sample json spec', title: 'circular reference openapi sample json spec', version: '0.1' }, openapi: '3.0.1', paths: { '/': { post: { deprecated: false, description: 'echo ping api', operationId: 'echo ping', parameters: [], requestBody: { content: { 'application/json': { schema: { $ref: '#/components/schemas/schema_1' } } }, description: 'echo ping api', required: true }, responses: { 200: { content: { 'application/json': { example: 'ping' } }, description: 'Returned if the request is successful.' } } } } }, servers: [{ url: 'https://echo.usebruno.com' }] }; // More complex circular reference test with a longer chain const complexCircularRefsData = { components: { schemas: { schema_1: { additionalProperties: false, description: 'schema_1', properties: { conditionGroup: { description: 'nested schema_1', items: { $ref: '#/components/schemas/schema_2' }, type: 'array' } }, type: 'object' }, schema_2: { additionalProperties: false, description: 'schema_2', properties: { conditionGroup: { description: 'nested schema_2', items: { $ref: '#/components/schemas/schema_3' }, type: 'array' } }, type: 'object' }, schema_3: { additionalProperties: false, description: 'schema_3', properties: { conditionGroup: { description: 'nested schema_3', items: { $ref: '#/components/schemas/schema_4' }, type: 'array' } }, type: 'object' }, schema_4: { additionalProperties: false, description: 'schema_4', properties: { conditionGroup: { description: 'nested schema_4', items: { $ref: '#/components/schemas/schema_5' }, type: 'array' } }, type: 'object' }, schema_5: { additionalProperties: false, description: 'schema_4', properties: { conditionGroup: { description: 'nested schema_5', items: { $ref: '#/components/schemas/schema_1' }, type: 'array' } }, type: 'object' }, schema_6: { additionalProperties: false, description: 'schema_3', properties: { conditionGroup: { description: 'nested schema_3', items: { $ref: '#/components/schemas/schema_1' }, type: 'array' }, operation: { description: 'operation', enum: ['ANY', 'ALL'], type: 'string' } }, type: 'object' } } }, info: { description: 'circular reference openapi sample json spec', title: 'circular reference openapi sample json spec', version: '0.1' }, openapi: '3.0.1', paths: { '/': { post: { deprecated: false, description: 'echo ping api', operationId: 'echo ping', parameters: [], requestBody: { content: { 'application/json': { schema: { $ref: '#/components/schemas/schema_1' } } }, description: 'echo ping api', required: true }, responses: { 200: { content: { 'application/json': { example: 'ping' } }, description: 'Returned if the request is successful.' } } } } }, servers: [{ url: 'https://echo.usebruno.com' }] }; const circularRefsOutput = { environments: [ { name: 'Environment 1', variables: [ { enabled: true, name: 'baseUrl', secret: false, type: 'text', value: 'https://echo.usebruno.com' } ] } ], items: [ { name: 'echo ping', type: 'http-request', request: { url: '{{baseUrl}}/', method: 'POST', auth: { mode: 'inherit' }, headers: [], params: [], body: { mode: 'json' } } } ], name: 'circular reference openapi sample json spec', version: '1' };