UNPKG

4.37 kBJavaScriptView Raw
1var assert = require('assert');
2var ok = require('okay');
3var util = require('util');
4var query = require('../');
5var async = require('async');
6var when = require('when');
7var sql = require('sql');
8var pg = require('pg');
9pg.defaults.poolSize = 1;
10
11describe('query', function() {
12 describe('with no values', function() {
13 it('works', function(done) {
14 query('SELECT NOW() as when', function(err, rows, result) {
15 if(err) return done(err);
16 assert(util.isArray(rows));
17 assert.equal(rows.length, 1);
18 assert.equal(rows, result.rows);
19 done();
20 });
21 });
22
23 it('works with multiple statements (does not prepare)', function(done) {
24 query('SELECT NOW() as when; SELECT NOW() as when;', function(err, rows, result) {
25 if(err) return done(err);
26 assert(util.isArray(rows));
27 assert.equal(rows.length, 2);
28 assert.equal(rows, result.rows);
29 done();
30 });
31 });
32 });
33
34 describe('with values', function() {
35 it('works', function(done) {
36 query('SELECT $1::text as name', ['brian'], ok(done, function(rows, result) {
37 assert.equal(rows.length, 1);
38 assert.equal(rows[0].name, 'brian');
39 done();
40 }));
41 });
42 });
43
44 describe('domain binding', function() {
45 it('sticks on proper domain', function(done) {
46 var domain = require('domain').create();
47 domain.run(function() {
48 var existingDomain = process.domain;
49 var runQuery = function(n, next) {
50 query('SELECT NOW()', function(err, rows) {
51 assert.equal(existingDomain, process.domain);
52 next();
53 });
54 };
55 async.times(10, runQuery, function(err) {
56 if(err) return done(err);
57 assert.equal(existingDomain, process.domain);
58 done();
59 });
60 });
61 });
62 });
63
64 describe('#toQuery interface', function() {
65 before(function(done) {
66 query('CREATE TEMP TABLE "stuff" (id SERIAL PRIMARY KEY, name TEXT)', done);
67 });
68 it('works', function(done) {
69 var table = sql.define({
70 name: 'stuff',
71 columns: ['id', 'name']
72 });
73 query(table.insert({name: 'brian'}), ok(done, function() {
74 query(table.select(), ok(done, function(rows) {
75 assert.equal(rows.length, 1);
76 assert.equal(rows[0].name, 'brian');
77 done();
78 }));
79 }));
80 });
81 });
82
83 describe('release on error', function() {
84 it('releases client', function(done) {
85 var queryText = 'SELECT ASLKJDLKSFJDS';
86 query(queryText, function(err) {
87 assert(err);
88 done();
89 });
90 });
91 });
92
93 describe('object config', function() {
94 it('runs query properly', function(done) {
95 var q = {
96 name: 'get time',
97 text: 'SELECT $1::text as name',
98 values: ['brian']
99 }
100 query(q, ok(done, function(rows) {
101 assert.equal(rows[0].name, 'brian')
102 done()
103 }))
104 })
105 })
106
107 describe('before hook', function() {
108 after(function() {
109 query.before = function() {}
110 });
111 it('calls hook', function(done) {
112 var queryText = 'SELECT $1::text as name';
113 query.before = function(query, client) {
114 assert(query);
115 assert(client);
116 assert.equal(query.text, queryText);
117 assert.equal(query.values.length, 1);
118 assert(client instanceof require('pg').Client);
119 query.on('end', function() {
120 done();
121 });
122 };
123 query(queryText, ['brian'], function() {
124 });
125 });
126 });
127
128 describe('promise', function(){
129 it('returns a promise if no callback is passed', function(done) {
130 var promise = query('SELECT NOW() as when');
131 assert(when.isPromiseLike(promise));
132 promise.spread(function(rows, result) {
133 assert(util.isArray(rows));
134 assert.equal(result.rows.length, 1);
135 assert.equal(rows, result.rows);
136 done();
137 }).otherwise(done);
138 });
139
140 it('does not return a promise if callback is passed', function(done) {
141 var noPromise = query('SELECT NOW() as when', function(err, rows, result) {
142 if(err) return done(err);
143 assert(!when.isPromiseLike(noPromise));
144 assert(util.isArray(rows));
145 assert.equal(rows.length, 1);
146 assert.equal(rows, result.rows);
147 done();
148 });
149 });
150 });
151});