Rewrite validations in mocha
This commit is contained in:
parent
6a9f460b18
commit
716318bedd
|
@ -0,0 +1,123 @@
|
||||||
|
var j = require('../'), db, User;
|
||||||
|
|
||||||
|
function getValidAttributes() {
|
||||||
|
return {
|
||||||
|
name: 'Anatoliy',
|
||||||
|
email: 'email@example.com',
|
||||||
|
state: '',
|
||||||
|
age: 26,
|
||||||
|
gender: 'male',
|
||||||
|
createdByAdmin: false,
|
||||||
|
createdByScript: true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('validations', function() {
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
db = new j.Schema('memory');
|
||||||
|
User = db.define('User', {
|
||||||
|
email: String,
|
||||||
|
name: String,
|
||||||
|
password: String,
|
||||||
|
state: String,
|
||||||
|
age: Number,
|
||||||
|
gender: String,
|
||||||
|
domain: String,
|
||||||
|
pendingPeriod: Number,
|
||||||
|
createdByAdmin: Boolean,
|
||||||
|
createdByScript: Boolean,
|
||||||
|
updatedAt: Date
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('presence', function() {
|
||||||
|
|
||||||
|
it('should validate presence', function() {
|
||||||
|
User.validatesPresenceOf('name', 'email');
|
||||||
|
var u = new User;
|
||||||
|
u.isValid().should.not.be.true;
|
||||||
|
u.name = 1;
|
||||||
|
u.email = 2;
|
||||||
|
u.isValid().should.be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should skip validation by property (if/unless)', function() {
|
||||||
|
User.validatesPresenceOf('pendingPeriod', {if: 'createdByAdmin'});
|
||||||
|
User.validatesPresenceOf('domain', {unless: 'createdByScript'});
|
||||||
|
|
||||||
|
var user = new User(getValidAttributes())
|
||||||
|
user.isValid().should.be.true;
|
||||||
|
|
||||||
|
user.createdByAdmin = true;
|
||||||
|
user.isValid().should.be.false;
|
||||||
|
user.errors.pendingPeriod.should.eql(['can\'t be blank']);
|
||||||
|
|
||||||
|
user.pendingPeriod = 1
|
||||||
|
user.isValid().should.be.true;
|
||||||
|
|
||||||
|
user.createdByScript = false;
|
||||||
|
user.isValid().should.be.false;
|
||||||
|
user.errors.domain.should.eql(['can\'t be blank']);
|
||||||
|
|
||||||
|
user.domain = 'domain';
|
||||||
|
user.isValid().should.be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('uniqueness', function() {
|
||||||
|
it('should validate uniqueness', function(done) {
|
||||||
|
User.validatesUniquenessOf('email');
|
||||||
|
var u = new User({email: 'hey'});
|
||||||
|
Boolean(u.isValid(function(valid) {
|
||||||
|
valid.should.be.true;
|
||||||
|
u.save(function() {
|
||||||
|
var u2 = new User({email: 'hey'});
|
||||||
|
u2.isValid(function(valid) {
|
||||||
|
valid.should.be.false;
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})).should.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle same object modification', function(done) {
|
||||||
|
User.validatesUniquenessOf('email');
|
||||||
|
var u = new User({email: 'hey'});
|
||||||
|
Boolean(u.isValid(function(valid) {
|
||||||
|
valid.should.be.true;
|
||||||
|
u.save(function() {
|
||||||
|
u.name = 'hey';
|
||||||
|
u.save(done);
|
||||||
|
});
|
||||||
|
})).should.be.false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('format', function() {
|
||||||
|
it('should validate format');
|
||||||
|
it('should overwrite default blank message with custom format message');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('numericality', function() {
|
||||||
|
it('should validate numericality');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('inclusion', function() {
|
||||||
|
it('should validate inclusion');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('exclusion', function() {
|
||||||
|
it('should validate exclusion');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('length', function() {
|
||||||
|
it('should validate length');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('custom', function() {
|
||||||
|
it('should validate using custom sync validation');
|
||||||
|
it('should validate using custom async validation');
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,113 +0,0 @@
|
||||||
juggling = require('../index')
|
|
||||||
Schema = juggling.Schema
|
|
||||||
AbstractClass = juggling.AbstractClass
|
|
||||||
Validatable = juggling.Validatable
|
|
||||||
|
|
||||||
require('./spec_helper').init module.exports
|
|
||||||
|
|
||||||
schema = new Schema 'memory'
|
|
||||||
User = schema.define 'User',
|
|
||||||
email: String
|
|
||||||
name: String
|
|
||||||
password: String
|
|
||||||
state: String
|
|
||||||
age: Number
|
|
||||||
gender: String
|
|
||||||
domain: String
|
|
||||||
pendingPeriod: Number
|
|
||||||
createdByAdmin: Boolean
|
|
||||||
createdByScript: Boolean
|
|
||||||
updatedAt: Date
|
|
||||||
|
|
||||||
validAttributes =
|
|
||||||
name: 'Anatoliy'
|
|
||||||
email: 'email@example.com'
|
|
||||||
state: ''
|
|
||||||
age: 26
|
|
||||||
gender: 'male'
|
|
||||||
domain: '1602'
|
|
||||||
createdByAdmin: false
|
|
||||||
createdByScript: true
|
|
||||||
|
|
||||||
getValidAttributes = ->
|
|
||||||
name: 'Anatoliy'
|
|
||||||
email: 'email@example.com'
|
|
||||||
state: ''
|
|
||||||
age: 26
|
|
||||||
gender: 'male'
|
|
||||||
domain: '1602'
|
|
||||||
createdByAdmin: false
|
|
||||||
createdByScript: true
|
|
||||||
|
|
||||||
it 'should validate presence', (test) ->
|
|
||||||
User.validatesPresenceOf 'email', 'name'
|
|
||||||
|
|
||||||
user = new User
|
|
||||||
test.ok not user.isValid(), 'User is not valid'
|
|
||||||
test.ok user.errors.email, 'Attr email in errors'
|
|
||||||
test.ok user.errors.name, 'Attr name in errors'
|
|
||||||
|
|
||||||
user.name = 'Anatoliy'
|
|
||||||
test.ok not user.isValid(), 'User is still not valid'
|
|
||||||
test.ok user.errors.email, 'Attr email still in errors'
|
|
||||||
test.ok not user.errors.name, 'Attr name valid'
|
|
||||||
|
|
||||||
user.email = 'anatoliy@localhost'
|
|
||||||
test.ok user.isValid(), 'User is valid'
|
|
||||||
test.ok not user.errors, 'No errors'
|
|
||||||
test.ok not user.errors.email, 'Attr email valid'
|
|
||||||
test.ok not user.errors.name, 'Attr name valid'
|
|
||||||
test.done()
|
|
||||||
|
|
||||||
it 'should allow to skip validations', (test) ->
|
|
||||||
User.validatesPresenceOf 'pendingPeriod', if: 'createdByAdmin'
|
|
||||||
User.validatesLengthOf 'domain', is: 2, unless: 'createdByScript'
|
|
||||||
|
|
||||||
user = new User validAttributes
|
|
||||||
test.ok user.isValid()
|
|
||||||
|
|
||||||
user.createdByAdmin = true
|
|
||||||
test.ok not user.isValid()
|
|
||||||
test.ok user.errors.pendingPeriod.length
|
|
||||||
|
|
||||||
user.pendingPeriod = 1
|
|
||||||
test.ok user.isValid()
|
|
||||||
|
|
||||||
user.createdByScript = false
|
|
||||||
test.ok not user.isValid()
|
|
||||||
test.ok user.errors.domain.length
|
|
||||||
|
|
||||||
user.domain = '12'
|
|
||||||
test.ok user.isValid()
|
|
||||||
|
|
||||||
User.validatesLengthOf 'domain', is: 3, unless: -> @domain != 'xyz'
|
|
||||||
test.ok user.isValid()
|
|
||||||
|
|
||||||
user.domain = 'xyz'
|
|
||||||
test.ok not user.isValid() # is: 3 passed, but is: 2 failed
|
|
||||||
|
|
||||||
test.done()
|
|
||||||
|
|
||||||
it 'should validate uniqueness', (test) ->
|
|
||||||
|
|
||||||
Airport = schema.define 'Airport', code: String, city: String
|
|
||||||
Airport.validatesUniquenessOf 'code'
|
|
||||||
|
|
||||||
bkk = new Airport code: 'BKK', city: 'Bangkok'
|
|
||||||
bkk.isValid (valid) ->
|
|
||||||
test.ok valid
|
|
||||||
bkk.updateAttribute 'code', 'BKK', ->
|
|
||||||
dmk = new Airport code: 'DMK', city: 'Bangkok'
|
|
||||||
dmk.isValid (valid) ->
|
|
||||||
test.ok valid
|
|
||||||
dmk.save ->
|
|
||||||
dmk.updateAttributes city: 'Bangkok, Don Muang', (err) ->
|
|
||||||
test.ok !err
|
|
||||||
dmk.save ->
|
|
||||||
dmk.code = 'BKK'
|
|
||||||
dmk.isValid (valid) ->
|
|
||||||
test.ok !valid
|
|
||||||
dmk.code = 'DMK'
|
|
||||||
dmk.isValid (valid) ->
|
|
||||||
test.ok valid
|
|
||||||
test.done()
|
|
Loading…
Reference in New Issue