qvc
Version:
Handle commands and queries from the client with validation
93 lines (82 loc) • 3.09 kB
JavaScript
var validate = require('../src/validate');
var assert = require("assert");
var mustBeSomething = {
isValid: function(value){
return value == 'something';
},
message: 'message'
};
var mustBeAnything = {
isValid: function(value){
return value == 'anything';
},
message: 'message'
};
describe('validate', function(){
describe('validating null', function(){
it('should return an empty array', function(){
var result = validate(null, []);
assert(Array.isArray(result));
assert.equal(0, result.length);
});
});
describe('validating empty object', function(){
it('should return an empty array', function(){
var result = validate(null, []);
assert(Array.isArray(result));
assert.equal(0, result.length);
});
});
describe('validating object without constraints', function(){
it('should return an empty array', function(){
var result = validate({name:'something'}, []);
assert(Array.isArray(result));
assert.equal(0, result.length);
});
});
describe('validating object with one valid constraints', function(){
it('should return an empty array', function(){
var result = validate({name:'something'}, {name: mustBeSomething});
assert(Array.isArray(result));
assert.equal(0, result.length);
});
});
describe('validating object with one invalid constraints', function(){
it('should return an array with the invalid field', function(){
var result = validate({name:'nothing'}, {name: mustBeSomething});
assert(Array.isArray(result));
assert.equal(1, result.length);
assert.equal('name', result[0].fieldName);
assert.equal('message', result[0].message);
});
});
describe('validating object with two constraints', function(){
it('should return an array only one field', function(){
var result = validate({name:'nothing'}, {name: [mustBeSomething, mustBeAnything]});
assert(Array.isArray(result));
assert.equal(1, result.length);
assert.equal('name', result[0].fieldName);
assert.equal('message', result[0].message);
});
});
describe('validating object with a deep field', function(){
it('should return an array only one field', function(){
var result = validate({nested: {name:'nothing'}}, {'nested.name': mustBeSomething});
assert(Array.isArray(result));
assert.equal(1, result.length);
assert.equal('nested.name', result[0].fieldName);
assert.equal('message', result[0].message);
});
});
describe('validating object with two invalid fields', function(){
it('should return an array only two field', function(){
var result = validate({name:'nothing', key:'nothing'}, {name: mustBeSomething, key: mustBeAnything});
assert(Array.isArray(result));
assert.equal(2, result.length);
assert.equal('name', result[0].fieldName);
assert.equal('message', result[0].message);
assert.equal('key', result[1].fieldName);
assert.equal('message', result[1].message);
});
});
});