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

Commit 4262ed5d by Mick Hansen

rewrite transaction locking tests to promises

1 parent bb3a6245
Showing with 23 additions and 20 deletions
......@@ -121,8 +121,7 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
if (current.dialect.supports.lock) {
describe('row locking', function () {
this.timeout(10000);
it('supports for update', function(done) {
it('supports for update', function() {
var User = this.sequelize.define('user', {
username: Support.Sequelize.STRING,
awesome: Support.Sequelize.BOOLEAN
......@@ -131,10 +130,10 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
, t1Spy = sinon.spy()
, t2Spy = sinon.spy();
this.sequelize.sync({ force: true }).then(function() {
return this.sequelize.sync({ force: true }).then(function() {
return User.create({ username: 'jan'});
}).then(function() {
self.sequelize.transaction().then(function(t1) {
return self.sequelize.transaction().then(function(t1) {
return User.find({
where: {
username: 'jan'
......@@ -143,9 +142,10 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
lock: t1.LOCK.UPDATE,
transaction: t1
}).then(function(t1Jan) {
self.sequelize.transaction({
return self.sequelize.transaction({
isolationLevel: Transaction.ISOLATION_LEVELS.READ_COMMITTED
}).then(function(t2) {
return Promise.join(
User.find({
where: {
username: 'jan'
......@@ -155,25 +155,27 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
transaction: t2
}).then(function() {
t2Spy();
t2.commit().then(function() {
return t2.commit().then(function() {
expect(t2Spy).to.have.been.calledAfter(t1Spy); // Find should not succeed before t1 has comitted
done();
});
});
}),
t1Jan.updateAttributes({
awesome: true
}, { transaction: t1}).then(function() {
t1Spy();
setTimeout(t1.commit.bind(t1), 2000);
Promise.delay(2000).then(function () {
return t1.commit();
});
})
);
});
});
});
});
});
it('supports for share', function(done) {
it('supports for share', function() {
var User = this.sequelize.define('user', {
username: Support.Sequelize.STRING,
awesome: Support.Sequelize.BOOLEAN
......@@ -183,10 +185,10 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
, t2FindSpy = sinon.spy()
, t2UpdateSpy = sinon.spy();
this.sequelize.sync({ force: true }).then(function() {
return this.sequelize.sync({ force: true }).then(function() {
return User.create({ username: 'jan'});
}).then(function() {
self.sequelize.transaction().then(function(t1) {
return self.sequelize.transaction().then(function(t1) {
return User.find({
where: {
username: 'jan'
......@@ -195,9 +197,10 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
lock: t1.LOCK.SHARE,
transaction: t1
}).then(function(t1Jan) {
self.sequelize.transaction({
return self.sequelize.transaction({
isolationLevel: Transaction.ISOLATION_LEVELS.READ_COMMITTED
}).then(function(t2) {
return Promise.join(
User.find({
where: {
username: 'jan'
......@@ -205,30 +208,30 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
}, { transaction: t2}).then(function(t2Jan) {
t2FindSpy();
t2Jan.updateAttributes({
return t2Jan.updateAttributes({
awesome: false
}, {
transaction: t2
}).then(function() {
t2UpdateSpy();
t2.commit().then(function() {
return t2.commit().then(function() {
expect(t2FindSpy).to.have.been.calledBefore(t1Spy); // The find call should have returned
expect(t2UpdateSpy).to.have.been.calledAfter(t1Spy); // But the update call should not happen before the first transaction has committed
done();
});
});
});
}),
t1Jan.updateAttributes({
awesome: true
}, {
transaction: t1
}).then(function() {
setTimeout(function() {
return Promise.delay(2000).then(function () {
t1Spy();
t1.commit();
}, 2000);
return t1.commit();
});
})
);
});
});
});
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!