forked from Hypermediaisobar-admin/node-any-db-mssql
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added test for transactions through standard SQL queries (not through…
… Tedious `Connection.beginTransaction()`) - preparation for testing adapter with `any-db-transaction` module.
- Loading branch information
1 parent
f4a42e2
commit c6429c9
Showing
1 changed file
with
154 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
var assert = require('assert'); | ||
var EventEmitter = require('events').EventEmitter; | ||
|
||
var adapter = require('../index.js'); | ||
var config = require('./support/config.js'); | ||
|
||
describe('SQL', function(){ | ||
|
||
'use strict'; | ||
|
||
var connection = false; | ||
|
||
before(function(done){ | ||
connection = adapter.createConnection(config, function(err){ | ||
assert.ifError(err); | ||
done(); | ||
}); | ||
|
||
connection.on('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
}); | ||
|
||
after(function(done){ | ||
if (connection) { | ||
connection.end(done); | ||
} | ||
else { | ||
done('connection missing'); | ||
} | ||
}); | ||
|
||
describe('Transaction', function(){ | ||
this.timeout(3000); | ||
var tableName = 'test_'+Date.now(); | ||
|
||
before(function(done){ | ||
connection.once('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
connection.query('CREATE TABLE '+tableName+' (a int)', false, function(err, result){ | ||
assert.ifError(err); | ||
done(); | ||
}).on('error', function(err){ | ||
console.log(err); | ||
done(); | ||
}); | ||
}); | ||
|
||
after(function(done){ | ||
connection.once('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
connection.query('DROP TABLE '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
done(); | ||
}).on('error', function(err){ | ||
console.log(err); | ||
done(); | ||
}); | ||
}); | ||
|
||
it('should rollback inserted row', function(done){ | ||
connection.once('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
|
||
connection.query('BEGIN TRANSACTION'); | ||
connection.query('DELETE FROM '+tableName); | ||
connection.query('INSERT INTO '+tableName+' VALUES (@value)', {value: 42}); | ||
connection.query('SELECT * FROM '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
assert.strictEqual(result.rows.length, 1, 'Looks like there is no row in the data base'); | ||
assert.strictEqual(result.rowCount, result.rows.length, 'rowCount and rows.length mismatch'); | ||
assert.strictEqual(result.rows[0].a, 42, 'Looks like some other rows are in the data base'); | ||
}); | ||
connection.query('ROLLBACK TRANSACTION'); | ||
connection.query('SELECT * FROM '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
assert.strictEqual(result.rows.length, 0, 'Looks like some rows are there in the data base'); | ||
assert.strictEqual(result.rowCount, result.rows.length, 'rowCount and rows.length mismatch'); | ||
done(); | ||
}).on('error', function(err){ | ||
console.log(err); | ||
done(); | ||
}); | ||
}); | ||
|
||
it('should commit inserted row', function(done){ | ||
connection.once('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
|
||
connection.query('BEGIN TRANSACTION'); | ||
connection.query('DELETE FROM '+tableName); | ||
connection.query('INSERT INTO '+tableName+' VALUES (@value)', {value: 42}); | ||
connection.query('COMMIT TRANSACTION'); | ||
connection.query('SELECT * FROM '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
assert.strictEqual(result.rows.length, 1, 'Looks like there is no row in the data base'); | ||
assert.strictEqual(result.rowCount, result.rows.length, 'rowCount and rows.length mismatch'); | ||
assert.strictEqual(result.rows[0].a, 42, 'Looks like some other rows are in the data base'); | ||
done(); | ||
}).on('error', function(err){ | ||
console.log(err); | ||
done(); | ||
}); | ||
}); | ||
|
||
it('should rollback deleted row', function(done){ | ||
connection.once('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
|
||
connection.query('BEGIN TRANSACTION'); | ||
connection.query('DELETE FROM '+tableName); | ||
connection.query('SELECT * FROM '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
assert.strictEqual(result.rows.length, 0, 'Looks like some rows are still in the data base'); | ||
assert.strictEqual(result.rowCount, result.rows.length, 'rowCount and rows.length mismatch'); | ||
}); | ||
connection.query('ROLLBACK TRANSACTION'); | ||
connection.query('SELECT * FROM '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
assert.strictEqual(result.rows.length, 1, 'Looks like there is no row in the data base'); | ||
assert.strictEqual(result.rowCount, result.rows.length, 'rowCount and rows.length mismatch'); | ||
assert.strictEqual(result.rows[0].a, 42, 'Looks like some other rows are in the data base'); | ||
done(); | ||
}).on('error', function(err){ | ||
console.log(err); | ||
done(); | ||
}); | ||
}); | ||
|
||
it('should commit deletion of a all rows', function(done){ | ||
connection.once('error', function(err){ | ||
assert.ifError(err); | ||
}); | ||
|
||
connection.query('BEGIN TRANSACTION'); | ||
connection.query('DELETE FROM '+tableName); | ||
connection.query('COMMIT TRANSACTION'); | ||
connection.query('SELECT * FROM '+tableName, false, function(err, result){ | ||
assert.ifError(err); | ||
assert.strictEqual(result.rows.length, 0, 'Looks like some rows are still in the data base'); | ||
assert.strictEqual(result.rowCount, result.rows.length, 'rowCount and rows.length mismatch'); | ||
done(); | ||
}).on('error', function(err){ | ||
console.log(err); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); |