UNPKG

6.88 kBJavaScriptView Raw
1"use strict";
2
3var pgsql = require('../src/pgsql.js')
4, transformers = require('../src/transformers')
5, defines = require('../src/defines.js')
6, chai = require('chai')
7, chaiAsPromised = require('chai-as-promised');
8
9chai.Should();
10chai.use(chaiAsPromised);
11require("mocha-as-promised")();
12
13describe('pgsql', function() {
14
15 var tablename;
16 var headers;
17 var dataTypes;
18 var data;
19
20 var pgSqlTransformer = transformers.getPgSqlTransformer();
21
22 beforeEach(function() {
23 tablename = 'trevor.test';
24 headers = ["column_1"];
25 dataTypes = [defines.INTEGER];
26 data = [
27 [1],
28 [2],
29 [3]
30 ];
31 });
32
33 describe('#getHeaderSql()', function() {
34 it('should return some strings that appear before the SQL', function() {
35 var tablename = 'trevor.test';
36 pgsql.getHeaderSql(tablename).should.be.ok;
37 });
38 });
39 describe('#getFooterSql()', function() {
40 it('should return some string that appears after the SQL', function() {
41 var tablename = 'trevor.test';
42 var shouldBe = "vacuum analyze " + tablename + ';\n';
43 pgsql.getFooterSql(tablename).should.equal(shouldBe);
44 });
45 });
46 describe('#getCreateTableSql()', function() {
47 it('should create table for type numeric', function() {
48 dataTypes = [defines.NUMERIC];
49
50 var shouldBe =
51 "create table trevor.test (\n" +
52 "\tcolumn_1 numeric\n" +
53 ");\n";
54
55 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
56 .should.equal(shouldBe);
57 });
58 it('should create table for type integer', function() {
59 dataTypes = [defines.INTEGER];
60
61 var shouldBe =
62 "create table trevor.test (\n" +
63 "\tcolumn_1 integer\n" +
64 ");\n";
65
66 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
67 .should.equal(shouldBe);
68 });
69 it('should create table for type big integer', function() {
70 dataTypes = [defines.BIGINTEGER];
71
72 var shouldBe =
73 "create table trevor.test (\n" +
74 "\tcolumn_1 bigint\n" +
75 ");\n";
76
77 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
78 .should.equal(shouldBe);
79 });
80 it('should create table for type text', function() {
81 dataTypes = [defines.TEXT];
82
83 var shouldBe =
84 "create table trevor.test (\n" +
85 "\tcolumn_1 text\n" +
86 ");\n";
87
88 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
89 .should.equal(shouldBe);
90 });
91 it('should create table for multiple types', function() {
92 headers = ["column_1", "column_2", "column_3"];
93 dataTypes = [defines.TEXT, defines.INTEGER, defines.NUMERIC];
94
95 var shouldBe =
96 "create table trevor.test (\n" +
97 "\tcolumn_1 text,\n" +
98 "\tcolumn_2 integer,\n" +
99 "\tcolumn_3 numeric\n" +
100 ");\n";
101
102 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
103 .should.equal(shouldBe);
104 });
105 it('should add the primary key (one)', function() {
106 var headers, dataTypes, data, dataset;
107 headers = ["column_1"];
108 dataTypes = [defines.PRIMARY_INTEGER];
109
110 var shouldBe =
111 "create table trevor.test (\n" +
112 "\tcolumn_1 integer,\n" +
113 "\tprimary key (column_1)\n" +
114 ");\n";
115
116 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
117 .should.equal(shouldBe);
118 });
119 it('should add the primary key (multiple)', function() {
120 var headers, dataTypes, data, dataset;
121 headers = ["column_1", "column_2", "column_3"];
122 dataTypes = [
123 defines.PRIMARY_INTEGER, defines.TEXT, defines.PRIMARY_INTEGER];
124
125 var shouldBe =
126 "create table trevor.test (\n" +
127 "\tcolumn_1 integer,\n" +
128 "\tcolumn_2 text,\n" +
129 "\tcolumn_3 integer,\n" +
130 "\tprimary key (column_1, column_3)\n" +
131 ");\n";
132
133 pgsql.getCreateTableSql(tablename, headers, dataTypes, pgSqlTransformer)
134 .should.equal(shouldBe);
135 });
136 });
137
138 describe('#getCopyHeaderSql()', function() {
139 it('should create the insert dump statement (simple case)', function() {
140 var shouldBe = "copy trevor.test (column_1) from stdin;\n";
141 pgsql.getCopyHeaderSql(tablename, headers, dataTypes, pgSqlTransformer)
142 .should.equal(shouldBe);
143 });
144 it('should create the insert dump statement (adjusted names)', function() {
145 dataTypes = [ defines.LAT, defines.LONG, defines.ZIP ];
146 headers = ["one", "two", "three"];
147 var shouldBe = "copy trevor.test (lat, lng, zip) from stdin;\n";
148 pgsql.getCopyHeaderSql(tablename, headers, dataTypes, pgSqlTransformer)
149 .should.equal(shouldBe);
150 });
151 });
152
153 describe('#getCopyDataRowSql()', function() {
154 it('should create the insert dump statement (simple case)', function() {
155 var dataRow = data[0];
156 var shouldBe = "1\n";
157 pgsql.getCopyDataRowSql(dataRow, pgSqlTransformer)
158 .should.equal(shouldBe);
159 });
160 it('should create the insert dump statement (complex case)', function() {
161 var dataRow = ['1', '2', '3', '4', 'hello'];
162 var shouldBe = "1\t2\t3\t4\thello\n";
163 pgsql.getCopyDataRowSql(dataRow, pgSqlTransformer)
164 .should.equal(shouldBe);
165 });
166 it('should correctly escape newlines', function() {
167 var dataRow = ['1\n', '\n2\n'];
168 var shouldBe = "1\\n\t\\n2\\n\n";
169 pgsql.getCopyDataRowSql(dataRow, pgSqlTransformer)
170 .should.equal(shouldBe);
171 });
172 it('should escape arbitrary backslashes', function() {
173 var dataRow = [ 'hello\\I am stubborn'];
174 var shouldBe = "hello\\\\I am stubborn\n";
175 pgsql.getCopyDataRowSql(dataRow, pgSqlTransformer)
176 .should.equal(shouldBe);
177 });
178 it('should not escape newlines defined by the transformer', function() {
179 var dataRow = [ 'hello', pgSqlTransformer.nullValue ];
180 var shouldBe = "hello\t\\N\n";
181 pgsql.getCopyDataRowSql(dataRow, pgSqlTransformer)
182 .should.equal(shouldBe);
183 })
184 });
185
186 describe('#getInsertDataRowSql()', function() {
187 it('should create the correct insert statement (simple case)', function() {
188 var dataRow = data[0];
189 var shouldBe = "insert into trevor.test (column_1) values (E'1');\n";
190 pgsql.getInsertDataRowSql(tablename, headers, dataRow, pgSqlTransformer)
191 .should.equal(shouldBe);
192 });
193 it('should create the correct insert statement (multiples)', function() {
194 var dataRow = [ 1, 2, 3 ];
195 var headers = [ 'c1', 'c2', 'c3' ];
196
197 var shouldBe = "insert into trevor.test (c1, c2, c3) values (E'1', E'2', E'3');\n";
198 pgsql.getInsertDataRowSql(tablename, headers, dataRow, pgSqlTransformer)
199 .should.equal(shouldBe);
200 });
201 it('should create the correct insert statement (escape single quotes)', function() {
202 var dataRow = [ "Trevor's", "''double" ];
203 var headers = [ 'c1', 'c2' ];
204
205 var shouldBe = "insert into trevor.test (c1, c2) values (E'Trevor''s', E'''''double');\n";
206 pgsql.getInsertDataRowSql(tablename, headers, dataRow, pgSqlTransformer)
207 .should.equal(shouldBe);
208 });
209 })
210
211 describe('#getCopyFooterSql()', function() {
212 it('should create the insert dump statement (simple case)', function() {
213 var shouldBe = "\\.\n";
214 pgsql.getCopyFooterSql().should.equal(shouldBe);
215 });
216 });
217
218});