node-postgres/test/unit/client/simple-query-tests.js

144 lines
4.4 KiB
JavaScript

'use strict'
var helper = require(__dirname + '/test-helper')
var Query = require('../../../lib/query')
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(new 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")
})
})
})
test('handles errors', function () {
var client = helper.client()
test('throws an error when config is null', function () {
try {
client.query(null, undefined)
} catch (error) {
assert.equal(error.message, 'Client was passed a null or undefined query', 'Should have thrown an Error for null queries')
}
})
test('throws an error when config is undefined', function () {
try {
client.query()
} catch (error) {
assert.equal(error.message, 'Client was passed a null or undefined query', 'Should have thrown an Error for null queries')
}
})
})
})