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

Commit 89c96808 by Daniel Durante

Cleaned up buster specs, should do a lot less connections per spec now for those…

… MySQL users, cleaned up bits and pieces of code within lib/ as well.
1 parent 194a42c2
...@@ -82,7 +82,9 @@ module.exports = (function() { ...@@ -82,7 +82,9 @@ module.exports = (function() {
read: Pooling.Pool({ read: Pooling.Pool({
name: 'sequelize-read', name: 'sequelize-read',
create: function (done) { create: function (done) {
if (reads >= self.config.replication.read.length) reads = 0; if (reads >= self.config.replication.read.length) {
reads = 0
}
var config = self.config.replication.read[reads++]; var config = self.config.replication.read[reads++];
connect.call(self, function (err, connection) { connect.call(self, function (err, connection) {
...@@ -168,11 +170,12 @@ module.exports = (function() { ...@@ -168,11 +170,12 @@ module.exports = (function() {
query.done(function() { query.done(function() {
self.pendingQueries--; self.pendingQueries--;
if (self.pool) self.pool.release(query.client); if (self.pool) {
else { self.pool.release(query.client);
} else {
if (self.pendingQueries === 0) { if (self.pendingQueries === 0) {
setTimeout(function() { setTimeout(function() {
self.pendingQueries === 0 && self.disconnect.call(self); self.pendingQueries === 0 && self.disconnect.call(self)
}, 100); }, 100);
} }
} }
...@@ -180,16 +183,16 @@ module.exports = (function() { ...@@ -180,16 +183,16 @@ module.exports = (function() {
if (!this.pool) { if (!this.pool) {
query.run(sql); query.run(sql);
} } else {
else {
this.pool.acquire(function(err, client) { this.pool.acquire(function(err, client) {
if (err) return query.emit('error', err); if (err) {
return query.emit('error', err)
}
query.client = client; query.client = client
query.run(sql); query.run(sql)
return; return;
}, undefined, options.type); }, undefined, options.type)
} }
return query; return query;
...@@ -209,8 +212,10 @@ module.exports = (function() { ...@@ -209,8 +212,10 @@ module.exports = (function() {
}; };
ConnectorManager.prototype.disconnect = function() { ConnectorManager.prototype.disconnect = function() {
if (this.client) disconnect.call(this, this.client); if (this.client) {
return; disconnect.call(this, this.client)
}
return
}; };
...@@ -265,12 +270,12 @@ module.exports = (function() { ...@@ -265,12 +270,12 @@ module.exports = (function() {
switch(err.code) { switch(err.code) {
case 'ECONNREFUSED': case 'ECONNREFUSED':
case 'ER_ACCESS_DENIED_ERROR': case 'ER_ACCESS_DENIED_ERROR':
emitter.emit('error', new Error("Failed to authenticate for MySQL. Please double check your settings.")) emitter.emit('error', 'Failed to authenticate for MySQL. Please double check your settings.')
break break
case 'ENOTFOUND': case 'ENOTFOUND':
case 'EHOSTUNREACH': case 'EHOSTUNREACH':
case 'EINVAL': case 'EINVAL':
emitter.emit('error', new Error("Failed to find MySQL server. Please double check your settings.")) emitter.emit('error', 'Failed to find MySQL server. Please double check your settings.')
break break
} }
} }
...@@ -295,7 +300,7 @@ module.exports = (function() { ...@@ -295,7 +300,7 @@ module.exports = (function() {
} }
var validateConnection = function(client) { var validateConnection = function(client) {
return client && client.state != 'disconnected' return client && client.state !== 'disconnected'
} }
var enqueue = function(queueItem, options) { var enqueue = function(queueItem, options) {
...@@ -342,8 +347,6 @@ module.exports = (function() { ...@@ -342,8 +347,6 @@ module.exports = (function() {
} }
var afterQuery = function(queueItem) { var afterQuery = function(queueItem) {
var self = this
dequeue.call(this, queueItem) dequeue.call(this, queueItem)
transferQueuedItems.call(this, this.maxConcurrentQueries - this.activeQueue.length) transferQueuedItems.call(this, this.maxConcurrentQueries - this.activeQueue.length)
disconnectIfNoConnections.call(this) disconnectIfNoConnections.call(this)
......
...@@ -77,12 +77,12 @@ module.exports = (function() { ...@@ -77,12 +77,12 @@ module.exports = (function() {
if (!!err) { if (!!err) {
switch(err.code) { switch(err.code) {
case 'ECONNREFUSED': case 'ECONNREFUSED':
emitter.emit('error', new Error("Failed to authenticate for PostgresSQL. Please double check your settings.")) emitter.emit('error', 'Failed to authenticate for PostgresSQL. Please double check your settings.')
break break
case 'ENOTFOUND': case 'ENOTFOUND':
case 'EHOSTUNREACH': case 'EHOSTUNREACH':
case 'EINVAL': case 'EINVAL':
emitter.emit('error', new Error("Failed to find PostgresSQL server. Please double check your settings.")) emitter.emit('error', 'Failed to find PostgresSQL server. Please double check your settings.')
break break
default: default:
emitter.emit('error', err) emitter.emit('error', err)
......
...@@ -22,7 +22,7 @@ module.exports = (function() { ...@@ -22,7 +22,7 @@ module.exports = (function() {
this.database = db = new sqlite3.Database(self.sequelize.options.storage || ':memory:', function(err) { this.database = db = new sqlite3.Database(self.sequelize.options.storage || ':memory:', function(err) {
if (err) { if (err) {
if (err.code === "SQLITE_CANTOPEN") { if (err.code === "SQLITE_CANTOPEN") {
emitter.emit('error', new Error("Failed to find SQL server. Please double check your settings.")) emitter.emit('error', 'Failed to find SQL server. Please double check your settings.')
} }
} }
......
const fs = require("fs") const fs = require("fs")
, moment = require("moment") , moment = require("moment")
var Utils = require("./utils") var Utils = require(__dirname + "/utils")
, Migration = require("./migration") , Migration = require(__dirname + "/migration")
, DataTypes = require("./data-types") , DataTypes = require(__dirname + "/data-types")
module.exports = (function() { module.exports = (function() {
var Migrator = function(sequelize, options) { var Migrator = function(sequelize, options) {
...@@ -45,7 +45,7 @@ module.exports = (function() { ...@@ -45,7 +45,7 @@ module.exports = (function() {
if (err) { if (err) {
emitter.emit('error', err) emitter.emit('error', err)
} else { } else {
var chainer = new Utils.QueryChainer var chainer = new Utils.QueryChainer()
, from = migrations[0] , from = migrations[0]
if (options.method === 'down') { if (options.method === 'down') {
...@@ -188,7 +188,7 @@ module.exports = (function() { ...@@ -188,7 +188,7 @@ module.exports = (function() {
var self = this; var self = this;
return new Utils.CustomEventEmitter(function(emitter) { return new Utils.CustomEventEmitter(function(emitter) {
var chainer = new Utils.QueryChainer; var chainer = new Utils.QueryChainer()
var addMigration = function(filename) { var addMigration = function(filename) {
self.options.logging('Adding migration script at ' + filename) self.options.logging('Adding migration script at ' + filename)
var migration = new Migration(self, filename) var migration = new Migration(self, filename)
......
var Utils = require("./utils") var Utils = require(__dirname + "/utils")
module.exports = (function() { module.exports = (function() {
var QueryChainer = function(emitters) { var QueryChainer = function(emitters) {
......
var Utils = require('./utils') var Utils = require(__dirname + '/utils')
, DataTypes = require('./data-types') , DataTypes = require(__dirname + '/data-types')
, SQLiteQueryInterface = require('./dialects/sqlite/query-interface') , SQLiteQueryInterface = require(__dirname + '/dialects/sqlite/query-interface')
module.exports = (function() { module.exports = (function() {
var QueryInterface = function(sequelize) { var QueryInterface = function(sequelize) {
......
...@@ -380,6 +380,6 @@ var Utils = module.exports = { ...@@ -380,6 +380,6 @@ var Utils = module.exports = {
} }
} }
Utils.CustomEventEmitter = require("./emitters/custom-event-emitter") Utils.CustomEventEmitter = require(__dirname + "/emitters/custom-event-emitter")
Utils.QueryChainer = require("./query-chainer") Utils.QueryChainer = require(__dirname + "/query-chainer")
Utils.Lingo = require("lingo") Utils.Lingo = require("lingo")
/* jshint camelcase: false */ /* jshint camelcase: false */
if (typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, Sequelize = require('../../index') , Sequelize = require('../../index')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
, _ = require('lodash') , _ = require('lodash')
, moment = require('moment') , moment = require('moment')
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 500 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
describe(Helpers.getTestDialectTeaser("HasMany"), function() { describe(Helpers.getTestDialectTeaser("HasMany"), function() {
before(function(done) { before(function(done) {
var self = this var self = this
self.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, done)
dialect: dialect,
beforeComplete: function(sequelize) { self.sequelize = sequelize },
onComplete: done
})
}) })
describe('general usage', function() { describe('general usage', function() {
...@@ -850,6 +846,9 @@ describe(Helpers.getTestDialectTeaser("HasMany"), function() { ...@@ -850,6 +846,9 @@ describe(Helpers.getTestDialectTeaser("HasMany"), function() {
}) })
describe("Foreign key constraints", function() { describe("Foreign key constraints", function() {
before(function(done) {
Helpers.clearDatabase(this.sequelize, done) // Constraints need this for some reason...
})
it("are not enabled by default", function(done) { it("are not enabled by default", function(done) {
var Task = this.sequelize.define('Task', { title: Sequelize.STRING }) var Task = this.sequelize.define('Task', { title: Sequelize.STRING })
......
if (typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, Sequelize = require('../../index') , Sequelize = require('../../index')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
describe(Helpers.getTestDialectTeaser("Mixin"), function() { describe(Helpers.getTestDialectTeaser("Mixin"), function() {
before(function(done) { before(function(done) {
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize) {
this.sequelize = sequelize this.sequelize = sequelize
}.bind(this), Helpers.clearDatabase(this.sequelize, done)
onComplete: done
})
}) })
describe('Mixin', function() { describe('Mixin', function() {
var DAOFactory = require("../../lib/dao-factory") var DAOFactory = require("../../lib/dao-factory")
it("adds the mixed-in functions to the dao", function() { it("adds the mixed-in functions to the dao", function(done) {
expect(DAOFactory.prototype.hasOne).toBeDefined() expect(DAOFactory.prototype.hasOne).toBeDefined()
expect(DAOFactory.prototype.hasMany).toBeDefined() expect(DAOFactory.prototype.hasMany).toBeDefined()
expect(DAOFactory.prototype.belongsTo).toBeDefined() expect(DAOFactory.prototype.belongsTo).toBeDefined()
done()
}) })
}) })
describe('getAssociation', function() { describe('getAssociation', function() {
it('returns the respective part of the association for 1:1 associations', function() { it('returns the respective part of the association for 1:1 associations', function(done) {
var User = this.sequelize.define('User', {}) var User = this.sequelize.define('User', {})
var Task = this.sequelize.define('Task', {}) var Task = this.sequelize.define('Task', {})
...@@ -37,6 +34,7 @@ describe(Helpers.getTestDialectTeaser("Mixin"), function() { ...@@ -37,6 +34,7 @@ describe(Helpers.getTestDialectTeaser("Mixin"), function() {
Task.belongsTo(User) Task.belongsTo(User)
expect(User.getAssociation(Task).target).toEqual(Task) expect(User.getAssociation(Task).target).toEqual(Task)
done()
}) })
it('can handle multiple associations just fine', function(done) { it('can handle multiple associations just fine', function(done) {
......
...@@ -6,7 +6,7 @@ module.exports = { ...@@ -6,7 +6,7 @@ module.exports = {
pool: { maxConnections: 5, maxIdleTime: 30000}, pool: { maxConnections: 5, maxIdleTime: 30000},
rand: function() { rand: function() {
return parseInt(Math.random() * 999) return parseInt(Math.random() * 999, 10)
}, },
//make maxIdleTime small so that tests exit promptly //make maxIdleTime small so that tests exit promptly
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, semver = require("semver") , semver = require("semver")
, CustomEventEmitter = require("../lib/emitters/custom-event-emitter")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, config = require(__dirname + "/config/config") , config = require(__dirname + "/config/config")
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
...@@ -27,15 +24,7 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() { ...@@ -27,15 +24,7 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() {
, d = domain.create() , d = domain.create()
d.on('error', function(err){ d.on('error', function(err){
var msg = 'Failed to find SQL server. Please double check your settings.' expect(err).toMatch(/Failed to find (.*?) Please double check your settings\./)
if (dialect === "postgres" || dialect === "postgres-native") {
msg = 'Failed to find PostgresSQL server. Please double check your settings.'
}
else if (dialect === "mysql") {
msg = 'Failed to find MySQL server. Please double check your settings.'
}
expect(err.message).toEqual(msg)
d.remove(sequelize.query) d.remove(sequelize.query)
done() done()
}) })
...@@ -65,35 +54,28 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() { ...@@ -65,35 +54,28 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() {
, d = domain.create() , d = domain.create()
d.on('error', function(err){ d.on('error', function(err){
var msg = 'Failed to authenticate for SQL. Please double check your settings.' expect(err).toMatch(/^Failed to authenticate/)
if (dialect === "postgres" || dialect === "postgres-native") { d.remove(sequelize)
msg = 'Failed to authenticate for PostgresSQL. Please double check your settings.'
}
else if (dialect === "mysql") {
msg = 'Failed to authenticate for MySQL. Please double check your settings.'
}
expect(err.message).toEqual(msg)
d.remove(sequelize.query)
done() done()
}) })
d.run(function(){ d.run(function(){
d.add(sequelize.query) d.add(sequelize)
sequelize.query('select 1 as hello') sequelize.query('select 1 as hello')
.success(function(){}) .success(function(){})
}) })
}) })
it('when we don\'t have a valid dialect.', function() { it('when we don\'t have a valid dialect.', function(done) {
Helpers.assertException(function() { expect(function() {
new Sequelize(config[dialect].database, config[dialect].username, config[dialect].password, {host: '0.0.0.1', port: config[dialect].port, dialect: undefined}) new Sequelize(config[dialect].database, config[dialect].username, config[dialect].password, {host: '0.0.0.1', port: config[dialect].port, dialect: undefined})
}.bind(this), 'The dialect undefined is not supported.') }).toThrow('Error', 'The dialect undefined is not supported.')
done()
}) })
}) })
describe('Instantiation with a URL string', function() { describe('Instantiation with a URL string', function() {
it('should accept username, password, host, port, and database', function() { it('should accept username, password, host, port, and database', function(done) {
var sequelize = new Sequelize('mysql://user:pass@example.com:9821/dbname') var sequelize = new Sequelize('mysql://user:pass@example.com:9821/dbname')
var config = sequelize.config var config = sequelize.config
var options = sequelize.options var options = sequelize.options
...@@ -105,44 +87,49 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() { ...@@ -105,44 +87,49 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() {
expect(config.username).toEqual('user') expect(config.username).toEqual('user')
expect(config.password).toEqual('pass') expect(config.password).toEqual('pass')
expect(config.port).toEqual(9821) expect(config.port).toEqual(9821)
done()
}) })
it('should work with no authentication options', function() { it('should work with no authentication options', function(done) {
var sequelize = new Sequelize('mysql://example.com:9821/dbname') var sequelize = new Sequelize('mysql://example.com:9821/dbname')
var config = sequelize.config var config = sequelize.config
expect(config.username).toEqual(undefined) expect(config.username).toEqual(undefined)
expect(config.password).toEqual(null) expect(config.password).toEqual(null)
done()
}) })
it('should use the default port when no other is specified', function() { it('should use the default port when no other is specified', function(done) {
var sequelize = new Sequelize('mysql://example.com/dbname') var sequelize = new Sequelize('mysql://example.com/dbname')
var config = sequelize.config var config = sequelize.config
// The default port should be set // The default port should be set
expect(config.port).toEqual(3306) expect(config.port).toEqual(3306)
done()
}) })
}) })
describe('Intantiation with arguments', function() { describe('Intantiation with arguments', function() {
it('should accept two parameters (database, username)', function() { it('should accept two parameters (database, username)', function(done) {
var sequelize = new Sequelize('dbname', 'root') var sequelize = new Sequelize('dbname', 'root')
var config = sequelize.config var config = sequelize.config
expect(config.database).toEqual('dbname') expect(config.database).toEqual('dbname')
expect(config.username).toEqual('root') expect(config.username).toEqual('root')
done()
}) })
it('should accept three parameters (database, username, password)', function() { it('should accept three parameters (database, username, password)', function(done) {
var sequelize = new Sequelize('dbname', 'root', 'pass') var sequelize = new Sequelize('dbname', 'root', 'pass')
var config = sequelize.config var config = sequelize.config
expect(config.database).toEqual('dbname') expect(config.database).toEqual('dbname')
expect(config.username).toEqual('root') expect(config.username).toEqual('root')
expect(config.password).toEqual('pass') expect(config.password).toEqual('pass')
done()
}) })
it('should accept four parameters (database, username, password, options)', function() { it('should accept four parameters (database, username, password, options)', function(done) {
var sequelize = new Sequelize('dbname', 'root', 'pass', { port: 999 }) var sequelize = new Sequelize('dbname', 'root', 'pass', { port: 999 })
var config = sequelize.config var config = sequelize.config
...@@ -150,6 +137,7 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() { ...@@ -150,6 +137,7 @@ describe(Helpers.getTestDialectTeaser("Configuration"), function() {
expect(config.username).toEqual('root') expect(config.username).toEqual('root')
expect(config.password).toEqual('pass') expect(config.password).toEqual('pass')
expect(config.port).toEqual(999) expect(config.port).toEqual(999)
done()
}) })
}) })
}) })
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Sequelize = require("../index") , Sequelize = require("../index")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
describe('validations', function() { describe('validations', function() {
before(function(done) { beforeAll(function(done) {
var self = this
Helpers.initTests({ Helpers.initTests({
dialect: dialect, dialect: dialect,
onComplete: function(sequelize) { onComplete: function(sequelize) {
this.sequelize = sequelize self.sequelize = sequelize
done() done()
}.bind(this) }
})
}) })
}) //- before
var checks = { var checks = {
is: { is: {
...@@ -116,72 +115,72 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -116,72 +115,72 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
fail: "a", fail: "a",
pass: "0" pass: "0"
} }
, len : { , len: {
spec: { args: [2,4] }, spec: { args: [2,4] },
fail: ["1", "12345"], fail: ["1", "12345"],
pass: ["12", "123", "1234"], pass: ["12", "123", "1234"],
raw: true raw: true
} }
, len: { , len$: {
spec: [2,4], spec: [2,4],
fail: ["1", "12345"], fail: ["1", "12345"],
pass: ["12", "123", "1234"], pass: ["12", "123", "1234"],
raw: true raw: true
} }
, isUUID : { , isUUID: {
spec: { args: 4 }, spec: { args: 4 },
fail: "f47ac10b-58cc-3372-a567-0e02b2c3d479", fail: "f47ac10b-58cc-3372-a567-0e02b2c3d479",
pass: "f47ac10b-58cc-4372-a567-0e02b2c3d479" pass: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
} }
, isDate : { , isDate: {
fail: "not a date", fail: "not a date",
pass: "2011-02-04" pass: "2011-02-04"
} }
, isAfter : { , isAfter: {
spec: { args: "2011-11-05" }, spec: { args: "2011-11-05" },
fail: "2011-11-04", fail: "2011-11-04",
pass: "2011-11-05" pass: "2011-11-05"
} }
, isBefore : { , isBefore: {
spec: { args: "2011-11-05" }, spec: { args: "2011-11-05" },
fail: "2011-11-06", fail: "2011-11-06",
pass: "2011-11-05" pass: "2011-11-05"
} }
, isIn : { , isIn: {
spec: { args: "abcdefghijk" }, spec: { args: "abcdefghijk" },
fail: "ghik", fail: "ghik",
pass: "ghij" pass: "ghij"
} }
, notIn : { , notIn: {
spec: { args: "abcdefghijk" }, spec: { args: "abcdefghijk" },
fail: "ghij", fail: "ghij",
pass: "ghik" pass: "ghik"
} }
, max : { , max: {
spec: { args: 23 }, spec: { args: 23 },
fail: "24", fail: "24",
pass: "23" pass: "23"
} }
, max : { , max$: {
spec: 23, spec: 23,
fail: "24", fail: "24",
pass: "23" pass: "23"
} }
, min : { , min: {
spec: { args: 23 }, spec: { args: 23 },
fail: "22", fail: "22",
pass: "23" pass: "23"
} }
, min : { , min$: {
spec: 23, spec: 23,
fail: "22", fail: "22",
pass: "23" pass: "23"
} }
, isArray : { , isArray: {
fail: 22, fail: 22,
pass: [22] pass: [22]
} }
, isCreditCard : { , isCreditCard: {
fail: "401288888888188f", fail: "401288888888188f",
pass: "4012888888881881" pass: "4012888888881881"
} }
...@@ -189,6 +188,8 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -189,6 +188,8 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
for (var validator in checks) { for (var validator in checks) {
if (checks.hasOwnProperty(validator)) { if (checks.hasOwnProperty(validator)) {
validator = validator.replace(/\$$/, '')
var validatorDetails = checks[validator] var validatorDetails = checks[validator]
if (!validatorDetails.hasOwnProperty("raw")) { if (!validatorDetails.hasOwnProperty("raw")) {
...@@ -202,7 +203,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -202,7 +203,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
for (var i = 0; i < validatorDetails.fail.length; i++) { for (var i = 0; i < validatorDetails.fail.length; i++) {
var failingValue = validatorDetails.fail[i] var failingValue = validatorDetails.fail[i]
it('correctly specifies an instance as invalid using a value of "' + failingValue + '" for the validation "' + validator + '"', function() { it('correctly specifies an instance as invalid using a value of "' + failingValue + '" for the validation "' + validator + '"', function(done) {
var validations = {} var validations = {}
, message = validator + "(" + failingValue + ")" , message = validator + "(" + failingValue + ")"
...@@ -226,6 +227,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -226,6 +227,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
expect(errors).not.toBeNull() expect(errors).not.toBeNull()
expect(errors).toEqual({ name : [message] }) expect(errors).toEqual({ name : [message] })
done()
}) })
} }
...@@ -235,7 +237,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -235,7 +237,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
for (var j = 0; j < validatorDetails.pass.length; j++) { for (var j = 0; j < validatorDetails.pass.length; j++) {
var succeedingValue = validatorDetails.pass[j] var succeedingValue = validatorDetails.pass[j]
it('correctly specifies an instance as valid using a value of "' + succeedingValue + '" for the validation "' + validator + '"', function() { it('correctly specifies an instance as valid using a value of "' + succeedingValue + '" for the validation "' + validator + '"', function(done) {
var validations = {} var validations = {}
if (validatorDetails.hasOwnProperty('spec')) { if (validatorDetails.hasOwnProperty('spec')) {
...@@ -255,12 +257,13 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -255,12 +257,13 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
var successfulUser = UserSuccess.build({ name: succeedingValue }) var successfulUser = UserSuccess.build({ name: succeedingValue })
expect(successfulUser.validate()).toBeNull() expect(successfulUser.validate()).toBeNull()
done()
}) })
} }
} }
} }
it('correctly validates using custom validation methods', function() { it('correctly validates using custom validation methods', function(done) {
var User = this.sequelize.define('User' + Math.random(), { var User = this.sequelize.define('User' + Math.random(), {
name: { name: {
type: Sequelize.STRING, type: Sequelize.STRING,
...@@ -282,9 +285,10 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -282,9 +285,10 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
var successfulUser = User.build({ name : "2" }) var successfulUser = User.build({ name : "2" })
expect(successfulUser.validate()).toBeNull() expect(successfulUser.validate()).toBeNull()
done()
}) })
it('skips other validations if allowNull is true and the value is null', function() { it('skips other validations if allowNull is true and the value is null', function(done) {
var User = this.sequelize.define('User' + Math.random(), { var User = this.sequelize.define('User' + Math.random(), {
age: { age: {
type: Sequelize.INTEGER, type: Sequelize.INTEGER,
...@@ -306,9 +310,10 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -306,9 +310,10 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
var successfulUser2 = User.build({ age: 1 }) var successfulUser2 = User.build({ age: 1 })
expect(successfulUser2.validate()).toBeNull() expect(successfulUser2.validate()).toBeNull()
done()
}) })
it('validates a model with custom model-wide validation methods', function() { it('validates a model with custom model-wide validation methods', function(done) {
var Foo = this.sequelize.define('Foo' + Math.random(), { var Foo = this.sequelize.define('Foo' + Math.random(), {
field1: { field1: {
type: Sequelize.INTEGER, type: Sequelize.INTEGER,
...@@ -336,6 +341,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() { ...@@ -336,6 +341,7 @@ describe(Helpers.getTestDialectTeaser("DaoValidator"), function() {
var successfulFoo = Foo.build({ field1: 33, field2: null }) var successfulFoo = Foo.build({ field1: 33, field2: null })
expect(successfulFoo.validate()).toBeNull() expect(successfulFoo.validate()).toBeNull()
done()
}) })
}) })
}) })
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Sequelize = require("../index") , Sequelize = require("../index")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000
describe(Helpers.getTestDialectTeaser('DataTypes'), function() { describe(Helpers.getTestDialectTeaser('DataTypes'), function() {
it('should return DECIMAL for the default decimal type', function() { it('should return DECIMAL for the default decimal type', function(done) {
expect(Sequelize.DECIMAL).toEqual('DECIMAL'); expect(Sequelize.DECIMAL).toEqual('DECIMAL')
}); done()
})
it('should return DECIMAL(10,2) for the default decimal type with arguments', function() { it('should return DECIMAL(10,2) for the default decimal type with arguments', function(done) {
expect(Sequelize.DECIMAL(10, 2)).toEqual('DECIMAL(10,2)'); expect(Sequelize.DECIMAL(10, 2)).toEqual('DECIMAL(10,2)')
}); done()
})
var tests = [ var tests = [
[Sequelize.STRING, 'STRING', 'VARCHAR(255)'], [Sequelize.STRING, 'STRING', 'VARCHAR(255)'],
...@@ -59,8 +60,9 @@ describe(Helpers.getTestDialectTeaser('DataTypes'), function() { ...@@ -59,8 +60,9 @@ describe(Helpers.getTestDialectTeaser('DataTypes'), function() {
] ]
tests.forEach(function(test) { tests.forEach(function(test) {
it('transforms "' + test[1] + '" to "' + test[2] + '"', function() { it('transforms "' + test[1] + '" to "' + test[2] + '"', function(done) {
expect(test[0]).toEqual(test[2]) expect(test[0]).toEqual(test[2])
done()
}) })
}) })
}) })
...@@ -12,7 +12,7 @@ describe(Helpers.getTestDialectTeaser("CustomEventEmitter"), function() { ...@@ -12,7 +12,7 @@ describe(Helpers.getTestDialectTeaser("CustomEventEmitter"), function() {
describe("proxy", function () { describe("proxy", function () {
/* Tests could _probably_ be run synchronously, but for future proofing we're basing it on the events */ /* Tests could _probably_ be run synchronously, but for future proofing we're basing it on the events */
it("should correctly work with success listeners", function (done) { it("should correctly work with success listeners", function(done) {
var emitter = new CustomEventEmitter() var emitter = new CustomEventEmitter()
, proxy = new CustomEventEmitter() , proxy = new CustomEventEmitter()
, success = this.spy() , success = this.spy()
...@@ -29,7 +29,7 @@ describe(Helpers.getTestDialectTeaser("CustomEventEmitter"), function() { ...@@ -29,7 +29,7 @@ describe(Helpers.getTestDialectTeaser("CustomEventEmitter"), function() {
proxy.emit('success') proxy.emit('success')
}) })
it("should correctly work with error listeners", function (done) { it("should correctly work with error listeners", function(done) {
var emitter = new CustomEventEmitter() var emitter = new CustomEventEmitter()
, proxy = new CustomEventEmitter() , proxy = new CustomEventEmitter()
, error = this.spy() , error = this.spy()
...@@ -46,7 +46,7 @@ describe(Helpers.getTestDialectTeaser("CustomEventEmitter"), function() { ...@@ -46,7 +46,7 @@ describe(Helpers.getTestDialectTeaser("CustomEventEmitter"), function() {
proxy.emit('error') proxy.emit('error')
}) })
it("should correctly work with complete/done listeners", function (done) { it("should correctly work with complete/done listeners", function(done) {
var emitter = new CustomEventEmitter() var emitter = new CustomEventEmitter()
, proxy = new CustomEventEmitter() , proxy = new CustomEventEmitter()
, complete = this.spy() , complete = this.spy()
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Sequelize = require("../index") , Sequelize = require("../index")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
describe(Helpers.getTestDialectTeaser("Language Util"), function() { describe(Helpers.getTestDialectTeaser("Language Util"), function() {
describe("Plural", function(){ describe("Plural", function(){
before(function(done) { beforeAll(function(done) {
var self = this
Helpers.initTests({ Helpers.initTests({
dialect: dialect, dialect: dialect,
onComplete: function(sequelize) { onComplete: function(sequelize) {
this.sequelize = sequelize self.sequelize = sequelize
this.sequelize.options.language = 'es' self.sequelize.options.language = 'es'
done() done()
}.bind(this) }
}) })
}) })
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, QueryChainer = require("../lib/query-chainer")
, CustomEventEmitter = require("../lib/emitters/custom-event-emitter")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
, Migrator = require("../lib/migrator") , Migrator = require("../lib/migrator")
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 10000 buster.testRunner.timeout = 10000
describe(Helpers.getTestDialectTeaser("Migrator"), function() { describe(Helpers.getTestDialectTeaser("Migrator"), function() {
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
before(function(done) { before(function(done) {
this.sequelize = sequelize
this.init = function(options, callback) { this.init = function(options, callback) {
options = Helpers.Sequelize.Utils._.extend({ options = Helpers.Sequelize.Utils._.extend({
path: __dirname + '/assets/migrations', path: __dirname + '/assets/migrations',
logging: function(){} logging: function(){},
context: sequelize
}, options || {}) }, options || {})
var migrator = new Migrator(this.sequelize, options) var migrator = new Migrator(sequelize, options)
migrator migrator
.findOrCreateSequelizeMetaDAO({ force: true }) .findOrCreateSequelizeMetaDAO({ force: true })
...@@ -26,13 +26,9 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -26,13 +26,9 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
callback && callback(migrator, SequelizeMeta) callback && callback(migrator, SequelizeMeta)
}) })
.error(function(err) { console.log(err) }) .error(function(err) { console.log(err) })
}.bind(this) }
Helpers.initTests({ dialect: dialect, onComplete: done, context: this })
})
it("as", function() { Helpers.clearDatabase(this.sequelize, done)
expect(1).toEqual(1)
}) })
describe('getUndoneMigrations', function() { describe('getUndoneMigrations', function() {
...@@ -42,8 +38,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -42,8 +38,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
expect(err).toBeNull() expect(err).toBeNull()
expect(migrations.length).toEqual(0) expect(migrations.length).toEqual(0)
done() done()
}.bind(this)) })
}.bind(this)) })
}) })
it("returns only files between from and to", function(done) { it("returns only files between from and to", function(done) {
...@@ -53,8 +49,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -53,8 +49,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
expect(migrations.length).toEqual(1) expect(migrations.length).toEqual(1)
expect(migrations[migrations.length - 1].filename).toEqual('20111117063700-createPerson.js') expect(migrations[migrations.length - 1].filename).toEqual('20111117063700-createPerson.js')
done() done()
}.bind(this)) })
}.bind(this)) })
}) })
it("returns exactly the migration which is defined in from and to", function(done) { it("returns exactly the migration which is defined in from and to", function(done) {
...@@ -64,8 +60,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -64,8 +60,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
expect(migrations.length).toEqual(1) expect(migrations.length).toEqual(1)
expect(migrations[migrations.length - 1].filename).toEqual('20111117063700-createPerson.js') expect(migrations[migrations.length - 1].filename).toEqual('20111117063700-createPerson.js')
done() done()
}.bind(this)) })
}.bind(this)) })
}) })
it("returns also the file which is exactly options.from or options.to", function(done) { it("returns also the file which is exactly options.from or options.to", function(done) {
...@@ -76,8 +72,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -76,8 +72,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
expect(migrations[0].filename).toEqual('20111117063700-createPerson.js') expect(migrations[0].filename).toEqual('20111117063700-createPerson.js')
expect(migrations[1].filename).toEqual('20111130161100-emptyMigration.js') expect(migrations[1].filename).toEqual('20111130161100-emptyMigration.js')
done() done()
}.bind(this)) })
}.bind(this)) })
}) })
it("returns all files to options.to if no options.from is defined", function(done) { it("returns all files to options.to if no options.from is defined", function(done) {
...@@ -86,8 +82,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -86,8 +82,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
expect(err).toBeNull() expect(err).toBeNull()
expect(migrations.length).toEqual(2) expect(migrations.length).toEqual(2)
done() done()
}.bind(this)) })
}.bind(this)) })
}) })
it("returns all files from last migration id stored in database", function(done) { it("returns all files from last migration id stored in database", function(done) {
...@@ -98,23 +94,24 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -98,23 +94,24 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
expect(migrations.length).toEqual(6) expect(migrations.length).toEqual(6)
expect(migrations[0].filename).toEqual('20111130161100-emptyMigration.js') expect(migrations[0].filename).toEqual('20111130161100-emptyMigration.js')
done() done()
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
describe('migrations', function() { describe('migrations', function() {
before(function(done) { before(function(done) {
var self = this
this.init({ from: 20111117063700, to: 20111117063700 }, function(migrator) { this.init({ from: 20111117063700, to: 20111117063700 }, function(migrator) {
this.migrator = migrator self.migrator = migrator
this.migrator.migrate().success(done) self.migrator.migrate().success(done)
}.bind(this)) })
}) })
describe('executions', function() { describe('executions', function() {
it("executes migration #20111117063700 and correctly creates the table", function(done) { it("executes migration #20111117063700 and correctly creates the table", function(done) {
this.sequelize.getQueryInterface().showAllTables().success(function(tableNames) { sequelize.getQueryInterface().showAllTables().success(function(tableNames) {
tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' }) tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' })
expect(tableNames).toEqual([ 'Person' ]) expect(tableNames).toEqual([ 'Person' ])
done() done()
...@@ -122,7 +119,7 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -122,7 +119,7 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
}) })
it("executes migration #20111117063700 and correctly adds isBetaMember", function(done) { it("executes migration #20111117063700 and correctly adds isBetaMember", function(done) {
this.sequelize.getQueryInterface().describeTable('Person').success(function(data) { sequelize.getQueryInterface().describeTable('Person').success(function(data) {
var fields = Helpers.Sequelize.Utils._.keys(data).sort() var fields = Helpers.Sequelize.Utils._.keys(data).sort()
expect(fields).toEqual([ 'isBetaMember', 'name' ]) expect(fields).toEqual([ 'isBetaMember', 'name' ])
done() done()
...@@ -130,18 +127,19 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -130,18 +127,19 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
}) })
it("executes migration #20111117063700 correctly up (createTable) and downwards (dropTable)", function(done) { it("executes migration #20111117063700 correctly up (createTable) and downwards (dropTable)", function(done) {
this.sequelize.getQueryInterface().showAllTables().success(function(tableNames) { var self = this
sequelize.getQueryInterface().showAllTables().success(function(tableNames) {
tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' }) tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' })
expect(tableNames).toEqual([ 'Person' ]) expect(tableNames).toEqual([ 'Person' ])
this.migrator.migrate({ method: 'down' }).success(function() { self.migrator.migrate({ method: 'down' }).success(function() {
this.sequelize.getQueryInterface().showAllTables().success(function(tableNames) { self.sequelize.getQueryInterface().showAllTables().success(function(tableNames) {
tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' }) tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' })
expect(tableNames).toEqual([]) expect(tableNames).toEqual([])
done() done()
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}) })
it("executes the empty migration #20111130161100", function(done) { it("executes the empty migration #20111130161100", function(done) {
...@@ -161,35 +159,38 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -161,35 +159,38 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
describe('renameTable', function() { describe('renameTable', function() {
before(function(done) { before(function(done) {
var self = this
this.init({ from: 20111117063700, to: 20111117063700 }, function(migrator) { this.init({ from: 20111117063700, to: 20111117063700 }, function(migrator) {
this.migrator = migrator self.migrator = migrator
this.migrator.migrate().success(done) self.migrator.migrate().success(done)
}.bind(this)) })
}) })
it("executes migration #20111205064000 and renames a table", function(done) { it("executes migration #20111205064000 and renames a table", function(done) {
this.sequelize.getQueryInterface().showAllTables().success(function(tableNames) { var self = this
self.sequelize.getQueryInterface().showAllTables().success(function(tableNames) {
tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' }) tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' })
expect(tableNames).toContain('Person') expect(tableNames).toContain('Person')
this.init({ from: 20111205064000, to: 20111205064000 }, function(migrator) { self.init({ from: 20111205064000, to: 20111205064000 }, function(migrator) {
migrator.migrate().success(function() { migrator.migrate().success(function() {
this.sequelize.getQueryInterface().showAllTables().success(function(tableNames) { self.sequelize.getQueryInterface().showAllTables().success(function(tableNames) {
tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' }) tableNames = tableNames.filter(function(e){ return e != 'SequelizeMeta' })
expect(tableNames).toEqual([ 'User' ]) expect(tableNames).toEqual([ 'User' ])
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
describe('addColumn', function() { describe('addColumn', function() {
it('adds a column to the user table', function(done) { it('adds a column to the user table', function(done) {
this.init({ from: 20111117063700, to: 20111205162700 }, function(migrator) { var self = this
self.init({ from: 20111117063700, to: 20111205162700 }, function(migrator) {
migrator.migrate().complete(function(err) { migrator.migrate().complete(function(err) {
this.sequelize.getQueryInterface().describeTable('User').complete(function(err, data) { self.sequelize.getQueryInterface().describeTable('User').complete(function(err, data) {
var signature = data.signature var signature = data.signature
, isAdmin = data.isAdmin , isAdmin = data.isAdmin
, shopId = data.shopId , shopId = data.shopId
...@@ -201,16 +202,17 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -201,16 +202,17 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
describe('removeColumn', function() { describe('removeColumn', function() {
it('removes the shopId column from user', function(done) { it('removes the shopId column from user', function(done) {
this.init({ to: 20111206061400 }, function(migrator) { var self = this
self.init({ to: 20111206061400 }, function(migrator) {
migrator.migrate().success(function(){ migrator.migrate().success(function(){
this.sequelize.getQueryInterface().describeTable('User').success(function(data) { self.sequelize.getQueryInterface().describeTable('User').success(function(data) {
var signature = data.signature var signature = data.signature
, isAdmin = data.isAdmin , isAdmin = data.isAdmin
, shopId = data.shopId , shopId = data.shopId
...@@ -223,16 +225,17 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -223,16 +225,17 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
describe('changeColumn', function() { describe('changeColumn', function() {
it('changes the signature column from user to default "signature" + notNull', function(done) { it('changes the signature column from user to default "signature" + notNull', function(done) {
this.init({ to: 20111206063000 }, function(migrator) { var self = this
self.init({ to: 20111206063000 }, function(migrator) {
migrator.migrate().success(function() { migrator.migrate().success(function() {
this.sequelize.getQueryInterface().describeTable('User').success(function(data) { self.sequelize.getQueryInterface().describeTable('User').success(function(data) {
var signature = data.signature var signature = data.signature
if (dialect === 'postgres') { if (dialect === 'postgres') {
...@@ -245,17 +248,18 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -245,17 +248,18 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
}) })
describe('renameColumn', function() { describe('renameColumn', function() {
it("renames the signature column from user to sig", function(done) { it("renames the signature column from user to sig", function(done) {
this.init({ to: 20111206163300 }, function(migrator) { var self = this
self.init({ to: 20111206163300 }, function(migrator) {
migrator.migrate().success(function(){ migrator.migrate().success(function(){
this.sequelize.getQueryInterface().describeTable('User').success(function(data) { self.sequelize.getQueryInterface().describeTable('User').success(function(data) {
var signature = data.signature var signature = data.signature
, sig = data.sig , sig = data.sig
...@@ -264,9 +268,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() { ...@@ -264,9 +268,8 @@ describe(Helpers.getTestDialectTeaser("Migrator"), function() {
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
}) })
/* jshint camelcase: false */ /* jshint camelcase: false */
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, config = require('../config/config') , config = require('../config/config')
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect.match(/^mysql/)) { if (dialect.match(/^mysql/)) {
describe('[MYSQL] Associations', function() { describe('[MYSQL] Associations', function() {
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, done)
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
},
onComplete: function() {
self.sequelize.sync({ force: true }).success(done)
}
})
}) })
describe('many-to-many', function() { describe('many-to-many', function() {
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect.match(/^mysql/)) { if (dialect.match(/^mysql/)) {
describe('[MYSQL] Connector Manager', function() { describe('[MYSQL] Connector Manager', function() {
before(function(done) { before(function(done) {
var self = this this.sequelize = sequelize
Helpers.clearDatabase(this.sequelize, done)
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
},
onComplete: function() {
self.sequelize.sync({ force: true }).success(done)
}
})
}) })
it('works correctly after being idle', function(done) { it('works correctly after being idle', function(done) {
......
/* jshint camelcase: false */ /* jshint camelcase: false */
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, config = require('../config/config') , config = require('../config/config')
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect.match(/^mysql/)) { if (dialect.match(/^mysql/)) {
describe('[MYSQL] DAOFactory', function() { describe('[MYSQL] DAOFactory', function() {
before(function(done) { before(function(done) {
var self = this this.sequelize = sequelize
Helpers.clearDatabase(this.sequelize, done)
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = self.sequelize.define('User', { age: DataTypes.INTEGER, name: DataTypes.STRING, bio: DataTypes.TEXT })
},
onComplete: function() {
self.sequelize.sync({ force: true }).success(done)
}
})
}) })
describe('constructor', function() { describe('constructor', function() {
......
/* jshint camelcase: false */ /* jshint camelcase: false */
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, config = require('../config/config')
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
, QueryGenerator = require("../../lib/dialects/mysql/query-generator") , QueryGenerator = require("../../lib/dialects/mysql/query-generator")
, util = require("util") , util = require("util")
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect.match(/^mysql/)) { if (dialect.match(/^mysql/)) {
describe('[MYSQL] QueryGenerator', function() { describe('[MYSQL] QueryGenerator', function() {
before(function(done) { before(function(done) {
var self = this this.sequelize = sequelize
Helpers.clearDatabase(this.sequelize, done)
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
},
onComplete: function() {
self.sequelize.sync({ force: true }).success(done)
}
})
}) })
var suites = { var suites = {
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 2000
if (dialect.match(/^postgres/)) { if (dialect.match(/^postgres/)) {
describe('[POSTGRES] associations', function() { describe('[POSTGRES] associations', function() {
before(function(done) { var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
var self = this
Helpers.initTests({ before(function(done) {
dialect: dialect, this.sequelize = sequelize
beforeComplete: function(sequelize, DataTypes) { Helpers.clearDatabase(this.sequelize, done)
self.sequelize = sequelize
},
onComplete: function() {
self.sequelize.sync({ force: true }).success(done)
}
})
}) })
describe('many-to-many', function() { describe('many-to-many', function() {
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
} , DataTypes = require(__dirname + "/../../lib/data-types")
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000
if (dialect.match(/^postgres/)) { if (dialect.match(/^postgres/)) {
describe('[POSTGRES] DAO', function() { describe('[POSTGRES] DAO', function() {
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, function() {
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
username: DataTypes.STRING, username: DataTypes.STRING,
email: {type: DataTypes.ARRAY(DataTypes.TEXT)}, email: {type: DataTypes.ARRAY(DataTypes.TEXT)},
document: {type: DataTypes.HSTORE, defaultValue: '"default"=>"value"'} document: {type: DataTypes.HSTORE, defaultValue: '"default"=>"value"'}
}) })
},
onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
}
}) })
}) })
describe('model', function() { describe('model', function() {
it("create handles array correctly", function(done) { it("create handles array correctly", function(done) {
var self = this
this.User this.User
.create({ username: 'user', email: ['foo@bar.com', 'bar@baz.com'] }) .create({ username: 'user', email: ['foo@bar.com', 'bar@baz.com'] })
.success(function(oldUser) { .success(function(oldUser) {
...@@ -65,29 +58,23 @@ if (dialect.match(/^postgres/)) { ...@@ -65,29 +58,23 @@ if (dialect.match(/^postgres/)) {
.error(console.log) .error(console.log)
}) })
}) })
})
describe('[POSTGRES] Unquoted identifiers', function() { describe('[POSTGRES] Unquoted identifiers', function() {
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize.options.quoteIdentifiers = false
Helpers.initTests({ self.User = this.sequelize.define('User', {
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.sequelize.options.quoteIdentifiers = false
self.User = sequelize.define('User', {
username: DataTypes.STRING, username: DataTypes.STRING,
fullName: DataTypes.STRING // Note mixed case fullName: DataTypes.STRING // Note mixed case
}) })
},
onComplete: function() {
// We can create a table with non-quoted identifiers
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
}
}) })
after(function(done) {
this.sequelize.options.quoteIdentifiers = true
done()
}) })
it("can insert and select", function(done) { it("can insert and select", function(done) {
...@@ -113,12 +100,7 @@ if (dialect.match(/^postgres/)) { ...@@ -113,12 +100,7 @@ if (dialect.match(/^postgres/)) {
expect(user2.fullName).toEqual('John Smith') expect(user2.fullName).toEqual('John Smith')
done(); done();
}) })
.error(function(err) {
console.log(err)
})
}) })
.error(function(err) {
console.log(err)
}) })
}) })
}) })
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000
if (dialect.match(/^postgres/)) { if (dialect.match(/^postgres/)) {
describe('[POSTGRES] hstore', function() { describe('[POSTGRES] hstore', function() {
const hstore = require('../../lib/dialects/postgres/hstore') var hstore = require('../../lib/dialects/postgres/hstore')
describe('stringifyPart', function() { describe('stringifyPart', function() {
it("handles undefined values correctly", function() { it("handles undefined values correctly", function(done) {
expect(hstore.stringifyPart(undefined)).toEqual('NULL') expect(hstore.stringifyPart(undefined)).toEqual('NULL')
done()
}) })
it("handles null values correctly", function() {
it("handles null values correctly", function(done) {
expect(hstore.stringifyPart(null)).toEqual('NULL') expect(hstore.stringifyPart(null)).toEqual('NULL')
done()
}) })
it("handles boolean values correctly", function() {
it("handles boolean values correctly", function(done) {
expect(hstore.stringifyPart(false)).toEqual('false') expect(hstore.stringifyPart(false)).toEqual('false')
expect(hstore.stringifyPart(true)).toEqual('true') expect(hstore.stringifyPart(true)).toEqual('true')
done()
}) })
it("handles strings correctly", function() {
it("handles strings correctly", function(done) {
expect(hstore.stringifyPart('foo')).toEqual('"foo"') expect(hstore.stringifyPart('foo')).toEqual('"foo"')
done()
}) })
it("handles strings with backslashes correctly", function() {
it("handles strings with backslashes correctly", function(done) {
expect(hstore.stringifyPart("\\'literally\\'")).toEqual('"\\\\\'literally\\\\\'"') expect(hstore.stringifyPart("\\'literally\\'")).toEqual('"\\\\\'literally\\\\\'"')
done()
}) })
it("handles arrays correctly", function() {
it("handles arrays correctly", function(done) {
expect(hstore.stringifyPart([1,['2'],'"3"'])).toEqual('"[1,[\\"2\\"],\\"\\\\\\"3\\\\\\"\\"]"') expect(hstore.stringifyPart([1,['2'],'"3"'])).toEqual('"[1,[\\"2\\"],\\"\\\\\\"3\\\\\\"\\"]"')
done()
}) })
it("handles simple objects correctly", function() {
it("handles simple objects correctly", function(done) {
expect(hstore.stringifyPart({ test: 'value' })).toEqual('"{\\"test\\":\\"value\\"}"') expect(hstore.stringifyPart({ test: 'value' })).toEqual('"{\\"test\\":\\"value\\"}"')
done()
}) })
it("handles nested objects correctly", function () {
it("handles nested objects correctly", function(done) {
expect(hstore.stringifyPart({ test: { nested: 'value' } })).toEqual('"{\\"test\\":{\\"nested\\":\\"value\\"}}"') expect(hstore.stringifyPart({ test: { nested: 'value' } })).toEqual('"{\\"test\\":{\\"nested\\":\\"value\\"}}"')
done()
}) })
it("handles objects correctly", function() {
it("handles objects correctly", function(done) {
expect(hstore.stringifyPart({test: {nested: {value: {including: '"string"'}}}})).toEqual('"{\\"test\\":{\\"nested\\":{\\"value\\":{\\"including\\":\\"\\\\\\"string\\\\\\"\\"}}}}"') expect(hstore.stringifyPart({test: {nested: {value: {including: '"string"'}}}})).toEqual('"{\\"test\\":{\\"nested\\":{\\"value\\":{\\"including\\":\\"\\\\\\"string\\\\\\"\\"}}}}"')
done()
}) })
}) })
describe('stringify', function() { describe('stringify', function() {
it('should handle empty objects correctly', function() { it('should handle empty objects correctly', function(done) {
expect(hstore.stringify({ })).toEqual('') expect(hstore.stringify({ })).toEqual('')
done()
}) })
it('should handle null values correctly', function () {
it('should handle null values correctly', function(done) {
expect(hstore.stringify({ null: null })).toEqual('"null"=>NULL') expect(hstore.stringify({ null: null })).toEqual('"null"=>NULL')
done()
}) })
it('should handle simple objects correctly', function() {
it('should handle simple objects correctly', function(done) {
expect(hstore.stringify({ test: 'value' })).toEqual('"test"=>"value"') expect(hstore.stringify({ test: 'value' })).toEqual('"test"=>"value"')
done()
}) })
it('should handle nested objects correctly', function() {
it('should handle nested objects correctly', function(done) {
expect(hstore.stringify({ test: { nested: 'value' } })).toEqual('"test"=>"{\\"nested\\":\\"value\\"}"') expect(hstore.stringify({ test: { nested: 'value' } })).toEqual('"test"=>"{\\"nested\\":\\"value\\"}"')
done()
}) })
it('should handle nested arrays correctly', function() {
it('should handle nested arrays correctly', function(done) {
expect(hstore.stringify({ test: [ 1, '2', [ '"3"' ] ] })).toEqual('"test"=>"[1,\\"2\\",[\\"\\\\\\"3\\\\\\"\\"]]"') expect(hstore.stringify({ test: [ 1, '2', [ '"3"' ] ] })).toEqual('"test"=>"[1,\\"2\\",[\\"\\\\\\"3\\\\\\"\\"]]"')
done()
}) })
it('should handle multiple keys with different types of values', function() {
it('should handle multiple keys with different types of values', function(done) {
expect(hstore.stringify({ true: true, false: false, null: null, undefined: undefined, integer: 1, array: [1,'2'], object: { object: 'value' }})).toEqual('"true"=>true,"false"=>false,"null"=>NULL,"undefined"=>NULL,"integer"=>1,"array"=>"[1,\\"2\\"]","object"=>"{\\"object\\":\\"value\\"}"') expect(hstore.stringify({ true: true, false: false, null: null, undefined: undefined, integer: 1, array: [1,'2'], object: { object: 'value' }})).toEqual('"true"=>true,"false"=>false,"null"=>NULL,"undefined"=>NULL,"integer"=>1,"array"=>"[1,\\"2\\"]","object"=>"{\\"object\\":\\"value\\"}"')
done()
}) })
}) })
describe('parse', function() { describe('parse', function() {
it('should handle empty objects correctly', function() { it('should handle empty objects correctly', function(done) {
expect(hstore.parse('')).toEqual({ }) expect(hstore.parse('')).toEqual({ })
done()
}) })
it('should handle simple objects correctly', function() {
it('should handle simple objects correctly', function(done) {
expect(hstore.parse('"test"=>"value"')).toEqual({ test: 'value' }) expect(hstore.parse('"test"=>"value"')).toEqual({ test: 'value' })
done()
}) })
it('should handle nested objects correctly', function() {
it('should handle nested objects correctly', function(done) {
expect(hstore.parse('"test"=>"{\\"nested\\":\\"value\\"}"')).toEqual({ test: { nested: 'value' } }) expect(hstore.parse('"test"=>"{\\"nested\\":\\"value\\"}"')).toEqual({ test: { nested: 'value' } })
done()
}) })
it('should handle nested arrays correctly', function() {
it('should handle nested arrays correctly', function(done) {
expect(hstore.parse('"test"=>"[1,\\"2\\",[\\"\\\\\\"3\\\\\\"\\"]]"')).toEqual({ test: [ 1, '2', [ '"3"' ] ] }) expect(hstore.parse('"test"=>"[1,\\"2\\",[\\"\\\\\\"3\\\\\\"\\"]]"')).toEqual({ test: [ 1, '2', [ '"3"' ] ] })
done()
}) })
it('should handle multiple keys with different types of values', function() {
it('should handle multiple keys with different types of values', function(done) {
expect(hstore.parse('"true"=>true,"false"=>false,"null"=>NULL,"undefined"=>NULL,"integer"=>1,"array"=>"[1,\\"2\\"]","object"=>"{\\"object\\":\\"value\\"}"')).toEqual({ true: true, false: false, null: null, undefined: null, integer: 1, array: [1,'2'], object: { object: 'value' }}) expect(hstore.parse('"true"=>true,"false"=>false,"null"=>NULL,"undefined"=>NULL,"integer"=>1,"array"=>"[1,\\"2\\"]","object"=>"{\\"object\\":\\"value\\"}"')).toEqual({ true: true, false: false, null: null, undefined: null, integer: 1, array: [1,'2'], object: { object: 'value' }})
done()
}) })
}) })
}) })
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
, QueryGenerator = require("../../lib/dialects/postgres/query-generator") , QueryGenerator = require("../../lib/dialects/postgres/query-generator")
, util = require("util") , util = require("util")
, moment = require('moment') , moment = require('moment')
} , DataTypes = require(__dirname + "/../../lib/data-types")
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
if (dialect.match(/^postgres/)) { if (dialect.match(/^postgres/)) {
describe('[POSTGRES] QueryGenerator', function() { describe('[POSTGRES] QueryGenerator', function() {
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, function() {
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
username: DataTypes.STRING, username: DataTypes.STRING,
email: {type: DataTypes.ARRAY(DataTypes.TEXT)}, email: {type: DataTypes.ARRAY(DataTypes.TEXT)},
document: {type: DataTypes.HSTORE, defaultValue: '"default"=>"value"'} document: {type: DataTypes.HSTORE, defaultValue: '"default"=>"value"'}
}) })
},
onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
}
}) })
}) })
......
...@@ -10,21 +10,24 @@ buster.spec.expose() ...@@ -10,21 +10,24 @@ buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
describe(Helpers.getTestDialectTeaser("QueryChainer"), function() { describe(Helpers.getTestDialectTeaser("QueryChainer"), function() {
before(function() { before(function(done) {
this.queryChainer = new QueryChainer() this.queryChainer = new QueryChainer()
done()
}) })
describe('add', function() { describe('add', function() {
it('adds a new serial item if method is passed', function() { it('adds a new serial item if method is passed', function(done) {
expect(this.queryChainer.serials.length).toEqual(0) expect(this.queryChainer.serials.length).toEqual(0)
this.queryChainer.add({}, 'foo') this.queryChainer.add({}, 'foo')
expect(this.queryChainer.serials.length).toEqual(1) expect(this.queryChainer.serials.length).toEqual(1)
done()
}) })
it('adds a new emitter if no method is passed', function() { it('adds a new emitter if no method is passed', function(done) {
expect(this.queryChainer.emitters.length).toEqual(0) expect(this.queryChainer.emitters.length).toEqual(0)
this.queryChainer.add(new CustomEventEmitter()) this.queryChainer.add(new CustomEventEmitter())
expect(this.queryChainer.emitters.length).toEqual(1) expect(this.queryChainer.emitters.length).toEqual(1)
done()
}) })
}) })
......
/* jshint multistr: true */ /* jshint multistr: true */
var buster = require("buster")
if (typeof require === 'function') {
var buster = require("buster")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
} , DataTypes = require(__dirname + "/../lib/data-types")
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 2000 buster.testRunner.timeout = 2000
describe(Helpers.getTestDialectTeaser("QueryGenerators"), function() { describe(Helpers.getTestDialectTeaser("QueryGenerators"), function() {
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
before(function(done) { before(function(done) {
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
this.sequelize = sequelize this.sequelize = sequelize
this.DataTypes = DataTypes
}.bind(this),
onComplete: function() {
this.interface = this.sequelize.getQueryInterface() this.interface = this.sequelize.getQueryInterface()
done() done()
}.bind(this)
})
}) })
describe("comments", function() { describe("comments", function() {
it("should create a comment for a column", function(done) { it("should create a comment for a column", function(done) {
var self = this var self = this
, User = this.sequelize.define('User', { , User = this.sequelize.define('User', {
username: {type: this.DataTypes.STRING, comment: 'Some lovely info for my DBA'} username: {type: DataTypes.STRING, comment: 'Some lovely info for my DBA'}
}) })
User.sync().success(function(){ User.sync({ force: true }).success(function(){
var sql = '' var sql = ''
if (dialect === "mysql") { if (dialect === "mysql") {
sql = 'SELECT COLUMN_COMMENT as cmt FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = \'' + self.sequelize.config.database + '\' AND TABLE_NAME = \'Users\' AND COLUMN_NAME = \'username\''; sql = 'SELECT COLUMN_COMMENT as cmt FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = \'' + self.sequelize.config.database + '\' AND TABLE_NAME = \'Users\' AND COLUMN_NAME = \'username\'';
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, CustomEventEmitter = require("../lib/emitters/custom-event-emitter")
, Helpers = require('./buster-helpers') , Helpers = require('./buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
describe(Helpers.getTestDialectTeaser("QueryInterface"), function() { describe(Helpers.getTestDialectTeaser("QueryInterface"), function() {
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
before(function(done) { before(function(done) {
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize) {
this.sequelize = sequelize this.sequelize = sequelize
}.bind(this),
onComplete: function() {
this.interface = this.sequelize.getQueryInterface() this.interface = this.sequelize.getQueryInterface()
done() done()
}.bind(this)
})
}) })
describe('dropAllTables', function() { describe('dropAllTables', function() {
it("should drop all tables", function(done) { it("should drop all tables", function(done) {
var self = this
this.interface.dropAllTables().complete(function(err) { this.interface.dropAllTables().complete(function(err) {
expect(err).toBeNull() expect(err).toBeNull()
this.interface.showAllTables().complete(function(err, tableNames) { self.interface.showAllTables().complete(function(err, tableNames) {
expect(err).toBeNull() expect(err).toBeNull()
expect(tableNames.length).toEqual(0) expect(tableNames.length).toEqual(0)
this.interface.createTable('table', { name: Helpers.Sequelize.STRING }).complete(function(err) { self.interface.createTable('table', { name: Helpers.Sequelize.STRING }).complete(function(err) {
expect(err).toBeNull() expect(err).toBeNull()
this.interface.showAllTables().complete(function(err, tableNames) { self.interface.showAllTables().complete(function(err, tableNames) {
expect(err).toBeNull() expect(err).toBeNull()
expect(tableNames.length).toEqual(1) expect(tableNames.length).toEqual(1)
this.interface.dropAllTables().complete(function(err) { self.interface.dropAllTables().complete(function(err) {
expect(err).toBeNull() expect(err).toBeNull()
this.interface.showAllTables().complete(function(err, tableNames) { self.interface.showAllTables().complete(function(err, tableNames) {
expect(err).toBeNull() expect(err).toBeNull()
expect(tableNames.length).toEqual(0) expect(tableNames.length).toEqual(0)
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
...@@ -63,19 +56,20 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() { ...@@ -63,19 +56,20 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() {
}) })
it('adds, reads and removes an index to the table', function(done) { it('adds, reads and removes an index to the table', function(done) {
var self = this
this.interface.addIndex('User', ['username', 'isAdmin']).complete(function(err) { this.interface.addIndex('User', ['username', 'isAdmin']).complete(function(err) {
expect(err).toBeNull() expect(err).toBeNull()
this.interface.showIndex('User').complete(function(err, indexes) { self.interface.showIndex('User').complete(function(err, indexes) {
expect(err).toBeNull() expect(err).toBeNull()
var indexColumns = Helpers.Sequelize.Utils._.uniq(indexes.map(function(index) { return index.name })) var indexColumns = Helpers.Sequelize.Utils._.uniq(indexes.map(function(index) { return index.name }))
expect(indexColumns).toEqual(['user_username_is_admin']) expect(indexColumns).toEqual(['user_username_is_admin'])
this.interface.removeIndex('User', ['username', 'isAdmin']).complete(function(err) { self.interface.removeIndex('User', ['username', 'isAdmin']).complete(function(err) {
expect(err).toBeNull() expect(err).toBeNull()
this.interface.showIndex('User').complete(function(err, indexes) { self.interface.showIndex('User').complete(function(err, indexes) {
expect(err).toBeNull() expect(err).toBeNull()
indexColumns = Helpers.Sequelize.Utils._.uniq(indexes.map(function(index) { return index.name })) indexColumns = Helpers.Sequelize.Utils._.uniq(indexes.map(function(index) { return index.name }))
...@@ -83,23 +77,21 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() { ...@@ -83,23 +77,21 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() {
done() done()
}) })
}.bind(this)) })
}.bind(this)) })
}.bind(this)) })
}) })
}) })
describe('describeTable', function() { describe('describeTable', function() {
before(function(done) { it('reads the metadata of the table', function(done) {
var self = this
this.interface.createTable('User', { this.interface.createTable('User', {
username: Helpers.Sequelize.STRING, username: Helpers.Sequelize.STRING,
isAdmin: Helpers.Sequelize.BOOLEAN, isAdmin: Helpers.Sequelize.BOOLEAN,
enumVals: Helpers.Sequelize.ENUM('hello', 'world') enumVals: Helpers.Sequelize.ENUM('hello', 'world')
}).success(done) }).success(function() {
}) self.interface.describeTable('User').complete(function(err, metadata) {
it('reads the metadata of the table', function(done) {
this.interface.describeTable('User').complete(function(err, metadata) {
expect(err).toBeNull() expect(err).toBeNull()
var username = metadata.username var username = metadata.username
...@@ -114,7 +106,7 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() { ...@@ -114,7 +106,7 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() {
expect(isAdmin.allowNull).toBeTrue() expect(isAdmin.allowNull).toBeTrue()
expect(isAdmin.defaultValue).toBeNull() expect(isAdmin.defaultValue).toBeNull()
if (dialect === 'postgres') { if (dialect === "postgres" || dialect === "postgres-native") {
expect(enumVals.special).toBeArray(); expect(enumVals.special).toBeArray();
expect(enumVals.special.length).toEqual(2); expect(enumVals.special.length).toEqual(2);
} }
...@@ -123,4 +115,5 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() { ...@@ -123,4 +115,5 @@ describe(Helpers.getTestDialectTeaser("QueryInterface"), function() {
}) })
}) })
}) })
})
}) })
/* jshint camelcase: false */ /* jshint camelcase: false */
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
, dbFile = __dirname + '/test.sqlite' , dbFile = __dirname + '/test.sqlite'
, storages = [dbFile] , storages = [dbFile]
, DataTypes = require(__dirname + "/../../lib/data-types") , DataTypes = require(__dirname + "/../../lib/data-types")
}
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect === 'sqlite') { if (dialect === 'sqlite') {
describe('[SQLITE] DAOFactory', function() { describe('[SQLITE] DAOFactory', function() {
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, function() {
dialect: 'sqlite',
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
age: DataTypes.INTEGER, age: DataTypes.INTEGER,
name: DataTypes.STRING, name: DataTypes.STRING,
bio: DataTypes.TEXT bio: DataTypes.TEXT
}) })
},
onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
}
}) })
}) })
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
} , DataTypes = require(__dirname + "/../../lib/data-types")
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect === 'sqlite') { if (dialect === 'sqlite') {
describe('[SQLITE] DAO', function() { describe('[SQLITE] DAO', function() {
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, function() {
dialect: 'sqlite',
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
username: DataTypes.STRING username: DataTypes.STRING
}) })
},
onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
}
}) })
}) })
...@@ -32,8 +27,8 @@ if (dialect === 'sqlite') { ...@@ -32,8 +27,8 @@ if (dialect === 'sqlite') {
this.User this.User
.create({ username: 'user', createdAt: new Date(2011, 04, 04) }) .create({ username: 'user', createdAt: new Date(2011, 04, 04) })
.success(function(oldUser) { .success(function() {
self.User.create({ username: 'new user' }).success(function(newUser) { self.User.create({ username: 'new user' }).success(function() {
self.User.findAll({ self.User.findAll({
where: ['createdAt > ?', new Date(2012, 01, 01)] where: ['createdAt > ?', new Date(2012, 01, 01)]
}).success(function(users) { }).success(function(users) {
......
if(typeof require === 'function') { var buster = require("buster")
const buster = require("buster")
, Helpers = require('../buster-helpers') , Helpers = require('../buster-helpers')
, dialect = Helpers.getTestDialect() , dialect = Helpers.getTestDialect()
, QueryGenerator = require("../../lib/dialects/sqlite/query-generator") , QueryGenerator = require("../../lib/dialects/sqlite/query-generator")
, util = require("util"); , util = require("util")
} , DataTypes = require(__dirname + "/../../lib/data-types")
buster.spec.expose() buster.spec.expose()
buster.testRunner.timeout = 1000 buster.testRunner.timeout = 1000
var sequelize = Helpers.createSequelizeInstance({dialect: dialect})
if (dialect === 'sqlite') { if (dialect === 'sqlite') {
describe('[SQLITE] QueryGenerator', function() { describe('[SQLITE] QueryGenerator', function() {
before(function(done) { before(function(done) {
var self = this var self = this
this.sequelize = sequelize
Helpers.initTests({ Helpers.clearDatabase(this.sequelize, function() {
dialect: 'sqlite',
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = sequelize.define('User', { self.User = sequelize.define('User', {
username: DataTypes.STRING username: DataTypes.STRING
}) })
},
onComplete: function() {
self.User.sync({ force: true }).success(done) self.User.sync({ force: true }).success(done)
}
}) })
}) })
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!