node-postgres/packages/pg-native/test/async-workflow.js

81 lines
2.1 KiB
JavaScript

const Client = require('../')
const ok = require('okay')
const assert = require('assert')
const concat = require('concat-stream')
describe('async workflow', function () {
before(function (done) {
this.client = new Client()
this.client.connect(done)
})
const echoParams = function (params, cb) {
this.client.query(
'SELECT $1::text as first, $2::text as second',
params,
ok(cb, function (rows) {
checkParams(params, rows)
cb(null, rows)
})
)
}
const checkParams = function (params, rows) {
assert.equal(rows.length, 1)
assert.equal(rows[0].first, params[0])
assert.equal(rows[0].second, params[1])
}
it('sends async query', function (done) {
const params = ['one', 'two']
echoParams.call(this, params, done)
})
it('sends multiple async queries', function (done) {
const self = this
const params = ['bang', 'boom']
echoParams.call(
this,
params,
ok(done, function (rows) {
echoParams.call(self, params, done)
})
)
})
it('sends an async query, copies in, copies out, and sends another query', function (done) {
const self = this
this.client.querySync('CREATE TEMP TABLE test(name text, age int)')
this.client.query(
"INSERT INTO test(name, age) VALUES('brian', 32)",
ok(done, function () {
self.client.querySync('COPY test FROM stdin')
const input = self.client.getCopyStream()
input.write(Buffer.from('Aaron\t30\n', 'utf8'))
input.end(function () {
self.client.query(
'SELECT COUNT(*) FROM test',
ok(done, function (rows) {
assert.equal(rows.length, 1)
self.client.query(
'COPY test TO stdout',
ok(done, function () {
const output = self.client.getCopyStream()
// pump the stream
output.read()
output.pipe(
concat(function (res) {
done()
})
)
})
)
})
)
})
})
)
})
})