jaywalk
Version:
Runtime type validation
83 lines • 2.9 kB
JavaScript
;
var test = require('blue-tape');
var index_1 = require('../index');
test('object', function (t) {
t.test('properties', function (t) {
var schema = new index_1.Types.Object({
properties: {
username: new index_1.Types.String()
}
});
var validate = index_1.compile(schema);
t.test('accept valid properties', function (t) {
return validate({ username: 'hello' });
});
t.test('error on invalid properties', function (t) {
t.plan(2);
return validate({ username: 123 })
.catch(function (err) {
t.equal(err.errors.length, 1);
t.deepEqual(err.errors[0].path, ['username']);
});
});
});
t.test('property types', function (t) {
var schema = new index_1.Types.Object({
propertyTypes: [
[
new index_1.Types.String({ pattern: '^[0-9]+$' }),
new index_1.Types.String()
]
]
});
var validate = index_1.compile(schema);
t.test('accept valid property types', function (t) {
return validate({ '123': '123', '456': '456' })
.then(function (res) {
t.equal(res[123], '123');
t.equal(res[456], '456');
});
});
t.test('error on bad property type check', function (t) {
t.plan(2);
return validate({ '123': 123 })
.catch(function (err) {
t.equal(err.errors.length, 1);
t.deepEqual(err.errors[0].path, ['123']);
});
});
});
t.test('key count', function (t) {
var schema = new index_1.Types.Object({
propertyTypes: [
[
new index_1.Types.Any(),
new index_1.Types.Number()
]
],
minKeys: 2
});
var validate = index_1.compile(schema);
t.test('is structural type', function (t) {
t.throws(function () { return index_1.assert(schema, { a: 123 }); });
t.equal(index_1.assert(schema, { a: 123, b: 456 }), 6);
t.end();
});
t.test('accept valid property types', function (t) {
return validate({ a: 123, b: 456 })
.then(function (res) {
t.equal(res.a, 123);
t.equal(res.b, 456);
});
});
t.test('error on bad property count', function (t) {
t.plan(2);
return validate({ a: 123 })
.catch(function (err) {
t.equal(err.errors.length, 1);
t.deepEqual(err.errors[0].path, []);
});
});
});
});
//# sourceMappingURL=object.spec.js.map