2024-05-30 15:20:34 -05:00

116 lines
3.2 KiB
JavaScript

var Client = require("../");
var assert = require("assert");
var async = require("async");
var ok = require("okay");
describe("async query", function () {
before(function (done) {
this.client = Client();
this.client.connect(done);
});
after(function (done) {
this.client.end(done);
});
it("can execute many prepared statements on a client", function (done) {
async.timesSeries(
20,
(i, cb) => {
this.client.query("SELECT $1::text as name", ["brianc"], cb);
},
done,
);
});
it("simple query works", function (done) {
var runQuery = function (n, done) {
this.client.query("SELECT NOW() AS the_time", function (err, rows) {
if (err) return done(err);
assert.equal(rows[0].the_time.getFullYear(), new Date().getFullYear());
return done();
});
}.bind(this);
async.timesSeries(3, runQuery, done);
});
it("parameters work", function (done) {
var runQuery = function (n, done) {
this.client.query("SELECT $1::text AS name", ["Brian"], done);
}.bind(this);
async.timesSeries(3, runQuery, done);
});
it("prepared, named statements work", function (done) {
var client = this.client;
client.prepare("test", "SELECT $1::text as name", 1, function (err) {
if (err) return done(err);
client.execute(
"test",
["Brian"],
ok(done, function (rows) {
assert.equal(rows.length, 1);
assert.equal(rows[0].name, "Brian");
client.execute(
"test",
["Aaron"],
ok(done, function (rows) {
assert.equal(rows.length, 1);
assert.equal(rows[0].name, "Aaron");
done();
}),
);
}),
);
});
});
it("returns error if prepare fails", function (done) {
this.client.prepare("test", "SELECT AWWW YEAH", 0, function (err) {
assert(err, "Should have returned an error");
done();
});
});
it("returns an error if execute fails", function (done) {
this.client.execute("test", [], function (err) {
assert(err, "Should have returned an error");
done();
});
});
it("returns an error if there was a query error", function (done) {
var runErrorQuery = function (n, done) {
this.client.query("SELECT ALKJSFDSLFKJ", function (err) {
assert(err instanceof Error, "Should return an error instance");
done();
});
}.bind(this);
async.timesSeries(3, runErrorQuery, done);
});
it("is still usable after an error", function (done) {
const runErrorQuery = (_, cb) => {
this.client.query("SELECT LKJSDJFLSDKFJ", (err) => {
assert(err instanceof Error, "Should return an error instance");
cb(null, err);
});
};
async.timesSeries(3, runErrorQuery, (err, res) => {
assert(!err);
assert.equal(res.length, 3);
this.client.query("SELECT NOW()", done);
});
});
it("supports empty query", function (done) {
this.client.query("", function (err, rows) {
assert.ifError(err);
assert(Array.isArray(rows));
console.log("rows", rows);
assert(rows.length === 0);
done();
});
});
});