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()