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

You need to sign in or sign up before continuing.
Commit bb3a6245 by Mick Hansen

Fix tests

1 parent ccff8989
...@@ -7,7 +7,8 @@ var chai = require('chai') ...@@ -7,7 +7,8 @@ var chai = require('chai')
, DataTypes = require(__dirname + '/../../../lib/data-types') , DataTypes = require(__dirname + '/../../../lib/data-types')
, datetime = require('chai-datetime') , datetime = require('chai-datetime')
, async = require('async') , async = require('async')
, Promise = Sequelize.Promise; , Promise = Sequelize.Promise
, _ = require('lodash');
chai.use(datetime); chai.use(datetime);
chai.config.includeStack = true; chai.config.includeStack = true;
...@@ -122,106 +123,79 @@ describe(Support.getTestDialectTeaser('Include'), function() { ...@@ -122,106 +123,79 @@ describe(Support.getTestDialectTeaser('Include'), function() {
return Tag.findAll(); return Tag.findAll();
}) })
}).then(function (results) { }).then(function (results) {
var count = 4 var groups = results.groups
, i = -1
, groups = results.groups
, ranks = results.ranks , ranks = results.ranks
, tags = results.tags , tags = results.tags
, companies = results.companies; , companies = results.companies;
return new Promise(function (resolve, reject) { return Promise.reduce(_.range(5), function (memo, i) {
async.whilst( return Promise.props({
function() { return i < count; }, user: User.create(),
function(callback) { products: Product.bulkCreate([
i++;
async.auto({
user: function(callback) {
User.create().nodeify(callback);
},
memberships: ['user', function(callback, results) {
var groupMembers = [
{AccUserId: results.user.id, GroupId: groups[0].id, RankId: ranks[0].id},
{AccUserId: results.user.id, GroupId: groups[1].id, RankId: ranks[2].id}
];
if (i < 3) {
groupMembers.push({AccUserId: results.user.id, GroupId: groups[2].id, RankId: ranks[1].id});
}
GroupMember.bulkCreate(groupMembers).nodeify(callback);
}],
products: function(callback) {
Product.bulkCreate([
{title: 'Chair'}, {title: 'Chair'},
{title: 'Desk'}, {title: 'Desk'},
{title: 'Bed'}, {title: 'Bed'},
{title: 'Pen'}, {title: 'Pen'},
{title: 'Monitor'} {title: 'Monitor'}
]).done(function(err) { ]).then(function(err) {
if (err) return callback(err); return Product.findAll();
Product.findAll().nodeify(callback); })
}); }).then(function (results) {
}, var user = results.user
userProducts: ['user', 'products', function(callback, results) { , products = results.products
results.user.setProducts([ , groupMembers;
results.products[(i * 5) + 0],
results.products[(i * 5) + 1],
results.products[(i * 5) + 3]
]).nodeify(callback);
}],
productTags: ['products', function(callback, results) {
var chainer = new Sequelize.Utils.QueryChainer();
chainer.add(results.products[(i * 5) + 0].setTags([ groupMembers = [
{AccUserId: user.id, GroupId: groups[0].id, RankId: ranks[0].id},
{AccUserId: user.id, GroupId: groups[1].id, RankId: ranks[2].id}
];
if (i < 3) {
groupMembers.push({AccUserId: user.id, GroupId: groups[2].id, RankId: ranks[1].id});
}
return Promise.join(
GroupMember.bulkCreate(groupMembers),
user.setProducts([
products[(i * 5) + 0],
products[(i * 5) + 1],
products[(i * 5) + 3]
]),
Promise.join(
products[(i * 5) + 0].setTags([
tags[0], tags[0],
tags[2] tags[2]
])); ]),
chainer.add(results.products[(i * 5) + 1].setTags([ products[(i * 5) + 1].setTags([
tags[1] tags[1]
])); ]),
chainer.add(results.products[(i * 5) + 0].setCategory(tags[1])); products[(i * 5) + 0].setCategory(tags[1]),
products[(i * 5) + 2].setTags([
chainer.add(results.products[(i * 5) + 2].setTags([
tags[0] tags[0]
])); ]),
products[(i * 5) + 3].setTags([
chainer.add(results.products[(i * 5) + 3].setTags([
tags[0] tags[0]
])); ])
),
chainer.run().done(callback); Promise.join(
}], products[(i * 5) + 0].setCompany(companies[4]),
companies: ['products', function(callback, results) { products[(i * 5) + 1].setCompany(companies[3]),
var chainer = new Sequelize.Utils.QueryChainer(); products[(i * 5) + 2].setCompany(companies[2]),
products[(i * 5) + 3].setCompany(companies[1]),
results.products[(i * 5) + 0].setCompany(companies[4]); products[(i * 5) + 4].setCompany(companies[0])
results.products[(i * 5) + 1].setCompany(companies[3]); ),
results.products[(i * 5) + 2].setCompany(companies[2]);
results.products[(i * 5) + 3].setCompany(companies[1]);
results.products[(i * 5) + 4].setCompany(companies[0]);
chainer.run().done(callback);
}],
prices: ['products', function(callback, results) {
Price.bulkCreate([ Price.bulkCreate([
{ProductId: results.products[(i * 5) + 0].id, value: 5}, {ProductId: products[(i * 5) + 0].id, value: 5},
{ProductId: results.products[(i * 5) + 0].id, value: 10}, {ProductId: products[(i * 5) + 0].id, value: 10},
{ProductId: results.products[(i * 5) + 1].id, value: 5}, {ProductId: products[(i * 5) + 1].id, value: 5},
{ProductId: results.products[(i * 5) + 1].id, value: 10}, {ProductId: products[(i * 5) + 1].id, value: 10},
{ProductId: results.products[(i * 5) + 1].id, value: 15}, {ProductId: products[(i * 5) + 1].id, value: 15},
{ProductId: results.products[(i * 5) + 1].id, value: 20}, {ProductId: products[(i * 5) + 1].id, value: 20},
{ProductId: results.products[(i * 5) + 2].id, value: 20}, {ProductId: products[(i * 5) + 2].id, value: 20},
{ProductId: results.products[(i * 5) + 3].id, value: 20} {ProductId: products[(i * 5) + 3].id, value: 20}
]).nodeify(callback); ])
}]
}, callback);
},
function(err) {
if (err) return reject(err);
resolve();
}
); );
}); });
}, []);
}); });
}); });
}; };
......
...@@ -114,6 +114,7 @@ describe(Support.getTestDialectTeaser('Sequelize'), function() { ...@@ -114,6 +114,7 @@ describe(Support.getTestDialectTeaser('Sequelize'), function() {
.sequelizeWithInvalidConnection .sequelizeWithInvalidConnection
.authenticate() .authenticate()
.complete(function(err, result) { .complete(function(err, result) {
console.log(err.message);
expect( expect(
err.message.match(/connect ECONNREFUSED/) || err.message.match(/connect ECONNREFUSED/) ||
err.message.match(/invalid port number/) || err.message.match(/invalid port number/) ||
......
...@@ -10,21 +10,33 @@ var chai = require('chai') ...@@ -10,21 +10,33 @@ var chai = require('chai')
if (current.dialect.supports.transactions) { if (current.dialect.supports.transactions) {
describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() { describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() {
this.timeout(4000); describe('then', function() {
it('gets triggered once a transaction has been successfully committed', function() {
describe('success', function() { var called = false;
it('gets triggered once a transaction has been successfully committed', function(done) { return this
this
.sequelize .sequelize
.transaction().then(function(t) { t.commit(); }) .transaction().then(function(t) {
.success(function() { done(); }); return t.commit().then(function () {
called = 1;
});
})
.then(function() {
expect(called).to.be.ok;
});
}); });
it('gets triggered once a transaction has been successfully rolled back', function(done) { it('gets triggered once a transaction has been successfully rolled back', function() {
this var called = false;
return this
.sequelize .sequelize
.transaction().then(function(t) { t.rollback(); }) .transaction().then(function(t) {
.success(function() { done(); }); return t.rollback().then(function () {
called = 1;
});
})
.then(function() {
expect(called).to.be.ok;
});
}); });
if (Support.getTestDialect() !== 'sqlite') { if (Support.getTestDialect() !== 'sqlite') {
...@@ -71,52 +83,29 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() { ...@@ -71,52 +83,29 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() {
} }
}); });
describe('error', function() {
if (Support.getTestDialect() === 'sqlite') {
// not sure if we can test this in sqlite ...
// how could we enforce an authentication error in sqlite?
} else {
it('gets triggered once an error occurs', function(done) {
// Supply bad config to force an error
var sequelize = Support.getSequelizeInstance('this', 'is', 'fake config');
sequelize
.transaction().then(function() {})
.catch (function(err) {
expect(err).to.not.be.undefined;
done();
});
});
}
});
describe('complex long running example', function() { describe('complex long running example', function() {
it('works with promise syntax', function(done) { it('works with promise syntax', function() {
Support.prepareTransactionTest(this.sequelize, function(sequelize) { return Support.prepareTransactionTest(this.sequelize).then(function(sequelize) {
var Test = sequelize.define('Test', { var Test = sequelize.define('Test', {
id: { type: Support.Sequelize.INTEGER, primaryKey: true, autoIncrement: true}, id: { type: Support.Sequelize.INTEGER, primaryKey: true, autoIncrement: true},
name: { type: Support.Sequelize.STRING } name: { type: Support.Sequelize.STRING }
}); });
sequelize return sequelize.sync({ force: true }).then(function() {
.sync({ force: true }) return sequelize.transaction().then(function(transaction) {
.then(function() {
sequelize.transaction().then(function(transaction) {
expect(transaction).to.be.instanceOf(Transaction); expect(transaction).to.be.instanceOf(Transaction);
Test return Test
.create({ name: 'Peter' }, { transaction: transaction }) .create({ name: 'Peter' }, { transaction: transaction })
.then(function() { .then(function() {
setTimeout(function() { return Promise.delay(1000).then(function () {
transaction return transaction
.commit() .commit()
.then(function() { return Test.count(); }) .then(function() { return Test.count(); })
.then(function(count) { .then(function(count) {
expect(count).to.equal(1); expect(count).to.equal(1);
done();
}); });
}, 1000); });
}); });
}); });
}); });
...@@ -126,10 +115,10 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() { ...@@ -126,10 +115,10 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() {
describe('concurrency', function() { describe('concurrency', function() {
describe('having tables with uniqueness constraints', function() { describe('having tables with uniqueness constraints', function() {
beforeEach(function(done) { beforeEach(function() {
var self = this; var self = this;
Support.prepareTransactionTest(this.sequelize, function(sequelize) { return Support.prepareTransactionTest(this.sequelize).then(function(sequelize) {
self.sequelize = sequelize; self.sequelize = sequelize;
self.Model = sequelize.define('Model', { self.Model = sequelize.define('Model', {
...@@ -138,9 +127,7 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() { ...@@ -138,9 +127,7 @@ describe(Support.getTestDialectTeaser('Sequelize#transaction'), function() {
timestamps: false timestamps: false
}); });
self.Model return self.Model.sync({ force: true });
.sync({ force: true })
.success(function() { done(); });
}); });
}); });
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!