mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-26 06:05:45 +00:00
248 lines
6.3 KiB
JavaScript
248 lines
6.3 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": "none",
|
|
},
|
|
"headers": [],
|
|
"params": [],
|
|
"body": {
|
|
"mode": "json",
|
|
}
|
|
},
|
|
},
|
|
],
|
|
"name": "circular reference openapi sample json spec",
|
|
"version": "1",
|
|
}; |