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"); }); }); }); });