redoc/lib/services/schema-helper.service.spec.ts
2017-02-27 13:12:53 +02:00

135 lines
3.4 KiB
TypeScript

'use strict';
import { SchemaHelper } from './schema-helper.service';
import { SpecManager } from '../utils/spec-manager';
describe('Spec Helper', () => {
describe('injectors', () => {
it('should autodetect type if not-specified', () => {
spyOn(console, 'warn').and.stub();
let schema = {
type: undefined,
properties: {}
};
SchemaHelper.runInjectors(schema, schema, '#/');
schema.type.should.be.equal('object');
expect(console.warn).toHaveBeenCalled();
(<jasmine.Spy>console.warn).and.callThrough();
});
describe('string', () => {
it('should calculate range for string with maxLength', () => {
let schema:any = {
type: 'string',
maxLength: 3
};
SchemaHelper.runInjectors(schema, schema, '#/');
schema._range.should.be.equal('<= 3 characters');
});
it('should calculate range for string with minLength', () => {
let schema:any = {
type: 'string',
minLength: 3,
};
SchemaHelper.runInjectors(schema, schema, '#/');
schema._range.should.be.equal('>= 3 characters');
});
it('should calculate range for string with both max and minLength', () => {
let schema:any = {
type: 'string',
minLength: 3,
maxLength: 5
};
SchemaHelper.runInjectors(schema, schema, '#/');
schema._range.should.be.equal('[ 3 .. 5 ] characters');
});
it('should calculate range for string with equal max and minLength', () => {
let schema:any = {
type: 'string',
minLength: 5,
maxLength: 5
};
SchemaHelper.runInjectors(schema, schema, '#/');
schema._range.should.be.equal('5 characters');
});
it('should show range as non-empty for minLength == 1', () => {
let schema:any = {
type: 'string',
minLength: 1
};
SchemaHelper.runInjectors(schema, schema, '#/');
schema._range.should.be.equal('non-empty');
});
});
});
describe('preprocessProperties', () => {
it('should not throw when type array and items are not defined', () => {
let schema = {
type: 'object',
properties: {
prop1: {
type: 'array'
}
}
};
(() => SchemaHelper.preprocessProperties(schema, '#/', {})).should.not.throw();
});
});
describe('moveRequiredPropsFirst', () => {
it('should move required props to the top', () => {
let props = [{
name: 'prop2',
type: 'string'
},
{
name: 'prop1',
type: 'number',
_required: true
}];
let required = ['prop1'];
SchemaHelper.moveRequiredPropsFirst(props, required);
props[0].name.should.be.equal('prop1');
props[1].name.should.be.equal('prop2');
});
it('should sort required props by the order or required', () => {
var props = [{
name: 'prop2',
type: 'string'
},
{
name: 'prop1',
type: 'number',
_required: true
},
{
name: 'prop3',
type: 'number',
_required: true
}
];
let required = ['prop3', 'prop1'];
SchemaHelper.moveRequiredPropsFirst(props, required);
props[0].name.should.be.equal('prop3');
props[1].name.should.be.equal('prop1');
props[2].name.should.be.equal('prop2');
});
});
});