This repository has been archived on 2020-11-15. You can view files and clone it, but cannot push or open issues or pull requests.
schemajs/test/properties.js

137 lines
3.9 KiB
JavaScript

describe("filter schemas", function()
{
/*jshint expr:true*/
var schemajs = (typeof window === 'undefined') ? require('../schema') : window.schema;
var expect = (typeof window === 'undefined') ? require('chai').expect : window.chai.expect;
it("minimum string length property", function()
{
var schema = schemajs.create(
{
username: {properties: {min:2}}
});
var user1 = schema.validate({username: 'username'});
var user2 = schema.validate({username: 'a'});
var user3 = schema.validate({username: 'ab'});
var user4 = schema.validate({});
expect(user1.valid).to.be.ok;
expect(!user2.valid).to.be.ok;
expect(user3.valid).to.be.ok;
expect(user4.valid).to.be.ok;
});
it("maximum string length property", function()
{
var schema = schemajs.create({
username: {properties: {max: 16}}
});
var user1 = schema.validate({username: 'username'});
var user2 = schema.validate({username: '01234567890abcdefg'});
var user3 = schema.validate({username: '0123456789abcdef'});
var user4 = schema.validate({});
expect(user1.valid).to.be.ok;
expect(!user2.valid).to.be.ok;
expect(user3.valid).to.be.ok;
expect(user4.valid).to.be.ok;
});
it("regex property", function()
{
var schema = schemajs.create({
mobile: {properties:{regex:/\d{3}-\d{3}-\d{4}/}}
});
var mobile1 = schema.validate({mobile: '123-456-7890'});
var mobile2 = schema.validate({mobile: '23-456-7890'});
var mobile3 = schema.validate({});
expect(mobile1.valid).to.be.ok;
expect(!mobile2.valid).to.be.ok;
expect(mobile3.valid).to.be.ok;
});
it("testing 'in' property", function()
{
var schema = schemajs.create({
fruit: {properties:{'in': ['apple', 'pear', 'tomato']}}
});
var fruit1 = schema.validate({fruit: 'apple'});
var fruit2 = schema.validate({fruit: 'peas'});
var fruit3 = schema.validate({});
expect(fruit1.valid).to.be.ok;
expect(!fruit2.valid).to.be.ok;
expect(fruit3.valid).to.be.ok;
});
it("testing nested properties", function()
{
var schema = schemajs.create({
alphabet: {
'type':"array",
'properties':{'min':1,'max':3},
'required':true,
schema: {
'type':"string",
'properties':{'min':1, 'max':3},
'required':true
}
}
});
var abc1 = schema.validate({alphabet:["a","b","c"]});
var abc2 = schema.validate({alphabet:["aaaaa","bbbbbb","ccccc"]});
//test validation
expect(abc1.valid).to.be.ok;
expect(abc2.valid).to.be.false;
//test data
expect(abc1.data).to.deep.equal({alphabet:["a","b","c"]});
//if false valid, should not be any data
expect(Object.keys(abc2.data).length).to.equal(0);
var schema = schemajs.create({
work: {
'type':'string',
'properties':{'min':1,'max':10}
}
});
var job = schema.validate({work:"engineer"});
var job2 = schema.validate({work:""});
expect(job.valid).to.be.ok;
expect(job.data).to.be.ok;
expect(job2.valid).to.be.false;
expect(Object.keys(job2.data).length).to.equal(0);
});
it("testing custom property", function()
{
schemajs.properties.notIn = function(value, list)
{
return list.indexOf(value) == -1;
};
var schema = schemajs.create({
planet: {properties:{notIn:['pluto', 'moon', 'sun']}}
});
var planet1 = schema.validate({planet: 'earth'});
var planet2 = schema.validate({planet: 'pluto'});
var planet3 = schema.validate({});
expect(planet1.valid).to.be.ok;
expect(!planet2.valid).to.be.ok;
expect(planet3.valid).to.be.ok;
delete schemajs.properties.notIn;
});
});