boats
Version:
Beautiful Open / Async Template System - Write less yaml with BOATS and Nunjucks.
155 lines (154 loc) • 7.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const generatePermissionsSchema_1 = tslib_1.__importDefault(require("../generatePermissionsSchema"));
const lodash_1 = tslib_1.__importDefault(require("lodash"));
const originalConsoleInfo = console.info;
describe('generatePermissionsSchema', () => {
let bundledJson;
let mockConsoleInfo;
beforeEach(() => {
bundledJson = {
components: {
schemas: {
MyExistingSchema: { type: 'string' }
}
},
definitions: {
MyExistingSchema: { type: 'string' }
},
paths: {
'/path1': {
get: { nobody: 'cares' }
},
'/path2': {
get: { who: 'cares' },
post: { nobody: 'cares at all' }
}
}
};
mockConsoleInfo = jest.fn();
});
afterEach(() => {
console.info = originalConsoleInfo;
});
const makeExpectedJson = (schemaName, permissions) => {
const originalJson = lodash_1.default.cloneDeep(bundledJson);
if (originalJson.swagger) {
return {
...originalJson,
definitions: {
...(originalJson.definitions || {}),
[schemaName]: {
type: 'string',
enum: permissions
}
}
};
}
return {
...originalJson,
components: {
...originalJson.components,
schemas: {
...(originalJson.components.schemas || {}),
[schemaName]: {
type: 'string',
enum: permissions
}
}
}
};
};
it('openapi: does not modify schema when the option is disabled', () => {
const previousJson = lodash_1.default.cloneDeep(bundledJson);
expect((0, generatePermissionsSchema_1.default)(bundledJson, '')).toEqual(previousJson);
expect((0, generatePermissionsSchema_1.default)(bundledJson, undefined)).toEqual(previousJson);
});
it('swagger: does not modify schema when the option is disabled', () => {
bundledJson.swagger = '2.0';
const previousJson = lodash_1.default.cloneDeep(bundledJson);
expect((0, generatePermissionsSchema_1.default)(bundledJson, '')).toEqual(previousJson);
expect((0, generatePermissionsSchema_1.default)(bundledJson, undefined)).toEqual(previousJson);
});
it('openapi: does not modify schema when the option is enabled but there are no permissions', () => {
const previousJson = lodash_1.default.cloneDeep(bundledJson);
expect((0, generatePermissionsSchema_1.default)(bundledJson, 'Permissions')).toEqual(previousJson);
});
it('swagger: does not modify schema when the option is enabled but there are no permissions', () => {
bundledJson.swagger = '2.0';
const previousJson = lodash_1.default.cloneDeep(bundledJson);
expect((0, generatePermissionsSchema_1.default)(bundledJson, 'Permissions')).toEqual(previousJson);
});
it('openapi: adds permissions when the option is enabled', () => {
const schemaName = 'MyPermissions';
const permissions = [
'coolPermission1',
'coolerPermission2',
'awesomePermission3'
];
bundledJson.paths['/path1'].get['x-permission'] = permissions[0];
bundledJson.paths['/path2'].get['x-permission'] = permissions[1];
bundledJson.paths['/path2'].post['x-permission'] = permissions[2];
const expectedJson = makeExpectedJson(schemaName, permissions);
expect((0, generatePermissionsSchema_1.default)(bundledJson, schemaName)).toEqual(expectedJson);
});
it('swagger: adds permissions when the option is enabled', () => {
bundledJson.swagger = '2.0';
const schemaName = 'MyPermissions';
const permissions = [
'coolPermission1',
'coolerPermission2',
'awesomePermission3'
];
bundledJson.paths['/path1'].get['x-permission'] = permissions[0];
bundledJson.paths['/path2'].get['x-permission'] = permissions[1];
bundledJson.paths['/path2'].post['x-permission'] = permissions[2];
const expectedJson = makeExpectedJson(schemaName, permissions);
expect((0, generatePermissionsSchema_1.default)(bundledJson, schemaName)).toEqual(expectedJson);
});
it('openapi: adds permissions when there are no schemas at all', () => {
const schemaName = 'MySwaggerPermissions';
const permissions = [
'coolPermission4',
'coolerPermission5',
'awesomePermission6'
];
delete bundledJson.components.schemas;
bundledJson.paths['/path1'].get['x-permission'] = permissions[0];
bundledJson.paths['/path2'].get['x-permission'] = permissions[1];
bundledJson.paths['/path2'].post['x-permission'] = permissions[2];
const expectedJson = makeExpectedJson(schemaName, permissions);
expect((0, generatePermissionsSchema_1.default)(bundledJson, schemaName)).toEqual(expectedJson);
});
it('swagger: adds permissions when there are no schemas at all', () => {
bundledJson.swagger = '2.0';
const schemaName = 'MySwaggerPermissions';
const permissions = [
'coolPermission4',
'coolerPermission5',
'awesomePermission6'
];
delete bundledJson.definitions;
bundledJson.paths['/path1'].get['x-permission'] = permissions[0];
bundledJson.paths['/path2'].get['x-permission'] = permissions[1];
bundledJson.paths['/path2'].post['x-permission'] = permissions[2];
const expectedJson = makeExpectedJson(schemaName, permissions);
expect((0, generatePermissionsSchema_1.default)(bundledJson, schemaName)).toEqual(expectedJson);
});
it('openapi: informs when the autogenerated schema overwrites an exisitng schema', () => {
bundledJson.paths['/path1'].get['x-permission'] = 'readPath1Get';
console.info = mockConsoleInfo;
const schemaName = 'MyExistingSchema';
(0, generatePermissionsSchema_1.default)(bundledJson, schemaName);
expect(mockConsoleInfo).toBeCalledWith(`INFO: Schema named "${schemaName}" already exists, overwriting this with the generated permissions schema.`);
});
it('swagger: informs when the autogenerated schema overwrites an exisitng schema', () => {
bundledJson.swagger = '2.0';
bundledJson.paths['/path1'].get['x-permission'] = 'readPath1Get';
console.info = mockConsoleInfo;
const schemaName = 'MyExistingSchema';
(0, generatePermissionsSchema_1.default)(bundledJson, schemaName);
expect(mockConsoleInfo).toBeCalledWith(`INFO: Schema named "${schemaName}" already exists, overwriting this with the generated permissions schema.`);
});
});