不要怂,就是干,撸起袖子干!

Commit 957893c6 by Sascha Depold

moved association specs to own file

1 parent 56237112
var config = require("./config/config")
, Sequelize = require("../index")
, sequelize = new Sequelize(config.database, config.username, config.password, { logging: false })
, Helpers = new (require("./config/helpers"))(sequelize)
describe('HasMany', function() {
beforeEach(function() { Helpers.sync() })
afterEach(function() { Helpers.drop() })
var User = sequelize.define('User' + Math.random(), { name: Sequelize.STRING })
, Task = sequelize.define('Task' + Math.random(), { name: Sequelize.STRING })
, users = null
, tasks = null
User.hasMany(Task, {as:'Tasks'})
Task.hasMany(User, {as:'Users'})
beforeEach(function() {
Helpers.async(function(_done) {
Helpers.Factories.Model(User.name, {name: 'User' + Math.random()}, function(_users) {
users = _users; _done()
}, 5)
})
Helpers.async(function(_done) {
Helpers.Factories.Model(Task.name, {name: 'Task' + Math.random()}, function(_tasks) {
tasks = _tasks; _done()
}, 2)
})
})
describe('addModel / getModel', function() {
var user = null
, task = null
beforeEach(function() {
Helpers.async(function(done) {
User.all().on('success', function(_users) {
Task.all().on('success', function(_tasks) {
user = _users[0]
task = _tasks[0]
done()
})
})
})
})
it('should correctly add an association to the model', function() {
Helpers.async(function(done) {
user.getTasks().on('success', function(_tasks) {
expect(_tasks.length).toEqual(0)
user.addTask(task).on('success', function() {
user.getTasks().on('success', function(_tasks) {
expect(_tasks.length).toEqual(1)
done()
})
})
})
})
})
})
describe('removeModel', function() {
var user = null
, tasks = null
beforeEach(function() {
Helpers.async(function(done) {
User.all().on('success', function(users) {
Task.all().on('success', function(_tasks) {
user = users[0]
tasks = _tasks
done()
})
})
})
})
it("should correctly remove associated objects", function() {
Helpers.async(function(done) {
user.getTasks().on('success', function(__tasks) {
expect(__tasks.length).toEqual(0)
user.setTasks(tasks).on('success', function() {
user.getTasks().on('success', function(_tasks) {
expect(_tasks.length).toEqual(tasks.length)
user.removeTask(tasks[0]).on('success', function() {
user.getTasks().on('success', function(_tasks) {
expect(_tasks.length).toEqual(tasks.length - 1)
done()
})
})
})
})
})
})
})
})
})
...@@ -4,317 +4,247 @@ var config = require("./config/config") ...@@ -4,317 +4,247 @@ var config = require("./config/config")
, Helpers = new (require("./config/helpers"))(sequelize) , Helpers = new (require("./config/helpers"))(sequelize)
describe('Model', function() { describe('Model', function() {
beforeEach(function() { Helpers.sync() }) describe('Validations', function() {
afterEach(function() { Helpers.drop() }) var checks = {
is : {
var User = sequelize.define('User' + Math.random(), { name: Sequelize.STRING }) spec : { args: [/[a-z]/,'i'] },
, Task = sequelize.define('Task' + Math.random(), { name: Sequelize.STRING }) fail: "0",
, users = null pass: "a"
, tasks = null }
, not : {
User.hasMany(Task, {as:'Tasks'}) spec: { args: [/[a-z]/,'i'] },
Task.hasMany(User, {as:'Users'}) fail: "a",
pass: "0"
beforeEach(function() { }
Helpers.async(function(_done) { , isEmail : {
Helpers.Factories.Model(User.name, {name: 'User' + Math.random()}, function(_users) { fail: "a",
users = _users; _done() pass: "abc@abc.com"
}, 5) }
}) , isUrl : {
Helpers.async(function(_done) { fail: "abc",
Helpers.Factories.Model(Task.name, {name: 'Task' + Math.random()}, function(_tasks) { pass: "http://abc.com"
tasks = _tasks; _done() }
}, 2) , isIP : {
}) fail: "abc",
}) pass: "129.89.23.1"
}
it('should correctly add an association to the model', function() { , isAlpha : {
Helpers.async(function(done) { fail: "012",
User.all().on('success', function(users) { pass: "abc"
Task.all().on('success', function(tasks) { }
var user = users[0] , isAlphanumeric : {
user.getTasks().on('success', function(_tasks) { fail: "_abc019",
expect(_tasks.length).toEqual(0) pass: "abc019"
user.addTask(tasks[0]).on('success', function() { }
user.getTasks().on('success', function(_tasks) { , isNumeric : {
expect(_tasks.length).toEqual(1) fail: "abc",
done() pass: "019"
}) }
}) , isInt : {
}) fail: "9.2",
}) pass: "-9"
}) }
}) , isLowercase : {
}) fail: "AB",
pass: "ab"
it("should correctly remove associated objects", function() { }
Helpers.async(function(done) { , isUppercase : {
User.all().on('success', function(users) { fail: "ab",
Task.all().on('success', function(tasks) { pass: "AB"
var user = users[0] }
user.getTasks().on('success', function(_tasks) { , isDecimal : {
expect(_tasks.length).toEqual(0) fail: "a",
user.setTasks(tasks).on('success', function() { pass: "0.2"
user.getTasks().on('success', function(_tasks) { }
expect(_tasks.length).toEqual(tasks.length) , isFloat : {
user.removeTask(tasks[0]).on('success', function() { fail: "a",
user.getTasks().on('success', function(_tasks) { pass: "9.2"
expect(_tasks.length).toEqual(tasks.length - 1) }
done() , notNull : {
}) fail: null,
}) pass: 0
}) }
}) , isNull : {
}) fail: 0,
}) pass: null
}) }
}) , notEmpty : {
}) fail: " ",
}) pass: "a"
}
describe('Validations', function() { , equals : {
var checks = { spec : { args : "bla bla bla" },
is : { fail: "bla",
spec : { args: [/[a-z]/,'i'] }, pass: "bla bla bla"
fail: "0", }
pass: "a" , contains : {
} spec : { args : "bla" },
, not : { fail: "la",
spec: { args: [/[a-z]/,'i'] }, pass: "0bla23"
fail: "a", }
pass: "0" , notContains : {
} spec : { args : "bla" },
, isEmail : { fail: "0bla23",
fail: "a", pass: "la"
pass: "abc@abc.com" }
} , regex : {
, isUrl : { spec : { args: [/[a-z]/,'i'] },
fail: "abc", fail: "0",
pass: "http://abc.com" pass: "a"
} }
, isIP : { , notRegex : {
fail: "abc", spec: { args: [/[a-z]/,'i'] },
pass: "129.89.23.1" fail: "a",
} pass: "0"
, isAlpha : { }
fail: "012", , len : {
pass: "abc" spec: { args: [2,4] },
} fail: ["1", "12345"],
, isAlphanumeric : { pass: ["12", "123", "1234"],
fail: "_abc019", raw: true
pass: "abc019" }
} , isUUID : {
, isNumeric : { spec: { args: 4 },
fail: "abc", fail: "f47ac10b-58cc-3372-a567-0e02b2c3d479",
pass: "019" pass: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
} }
, isInt : { , isDate : {
fail: "9.2", fail: "not a date",
pass: "-9" pass: "2011-02-04"
} }
, isLowercase : { , isAfter : {
fail: "AB", spec: { args: "2011-11-05" },
pass: "ab" fail: "2011-11-04",
} pass: "2011-11-05"
, isUppercase : { }
fail: "ab", , isBefore : {
pass: "AB" spec: { args: "2011-11-05" },
} fail: "2011-11-06",
, isDecimal : { pass: "2011-11-05"
fail: "a", }
pass: "0.2" , isIn : {
} spec: { args: "abcdefghijk" },
, isFloat : { fail: "ghik",
fail: "a", pass: "ghij"
pass: "9.2" }
} , notIn : {
, notNull : { spec: { args: "abcdefghijk" },
fail: null, fail: "ghij",
pass: 0 pass: "ghik"
} }
, isNull : { , max : {
fail: 0, spec: { args: 23 },
pass: null fail: "24",
} pass: "23"
, notEmpty : { }
fail: " ", , min : {
pass: "a" spec: { args: 23 },
} fail: "22",
, equals : { pass: "23"
spec : { args : "bla bla bla" }, }
fail: "bla", , isArray : {
pass: "bla bla bla" fail: 22,
} pass: [22]
, contains : { }
spec : { args : "bla" }, , isCreditCard : {
fail: "la", fail: "401288888888188f",
pass: "0bla23" pass: "4012888888881881"
} }
, notContains : { };
spec : { args : "bla" },
fail: "0bla23", var User, i;
pass: "la"
} it('should correctly validate using node-validator methods', function() {
, regex : { Helpers.async(function(done) {
spec : { args: [/[a-z]/,'i'] }, for (var validator in checks) {
fail: "0", if (checks.hasOwnProperty(validator)) {
pass: "a" // build spec
} var v = {};
, notRegex : { v[validator] = checks[validator].hasOwnProperty("spec") ? checks[validator].spec : {};
spec: { args: [/[a-z]/,'i'] },
fail: "a", var check = checks[validator];
pass: "0"
} // test for failure
, len : { if (!check.hasOwnProperty("raw"))
spec: { args: [2,4] }, check.fail = new Array(check.fail);
fail: ["1", "12345"],
pass: ["12", "123", "1234"], for (i=0; i<check.fail.length; ++i) {
raw: true v[validator].msg = validator + "(" + check.fail[i] + ")";
}
, isUUID : { // define user
spec: { args: 4 }, User = sequelize.define('User' + Math.random(), {
fail: "f47ac10b-58cc-3372-a567-0e02b2c3d479", name: {
pass: "f47ac10b-58cc-4372-a567-0e02b2c3d479" type: Sequelize.STRING,
} validate: v
, isDate : { }
fail: "not a date", });
pass: "2011-02-04"
} var u_fail = User.build({
, isAfter : { name : check.fail[i]
spec: { args: "2011-11-05" }, });
fail: "2011-11-04", var errors = u_fail.validate();
pass: "2011-11-05" expect(errors).toNotBe(null);
} expect(errors).toEqual({
, isBefore : { name : [v[validator].msg]
spec: { args: "2011-11-05" }, });
fail: "2011-11-06", }
pass: "2011-11-05" // test for success
} if (!check.hasOwnProperty("raw"))
, isIn : { check.pass = new Array(check.pass);
spec: { args: "abcdefghijk" },
fail: "ghik", for (i=0; i<check.pass.length; ++i) {
pass: "ghij" v[validator].msg = validator + "(" + check.pass[i] + ")";
}
, notIn : { // define user
spec: { args: "abcdefghijk" }, User = sequelize.define('User' + Math.random(), {
fail: "ghij", name: {
pass: "ghik" type: Sequelize.STRING,
} validate: v
, max : { }
spec: { args: 23 }, });
fail: "24",
pass: "23" var u_success = User.build({
} name : check.pass[i]
, min : { });
spec: { args: 23 }, expect(u_success.validate()).toBe(null);
fail: "22", }
pass: "23"
}
, isArray : {
fail: 22,
pass: [22]
}
, isCreditCard : {
fail: "401288888888188f",
pass: "4012888888881881"
}
};
var User, i;
it('should correctly validate using node-validator methods', function() {
Helpers.async(function(done) {
for (var validator in checks) {
if (checks.hasOwnProperty(validator)) {
// build spec
var v = {};
v[validator] = checks[validator].hasOwnProperty("spec") ? checks[validator].spec : {};
var check = checks[validator];
// test for failure
if (!check.hasOwnProperty("raw"))
check.fail = new Array(check.fail);
for (i=0; i<check.fail.length; ++i) {
v[validator].msg = validator + "(" + check.fail[i] + ")";
// define user
User = sequelize.define('User' + Math.random(), {
name: {
type: Sequelize.STRING,
validate: v
}
});
var u_fail = User.build({
name : check.fail[i]
});
var errors = u_fail.validate();
expect(errors).toNotBe(null);
expect(errors).toEqual({
name : [v[validator].msg]
});
} }
// test for success } // for each check
if (!check.hasOwnProperty("raw"))
check.pass = new Array(check.pass);
for (i=0; i<check.pass.length; ++i) {
v[validator].msg = validator + "(" + check.pass[i] + ")";
// define user done();
User = sequelize.define('User' + Math.random(), { });
name: {
type: Sequelize.STRING,
validate: v
}
});
var u_success = User.build({
name : check.pass[i]
});
expect(u_success.validate()).toBe(null);
}
}
} // for each check
done();
}); });
});
it('should correctly validate using custom validation methods', function() { it('should correctly validate using custom validation methods', function() {
Helpers.async(function(done) { Helpers.async(function(done) {
User = sequelize.define('User' + Math.random(), {
User = sequelize.define('User' + Math.random(), { name: {
name: { type: Sequelize.STRING,
type: Sequelize.STRING, validate: {
validate: {
customFn: function(val) { customFn: function(val) {
if (val !== "2") if (val !== "2")
throw new Error("name should equal '2'") throw new Error("name should equal '2'")
} }
}
} }
} });
var u_fail = User.build({
name : "3"
});
var errors = u_fail.validate();
expect(errors).toNotBe(null);
expect(errors).toEqual({
name : ["name should equal '2'"]
});
var u_success = User.build({
name : "2"
});
expect(u_success.validate()).toBe(null);
done();
}); });
var u_fail = User.build({
name : "3"
});
var errors = u_fail.validate();
expect(errors).toNotBe(null);
expect(errors).toEqual({
name : ["name should equal '2'"]
});
var u_success = User.build({
name : "2"
});
expect(u_success.validate()).toBe(null);
done();
}); });
}); })
}) })
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!