Files
bruno/packages/bruno-converters/tests/openapi/openapi-to-bruno/openapi-circular-references.spec.js
2025-12-04 01:37:20 +05:30

249 lines
6.0 KiB
JavaScript

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'
};