node-postgres/test/unit/client/simple-query-tests.js
2012-08-19 12:20:48 -07:00

128 lines
3.8 KiB
JavaScript

var helper = require(__dirname + "/test-helper");
test('executing query', function() {
test("queing query", function() {
test('when connection is ready', function() {
var client = helper.client();
assert.empty(client.connection.queries);
client.connection.emit('readyForQuery');
client.query('yes');
assert.lengthIs(client.connection.queries, 1);
assert.equal(client.connection.queries, 'yes');
});
test('when connection is not ready', function() {
var client = helper.client();
test('query is not sent', function() {
client.query('boom');
assert.empty(client.connection.queries);
});
test('sends query to connection once ready', function() {
assert.ok(client.connection.emit('readyForQuery'));
assert.lengthIs(client.connection.queries, 1);
assert.equal(client.connection.queries[0], "boom");
});
});
test("multiple in the queue", function() {
var client = helper.client();
var connection = client.connection;
var queries = connection.queries;
client.query('one');
client.query('two');
client.query('three');
assert.empty(queries);
test("after one ready for query",function() {
connection.emit('readyForQuery');
assert.lengthIs(queries, 1);
assert.equal(queries[0], "one");
});
test('after two ready for query', function() {
connection.emit('readyForQuery');
assert.lengthIs(queries, 2);
});
test("after a bunch more", function() {
connection.emit('readyForQuery');
connection.emit('readyForQuery');
connection.emit('readyForQuery');
assert.lengthIs(queries, 3);
assert.equal(queries[0], "one");
assert.equal(queries[1], 'two');
assert.equal(queries[2], 'three');
});
});
});
test("query event binding and flow", function() {
var client = helper.client();
var con = client.connection;
var query = client.query('whatever');
test("has no queries sent before ready", function() {
assert.empty(con.queries);
});
test('sends query on readyForQuery event', function() {
con.emit('readyForQuery');
assert.lengthIs(con.queries, 1);
assert.equal(con.queries[0], 'whatever');
});
test('handles rowDescription message', function() {
var handled = con.emit('rowDescription',{
fields: [{
name: 'boom'
}]
});
assert.ok(handled, "should have handlded rowDescription");
});
test('handles dataRow messages', function() {
assert.emits(query, 'row', function(row) {
assert.equal(row['boom'], "hi");
});
var handled = con.emit('dataRow', { fields: ["hi"] });
assert.ok(handled, "should have handled first data row message");
assert.emits(query, 'row', function(row) {
assert.equal(row['boom'], "bye");
});
var handledAgain = con.emit('dataRow', { fields: ["bye"] });
assert.ok(handledAgain, "should have handled seciond data row message");
});
//multiple command complete messages will be sent
//when multiple queries are in a simple command
test('handles command complete messages', function() {
con.emit('commandComplete', {
text: 'INSERT 31 1'
});
});
test('removes itself after another readyForQuery message', function() {
return false;
assert.emits(query, "end", function(msg) {
//TODO do we want to check the complete messages?
});
con.emit("readyForQuery");
//this would never actually happen
['dataRow','rowDescription', 'commandComplete'].forEach(function(msg) {
assert.equal(con.emit(msg), false, "Should no longer be picking up '"+ msg +"' messages");
});
});
});
});