Files
fastapi-openapi-to-postman/test/system/structure.test.js
2020-04-24 13:10:49 +05:30

145 lines
5.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

let expect = require('chai').expect,
getOptions = require('../../index').getOptions;
const optionIds = [
'collapseFolders',
'requestParametersResolution',
'exampleParametersResolution',
'folderStrategy',
'indentCharacter',
'requestNameSource',
'shortValidationErrors',
'validationPropertiesToIgnore',
'showMissingInSchemaErrors',
'detailedBlobValidation'
],
expectedOptions = {
collapseFolders: {
name: 'Collapse redundant folders',
type: 'boolean',
default: true,
description: 'Importing will collapse all folders that have only one child element and lack ' +
'persistent folder-level data.'
},
requestParametersResolution: {
name: 'Request parameter generation',
type: 'enum',
default: 'Schema',
availableOptions: ['Example', 'Schema'],
description: 'Select whether to generate the request parameters based on the' +
' [schema](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#schemaObject) or the' +
' [example](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#exampleObject)' +
' in the schema.'
},
exampleParametersResolution: {
name: 'Response parameter generation',
type: 'enum',
default: 'Example',
availableOptions: ['Example', 'Schema'],
description: 'Select whether to generate the response parameters based on the' +
' [schema](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#schemaObject) or the' +
' [example](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#exampleObject)' +
' in the schema.'
},
folderStrategy: {
name: 'Folder organization',
type: 'enum',
default: 'Paths',
availableOptions: ['Paths', 'Tags'],
description: 'Select whether to create folders according to the specs paths or tags.'
},
indentCharacter: {
name: 'Set indent character',
type: 'enum',
default: 'Space',
availableOptions: ['Space', 'Tab'],
description: 'Option for setting indentation character'
},
requestNameSource: {
name: 'Naming requests',
type: 'enum',
default: 'Fallback',
availableOptions: ['Url', 'Fallback'],
description: 'Determines how the requests inside the generated collection will be named.' +
' If “Fallback” is selected, the request will be named after one of the following schema' +
' values: `description`, `operationid`, `url`.'
},
shortValidationErrors: {
name: 'Short error messages during request <> schema validation',
type: 'boolean',
default: false,
description: 'Whether detailed error messages are required for request <> schema validation operations.'
},
validationPropertiesToIgnore: {
name: 'Properties to ignore during validation',
type: 'array',
default: [],
description: 'Specific properties (parts of a request/response pair) to ignore during validation.' +
' Must be sent as an array of strings. Valid inputs in the array: PATHVARIABLE, QUERYPARAM,' +
' HEADER, BODY, RESPONSE_HEADER, RESPONSE_BODY'
},
showMissingInSchemaErrors: {
name: 'Whether MISSING_IN_SCHEMA mismatches should be returned',
type: 'boolean',
default: false,
description: 'MISSING_IN_SCHEMA indicates that an extra parameter was included in the request. For most ' +
'use cases, this need not be considered an error.'
},
detailedBlobValidation: {
name: 'Show detailed body validation messages',
id: 'detailedBlobValidation',
type: 'boolean',
default: false,
description: 'Determines whether to show detailed mismatch information for application/json content ' +
'in the request/response body.'
}
};
describe('getOptions', function() {
let options = getOptions();
it('must be a valid id and should be present in the whitelist of options id', function () {
options.forEach((option) => {
expect(option.id).to.be.oneOf(optionIds);
});
});
it('must have a valid structure', function () {
options.forEach((option) => {
expect(option).to.have.property('name');
expect(option).to.have.property('id');
expect(option).to.have.property('type');
expect(option).to.have.property('default');
expect(option).to.have.property('description');
});
});
it('must have consistent type, description and name', function () {
options.forEach((option) => {
if (expectedOptions[option.id]) {
expect(option).to.have.property('description');
expect(option.name).to.be.eql(expectedOptions[option.id].name);
expect(option.type).to.be.eql(expectedOptions[option.id].type);
expect(option.description).to.be.eql(expectedOptions[option.id].description);
}
else {
console.warn(`Option ${option.name} not present in the list of expected options.`);
}
});
});
it('must return all valid options based on criteria', function () {
getOptions({ usage: ['CONVERSION'] }).forEach((option) => {
expect(option.id).to.be.oneOf(optionIds);
expect(option.usage).to.include('CONVERSION');
});
getOptions({ external: true, usage: ['VALIDATION'] }).forEach((option) => {
expect(option.id).to.be.oneOf(optionIds);
expect(option.external).to.eql(true);
expect(option.usage).to.include('VALIDATION');
});
});
});