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

Commit a1a13bd1 by Ruben Bridgewater

Refactor transaction test to promise style

Refactor a couple promise tests to use promise style

Refactor another schema test

Fix bad characters used

Refactor the last schema tests to use promises

Use sqlite specifics on timezone test

Refactor last model test to use promises and fix sqlite test

Abandon async from tests

Remove async devDependency
1 parent c4cbb3f3
...@@ -203,7 +203,7 @@ module.exports = (function() { ...@@ -203,7 +203,7 @@ module.exports = (function() {
options = Utils._.extend({ options = Utils._.extend({
events: proxyEventKeys, events: proxyEventKeys,
skipEvents: [] skipEvents: []
}, options ||  {}); }, options || {});
options.events = Utils._.difference(options.events, options.skipEvents); options.events = Utils._.difference(options.events, options.skipEvents);
......
...@@ -20,7 +20,7 @@ module.exports = (function() { ...@@ -20,7 +20,7 @@ module.exports = (function() {
this.daos = this.daos.filter(function(_dao) { this.daos = this.daos.filter(function(_dao) {
return _dao.name !== dao.name; return _dao.name !== dao.name;
}); });
delete this.sequelize.models[dao.name]; delete this.sequelize.models[dao.name];
}; };
......
...@@ -81,11 +81,11 @@ module.exports = (function() { ...@@ -81,11 +81,11 @@ module.exports = (function() {
return association.source.update(newValues, { where: query }); return association.source.update(newValues, { where: query });
}); });
}, },
increment: function (targetId) { increment: function (targetId) {
var query = CounterUtil._sourceQuery(targetId); var query = CounterUtil._sourceQuery(targetId);
return association.source.find({ where: query }).then(function (instance) { return association.source.find({ where: query }).then(function (instance) {
return instance.increment(counterCacheInstance.columnName, { by: 1 }); return instance.increment(counterCacheInstance.columnName, { by: 1 });
}); });
}, },
decrement: function (targetId) { decrement: function (targetId) {
......
...@@ -43,7 +43,6 @@ ...@@ -43,7 +43,6 @@
"validator": "^3.34.0" "validator": "^3.34.0"
}, },
"devDependencies": { "devDependencies": {
"async": "~0.9.0",
"chai": "^2.1.2", "chai": "^2.1.2",
"chai-as-promised": "^4.3.0", "chai-as-promised": "^4.3.0",
"chai-datetime": "~1.3.0", "chai-datetime": "~1.3.0",
......
...@@ -1793,7 +1793,7 @@ describe(Support.getTestDialectTeaser('BelongsToMany'), function() { ...@@ -1793,7 +1793,7 @@ describe(Support.getTestDialectTeaser('BelongsToMany'), function() {
self.User.belongsToMany(self.Task, { onDelete: 'RESTRICT'}); self.User.belongsToMany(self.Task, { onDelete: 'RESTRICT'});
self.Task.belongsToMany(self.User, { onDelete: 'CASCADE'}); self.Task.belongsToMany(self.User, { onDelete: 'CASCADE'});
return this.sequelize.sync({ force: true, logging: true }).bind({}).then(function() { return this.sequelize.sync({ force: true }).bind({}).then(function() {
return Sequelize.Promise.join( return Sequelize.Promise.join(
self.User.create({ id: 67, username: 'foo' }), self.User.create({ id: 67, username: 'foo' }),
self.Task.create({ id: 52, title: 'task' }), self.Task.create({ id: 52, title: 'task' }),
......
...@@ -6,7 +6,6 @@ var chai = require('chai') ...@@ -6,7 +6,6 @@ var chai = require('chai')
, Support = require(__dirname + '/../support') , Support = require(__dirname + '/../support')
, DataTypes = require(__dirname + '/../../../lib/data-types') , DataTypes = require(__dirname + '/../../../lib/data-types')
, datetime = require('chai-datetime') , datetime = require('chai-datetime')
, async = require('async')
, Promise = Sequelize.Promise , Promise = Sequelize.Promise
, _ = require('lodash'); , _ = require('lodash');
...@@ -128,7 +127,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -128,7 +127,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
, tags = results.tags , tags = results.tags
, companies = results.companies; , companies = results.companies;
return Promise.reduce(_.range(5), function (memo, i) { return Promise.resolve([0, 1, 2, 3, 4]).each(function (i) {
return Promise.props({ return Promise.props({
user: User.create(), user: User.create(),
products: Product.bulkCreate([ products: Product.bulkCreate([
...@@ -195,7 +194,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -195,7 +194,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
]) ])
); );
}); });
}, []); });
}); });
}); });
}; };
...@@ -380,139 +379,101 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -380,139 +379,101 @@ describe(Support.getTestDialectTeaser('Include'), function() {
Group.hasMany(GroupMember, {as: 'Memberships'}); Group.hasMany(GroupMember, {as: 'Memberships'});
return this.sequelize.sync({force: true}).then(function() { return this.sequelize.sync({force: true}).then(function() {
return new Promise(function (resolve, reject) { return Promise.all([
var count = 4 Group.bulkCreate([
, i = -1; {name: 'Developers'},
{name: 'Designers'}
async.auto({ ]).then(function() {
groups: function(callback) { return Group.findAll();
Group.bulkCreate([ }),
{name: 'Developers'}, Rank.bulkCreate([
{name: 'Designers'} {name: 'Admin', canInvite: 1, canRemove: 1},
]).then(function() { {name: 'Member', canInvite: 1, canRemove: 0}
return Group.findAll(); ]).then(function() {
}).nodeify(callback); return Rank.findAll();
}, }),
ranks: function(callback) { Tag.bulkCreate([
Rank.bulkCreate([ {name: 'A'},
{name: 'Admin', canInvite: 1, canRemove: 1}, {name: 'B'},
{name: 'Member', canInvite: 1, canRemove: 0} {name: 'C'}
]).then(function() { ]).then(function() {
return Rank.findAll(); return Tag.findAll();
}).nodeify(callback); })
}, ]).spread(function(groups, ranks, tags) {
tags: function(callback) { return Promise.resolve([0, 1, 2, 3, 4]).each(function (i) {
Tag.bulkCreate([ return Promise.all([
{name: 'A'}, User.create(),
{name: 'B'}, Product.bulkCreate([
{name: 'C'} {title: 'Chair'},
{title: 'Desk'}
]).then(function() { ]).then(function() {
return Tag.findAll(); return Product.findAll();
}).nodeify(callback); })
}, ]).spread(function(user, products) {
loop: ['groups', 'ranks', 'tags', function(done, results) { return Promise.all([
var groups = results.groups GroupMember.bulkCreate([
, ranks = results.ranks {UserId: user.id, GroupId: groups[0].id, RankId: ranks[0].id},
, tags = results.tags; {UserId: user.id, GroupId: groups[1].id, RankId: ranks[1].id}
]),
async.whilst( user.setProducts([
function() { return i < count; }, products[(i * 2) + 0],
function(callback) { products[(i * 2) + 1]
i++; ]),
products[(i * 2) + 0].setTags([
async.auto({ tags[0],
user: function(callback) { tags[2]
User.create().nodeify(callback); ]),
}, products[(i * 2) + 1].setTags([
memberships: ['user', function(callback, results) { tags[1]
GroupMember.bulkCreate([ ]),
{UserId: results.user.id, GroupId: groups[0].id, RankId: ranks[0].id}, products[(i * 2) + 0].setCategory(tags[1]),
{UserId: results.user.id, GroupId: groups[1].id, RankId: ranks[1].id} Price.bulkCreate([
]).nodeify(callback); {ProductId: products[(i * 2) + 0].id, value: 5},
}], {ProductId: products[(i * 2) + 0].id, value: 10},
products: function(callback) { {ProductId: products[(i * 2) + 1].id, value: 5},
Product.bulkCreate([ {ProductId: products[(i * 2) + 1].id, value: 10},
{title: 'Chair'}, {ProductId: products[(i * 2) + 1].id, value: 15},
{title: 'Desk'} {ProductId: products[(i * 2) + 1].id, value: 20}
]).then(function() { ])
return Product.findAll(); ]);
}).nodeify(callback); });
}, }).then(function() {
userProducts: ['user', 'products', function(callback, results) { return User.findAll({
results.user.setProducts([ include: [
results.products[(i * 2) + 0], {model: GroupMember, as: 'Memberships', include: [
results.products[(i * 2) + 1] Group,
]).nodeify(callback); Rank
}], ]},
productTags: ['products', function(callback, results) { {model: Product, include: [
return Promise.join( Tag,
results.products[(i * 2) + 0].setTags([ {model: Tag, as: 'Category'},
tags[0], Price
tags[2] ]}
]), ],
results.products[(i * 2) + 1].setTags([ order: [
tags[1] ['id', 'ASC']
]), ]
results.products[(i * 2) + 0].setCategory(tags[1]) }).then(function(users) {
).nodeify(callback); users.forEach(function(user) {
}], user.Memberships.sort(sortById);
prices: ['products', function(callback, results) {
Price.bulkCreate([ expect(user.Memberships.length).to.equal(2);
{ProductId: results.products[(i * 2) + 0].id, value: 5}, expect(user.Memberships[0].Group.name).to.equal('Developers');
{ProductId: results.products[(i * 2) + 0].id, value: 10}, expect(user.Memberships[0].Rank.canRemove).to.equal(1);
{ProductId: results.products[(i * 2) + 1].id, value: 5}, expect(user.Memberships[1].Group.name).to.equal('Designers');
{ProductId: results.products[(i * 2) + 1].id, value: 10}, expect(user.Memberships[1].Rank.canRemove).to.equal(0);
{ProductId: results.products[(i * 2) + 1].id, value: 15},
{ProductId: results.products[(i * 2) + 1].id, value: 20} user.Products.sort(sortById);
]).nodeify(callback); expect(user.Products.length).to.equal(2);
}] expect(user.Products[0].Tags.length).to.equal(2);
}, callback); expect(user.Products[1].Tags.length).to.equal(1);
}, expect(user.Products[0].Category).to.be.ok;
function(err) { expect(user.Products[1].Category).not.to.be.ok;
expect(user.Products[0].Prices.length).to.equal(2);
User.findAll({ expect(user.Products[1].Prices.length).to.equal(4);
include: [ });
{model: GroupMember, as: 'Memberships', include: [ });
Group,
Rank
]},
{model: Product, include: [
Tag,
{model: Tag, as: 'Category'},
Price
]}
],
order: [
['id', 'ASC']
]
}).then(function(users) {
users.forEach(function(user) {
user.Memberships.sort(sortById);
expect(user.Memberships.length).to.equal(2);
expect(user.Memberships[0].Group.name).to.equal('Developers');
expect(user.Memberships[0].Rank.canRemove).to.equal(1);
expect(user.Memberships[1].Group.name).to.equal('Designers');
expect(user.Memberships[1].Rank.canRemove).to.equal(0);
user.Products.sort(sortById);
expect(user.Products.length).to.equal(2);
expect(user.Products[0].Tags.length).to.equal(2);
expect(user.Products[1].Tags.length).to.equal(1);
expect(user.Products[0].Category).to.be.ok;
expect(user.Products[1].Category).not.to.be.ok;
expect(user.Products[0].Prices.length).to.equal(2);
expect(user.Products[1].Prices.length).to.equal(4);
});
}).nodeify(done);
}
);
}]
}, function (err) {
if (err) return reject(err);
resolve();
}); });
}); });
}); });
...@@ -560,7 +521,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -560,7 +521,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
return model.create({}).then(function (instance) { return model.create({}).then(function (instance) {
if (previousInstance) { if (previousInstance) {
return previousInstance['set'+ Sequelize.Utils.uppercaseFirst(model.name)](instance).then(function() { return previousInstance['set'+ Sequelize.Utils.uppercaseFirst(model.name)](instance).then(function() {
previousInstance = instance; previousInstance = instance;
}); });
} else { } else {
previousInstance = b = instance; previousInstance = b = instance;
...@@ -659,7 +620,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -659,7 +620,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
return model.create(values).then(function (instance) { return model.create(values).then(function (instance) {
if (previousInstance) { if (previousInstance) {
return previousInstance['set'+ Sequelize.Utils.uppercaseFirst(model.name)](instance).then(function() { return previousInstance['set'+ Sequelize.Utils.uppercaseFirst(model.name)](instance).then(function() {
previousInstance = instance; previousInstance = instance;
}); });
} else { } else {
previousInstance = b = instance; previousInstance = b = instance;
...@@ -1290,32 +1251,28 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -1290,32 +1251,28 @@ describe(Support.getTestDialectTeaser('Include'), function() {
Group.hasMany(GroupMember, {as: 'Memberships'}); Group.hasMany(GroupMember, {as: 'Memberships'});
return this.sequelize.sync({force: true}).then(function() { return this.sequelize.sync({force: true}).then(function() {
return Promise.props({ return Promise.all([
groups: Group.bulkCreate([ Group.bulkCreate([
{name: 'Developers'}, {name: 'Developers'},
{name: 'Designers'} {name: 'Designers'}
]).then(function() { ]).then(function() {
return Group.findAll(); return Group.findAll();
}), }),
ranks: Rank.bulkCreate([ Rank.bulkCreate([
{name: 'Admin', canInvite: 1, canRemove: 1}, {name: 'Admin', canInvite: 1, canRemove: 1},
{name: 'Member', canInvite: 1, canRemove: 0} {name: 'Member', canInvite: 1, canRemove: 0}
]).then(function() { ]).then(function() {
return Rank.findAll(); return Rank.findAll();
}), }),
tags: Tag.bulkCreate([ Tag.bulkCreate([
{name: 'A'}, {name: 'A'},
{name: 'B'}, {name: 'B'},
{name: 'C'} {name: 'C'}
]).then(function() { ]).then(function() {
return Tag.findAll(); return Tag.findAll();
}) })
}).then(function (results) { ]).spread(function (groups, ranks, tags) {
var groups = results.groups return Promise.resolve([0, 1, 2, 3, 4]).each(function (i) {
, ranks = results.ranks
, tags = results.tags;
return Promise.reduce([0, 1, 2, 3, 4], function (memo, i) {
return Promise.props({ return Promise.props({
user: User.create({name: 'FooBarzz'}), user: User.create({name: 'FooBarzz'}),
products: Product.bulkCreate([ products: Product.bulkCreate([
...@@ -1354,7 +1311,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -1354,7 +1311,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
]) ])
); );
}); });
}, []); });
}).then(function () { }).then(function () {
return User.findAll({ return User.findAll({
include: [ include: [
...@@ -1383,7 +1340,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -1383,7 +1340,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
expect(user.Products[0].Prices.length).to.equal(1); expect(user.Products[0].Prices.length).to.equal(1);
}); });
}); });
}); });
}); });
}); });
...@@ -1523,7 +1480,7 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -1523,7 +1480,7 @@ describe(Support.getTestDialectTeaser('Include'), function() {
required: true required: true
} }
] ]
}).then(function(products) { }).then(function(products) {
expect(products).have.length(1); expect(products).have.length(1);
}); });
}); });
......
...@@ -7,7 +7,7 @@ var chai = require('chai') ...@@ -7,7 +7,7 @@ var chai = require('chai')
, DataTypes = require(__dirname + '/../../../lib/data-types') , DataTypes = require(__dirname + '/../../../lib/data-types')
, datetime = require('chai-datetime') , datetime = require('chai-datetime')
, Promise = Sequelize.Promise , Promise = Sequelize.Promise
, async = require('async') , dialect = Support.getTestDialect()
, _ = require('lodash'); , _ = require('lodash');
chai.use(datetime); chai.use(datetime);
...@@ -126,7 +126,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -126,7 +126,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
Tag.findAll() Tag.findAll()
]); ]);
}).spread(function (groups, companies, ranks, tags) { }).spread(function (groups, companies, ranks, tags) {
return Promise.reduce(_.range(5), function (memo, i) { return Promise.resolve([0, 1, 2, 3, 4]).each(function (i) {
return Promise.all([ return Promise.all([
AccUser.create(), AccUser.create(),
Product.bulkCreate([ Product.bulkCreate([
...@@ -189,7 +189,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -189,7 +189,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
]) ])
); );
}); });
}, []); });
}); });
}); });
}); });
...@@ -197,11 +197,11 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -197,11 +197,11 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
}; };
}); });
it('should support an include with multiple different association types', function(done) { it('should support an include with multiple different association types', function() {
var self = this; var self = this;
self.sequelize.dropAllSchemas().then(function() { return self.sequelize.dropAllSchemas().then(function() {
self.sequelize.createSchema('account').then(function() { return self.sequelize.createSchema('account').then(function() {
var AccUser = self.sequelize.define('AccUser', {}, {schema: 'account'}) var AccUser = self.sequelize.define('AccUser', {}, {schema: 'account'})
, Product = self.sequelize.define('Product', { , Product = self.sequelize.define('Product', {
title: DataTypes.STRING title: DataTypes.STRING
...@@ -249,143 +249,105 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -249,143 +249,105 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
GroupMember.belongsTo(Group); GroupMember.belongsTo(Group);
Group.hasMany(GroupMember, {as: 'Memberships'}); Group.hasMany(GroupMember, {as: 'Memberships'});
self.sequelize.sync({force: true}).done(function() { return self.sequelize.sync({force: true}).then(function() {
var count = 4 return Promise.all([
, i = -1; Group.bulkCreate([
{name: 'Developers'},
async.auto({ {name: 'Designers'}
groups: function(callback) { ]).then(function() {
Group.bulkCreate([ return Group.findAll();
{name: 'Developers'}, }),
{name: 'Designers'} Rank.bulkCreate([
]).done(function() { {name: 'Admin', canInvite: 1, canRemove: 1},
Group.findAll().done(callback); {name: 'Member', canInvite: 1, canRemove: 0}
}); ]).then(function() {
}, return Rank.findAll();
ranks: function(callback) { }),
Rank.bulkCreate([ Tag.bulkCreate([
{name: 'Admin', canInvite: 1, canRemove: 1}, {name: 'A'},
{name: 'Member', canInvite: 1, canRemove: 0} {name: 'B'},
]).done(function() { {name: 'C'}
Rank.findAll().done(callback); ]).then(function() {
return Tag.findAll();
})
]).spread(function(groups, ranks, tags) {
return Promise.resolve([0, 1, 2, 3, 4]).each(function (i) {
return Promise.all([
AccUser.create(),
Product.bulkCreate([
{title: 'Chair'},
{title: 'Desk'}
]).then(function() {
return Product.findAll();
})
]).spread(function(user, products) {
return Promise.all([
GroupMember.bulkCreate([
{AccUserId: user.id, GroupId: groups[0].id, RankId: ranks[0].id},
{AccUserId: user.id, GroupId: groups[1].id, RankId: ranks[1].id}
]),
user.setProducts([
products[(i * 2) + 0],
products[(i * 2) + 1]
]),
products[(i * 2) + 0].setTags([
tags[0],
tags[2]
]),
products[(i * 2) + 1].setTags([
tags[1]
]),
products[(i * 2) + 0].setCategory(tags[1]),
Price.bulkCreate([
{ProductId: products[(i * 2) + 0].id, value: 5},
{ProductId: products[(i * 2) + 0].id, value: 10},
{ProductId: products[(i * 2) + 1].id, value: 5},
{ProductId: products[(i * 2) + 1].id, value: 10},
{ProductId: products[(i * 2) + 1].id, value: 15},
{ProductId: products[(i * 2) + 1].id, value: 20}
])
]);
}); });
}, });
tags: function(callback) { }).then(function() {
Tag.bulkCreate([ return AccUser.findAll({
{name: 'A'}, include: [
{name: 'B'}, {model: GroupMember, as: 'Memberships', include: [
{name: 'C'} Group,
]).done(function() { Rank
Tag.findAll().done(callback); ]},
{model: Product, include: [
Tag,
{model: Tag, as: 'Category'},
Price
]}
],
order: [
[AccUser.rawAttributes.id, 'ASC']
]
}).then(function(users) {
users.forEach(function(user, a) {
expect(user.Memberships).to.be.ok;
user.Memberships.sort(sortById);
expect(user.Memberships.length).to.equal(2);
expect(user.Memberships[0].Group.name).to.equal('Developers');
expect(user.Memberships[0].Rank.canRemove).to.equal(1);
expect(user.Memberships[1].Group.name).to.equal('Designers');
expect(user.Memberships[1].Rank.canRemove).to.equal(0);
user.Products.sort(sortById);
expect(user.Products.length).to.equal(2);
expect(user.Products[0].Tags.length).to.equal(2);
expect(user.Products[1].Tags.length).to.equal(1);
expect(user.Products[0].Category).to.be.ok;
expect(user.Products[1].Category).not.to.be.ok;
expect(user.Products[0].Prices.length).to.equal(2);
expect(user.Products[1].Prices.length).to.equal(4);
}); });
}, });
loop: ['groups', 'ranks', 'tags', function(done, results) { });
var groups = results.groups
, ranks = results.ranks
, tags = results.tags;
async.whilst(
function() { return i < count; },
function(callback) {
i++;
async.auto({
user: function(callback) {
AccUser.create().done(callback);
},
memberships: ['user', function(callback, results) {
GroupMember.bulkCreate([
{AccUserId: results.user.id, GroupId: groups[0].id, RankId: ranks[0].id},
{AccUserId: results.user.id, GroupId: groups[1].id, RankId: ranks[1].id}
]).done(callback);
}],
products: function(callback) {
Product.bulkCreate([
{title: 'Chair'},
{title: 'Desk'}
]).done(function() {
Product.findAll().done(callback);
});
},
userProducts: ['user', 'products', function(callback, results) {
results.user.setProducts([
results.products[(i * 2) + 0],
results.products[(i * 2) + 1]
]).done(callback);
}],
productTags: ['products', function(callback, results) {
var chainer = new Sequelize.Utils.QueryChainer();
chainer.add(results.products[(i * 2) + 0].setTags([
tags[0],
tags[2]
]));
chainer.add(results.products[(i * 2) + 1].setTags([
tags[1]
]));
chainer.add(results.products[(i * 2) + 0].setCategory(tags[1]));
chainer.run().done(callback);
}],
prices: ['products', function(callback, results) {
Price.bulkCreate([
{ProductId: results.products[(i * 2) + 0].id, value: 5},
{ProductId: results.products[(i * 2) + 0].id, value: 10},
{ProductId: results.products[(i * 2) + 1].id, value: 5},
{ProductId: results.products[(i * 2) + 1].id, value: 10},
{ProductId: results.products[(i * 2) + 1].id, value: 15},
{ProductId: results.products[(i * 2) + 1].id, value: 20}
]).done(callback);
}]
}, callback);
},
function(err) {
expect(err).not.to.be.ok;
AccUser.findAll({
include: [
{model: GroupMember, as: 'Memberships', include: [
Group,
Rank
]},
{model: Product, include: [
Tag,
{model: Tag, as: 'Category'},
Price
]}
],
order: [
[AccUser.rawAttributes.id, 'ASC']
]
}).done(function(err, users) {
expect(err).not.to.be.ok;
users.forEach(function(user) {
expect(user.Memberships).to.be.ok;
user.Memberships.sort(sortById);
expect(user.Memberships.length).to.equal(2);
expect(user.Memberships[0].Group.name).to.equal('Developers');
expect(user.Memberships[0].Rank.canRemove).to.equal(1);
expect(user.Memberships[1].Group.name).to.equal('Designers');
expect(user.Memberships[1].Rank.canRemove).to.equal(0);
user.Products.sort(sortById);
expect(user.Products.length).to.equal(2);
expect(user.Products[0].Tags.length).to.equal(2);
expect(user.Products[1].Tags.length).to.equal(1);
expect(user.Products[0].Category).to.be.ok;
expect(user.Products[1].Category).not.to.be.ok;
expect(user.Products[0].Prices.length).to.equal(2);
expect(user.Products[1].Prices.length).to.equal(4);
done();
});
});
}
);
}]
}, done);
}); });
}); });
}); });
...@@ -953,7 +915,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -953,7 +915,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
}); });
}); });
it('should be possible to extend the on clause with a where option on nested includes', function(done) { it('should be possible to extend the on clause with a where option on nested includes', function() {
var User = this.sequelize.define('User', { var User = this.sequelize.define('User', {
name: DataTypes.STRING name: DataTypes.STRING
}, {schema: 'account'}) }, {schema: 'account'})
...@@ -1003,134 +965,95 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -1003,134 +965,95 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
GroupMember.belongsTo(Group); GroupMember.belongsTo(Group);
Group.hasMany(GroupMember, {as: 'Memberships'}); Group.hasMany(GroupMember, {as: 'Memberships'});
this.sequelize.sync({force: true}).done(function() { return this.sequelize.sync({force: true}).then(function() {
var count = 4 return Promise.all([
, i = -1; Group.bulkCreate([
{name: 'Developers'},
async.auto({ {name: 'Designers'}
groups: function(callback) { ]),
Group.bulkCreate([ Rank.bulkCreate([
{name: 'Developers'}, {name: 'Admin', canInvite: 1, canRemove: 1},
{name: 'Designers'} {name: 'Member', canInvite: 1, canRemove: 0}
]).done(function() { ]),
Group.findAll().done(callback); Tag.bulkCreate([
}); {name: 'A'},
}, {name: 'B'},
ranks: function(callback) { {name: 'C'}
Rank.bulkCreate([ ])
{name: 'Admin', canInvite: 1, canRemove: 1}, ]).then(function() {
{name: 'Member', canInvite: 1, canRemove: 0} return Promise.all([
]).done(function() { Group.findAll(),
Rank.findAll().done(callback); Rank.findAll(),
Tag.findAll()
]);
}).spread(function(groups, ranks, tags) {
return Promise.resolve([0, 1, 2, 3, 4]).each(function (i) {
return Promise.all([
User.create({name: 'FooBarzz'}),
Product.bulkCreate([
{title: 'Chair'},
{title: 'Desk'}
]).then(function() {
return Product.findAll();
})
]).spread(function(user, products) {
return Promise.all([
GroupMember.bulkCreate([
{UserId: user.id, GroupId: groups[0].id, RankId: ranks[0].id},
{UserId: user.id, GroupId: groups[1].id, RankId: ranks[1].id}
]),
user.setProducts([
products[(i * 2) + 0],
products[(i * 2) + 1]
]),
products[(i * 2) + 0].setTags([
tags[0],
tags[2]
]),
products[(i * 2) + 1].setTags([
tags[1]
]),
products[(i * 2) + 0].setCategory(tags[1]),
Price.bulkCreate([
{ProductId: products[(i * 2) + 0].id, value: 5},
{ProductId: products[(i * 2) + 0].id, value: 10},
{ProductId: products[(i * 2) + 1].id, value: 5},
{ProductId: products[(i * 2) + 1].id, value: 10},
{ProductId: products[(i * 2) + 1].id, value: 15},
{ProductId: products[(i * 2) + 1].id, value: 20}
])
]);
}); });
}, });
tags: function(callback) { }).then(function(){
Tag.bulkCreate([ return User.findAll({
{name: 'A'}, include: [
{name: 'B'}, {model: GroupMember, as: 'Memberships', include: [
{name: 'C'} Group,
]).done(function() { {model: Rank, where: {name: 'Admin'}}
Tag.findAll().done(callback); ]},
{model: Product, include: [
Tag,
{model: Tag, as: 'Category'},
{model: Price, where: {
value: {
gt: 15
}
}}
]}
],
order: [
['id', 'ASC']
]
}).then(function(users) {
users.forEach(function(user) {
expect(user.Memberships.length).to.equal(1);
expect(user.Memberships[0].Rank.name).to.equal('Admin');
expect(user.Products.length).to.equal(1);
expect(user.Products[0].Prices.length).to.equal(1);
}); });
}, });
loop: ['groups', 'ranks', 'tags', function(done, results) { });
var groups = results.groups
, ranks = results.ranks
, tags = results.tags;
async.whilst(
function() { return i < count; },
function(callback) {
i++;
async.auto({
user: function(callback) {
User.create({name: 'FooBarzz'}).done(callback);
},
memberships: ['user', function(callback, results) {
GroupMember.bulkCreate([
{UserId: results.user.id, GroupId: groups[0].id, RankId: ranks[0].id},
{UserId: results.user.id, GroupId: groups[1].id, RankId: ranks[1].id}
]).done(callback);
}],
products: function(callback) {
Product.bulkCreate([
{title: 'Chair'},
{title: 'Desk'}
]).done(function() {
Product.findAll().done(callback);
});
},
userProducts: ['user', 'products', function(callback, results) {
results.user.setProducts([
results.products[(i * 2) + 0],
results.products[(i * 2) + 1]
]).done(callback);
}],
productTags: ['products', function(callback, results) {
var chainer = new Sequelize.Utils.QueryChainer();
chainer.add(results.products[(i * 2) + 0].setTags([
tags[0],
tags[2]
]));
chainer.add(results.products[(i * 2) + 1].setTags([
tags[1]
]));
chainer.add(results.products[(i * 2) + 0].setCategory(tags[1]));
chainer.run().done(callback);
}],
prices: ['products', function(callback, results) {
Price.bulkCreate([
{ProductId: results.products[(i * 2) + 0].id, value: 5},
{ProductId: results.products[(i * 2) + 0].id, value: 10},
{ProductId: results.products[(i * 2) + 1].id, value: 5},
{ProductId: results.products[(i * 2) + 1].id, value: 10},
{ProductId: results.products[(i * 2) + 1].id, value: 15},
{ProductId: results.products[(i * 2) + 1].id, value: 20}
]).done(callback);
}]
}, callback);
},
function(err) {
expect(err).not.to.be.ok;
User.findAll({
include: [
{model: GroupMember, as: 'Memberships', include: [
Group,
{model: Rank, where: {name: 'Admin'}}
]},
{model: Product, include: [
Tag,
{model: Tag, as: 'Category'},
{model: Price, where: {
value: {
gt: 15
}
}}
]}
],
order: [
['id', 'ASC']
]
}).done(function(err, users) {
expect(err).not.to.be.ok;
users.forEach(function(user) {
expect(user.Memberships.length).to.equal(1);
expect(user.Memberships[0].Rank.name).to.equal('Admin');
expect(user.Products.length).to.equal(1);
expect(user.Products[0].Prices.length).to.equal(1);
});
done();
});
}
);
}]
}, done);
}); });
}); });
...@@ -1261,7 +1184,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -1261,7 +1184,7 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
}); });
}); });
it.skip('should support including date fields, with the correct timeszone', function() { it('should support including date fields, with the correct timeszone', function() {
var User = this.sequelize.define('user', { var User = this.sequelize.define('user', {
dateField: Sequelize.DATE dateField: Sequelize.DATE
}, {timestamps: false, schema: 'account'}) }, {timestamps: false, schema: 'account'})
...@@ -1282,8 +1205,13 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() { ...@@ -1282,8 +1205,13 @@ describe(Support.getTestDialectTeaser('Includes with schemas'), function() {
}, },
include: [Group] include: [Group]
}).then(function(users) { }).then(function(users) {
expect(users[0].dateField.getTime()).to.equal(Date.UTC(2014, 1, 20)); if (dialect === 'sqlite') {
expect(users[0].groups[0].dateField.getTime()).to.equal(Date.UTC(2014, 1, 20)); expect(new Date(users[0].dateField).getTime()).to.equal(Date.UTC(2014, 1, 20));
expect(new Date(users[0].groups[0].dateField).getTime()).to.equal(Date.UTC(2014, 1, 20));
} else {
expect(users[0].dateField.getTime()).to.equal(Date.UTC(2014, 1, 20));
expect(users[0].groups[0].dateField.getTime()).to.equal(Date.UTC(2014, 1, 20));
}
}); });
}); });
}); });
......
...@@ -11,7 +11,6 @@ var chai = require('chai') ...@@ -11,7 +11,6 @@ var chai = require('chai')
, datetime = require('chai-datetime') , datetime = require('chai-datetime')
, _ = require('lodash') , _ = require('lodash')
, moment = require('moment') , moment = require('moment')
, async = require('async')
, current = Support.sequelize; , current = Support.sequelize;
chai.use(datetime); chai.use(datetime);
...@@ -2348,12 +2347,13 @@ describe(Support.getTestDialectTeaser('Model'), function() { ...@@ -2348,12 +2347,13 @@ describe(Support.getTestDialectTeaser('Model'), function() {
}); });
if (dialect !== 'sqlite' && current.dialect.supports.transactions) { if (dialect !== 'sqlite' && current.dialect.supports.transactions) {
it('supports multiple async transactions', function(done) { it('supports multiple async transactions', function() {
this.timeout(25000); this.timeout(25000);
var self = this;
return Support.prepareTransactionTest(this.sequelize).bind({}).then(function(sequelize) { return Support.prepareTransactionTest(this.sequelize).bind({}).then(function(sequelize) {
var User = sequelize.define('User', { username: Sequelize.STRING }); var User = sequelize.define('User', { username: Sequelize.STRING });
var testAsync = function(i, done) { var testAsync = function() {
sequelize.transaction().then(function(t) { return sequelize.transaction().then(function(t) {
return User.create({ return User.create({
username: 'foo' username: 'foo'
}, { }, {
...@@ -2380,14 +2380,19 @@ describe(Support.getTestDialectTeaser('Model'), function() { ...@@ -2380,14 +2380,19 @@ describe(Support.getTestDialectTeaser('Model'), function() {
}); });
}).then(function(t) { }).then(function(t) {
return t.rollback(); return t.rollback();
}).nodeify(done); });
}; };
User.sync({ force: true }).then(function() { return User.sync({ force: true }).then(function() {
var tasks = []; var tasks = [];
for (var i = 0; i < 1000; i++) { for (var i = 0; i < 1000; i++) {
tasks.push(testAsync.bind(this, i)); tasks.push(testAsync.bind(this));
} }
async.parallelLimit(tasks, (sequelize.config.pool && sequelize.config.pool.max || 5) - 1, done); // Needs to be one less than 1 else the non transaction query won't ever get a connection return self.sequelize.Promise.resolve(tasks).map(function(entry) {
return entry();
}, {
// Needs to be one less than ??? else the non transaction query won't ever get a connection
concurrency: (sequelize.config.pool && sequelize.config.pool.max || 5) - 1
});
}); });
}); });
}); });
......
...@@ -43,14 +43,14 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -43,14 +43,14 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}); });
describe('increment', function() { describe('increment', function() {
beforeEach(function(done) { beforeEach(function() {
this.User.create({ id: 1, aNumber: 0, bNumber: 0 }).done(done); return this.User.create({ id: 1, aNumber: 0, bNumber: 0 });
}); });
it('with array', function(done) { it('with array', function() {
var self = this; var self = this;
this.User return this.User
.find(1) .find(1)
.then(function(user) { .then(function(user) {
expect(user.id).to.equal(1); expect(user.id).to.equal(1);
...@@ -63,15 +63,14 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -63,15 +63,14 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}) })
.then(function(user) { .then(function(user) {
expect(user.aNumber).to.equal(2); expect(user.aNumber).to.equal(2);
done();
}); });
}); });
it('should still work right with other concurrent updates', function(done) { it('should still work right with other concurrent updates', function() {
var self = this; var self = this;
// Select something // Select something
this.User return this.User
.find(1) .find(1)
.then(function(user1) { .then(function(user1) {
// Select the user again (simulating a concurrent query) // Select the user again (simulating a concurrent query)
...@@ -83,16 +82,15 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -83,16 +82,15 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
.then(function() { return self.User.find(1); }) .then(function() { return self.User.find(1); })
.then(function(user5) { .then(function(user5) {
expect(user5.aNumber).to.equal(3); expect(user5.aNumber).to.equal(3);
done();
}); });
}); });
}); });
}); });
it('with key value pair', function(done) { it('with key value pair', function() {
var self = this; var self = this;
this.User return this.User
.find(1) .find(1)
.then(function(user1) { .then(function(user1) {
return user1.increment({ 'aNumber': 1, 'bNumber': 2}); return user1.increment({ 'aNumber': 1, 'bNumber': 2});
...@@ -103,20 +101,19 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -103,20 +101,19 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
.then(function(user3) { .then(function(user3) {
expect(user3.aNumber).to.equal(1); expect(user3.aNumber).to.equal(1);
expect(user3.bNumber).to.equal(2); expect(user3.bNumber).to.equal(2);
done();
}); });
}); });
}); });
describe('decrement', function() { describe('decrement', function() {
beforeEach(function(done) { beforeEach(function() {
this.User.create({ id: 1, aNumber: 0, bNumber: 0 }).done(done); return this.User.create({ id: 1, aNumber: 0, bNumber: 0 });
}); });
it('with array', function(done) { it('with array', function() {
var self = this; var self = this;
this.User return this.User
.find(1) .find(1)
.then(function(user1) { .then(function(user1) {
return user1.decrement(['aNumber'], { by: 2 }); return user1.decrement(['aNumber'], { by: 2 });
...@@ -126,14 +123,12 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -126,14 +123,12 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}) })
.then(function(user3) { .then(function(user3) {
expect(user3.aNumber).to.equal(-2); expect(user3.aNumber).to.equal(-2);
done();
}); });
}); });
it('with single field', function(done) { it('with single field', function() {
var self = this; var self = this;
return this.User
this.User
.find(1) .find(1)
.then(function(user1) { .then(function(user1) {
return user1.decrement(['aNumber'], { by: 2 }); return user1.decrement(['aNumber'], { by: 2 });
...@@ -143,35 +138,32 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -143,35 +138,32 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}) })
.then(function(user3) { .then(function(user3) {
expect(user3.aNumber).to.equal(-2); expect(user3.aNumber).to.equal(-2);
done();
}); });
}); });
it('should still work right with other concurrent decrements', function(done) { it('should still work right with other concurrent decrements', function() {
var self = this; var self = this;
return this.User
this.User
.find(1) .find(1)
.then(function(user1) { .then(function(user1) {
var _done = _.after(3, function() { return this.sequelize.Promise.all([
self.User user1.decrement(['aNumber'], { by: 2 }),
user1.decrement(['aNumber'], { by: 2 }),
user1.decrement(['aNumber'], { by: 2 })
]).then(function() {
return self.User
.find(1) .find(1)
.then(function(user2) { .then(function(user2) {
expect(user2.aNumber).to.equal(-6); expect(user2.aNumber).to.equal(-6);
done();
}); });
}); });
user1.decrement(['aNumber'], { by: 2 }).done(_done);
user1.decrement(['aNumber'], { by: 2 }).done(_done);
user1.decrement(['aNumber'], { by: 2 }).done(_done);
}); });
}); });
}); });
describe('reload', function() { describe('reload', function() {
it('should return a reference to the same DAO instead of creating a new one', function(done) { it('should return a reference to the same DAO instead of creating a new one', function() {
this.User return this.User
.create({ username: 'John Doe' }) .create({ username: 'John Doe' })
.then(function(originalUser) { .then(function(originalUser) {
return originalUser return originalUser
...@@ -181,15 +173,13 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -181,15 +173,13 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}) })
.then(function(updatedUser) { .then(function(updatedUser) {
expect(originalUser === updatedUser).to.be.true; expect(originalUser === updatedUser).to.be.true;
done();
}); });
}); });
}); });
it('should update the values on all references to the DAO', function(done) { it('should update the values on all references to the DAO', function() {
var self = this; var self = this;
return this.User
this.User
.create({ username: 'John Doe' }) .create({ username: 'John Doe' })
.then(function(originalUser) { .then(function(originalUser) {
return self.User return self.User
...@@ -204,23 +194,22 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -204,23 +194,22 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}).then(function(updatedUser) { }).then(function(updatedUser) {
expect(originalUser.username).to.equal('Doe John'); expect(originalUser.username).to.equal('Doe John');
expect(updatedUser.username).to.equal('Doe John'); expect(updatedUser.username).to.equal('Doe John');
done();
}); });
}); });
}); });
it('should update the associations as well', function(done) { it('should update the associations as well', function() {
var Book = this.sequelize.define('Book', { title: DataTypes.STRING }) var Book = this.sequelize.define('Book', { title: DataTypes.STRING })
, Page = this.sequelize.define('Page', { content: DataTypes.TEXT }); , Page = this.sequelize.define('Page', { content: DataTypes.TEXT });
Book.hasMany(Page); Book.hasMany(Page);
Page.belongsTo(Book); Page.belongsTo(Book);
Book return Book
.sync({ force: true }) .sync({ force: true })
.then(function() { .then(function() {
Page return Page
.sync({ force: true }) .sync({ force: true })
.then(function() { .then(function() {
return Book.create({ title: 'A very old book' }); return Book.create({ title: 'A very old book' });
...@@ -249,49 +238,45 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -249,49 +238,45 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
.then(function(leBook) { .then(function(leBook) {
expect(leBook.Pages[0].content).to.equal('something totally different'); expect(leBook.Pages[0].content).to.equal('something totally different');
expect(page.content).to.equal('something totally different'); expect(page.content).to.equal('something totally different');
done();
}); });
}); });
}); });
}); });
}); });
}, done); });
}); });
}); });
}); });
describe('complete', function() { describe('complete', function() {
it('gets triggered if an error occurs', function(done) { it('gets triggered if an error occurs', function() {
this.User.find({ where: 'asdasdasd' }).then(null, function(err) { return this.User.find({ where: 'asdasdasd' }).catch(function(err) {
expect(err).to.be.ok; expect(err).to.be.ok;
expect(err.message).to.be.ok; expect(err.message).to.be.ok;
done();
}); });
}); });
it('gets triggered if everything was ok', function(done) { it('gets triggered if everything was ok', function() {
this.User.count().then(function(result) { return this.User.count().then(function(result) {
expect(result).to.not.be.undefined; expect(result).to.not.be.undefined;
done();
}); });
}); });
}); });
describe('save', function() { describe('save', function() {
it('should fail a validation upon creating', function(done) { it('should fail a validation upon creating', function() {
this.User.create({aNumber: 0, validateTest: 'hello'}) return this.User.create({aNumber: 0, validateTest: 'hello'})
.catch (function(err) { .catch (function(err) {
expect(err).to.be.ok; expect(err).to.be.ok;
expect(err).to.be.an('object'); expect(err).to.be.an('object');
expect(err.get('validateTest')).to.be.an('array'); expect(err.get('validateTest')).to.be.an('array');
expect(err.get('validateTest')[0]).to.be.ok; expect(err.get('validateTest')[0]).to.be.ok;
expect(err.get('validateTest')[0].message).to.equal('Validation isInt failed'); expect(err.get('validateTest')[0].message).to.equal('Validation isInt failed');
done();
}); });
}); });
it('should fail a validation upon building', function(done) { it('should fail a validation upon building', function() {
this.User.build({aNumber: 0, validateCustom: 'aaaaaaaaaaaaaaaaaaaaaaaaaa'}).save() return this.User.build({aNumber: 0, validateCustom: 'aaaaaaaaaaaaaaaaaaaaaaaaaa'}).save()
.catch (function(err) { .catch (function(err) {
expect(err).to.be.ok; expect(err).to.be.ok;
expect(err).to.be.an('object'); expect(err).to.be.an('object');
...@@ -299,12 +284,11 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -299,12 +284,11 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
expect(err.get('validateCustom')).to.be.an('array'); expect(err.get('validateCustom')).to.be.an('array');
expect(err.get('validateCustom')[0]).to.be.ok; expect(err.get('validateCustom')[0]).to.be.ok;
expect(err.get('validateCustom')[0].message).to.equal('Length failed.'); expect(err.get('validateCustom')[0].message).to.equal('Length failed.');
done();
}); });
}); });
it('should fail a validation when updating', function(done) { it('should fail a validation when updating', function() {
this.User.create({aNumber: 0}).then(function(user) { return this.User.create({aNumber: 0}).then(function(user) {
return user.updateAttributes({validateTest: 'hello'}); return user.updateAttributes({validateTest: 'hello'});
}).catch (function(err) { }).catch (function(err) {
expect(err).to.be.ok; expect(err).to.be.ok;
...@@ -313,36 +297,33 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -313,36 +297,33 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
expect(err.get('validateTest')).to.be.an('array'); expect(err.get('validateTest')).to.be.an('array');
expect(err.get('validateTest')[0]).to.be.ok; expect(err.get('validateTest')[0]).to.be.ok;
expect(err.get('validateTest')[0].message).to.equal('Validation isInt failed'); expect(err.get('validateTest')[0].message).to.equal('Validation isInt failed');
done();
}); });
}); });
}); });
describe('findOrCreate', function() { describe('findOrCreate', function() {
beforeEach(function(done) { beforeEach(function() {
this.User.create({ id: 1, aNumber: 0, bNumber: 0 }).done(done); return this.User.create({ id: 1, aNumber: 0, bNumber: 0 });
}); });
describe('with spread', function() { describe('with spread', function() {
it('user not created', function(done) { it('user not created', function() {
this.User return this.User
.findOrCreate({ where: { id: 1}}) .findOrCreate({ where: { id: 1}})
.spread(function(user, created) { .spread(function(user, created) {
expect(user.id).to.equal(1); expect(user.id).to.equal(1);
expect(created).to.equal(false); expect(created).to.equal(false);
expect(arguments.length).to.equal(2); expect(arguments.length).to.equal(2);
done();
}); });
}); });
it('user created', function(done) { it('user created', function() {
this.User return this.User
.findOrCreate({ where: { id: 2}}) .findOrCreate({ where: { id: 2}})
.spread(function(user, created) { .spread(function(user, created) {
expect(user.id).to.equal(2); expect(user.id).to.equal(2);
expect(created).to.equal(true); expect(created).to.equal(true);
expect(arguments.length).to.equal(2); expect(arguments.length).to.equal(2);
done();
}); });
}); });
}); });
...@@ -377,7 +358,7 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -377,7 +358,7 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}); });
}); });
it('should still work with .on(\'success\') when resolving', function(done) { it('should still work with then when resolving', function(done) {
var spy = sinon.spy() var spy = sinon.spy()
, promise = new SequelizePromise(function(resolve, reject) { , promise = new SequelizePromise(function(resolve, reject) {
resolve('yoohoo'); resolve('yoohoo');
...@@ -407,18 +388,17 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -407,18 +388,17 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
}); });
}); });
it('should still work with .complete() after chaining', function(done) { it('should still work with .complete() after chaining', function() {
var spy = sinon.spy() var spy = sinon.spy()
, promise = new SequelizePromise(function(resolve, reject) { , promise = new SequelizePromise(function(resolve, reject) {
resolve('Heyo'); resolve('Heyo');
}); });
promise.then(function(result) { return promise.then(function(result) {
return result + '123'; return result + '123';
}).complete(function(err, result) { }).complete(function(err, result) {
expect(err).not.to.be.ok; expect(err).not.to.be.ok;
expect(result).to.equal('Heyo123'); expect(result).to.equal('Heyo123');
done();
}); });
}); });
...@@ -496,7 +476,7 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -496,7 +476,7 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
promise.emit('error', new Error('noway')); promise.emit('error', new Error('noway'));
}); });
it('should still support sql events', function(done) { it('should still support sql events', function() {
var spy = sinon.spy() var spy = sinon.spy()
, promise = new SequelizePromise(function(resolve, reject) { , promise = new SequelizePromise(function(resolve, reject) {
resolve('yay'); resolve('yay');
...@@ -507,9 +487,8 @@ describe(Support.getTestDialectTeaser('Promise'), function() { ...@@ -507,9 +487,8 @@ describe(Support.getTestDialectTeaser('Promise'), function() {
promise.emit('sql', 'SQL STATEMENT 1'); promise.emit('sql', 'SQL STATEMENT 1');
promise.emit('sql', 'SQL STATEMENT 2'); promise.emit('sql', 'SQL STATEMENT 2');
promise.then(function() { return promise.then(function() {
expect(spy.calledTwice).to.be.true; expect(spy.calledTwice).to.be.true;
done();
}); });
}); });
......
...@@ -131,27 +131,22 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() { ...@@ -131,27 +131,22 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() {
}); });
}); });
it('triggers the error event for the second transactions', function(done) { it('triggers the error event for the second transactions', function() {
var self = this; var self = this;
this.sequelize.transaction().then(function(t1) { return this.sequelize.transaction().then(function(t1) {
self.sequelize.transaction().then(function(t2) { return self.sequelize.transaction().then(function(t2) {
self return self.Model.create({ name: 'omnom' }, { transaction: t1 }).then(function(m1) {
.Model return Promise.all([
.create({ name: 'omnom' }, { transaction: t1 }) self.Model.create({ name: 'omnom' }, { transaction: t2 }).catch(function(err) {
.success(function(m1) { expect(err).to.be.defined;
self return t2.rollback();
.Model }),
.create({ name: 'omnom' }, { transaction: t2 }) Promise.delay(100).then(function() {
.error(function(err) { return t1.commit();
t2.rollback().success(function() { })
expect(err).to.be.defined; ]);
done(); });
});
});
setTimeout(function() { t1.commit(); }, 100);
});
}); });
}); });
}); });
......
...@@ -57,7 +57,7 @@ var Support = { ...@@ -57,7 +57,7 @@ var Support = {
, _sequelize = new Sequelize(sequelize.config.database, null, null, options); , _sequelize = new Sequelize(sequelize.config.database, null, null, options);
if (callback) { if (callback) {
_sequelize.sync({ force: true }).success(function() { callback(_sequelize); }); _sequelize.sync({ force: true }).then(function() { callback(_sequelize); });
} else { } else {
return _sequelize.sync({ force: true }).return (_sequelize); return _sequelize.sync({ force: true }).return (_sequelize);
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!