mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-29 23:54:24 +00:00
249 lines
6.0 KiB
JavaScript
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'
|
|
};
|