validify.js
Version:
Flexible validation framework
140 lines (121 loc) • 3.43 kB
JavaScript
/*jshint -W101:start */
var validify = require('../validify');
var chai = require('chai');
var assert = require('chai').assert;
describe('Advanced Tests', function () {
var testObject = {
boolField: true,
intField: 10,
floatField: 1.1,
stringField: 'some string',
boolArrayField: [true, false, true],
intArrayField: [10, 20, 30],
floatArrayField: [10.1, 20.1, 30.1],
stringArrayField: ['string1', 'string2'],
objectArrayField: [{name: 'object1'}, {name: 'object2'}],
objectField: {field1: 1, field2: 'bleh', subObject: {subObjectField1: 2}}
};
it('advanced declarative constraints for object validation', function () {
assert(validify.validate(testObject, {
// TODO - constraints for additional property levels (e.g. objectField.field1: {})
'objectArrayField.name': { // field
present: true,
length: 7
}
}), 'name not detected as present for each object');
assert(validify.validate(testObject, {
'intArrayField': { // field
greaterThan: {
min: 5
}
}
}), 'intArrayField values not greater than 5');
assert(validify.validate(testObject, {
'objectArrayField.blah': { // field
present: true
}
}) === false, 'blah detected as present for some objects');
});
it('advanced declarative constraints using AND operators', function () {
// AND rules
assert(validify.validate(testObject, [{
intField: {
present: true
}
}, {
floatField: {
present: false
}
}]) === false, 'both fields we\'re not detected when they should have been');
assert(validify.validate(testObject, [{
intField: {
present: true
}
}, {
nonExistentField: {
present: false
}
}]), 'both fields we\'re detected when they shouldn\'t have been');
});
it('advanced declarative constraints using OR operators', function () {
// OR rules
assert(validify.validate(testObject, [{
intField: {
eq: 10
}
}, {
floatField: {
eq: 1.1
}
}], 'or'), 'both fields should have detected as eq, but didn\'t');
assert(validify.validate(testObject, [{
intField: {
eq: 5
}
}, {
floatField: {
eq: 1.1
}
}], 'or'), 'one of fields should have detected as eq, but didn\'t');
assert(validify.validate(testObject, [{
intField: {
eq: 5
}
}, {
floatField: {
eq: 2.2
}
}], 'or') === false, 'none of fields should have detected as eq, but didn\'t');
});
it('advanced declarative constraints using XOR operators', function () {
// OR rules
assert(validify.validate(testObject, [{
intField: {
eq: 10
}
}, {
floatField: {
eq: 1.1
}
}], 'xor') === false, 'both of the fields should validate, but only one did');
assert(validify.validate(testObject, [{
intField: {
eq: 5
}
}, {
floatField: {
eq: 1.1
}
}], 'xor'), 'only one of the fields should have validated, but one or both did');
assert(validify.validate(testObject, [{
intField: {
eq: 5
}
}, {
floatField: {
eq: 2.2
}
}], 'xor') === false, 'none of fields should have validated, but one of them did');
});
});
/*jshint -W101:send */