ajv/spec/options/options_add_schemas.spec.js

131 lines
4.1 KiB
JavaScript

'use strict';
var Ajv = require('../ajv');
var should = require('../chai').should();
describe('options to add schemas', function() {
describe('schemas', function() {
it('should add schemas from object', function() {
var ajv = new Ajv({ schemas: {
int: { type: 'integer' },
str: { type: 'string' }
}});
ajv.validate('int', 123) .should.equal(true);
ajv.validate('int', 'foo') .should.equal(false);
ajv.validate('str', 'foo') .should.equal(true);
ajv.validate('str', 123) .should.equal(false);
});
it('should add schemas from array', function() {
var ajv = new Ajv({ schemas: [
{ $id: 'int', type: 'integer' },
{ $id: 'str', type: 'string' },
{ $id: 'obj', properties: { int: { $ref: 'int' }, str: { $ref: 'str' } } }
]});
ajv.validate('obj', { int: 123, str: 'foo' }) .should.equal(true);
ajv.validate('obj', { int: 'foo', str: 'bar' }) .should.equal(false);
ajv.validate('obj', { int: 123, str: 456 }) .should.equal(false);
});
});
describe('addUsedSchema', function() {
[true, undefined].forEach(function (optionValue) {
describe('= ' + optionValue, function() {
var ajv;
beforeEach(function() {
ajv = new Ajv({ addUsedSchema: optionValue });
});
describe('compile and validate', function() {
it('should add schema', function() {
var schema = { $id: 'str', type: 'string' };
var validate = ajv.compile(schema);
validate('abc') .should.equal(true);
validate(1) .should.equal(false);
ajv.getSchema('str') .should.equal(validate);
schema = { $id: 'int', type: 'integer' };
ajv.validate(schema, 1) .should.equal(true);
ajv.validate(schema, 'abc') .should.equal(false);
ajv.getSchema('int') .should.be.a('function');
});
it('should throw with duplicate ID', function() {
ajv.compile({ $id: 'str', type: 'string' });
should.throw(function() {
ajv.compile({ $id: 'str', minLength: 2 });
});
var schema = { $id: 'int', type: 'integer' };
var schema2 = { $id: 'int', minimum: 0 };
ajv.validate(schema, 1) .should.equal(true);
should.throw(function() {
ajv.validate(schema2, 1);
});
});
});
});
});
describe('= false', function() {
var ajv;
beforeEach(function() {
ajv = new Ajv({ addUsedSchema: false });
});
describe('compile and validate', function() {
it('should NOT add schema', function() {
var schema = { $id: 'str', type: 'string' };
var validate = ajv.compile(schema);
validate('abc') .should.equal(true);
validate(1) .should.equal(false);
should.equal(ajv.getSchema('str'), undefined);
schema = { $id: 'int', type: 'integer' };
ajv.validate(schema, 1) .should.equal(true);
ajv.validate(schema, 'abc') .should.equal(false);
should.equal(ajv.getSchema('int'), undefined);
});
it('should NOT throw with duplicate ID', function() {
ajv.compile({ $id: 'str', type: 'string' });
should.not.throw(function() {
ajv.compile({ $id: 'str', minLength: 2 });
});
var schema = { $id: 'int', type: 'integer' };
var schema2 = { $id: 'int', minimum: 0 };
ajv.validate(schema, 1) .should.equal(true);
should.not.throw(function() {
ajv.validate(schema2, 1) .should.equal(true);
});
});
});
});
});
describe('serialize', function() {
var serializeCalled;
it('should use custom function to serialize schema to string', function() {
serializeCalled = undefined;
var ajv = new Ajv({ serialize: serialize });
ajv.addSchema({ type: 'string' });
should.equal(serializeCalled, true);
});
function serialize(schema) {
serializeCalled = true;
return JSON.stringify(schema);
}
});
});