mirror of
https://github.com/brianc/node-postgres.git
synced 2026-01-18 15:55:05 +00:00
76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
'use strict'
|
|
const helper = require('./test-helper')
|
|
const assert = require('assert')
|
|
const suite = new helper.Suite()
|
|
|
|
suite.test('emits notify message', function (done) {
|
|
const client = helper.client()
|
|
client.query(
|
|
'LISTEN boom',
|
|
assert.calls(function () {
|
|
const otherClient = helper.client()
|
|
let bothEmitted = -1
|
|
otherClient.query(
|
|
'LISTEN boom',
|
|
assert.calls(function () {
|
|
assert.emits(client, 'notification', function (msg) {
|
|
// make sure PQfreemem doesn't invalidate string pointers
|
|
setTimeout(function () {
|
|
assert.equal(msg.channel, 'boom')
|
|
assert.ok(
|
|
msg.payload == 'omg!' /* 9.x */ || msg.payload == '' /* 8.x */,
|
|
'expected blank payload or correct payload but got ' + msg.message
|
|
)
|
|
client.end(++bothEmitted ? done : undefined)
|
|
}, 100)
|
|
})
|
|
assert.emits(otherClient, 'notification', function (msg) {
|
|
assert.equal(msg.channel, 'boom')
|
|
otherClient.end(++bothEmitted ? done : undefined)
|
|
})
|
|
|
|
client.query("NOTIFY boom, 'omg!'", function (err, q) {
|
|
if (err) {
|
|
// notify not supported with payload on 8.x
|
|
client.query('NOTIFY boom')
|
|
}
|
|
})
|
|
})
|
|
)
|
|
})
|
|
)
|
|
})
|
|
|
|
// this test fails on travis due to their config
|
|
suite.test('emits notice message', function (done) {
|
|
if (helper.args.native) {
|
|
console.error('notice messages do not work curreintly with node-libpq')
|
|
return done()
|
|
}
|
|
|
|
const client = helper.client()
|
|
const text = `
|
|
DO language plpgsql $$
|
|
BEGIN
|
|
RAISE NOTICE 'hello, world!' USING ERRCODE = '23505', DETAIL = 'this is a test';
|
|
END
|
|
$$;
|
|
`
|
|
client.query('SET SESSION client_min_messages=notice', (err) => {
|
|
assert.ifError(err)
|
|
client.query(text, () => {
|
|
client.end()
|
|
})
|
|
})
|
|
assert.emits(client, 'notice', function (notice) {
|
|
assert.ok(notice != null)
|
|
// notice messages should not be error instances
|
|
assert(notice instanceof Error === false)
|
|
assert.strictEqual(notice.name, 'notice')
|
|
assert.strictEqual(notice.message, 'hello, world!')
|
|
assert.strictEqual(notice.detail, 'this is a test')
|
|
assert.strictEqual(notice.code, '23505')
|
|
done()
|
|
})
|
|
})
|