redoc/tests/unit/SchemaManager.spec.js

203 lines
6.1 KiB
JavaScript
Raw Normal View History

2015-12-12 00:50:26 +03:00
'use strict';
2015-12-10 00:46:27 +03:00
import SchemaManager from 'lib/utils/SchemaManager';
describe('Schema manager', () => {
2015-12-10 00:46:27 +03:00
let schemaMgr;
beforeEach(() => {
schemaMgr = new SchemaManager();
});
it('Should initialize with empty schema', ()=> {
2015-12-10 00:46:27 +03:00
schemaMgr.schema.should.be.empty;
});
it('Should be a singleton', ()=> {
2015-12-10 00:46:27 +03:00
(new SchemaManager()).should.be.equal(schemaMgr);
});
it('load should return a promise', ()=> {
2015-12-10 22:36:11 +03:00
schemaMgr.load('/tests/schemas/extended-petstore.json').should.be.instanceof(Promise);
});
2015-12-10 00:46:27 +03:00
it('load should resolve promise for valid url', (done)=> {
2015-12-10 22:36:11 +03:00
schemaMgr.load('/tests/schemas/extended-petstore.json').then(() => {
done();
}, () => {
throw new Error('Error handler should not be called');
2015-12-10 00:46:27 +03:00
});
2015-12-10 22:36:11 +03:00
});
2015-12-10 00:46:27 +03:00
describe('Schema manager basic functionality', ()=> {
2015-12-10 22:36:11 +03:00
before(function (done) {
schemaMgr.load('/tests/schemas/extended-petstore.json').then(() => {
2015-12-10 00:46:27 +03:00
done();
}, () => {
throw new Error('Error handler should not be called');
2015-12-10 00:46:27 +03:00
});
});
2015-12-10 22:36:11 +03:00
it('should contain non-empty schema', ()=> {
schemaMgr.schema.should.be.an('object');
2015-12-10 22:36:11 +03:00
schemaMgr.schema.should.be.not.empty;
});
it('should correctly init api url', ()=> {
schemaMgr.apiUrl.should.be.equal('http://petstore.swagger.io/v2');
2015-12-10 22:36:11 +03:00
});
describe('byPointer method', () => {
it('should return correct schema part', ()=> {
2015-12-12 00:50:26 +03:00
let part = schemaMgr.byPointer('/tags/3');
part.should.be.deep.equal(schemaMgr.schema.tags[3]);
part.should.be.equal(schemaMgr.schema.tags[3]);
});
it('should return null for incorrect pointer', ()=> {
2015-12-12 00:50:26 +03:00
let part = schemaMgr.byPointer('/incorrect/pointer');
should.not.exist(part);
2015-12-10 22:36:11 +03:00
});
2015-12-10 00:46:27 +03:00
});
});
describe('getTagsMap method', () => {
before(function () {
schemaMgr._schema = {
tags: [
{name: 'tag1', description: 'info1'},
{name: 'tag2', description: 'info2', 'x-traitTag': true}
]
};
});
2015-12-12 00:50:26 +03:00
it('should return correct tags map', () => {
let tagsMap = schemaMgr.getTagsMap();
let expectedResult = {
tag1: {description: 'info1', 'x-traitTag': false},
tag2: {description: 'info2', 'x-traitTag': true}
};
tagsMap.should.be.deep.equal(expectedResult);
});
});
2015-12-12 00:50:26 +03:00
describe('buildMenuTree method', () => {
let suitSchema = {
tags: [
{name: 'tag1', description: 'info1', 'x-traitTag': true},
{name: 'tag2', description: 'info2'}
],
paths: {
test: {
put: {
tags: ['tag1', 'tag3'],
summary: 'test put'
},
get: {
tags: ['tag1', 'tag2'],
summary: 'test get'
},
// no tags
post: {
summary: 'test post'
2015-12-12 00:50:26 +03:00
}
}
}
};
let menuTree;
let entries;
before(() => {
schemaMgr._schema = suitSchema;
menuTree = schemaMgr.buildMenuTree();
entries = Array.from(menuTree.entries());
2015-12-12 00:50:26 +03:00
});
it('should return instance of Map', () => {
menuTree.should.be.instanceof(Map);
});
2015-12-12 00:50:26 +03:00
it('should return Map with correct number of entries', () => {
//2 - defined tags, 1 - tag3 and 1 [other] tag for no-tags method
entries.length.should.be.equal(2 + 1 + 1);
});
2015-12-12 00:50:26 +03:00
it('should append not defined tags to the end of list', () => {
let [tag, info] = entries[2];
tag.should.be.equal('tag3');
info.methods.length.should.be.equal(1);
info.methods[0].summary.should.be.equal('test put');
});
2015-12-12 00:50:26 +03:00
it('should append methods without tags to [other] tag', () => {
let [tag, info] = entries[3];
tag.should.be.equal('[Other]');
info.methods.length.should.be.equal(1);
info.methods[0].summary.should.be.equal('test post');
});
2015-12-12 00:50:26 +03:00
it('should map x-traitTag to empty methods list', () => {
let [, info] = entries[0];
info['x-traitTag'].should.be.true;
info.methods.should.be.empty;
});
2015-12-12 00:50:26 +03:00
it('methods for tag should contain valid pointer and summary', () => {
for (let entr of entries) {
let [, info] = entr;
info.should.be.an('object');
info.methods.should.be.an('array');
for (let methodInfo of info.methods) {
methodInfo.should.include.keys('pointer', 'summary');
let methSchema = schemaMgr.byPointer(methodInfo.pointer);
should.exist(methSchema);
if (methSchema.summary) {
methSchema.summary.should.be.equal(methodInfo.summary);
2015-12-12 00:50:26 +03:00
}
}
}
});
});
describe('getMethodParams method', () => {
before((done) => {
schemaMgr.load('/tests/schemas/schema-mgr-methodparams.json').then(() => {
done();
}, () => {
done(new Error('Error handler should not be called'));
2015-12-12 00:50:26 +03:00
});
});
2015-12-12 00:50:26 +03:00
it('should merge path and method parameters', () => {
let params = schemaMgr.getMethodParams('/paths/test1/get');
params.length.should.be.equal(2);
params[0].name.should.be.equal('methodParam');
params[1].name.should.be.equal('pathParam');
});
it('should inject correct pointers', () => {
let params = schemaMgr.getMethodParams('/paths/test1/get');
params[0]._pointer.should.be.equal('/paths/test1/get/parameters/0');
params[1]._pointer.should.be.equal('/paths/test1/parameters/0');
});
it('should resolve path params from Parameters Definitions Object', () => {
let params = schemaMgr.getMethodParams('/paths/test2/get', true);
params.length.should.be.equal(2);
params[0].name.should.be.equal('methodParam');
params[1].name.should.be.equal('extParam');
params[1]._pointer.should.be.equal('#/parameters/extparam');
});
it('should resolve method params from Parameters Definitions Object', () => {
let params = schemaMgr.getMethodParams('/paths/test3/get', true);
params.length.should.be.equal(2);
params[0].name.should.be.equal('extParam');
params[0]._pointer.should.be.equal('#/parameters/extparam');
params[1].name.should.be.equal('pathParam');
2015-12-12 00:50:26 +03:00
});
});
2015-12-12 00:50:26 +03:00
});