2013-09-11 23:36:55 -04:00
|
|
|
|
|
|
|
module.exports = function(knex) {
|
|
|
|
|
2013-09-12 13:30:47 -04:00
|
|
|
describe('Transactions', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2014-03-19 11:54:18 -04:00
|
|
|
it('can run with exec', function(ok) {
|
|
|
|
|
|
|
|
knex.transaction(function(t) {
|
|
|
|
t.commit();
|
|
|
|
}).exec(ok);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2014-04-16 01:23:50 -04:00
|
|
|
it('should be able to commit transactions', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
|
|
|
|
var id = null;
|
|
|
|
return knex.transaction(function(t) {
|
|
|
|
|
|
|
|
knex('accounts')
|
|
|
|
.transacting(t)
|
|
|
|
.returning('id')
|
|
|
|
.insert({
|
|
|
|
first_name: 'Transacting',
|
|
|
|
last_name: 'User',
|
2014-05-08 18:04:55 -04:00
|
|
|
email:'transaction-test1@example.com',
|
2013-09-11 23:36:55 -04:00
|
|
|
logins: 1,
|
|
|
|
about: 'Lorem ipsum Dolore labore incididunt enim.',
|
|
|
|
created_at: new Date(),
|
|
|
|
updated_at: new Date()
|
|
|
|
}).then(function(resp) {
|
|
|
|
return knex('test_table_two').transacting(t).insert({
|
|
|
|
account_id: (id = resp[0]),
|
|
|
|
details: '',
|
|
|
|
status: 1
|
|
|
|
});
|
|
|
|
}).then(function() {
|
|
|
|
t.commit('Hello world');
|
|
|
|
});
|
|
|
|
|
|
|
|
}).then(function(commitMessage) {
|
|
|
|
expect(commitMessage).to.equal('Hello world');
|
|
|
|
return knex('accounts').where('id', id).select('first_name');
|
|
|
|
}).then(function(resp) {
|
|
|
|
expect(resp).to.have.length(1);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-04-16 01:23:50 -04:00
|
|
|
it('should be able to rollback transactions', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
var id = null;
|
|
|
|
var err = new Error('error message');
|
|
|
|
return knex.transaction(function(t) {
|
|
|
|
knex('accounts')
|
|
|
|
.transacting(t)
|
|
|
|
.returning('id')
|
|
|
|
.insert({
|
|
|
|
first_name: 'Transacting',
|
|
|
|
last_name: 'User2',
|
|
|
|
email:'transaction-test2@example.com',
|
|
|
|
logins: 1,
|
|
|
|
about: 'Lorem ipsum Dolore labore incididunt enim.',
|
|
|
|
created_at: new Date(),
|
|
|
|
updated_at: new Date()
|
|
|
|
}).then(function(resp) {
|
|
|
|
return knex('test_table_two').transacting(t).insert({
|
|
|
|
account_id: (id = resp[0]),
|
|
|
|
details: '',
|
|
|
|
status: 1
|
|
|
|
});
|
|
|
|
}).then(function() {
|
|
|
|
t.rollback(err);
|
|
|
|
});
|
2014-05-08 18:04:55 -04:00
|
|
|
}).catch(function(msg) {
|
2013-09-11 23:36:55 -04:00
|
|
|
expect(msg).to.equal(err);
|
|
|
|
return knex('accounts').where('id', id).select('first_name');
|
|
|
|
}).then(function(resp) {
|
|
|
|
expect(resp).to.be.empty;
|
2014-05-08 18:04:55 -04:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should be able to commit transactions with a resolved trx query', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2014-05-08 18:04:55 -04:00
|
|
|
var id = null;
|
|
|
|
return knex.transaction(function(trx) {
|
|
|
|
return trx('accounts')
|
|
|
|
.returning('id')
|
|
|
|
.insert({
|
|
|
|
first_name: 'Transacting',
|
|
|
|
last_name: 'User',
|
|
|
|
email:'transaction-test3@example.com',
|
|
|
|
logins: 1,
|
|
|
|
about: 'Lorem ipsum Dolore labore incididunt enim.',
|
|
|
|
created_at: new Date(),
|
|
|
|
updated_at: new Date()
|
|
|
|
}).then(function(resp) {
|
|
|
|
return trx('test_table_two').insert({
|
|
|
|
account_id: (id = resp[0]),
|
|
|
|
details: '',
|
|
|
|
status: 1
|
|
|
|
});
|
|
|
|
}).then(function() {
|
|
|
|
return 'Hello World';
|
|
|
|
});
|
|
|
|
}).then(function(commitMessage) {
|
|
|
|
expect(commitMessage).to.equal('Hello World');
|
|
|
|
return knex('accounts').where('id', id).select('first_name');
|
|
|
|
}).then(function(resp) {
|
|
|
|
expect(resp).to.have.length(1);
|
2013-09-11 23:36:55 -04:00
|
|
|
});
|
2014-05-08 18:04:55 -04:00
|
|
|
});
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2014-05-08 18:04:55 -04:00
|
|
|
it('should be able to rollback transactions with rejected trx query', function() {
|
|
|
|
var id = null;
|
|
|
|
var err = new Error('error message');
|
2014-05-08 18:31:25 -04:00
|
|
|
var __cid, count = 0;
|
2014-05-08 18:04:55 -04:00
|
|
|
return knex.transaction(function(trx) {
|
|
|
|
return trx('accounts')
|
|
|
|
.returning('id')
|
|
|
|
.insert({
|
|
|
|
first_name: 'Transacting',
|
|
|
|
last_name: 'User2',
|
|
|
|
email:'transaction-test4@example.com',
|
|
|
|
logins: 1,
|
|
|
|
about: 'Lorem ipsum Dolore labore incididunt enim.',
|
|
|
|
created_at: new Date(),
|
|
|
|
updated_at: new Date()
|
|
|
|
}).then(function(resp) {
|
|
|
|
return trx.insert({
|
|
|
|
account_id: (id = resp[0]),
|
|
|
|
details: '',
|
|
|
|
status: 1
|
|
|
|
}).into('test_table_two');
|
|
|
|
}).then(function() {
|
|
|
|
throw err;
|
|
|
|
});
|
2014-05-08 18:31:25 -04:00
|
|
|
})
|
|
|
|
.on('query', function(obj) {
|
|
|
|
count++;
|
|
|
|
if (!__cid) __cid = obj.__cid;
|
|
|
|
expect(__cid).to.equal(obj.__cid);
|
|
|
|
})
|
|
|
|
.catch(function(msg) {
|
|
|
|
expect(count).to.equal(4);
|
2014-05-08 18:04:55 -04:00
|
|
|
expect(msg).to.equal(err);
|
|
|
|
return knex('accounts').where('id', id).select('first_name');
|
|
|
|
}).then(function(resp) {
|
|
|
|
expect(resp).to.be.empty;
|
|
|
|
});
|
2013-09-11 23:36:55 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2014-04-16 02:50:19 -04:00
|
|
|
};
|