@villedemontreal/utils-knex 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +236 -0
  2. package/dist/src/config/configs.d.ts +19 -0
  3. package/dist/src/config/configs.d.ts.map +1 -0
  4. package/dist/src/config/configs.js +27 -0
  5. package/dist/src/config/configs.js.map +1 -0
  6. package/dist/src/config/constants.d.ts +21 -0
  7. package/dist/src/config/constants.d.ts.map +1 -0
  8. package/dist/src/config/constants.js +21 -0
  9. package/dist/src/config/constants.js.map +1 -0
  10. package/dist/src/config/init.d.ts +16 -0
  11. package/dist/src/config/init.d.ts.map +1 -0
  12. package/dist/src/config/init.js +33 -0
  13. package/dist/src/config/init.js.map +1 -0
  14. package/dist/src/databaseContext.d.ts +9 -0
  15. package/dist/src/databaseContext.d.ts.map +1 -0
  16. package/dist/src/databaseContext.js +3 -0
  17. package/dist/src/databaseContext.js.map +1 -0
  18. package/dist/src/index.d.ts +5 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +26 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/knexUtils.d.ts +134 -0
  23. package/dist/src/knexUtils.d.ts.map +1 -0
  24. package/dist/src/knexUtils.js +349 -0
  25. package/dist/src/knexUtils.js.map +1 -0
  26. package/dist/src/knexUtils.test.d.ts +2 -0
  27. package/dist/src/knexUtils.test.d.ts.map +1 -0
  28. package/dist/src/knexUtils.test.js +897 -0
  29. package/dist/src/knexUtils.test.js.map +1 -0
  30. package/dist/src/transactionManager.d.ts +34 -0
  31. package/dist/src/transactionManager.d.ts.map +1 -0
  32. package/dist/src/transactionManager.js +75 -0
  33. package/dist/src/transactionManager.js.map +1 -0
  34. package/dist/src/transactionManager.test.d.ts +10 -0
  35. package/dist/src/transactionManager.test.d.ts.map +1 -0
  36. package/dist/src/transactionManager.test.js +255 -0
  37. package/dist/src/transactionManager.test.js.map +1 -0
  38. package/dist/src/utils/logger.d.ts +12 -0
  39. package/dist/src/utils/logger.d.ts.map +1 -0
  40. package/dist/src/utils/logger.js +53 -0
  41. package/dist/src/utils/logger.js.map +1 -0
  42. package/dist/src/utils/testingConfigurations.d.ts +9 -0
  43. package/dist/src/utils/testingConfigurations.d.ts.map +1 -0
  44. package/dist/src/utils/testingConfigurations.js +16 -0
  45. package/dist/src/utils/testingConfigurations.js.map +1 -0
  46. package/dist/testing/testClient.d.ts +15 -0
  47. package/dist/testing/testClient.d.ts.map +1 -0
  48. package/dist/testing/testClient.js +55 -0
  49. package/dist/testing/testClient.js.map +1 -0
  50. package/dist/testing/testRepo.d.ts +8 -0
  51. package/dist/testing/testRepo.d.ts.map +1 -0
  52. package/dist/testing/testRepo.js +31 -0
  53. package/dist/testing/testRepo.js.map +1 -0
  54. package/dist/tsconfig.tsbuildinfo +1 -0
  55. package/package.json +76 -0
  56. package/src/config/configs.ts +34 -0
  57. package/src/config/constants.ts +33 -0
  58. package/src/config/init.ts +33 -0
  59. package/src/databaseContext.ts +9 -0
  60. package/src/index.ts +9 -0
  61. package/src/knexUtils.test.ts +1526 -0
  62. package/src/knexUtils.ts +459 -0
  63. package/src/transactionManager.test.ts +302 -0
  64. package/src/transactionManager.ts +94 -0
  65. package/src/utils/logger.ts +60 -0
  66. package/src/utils/testingConfigurations.ts +13 -0
@@ -0,0 +1,897 @@
1
+ "use strict";
2
+ // Ok for test files
3
+ // tslint:disable:max-func-body-length
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const general_utils_1 = require("@villedemontreal/general-utils");
6
+ const chai_1 = require("chai");
7
+ const knexUtils_1 = require("./knexUtils");
8
+ const testingConfigurations_1 = require("./utils/testingConfigurations");
9
+ // ==========================================
10
+ // Set Testing configurations
11
+ // ==========================================
12
+ (0, testingConfigurations_1.setTestingConfigurations)();
13
+ // ==========================================
14
+ // Knex Utilities
15
+ // ==========================================
16
+ describe('Knex Utilities', () => {
17
+ let mockedClient;
18
+ before(async () => {
19
+ mockedClient = await knexUtils_1.knexUtils.createKnexMockedClient();
20
+ });
21
+ beforeEach(async () => {
22
+ mockedClient.beforeQuerySpy.resetHistory();
23
+ mockedClient.resultStub.returns([]);
24
+ mockedClient.totalCountStub.returns(0);
25
+ });
26
+ // ==========================================
27
+ // paginate() and totalCount()
28
+ // ==========================================
29
+ describe('paginate() and totalCount()', () => {
30
+ // ==========================================
31
+ // totalCount()
32
+ // ==========================================
33
+ describe('- totalCount()', () => {
34
+ it('default', async () => {
35
+ const queryBuilder = mockedClient
36
+ .select('id', 'author', 'title')
37
+ .from('books')
38
+ .orderBy('author');
39
+ await knexUtils_1.knexUtils.totalCount(mockedClient, queryBuilder);
40
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
41
+ chai_1.assert.isOk(queryInfo);
42
+ chai_1.assert.isOk(queryInfo.sql);
43
+ chai_1.assert.isOk(queryInfo.bindings);
44
+ chai_1.assert.strictEqual(queryInfo.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
45
+ chai_1.assert.strictEqual(queryInfo.bindings.length, 1);
46
+ chai_1.assert.strictEqual(queryInfo.bindings[0], 1);
47
+ });
48
+ it('removes offset and limit', async () => {
49
+ await knexUtils_1.knexUtils.totalCount(mockedClient, mockedClient
50
+ .select('id', 'author', 'title')
51
+ .from('books')
52
+ .orderBy('author')
53
+ .offset(2)
54
+ .limit(3));
55
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
56
+ chai_1.assert.strictEqual(queryInfo.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
57
+ chai_1.assert.strictEqual(queryInfo.bindings.length, 1);
58
+ chai_1.assert.strictEqual(queryInfo.bindings[0], 1);
59
+ });
60
+ it('more complex query', async () => {
61
+ const subSelect = mockedClient
62
+ .select('title')
63
+ .from('books')
64
+ .where('author', 'author_02')
65
+ .as('test');
66
+ const queryBuilder = mockedClient
67
+ .select('id', 'author', subSelect)
68
+ .from('books')
69
+ .whereIn('author', ['author_01', 'author_03', 'author_04'])
70
+ .orderBy('author', 'desc');
71
+ await knexUtils_1.knexUtils.totalCount(mockedClient, queryBuilder);
72
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
73
+ chai_1.assert.strictEqual(queryInfo.sql, 'select count(*) as `count` from (select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` ' +
74
+ 'from `books` where `author` in (?, ?, ?)) as `_knexSub` limit ?');
75
+ chai_1.assert.strictEqual(queryInfo.bindings.length, 5);
76
+ chai_1.assert.strictEqual(queryInfo.bindings[4], 1);
77
+ });
78
+ it('with distinct', async () => {
79
+ await knexUtils_1.knexUtils.totalCount(mockedClient, mockedClient.distinct('info').from('books').orderBy('author').offset(0).limit(3));
80
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
81
+ chai_1.assert.strictEqual(queryInfo.sql, 'select count(*) as `count` from (select distinct `info` from `books`) as `_knexSub` limit ?');
82
+ chai_1.assert.strictEqual(queryInfo.bindings.length, 1);
83
+ chai_1.assert.strictEqual(queryInfo.bindings[0], 1);
84
+ });
85
+ });
86
+ // ==========================================
87
+ // paginate()
88
+ // ==========================================
89
+ describe('- paginate()', () => {
90
+ it('Without pagination', async () => {
91
+ await mockedClient.select('id', 'author', 'title').from('books').orderBy('author');
92
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
93
+ chai_1.assert.strictEqual(queryInfo.sql, 'select `id`, `author`, `title` from `books` order by `author` asc');
94
+ chai_1.assert.strictEqual(queryInfo.bindings.length, 0);
95
+ });
96
+ it('offset : 0 | limit : 3', async () => {
97
+ const queryBuilder = mockedClient
98
+ .select('id', 'author', 'title')
99
+ .from('books')
100
+ .orderBy('author');
101
+ await knexUtils_1.knexUtils.paginate(mockedClient, queryBuilder, 0, 3);
102
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
103
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
104
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
105
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
106
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
107
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
108
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
109
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 3);
110
+ });
111
+ it('offset : 3 | limit : 3', async () => {
112
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 3, 3);
113
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
114
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
115
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
116
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
117
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
118
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
119
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
120
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 3);
121
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 3);
122
+ });
123
+ it('offset : 6 | limit : 3', async () => {
124
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 6, 3);
125
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
126
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
127
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
128
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
129
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
130
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
131
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
132
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 3);
133
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 6);
134
+ });
135
+ it('offset : 9 | limit : 3', async () => {
136
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 9, 3);
137
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
138
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
139
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
140
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
141
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
142
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
143
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
144
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 3);
145
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 9);
146
+ });
147
+ it('offset : 9 | limit : 1', async () => {
148
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 9, 1);
149
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
150
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
151
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
152
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
153
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
154
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
155
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
156
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 1);
157
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 9);
158
+ });
159
+ it('offset : 9 | limit : 0', async () => {
160
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 9, 0);
161
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
162
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
163
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
164
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
165
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
166
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
167
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
168
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 1);
169
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 9);
170
+ });
171
+ it('offset : 0 | limit : 1', async () => {
172
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 0, 1);
173
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
174
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
175
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
176
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
177
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
178
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
179
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
180
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 1);
181
+ });
182
+ it('offset : -1 | limit : 1', async () => {
183
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), -1, 1);
184
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
185
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
186
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
187
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
188
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
189
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
190
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
191
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 1);
192
+ });
193
+ it('offset : 0 | limit : 0', async () => {
194
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 0, 0);
195
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
196
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
197
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
198
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
199
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
200
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
201
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
202
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 1);
203
+ });
204
+ it('offset : 0 | limit : -1', async () => {
205
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 0, -1);
206
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
207
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
208
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
209
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
210
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
211
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
212
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
213
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 1);
214
+ });
215
+ it('offset : 0 | limit : 100', async () => {
216
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 0, 100);
217
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
218
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
219
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
220
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
221
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
222
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
223
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
224
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 100);
225
+ });
226
+ it('offset : 9 | limit : 100', async () => {
227
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 9, 100);
228
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
229
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
230
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
231
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
232
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
233
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
234
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
235
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 100);
236
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 9);
237
+ });
238
+ it('offset : 10 | limit : 100', async () => {
239
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.select('id', 'author', 'title').from('books').orderBy('author'), 10, 100);
240
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
241
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
242
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
243
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
244
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
245
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ? offset ?');
246
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
247
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 100);
248
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 10);
249
+ });
250
+ it(`only 'select' is valid - update`, async () => {
251
+ let error = false;
252
+ try {
253
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient
254
+ .update('author', 'author_updated')
255
+ .from('books')
256
+ .where('author', 'author_01'), 0, 1);
257
+ }
258
+ catch (err) {
259
+ error = true;
260
+ }
261
+ chai_1.assert.isTrue(error);
262
+ });
263
+ it(`only 'select' is valid - insert`, async () => {
264
+ let error = false;
265
+ try {
266
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient
267
+ .insert({
268
+ author: 'author_11',
269
+ title: 'title_11',
270
+ })
271
+ .into('books'), 0, 1);
272
+ }
273
+ catch (err) {
274
+ error = true;
275
+ }
276
+ chai_1.assert.isTrue(error);
277
+ });
278
+ it(`only 'select' is valid - delete`, async () => {
279
+ let error = false;
280
+ try {
281
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.delete().from('books'), 0, 1);
282
+ }
283
+ catch (err) {
284
+ error = true;
285
+ }
286
+ chai_1.assert.isTrue(error);
287
+ });
288
+ it('More complex select query - offset : 0 | limit : 2', async () => {
289
+ const subSelect = mockedClient
290
+ .select('title')
291
+ .from('books')
292
+ .where('author', 'author_02')
293
+ .as('test');
294
+ const queryBuilder = mockedClient
295
+ .select('id', 'author', subSelect)
296
+ .from('books')
297
+ .whereIn('author', ['author_01', 'author_03', 'author_04'])
298
+ .orderBy('author', 'desc');
299
+ await knexUtils_1.knexUtils.paginate(mockedClient, queryBuilder, 0, 2);
300
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
301
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` from `books` where `author` in (?, ?, ?)) as `_knexSub` limit ?');
302
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 5);
303
+ chai_1.assert.strictEqual(queryInfoCount.bindings[4], 1);
304
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
305
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` from `books` where `author` in (?, ?, ?) order by `author` desc limit ?');
306
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 5);
307
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[4], 2);
308
+ });
309
+ it('More complex select query - offset : 2 | limit : 2', async () => {
310
+ const subSelect = mockedClient
311
+ .select('title')
312
+ .from('books')
313
+ .where('author', 'author_02')
314
+ .as('test');
315
+ const queryBuilder = mockedClient
316
+ .select('id', 'author', subSelect)
317
+ .from('books')
318
+ .whereIn('author', ['author_01', 'author_03', 'author_04'])
319
+ .orderBy('author', 'desc');
320
+ await knexUtils_1.knexUtils.paginate(mockedClient, queryBuilder, 2, 2);
321
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
322
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` from `books` where `author` in (?, ?, ?)) as `_knexSub` limit ?');
323
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 5);
324
+ chai_1.assert.strictEqual(queryInfoCount.bindings[4], 1);
325
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
326
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` from `books` where `author` in (?, ?, ?) order by `author` desc limit ? offset ?');
327
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 6);
328
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[4], 2);
329
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[5], 2);
330
+ });
331
+ it('More complex select query - offset : 3 | limit : 2', async () => {
332
+ const subSelect = mockedClient
333
+ .select('title')
334
+ .from('books')
335
+ .where('author', 'author_02')
336
+ .as('test');
337
+ const queryBuilder = mockedClient
338
+ .select('id', 'author', subSelect)
339
+ .from('books')
340
+ .whereIn('author', ['author_01', 'author_03', 'author_04'])
341
+ .orderBy('author', 'desc');
342
+ await knexUtils_1.knexUtils.paginate(mockedClient, queryBuilder, 3, 2);
343
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
344
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` from `books` where `author` in (?, ?, ?)) as `_knexSub` limit ?');
345
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 5);
346
+ chai_1.assert.strictEqual(queryInfoCount.bindings[4], 1);
347
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
348
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `id`, `author`, (select `title` from `books` where `author` = ?) as `test` from `books` where `author` in (?, ?, ?) order by `author` desc limit ? offset ?');
349
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 6);
350
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[4], 2);
351
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[5], 3);
352
+ });
353
+ it('with distinct', async () => {
354
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.distinct('info').from('books').orderBy('author'), 1, 100);
355
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
356
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select distinct `info` from `books`) as `_knexSub` limit ?');
357
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
358
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
359
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
360
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select distinct `info` from `books` order by `author` asc limit ? offset ?');
361
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 2);
362
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 100);
363
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 1);
364
+ });
365
+ it('with multiple distincts', async () => {
366
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient.distinct('info', 'info2').from('books').orderBy('author'), 0, 2);
367
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
368
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select distinct `info`, `info2` from `books`) as `_knexSub` limit ?');
369
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 1);
370
+ chai_1.assert.strictEqual(queryInfoCount.bindings[0], 1);
371
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
372
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select distinct `info`, `info2` from `books` order by `author` asc limit ?');
373
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 1);
374
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[0], 2);
375
+ });
376
+ it('with multiple distincts and where clause', async () => {
377
+ await knexUtils_1.knexUtils.paginate(mockedClient, mockedClient
378
+ .distinct('info', 'info2')
379
+ .from('books')
380
+ .whereIn('title', ['title_01', 'title_02', 'title_03'])
381
+ .orderBy('author'), 1, 1);
382
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
383
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select distinct `info`, `info2` from `books` where `title` in (?, ?, ?)) as `_knexSub` limit ?');
384
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 4);
385
+ chai_1.assert.strictEqual(queryInfoCount.bindings[3], 1);
386
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
387
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select distinct `info`, `info2` from `books` where `title` in (?, ?, ?) order by `author` asc limit ? offset ?');
388
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 5);
389
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[3], 1);
390
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[4], 1);
391
+ });
392
+ });
393
+ // ==========================================
394
+ // paginate() and count() together
395
+ // ==========================================
396
+ describe('- Full example', () => {
397
+ it('Full example', async () => {
398
+ // ==========================================
399
+ // SELECT query
400
+ // ==========================================
401
+ const query = mockedClient.select('id', 'author', 'title').from('books').orderBy('author');
402
+ // ==========================================
403
+ // Run as is
404
+ // ==========================================
405
+ await query;
406
+ // ==========================================
407
+ // Paginated results
408
+ // offset 0 | limit 3
409
+ // ==========================================
410
+ await knexUtils_1.knexUtils.paginate(mockedClient, query, 0, 3);
411
+ // ==========================================
412
+ // Total count
413
+ // ==========================================
414
+ await knexUtils_1.knexUtils.totalCount(mockedClient, query);
415
+ const queryInfoResultSetAsIs = mockedClient.beforeQuerySpy.getCall(0).args[0];
416
+ chai_1.assert.strictEqual(queryInfoResultSetAsIs.sql, 'select `id`, `author`, `title` from `books` order by `author` asc');
417
+ chai_1.assert.strictEqual(queryInfoResultSetAsIs.bindings.length, 0);
418
+ const queryInfoCountPaginated = mockedClient.beforeQuerySpy.getCall(1).args[0];
419
+ chai_1.assert.strictEqual(queryInfoCountPaginated.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
420
+ chai_1.assert.strictEqual(queryInfoCountPaginated.bindings.length, 1);
421
+ chai_1.assert.strictEqual(queryInfoCountPaginated.bindings[0], 1);
422
+ const queryInfoResultSetPaginated = mockedClient.beforeQuerySpy.getCall(2).args[0];
423
+ chai_1.assert.strictEqual(queryInfoResultSetPaginated.sql, 'select `id`, `author`, `title` from `books` order by `author` asc limit ?');
424
+ chai_1.assert.strictEqual(queryInfoResultSetPaginated.bindings.length, 1);
425
+ chai_1.assert.strictEqual(queryInfoResultSetPaginated.bindings[0], 3);
426
+ const queryInfoCountAlone = mockedClient.beforeQuerySpy.getCall(3).args[0];
427
+ chai_1.assert.strictEqual(queryInfoCountAlone.sql, 'select count(*) as `count` from (select `id`, `author`, `title` from `books`) as `_knexSub` limit ?');
428
+ chai_1.assert.strictEqual(queryInfoCountAlone.bindings.length, 1);
429
+ chai_1.assert.strictEqual(queryInfoCountAlone.bindings[0], 1);
430
+ });
431
+ });
432
+ });
433
+ // ==========================================
434
+ // Knex mocked client
435
+ // ==========================================
436
+ describe('Knex mocked client', () => {
437
+ it('default', async () => {
438
+ const query = mockedClient
439
+ .select('somethingA', 'somethingB')
440
+ .from('someTbale')
441
+ .where('someColumn', 'someValue')
442
+ .orderBy('somethingB');
443
+ const result = await query;
444
+ chai_1.assert.isOk(result);
445
+ chai_1.assert.deepEqual(result, []);
446
+ });
447
+ it('beforeQuerySpy spy', async () => {
448
+ const query = mockedClient
449
+ .select('somethingA', 'somethingB')
450
+ .from('someTbale')
451
+ .where('someColumn', 'someValue')
452
+ .orderBy('somethingB');
453
+ await query;
454
+ chai_1.assert.isTrue(mockedClient.beforeQuerySpy.calledOnce);
455
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
456
+ chai_1.assert.isOk(queryInfo);
457
+ chai_1.assert.isOk(queryInfo.sql);
458
+ chai_1.assert.isOk(queryInfo.bindings);
459
+ chai_1.assert.strictEqual(queryInfo.sql, 'select `somethingA`, `somethingB` from `someTbale` where `someColumn` = ? order by `somethingB` asc');
460
+ chai_1.assert.strictEqual(queryInfo.bindings.length, 1);
461
+ chai_1.assert.strictEqual(queryInfo.bindings[0], 'someValue');
462
+ });
463
+ it('custom result - single value', async () => {
464
+ mockedClient.resultStub.returns(123);
465
+ const query = mockedClient
466
+ .select('somethingA', 'somethingB')
467
+ .from('someTbale')
468
+ .where('someColumn', 'someValue')
469
+ .orderBy('somethingB');
470
+ const result = await query;
471
+ chai_1.assert.isOk(result);
472
+ chai_1.assert.deepEqual(result, 123);
473
+ });
474
+ it('custom result - object', async () => {
475
+ mockedClient.resultStub.returns({
476
+ name: 'toto',
477
+ });
478
+ const query = mockedClient
479
+ .select('somethingA', 'somethingB')
480
+ .from('someTbale')
481
+ .where('someColumn', 'someValue')
482
+ .orderBy('somethingB');
483
+ const result = await query;
484
+ chai_1.assert.isOk(result);
485
+ chai_1.assert.deepEqual(result, {
486
+ name: 'toto',
487
+ });
488
+ });
489
+ it('custom result - array', async () => {
490
+ mockedClient.resultStub.returns([
491
+ {
492
+ name: 'toto',
493
+ },
494
+ {
495
+ name: 'titi',
496
+ },
497
+ ]);
498
+ const query = mockedClient
499
+ .select('somethingA', 'somethingB')
500
+ .from('someTbale')
501
+ .where('someColumn', 'someValue')
502
+ .orderBy('somethingB');
503
+ const result = await query;
504
+ chai_1.assert.isOk(result);
505
+ chai_1.assert.deepEqual(result, [
506
+ {
507
+ name: 'toto',
508
+ },
509
+ {
510
+ name: 'titi',
511
+ },
512
+ ]);
513
+ });
514
+ it('pagination - default', async () => {
515
+ const query = mockedClient
516
+ .select('somethingA', 'somethingB')
517
+ .from('someTbale')
518
+ .where('someColumn', 'someValue')
519
+ .orderBy('somethingB');
520
+ const paginatedResult = await knexUtils_1.knexUtils.paginate(mockedClient, query, 0, 10);
521
+ chai_1.assert.isTrue((0, general_utils_1.isPaginatedResult)(paginatedResult));
522
+ chai_1.assert.strictEqual(paginatedResult.paging.offset, 0);
523
+ chai_1.assert.strictEqual(paginatedResult.paging.limit, 10);
524
+ chai_1.assert.strictEqual(paginatedResult.paging.totalCount, 0);
525
+ chai_1.assert.strictEqual(paginatedResult.items.length, 0);
526
+ });
527
+ it('pagination - custom totalCount', async () => {
528
+ const query = mockedClient
529
+ .select('somethingA', 'somethingB')
530
+ .from('someTbale')
531
+ .where('someColumn', 'someValue')
532
+ .orderBy('somethingB');
533
+ mockedClient.totalCountStub.returns(123);
534
+ const paginatedResult = await knexUtils_1.knexUtils.paginate(mockedClient, query, 0, 10);
535
+ chai_1.assert.isTrue((0, general_utils_1.isPaginatedResult)(paginatedResult));
536
+ chai_1.assert.strictEqual(paginatedResult.paging.offset, 0);
537
+ chai_1.assert.strictEqual(paginatedResult.paging.limit, 10);
538
+ chai_1.assert.strictEqual(paginatedResult.paging.totalCount, 123);
539
+ chai_1.assert.strictEqual(paginatedResult.items.length, 0);
540
+ });
541
+ it('pagination - full example', async () => {
542
+ mockedClient.resultStub.returns([
543
+ {
544
+ name: 'toto',
545
+ },
546
+ {
547
+ name: 'titi',
548
+ },
549
+ ]);
550
+ const query = mockedClient
551
+ .select('somethingA', 'somethingB')
552
+ .from('someTbale')
553
+ .where('someColumn', 'someValue')
554
+ .orderBy('somethingB');
555
+ mockedClient.totalCountStub.returns(123);
556
+ const paginatedResult = await knexUtils_1.knexUtils.paginate(mockedClient, query, 3, 7);
557
+ chai_1.assert.isTrue((0, general_utils_1.isPaginatedResult)(paginatedResult));
558
+ chai_1.assert.strictEqual(paginatedResult.paging.offset, 3);
559
+ chai_1.assert.strictEqual(paginatedResult.paging.limit, 7);
560
+ chai_1.assert.strictEqual(paginatedResult.paging.totalCount, 123);
561
+ chai_1.assert.strictEqual(paginatedResult.items.length, 2);
562
+ chai_1.assert.deepEqual(paginatedResult.items, [
563
+ {
564
+ name: 'toto',
565
+ },
566
+ {
567
+ name: 'titi',
568
+ },
569
+ ]);
570
+ chai_1.assert.isTrue(mockedClient.beforeQuerySpy.calledTwice);
571
+ const queryInfo = mockedClient.beforeQuerySpy.getCall(0).args[0];
572
+ chai_1.assert.isOk(queryInfo);
573
+ chai_1.assert.isOk(queryInfo.sql);
574
+ chai_1.assert.isOk(queryInfo.bindings);
575
+ const queryInfoCount = mockedClient.beforeQuerySpy.getCall(0).args[0];
576
+ chai_1.assert.strictEqual(queryInfoCount.sql, 'select count(*) as `count` from (select `somethingA`, `somethingB` from `someTbale` where `someColumn` = ?) as `_knexSub` limit ?');
577
+ chai_1.assert.strictEqual(queryInfoCount.bindings.length, 2);
578
+ chai_1.assert.strictEqual(queryInfoCount.bindings[1], 1);
579
+ const queryInfoResultSet = mockedClient.beforeQuerySpy.getCall(1).args[0];
580
+ chai_1.assert.strictEqual(queryInfoResultSet.sql, 'select `somethingA`, `somethingB` from `someTbale` where `someColumn` = ? order by `somethingB` asc limit ? offset ?');
581
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings.length, 3);
582
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[1], 7);
583
+ chai_1.assert.strictEqual(queryInfoResultSet.bindings[2], 3);
584
+ });
585
+ it('transaction - select', async () => {
586
+ mockedClient.resultStub.returns(123);
587
+ await mockedClient.transaction(async (trx) => {
588
+ const query = trx
589
+ .select('somethingA', 'somethingB')
590
+ .from('someTbale')
591
+ .where('someColumn', 'someValue')
592
+ .orderBy('somethingB');
593
+ const result = await query;
594
+ chai_1.assert.isOk(result);
595
+ chai_1.assert.deepEqual(result, 123);
596
+ });
597
+ });
598
+ it('transaction - update', async () => {
599
+ mockedClient.resultStub.returns(123);
600
+ await mockedClient.transaction(async (trx) => {
601
+ const query = trx('someTable')
602
+ .update({
603
+ someColumn: 'someValue2',
604
+ })
605
+ .where('someColumn', 'someValue');
606
+ const result = await query;
607
+ chai_1.assert.isOk(result);
608
+ chai_1.assert.deepEqual(result, 123);
609
+ });
610
+ });
611
+ it('transaction - insert', async () => {
612
+ mockedClient.resultStub.returns(123);
613
+ await mockedClient.transaction(async (trx) => {
614
+ const query = trx('someTable')
615
+ .insert({
616
+ someColumn: 'someValue2',
617
+ })
618
+ .returning('someColumn');
619
+ const result = await query;
620
+ chai_1.assert.isOk(result);
621
+ chai_1.assert.deepEqual(result, 123);
622
+ });
623
+ });
624
+ });
625
+ // ==========================================
626
+ // wrapWithOracleModificationkeywords
627
+ // ==========================================
628
+ describe('- wrapWithOracleModificationkeywords()', () => {
629
+ it('no convert, no lower', async () => {
630
+ let result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('test', false, false);
631
+ chai_1.assert.strictEqual(result, 'test');
632
+ result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('?', false, false);
633
+ chai_1.assert.strictEqual(result, '?');
634
+ });
635
+ it('convert, no lower', async () => {
636
+ let result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('test', true, false);
637
+ chai_1.assert.strictEqual(result, "CONVERT(test, 'US7ASCII', 'WE8ISO8859P1')");
638
+ result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('?', true, false);
639
+ chai_1.assert.strictEqual(result, "CONVERT(?, 'US7ASCII', 'WE8ISO8859P1')");
640
+ });
641
+ it('no convert, lower', async () => {
642
+ let result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('test', false, true);
643
+ chai_1.assert.strictEqual(result, 'LOWER(test)');
644
+ result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('?', false, true);
645
+ chai_1.assert.strictEqual(result, 'LOWER(?)');
646
+ });
647
+ it('convert, lower', async () => {
648
+ let result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('test', true, true);
649
+ chai_1.assert.strictEqual(result, "LOWER(CONVERT(test, 'US7ASCII', 'WE8ISO8859P1'))");
650
+ result = knexUtils_1.knexUtils.wrapWithOracleModificationkeywords('?', true, true);
651
+ chai_1.assert.strictEqual(result, "LOWER(CONVERT(?, 'US7ASCII', 'WE8ISO8859P1'))");
652
+ });
653
+ });
654
+ // ==========================================
655
+ // addOracleLikeClause
656
+ // ==========================================
657
+ describe('- addOracleLikeClause()', () => {
658
+ let queryBuilder;
659
+ beforeEach(async () => {
660
+ queryBuilder = mockedClient.select('titi');
661
+ });
662
+ it('no convert, no lower, no wildcard', async () => {
663
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val', false, false);
664
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where `test` = 'val'");
665
+ });
666
+ it('no convert, no lower, wildcard left', async () => {
667
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val', false, false);
668
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where test LIKE '%' || 'val'");
669
+ });
670
+ it('no convert, no lower, wildcard right', async () => {
671
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val*', false, false);
672
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where test LIKE 'val' || '%'");
673
+ });
674
+ it('no convert, no lower, wildcard left right', async () => {
675
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val*', false, false);
676
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where test LIKE '%' || 'val' || '%'");
677
+ });
678
+ // ---
679
+ it('convert, no lower, no wildcard', async () => {
680
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val', true, false);
681
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where CONVERT(test, 'US7ASCII', 'WE8ISO8859P1') LIKE CONVERT('val', 'US7ASCII', 'WE8ISO8859P1')");
682
+ });
683
+ it('convert, no lower, wildcard left', async () => {
684
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val', true, false);
685
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where CONVERT(test, 'US7ASCII', 'WE8ISO8859P1') LIKE '%' || CONVERT('val', 'US7ASCII', 'WE8ISO8859P1')");
686
+ });
687
+ it('convert, no lower, wildcard right', async () => {
688
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val*', true, false);
689
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where CONVERT(test, 'US7ASCII', 'WE8ISO8859P1') LIKE CONVERT('val', 'US7ASCII', 'WE8ISO8859P1') || '%'");
690
+ });
691
+ it('convert, no lower, wildcard left right', async () => {
692
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val*', true, false);
693
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where CONVERT(test, 'US7ASCII', 'WE8ISO8859P1') LIKE '%' || CONVERT('val', 'US7ASCII', 'WE8ISO8859P1') || '%'");
694
+ });
695
+ // ---
696
+ it('no convert, lower, no wildcard', async () => {
697
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val', false, true);
698
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE LOWER('val')");
699
+ });
700
+ it('no convert, lower, wildcard left', async () => {
701
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val', false, true);
702
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE '%' || LOWER('val')");
703
+ });
704
+ it('no convert, lower, wildcard right', async () => {
705
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val*', false, true);
706
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE LOWER('val') || '%'");
707
+ });
708
+ it('no convert, lower, wildcard left right', async () => {
709
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val*', false, true);
710
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE '%' || LOWER('val') || '%'");
711
+ });
712
+ // ---
713
+ it('convert, lower, no wildcard', async () => {
714
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val', true, true);
715
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(CONVERT(test, 'US7ASCII', 'WE8ISO8859P1')) LIKE LOWER(CONVERT('val', 'US7ASCII', 'WE8ISO8859P1'))");
716
+ });
717
+ it('convert, lower, wildcard left', async () => {
718
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val', true, true);
719
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(CONVERT(test, 'US7ASCII', 'WE8ISO8859P1')) LIKE '%' || LOWER(CONVERT('val', 'US7ASCII', 'WE8ISO8859P1'))");
720
+ });
721
+ it('convert, lower, wildcard right', async () => {
722
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', 'val*', true, true);
723
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(CONVERT(test, 'US7ASCII', 'WE8ISO8859P1')) LIKE LOWER(CONVERT('val', 'US7ASCII', 'WE8ISO8859P1')) || '%'");
724
+ });
725
+ it('convert, lower, wildcard left right', async () => {
726
+ const result = knexUtils_1.knexUtils.addOracleLikeClause(queryBuilder, 'test', '*val*', true, true);
727
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(CONVERT(test, 'US7ASCII', 'WE8ISO8859P1')) LIKE '%' || LOWER(CONVERT('val', 'US7ASCII', 'WE8ISO8859P1')) || '%'");
728
+ });
729
+ });
730
+ // ==========================================
731
+ // wrapWithSqlServerModificationKeywords
732
+ // ==========================================
733
+ describe('- wrapWithSqlServerModificationKeywords()', () => {
734
+ it('no convert, no lower', async () => {
735
+ let result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('test', false, false);
736
+ chai_1.assert.strictEqual(result, 'test');
737
+ result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('?', false, false);
738
+ chai_1.assert.strictEqual(result, '?');
739
+ });
740
+ it('convert, no lower', async () => {
741
+ let result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('test', true, false);
742
+ chai_1.assert.strictEqual(result, `CAST(` +
743
+ `REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')` +
744
+ `AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS`);
745
+ result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('?', true, false);
746
+ chai_1.assert.strictEqual(result, `CAST(` +
747
+ `REPLACE(REPLACE(REPLACE(REPLACE(?, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')` +
748
+ `AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS`);
749
+ });
750
+ it('no convert, lower', async () => {
751
+ let result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('test', false, true);
752
+ chai_1.assert.strictEqual(result, 'LOWER(test)');
753
+ result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('?', false, true);
754
+ chai_1.assert.strictEqual(result, 'LOWER(?)');
755
+ });
756
+ it('convert, lower', async () => {
757
+ let result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('test', true, true);
758
+ chai_1.assert.strictEqual(result, `LOWER(CAST(` +
759
+ `REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')` +
760
+ `AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS)`);
761
+ result = knexUtils_1.knexUtils.wrapWithSqlServerModificationKeywords('?', true, true);
762
+ chai_1.assert.strictEqual(result, `LOWER(CAST(` +
763
+ `REPLACE(REPLACE(REPLACE(REPLACE(?, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')` +
764
+ `AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS)`);
765
+ });
766
+ });
767
+ // ==========================================
768
+ // addSqlServerLikeClause
769
+ // ==========================================
770
+ describe('- addSqlServerLikeClause()', () => {
771
+ let queryBuilder;
772
+ beforeEach(async () => {
773
+ queryBuilder = mockedClient.select('titi');
774
+ });
775
+ describe('- wildcards allowed', () => {
776
+ it('no convert, no lower, no wildcard', async () => {
777
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val', true, false, false);
778
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where `test` = 'val'");
779
+ });
780
+ it('no convert, no lower, wildcard left', async () => {
781
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val', true, false, false);
782
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where test LIKE '%' + 'val'");
783
+ });
784
+ it('no convert, no lower, wildcard right', async () => {
785
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val*', true, false, false);
786
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where test LIKE 'val' + '%'");
787
+ });
788
+ it('no convert, no lower, wildcard left right', async () => {
789
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val*', true, false, false);
790
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where test LIKE '%' + 'val' + '%'");
791
+ });
792
+ // ---
793
+ it('convert, no lower, no wildcard', async () => {
794
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val', true, true, false);
795
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where CAST(' +
796
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
797
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS ' +
798
+ 'LIKE CAST(' +
799
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
800
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS');
801
+ });
802
+ it('convert, no lower, wildcard left', async () => {
803
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val', true, true, false);
804
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where CAST(' +
805
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
806
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS ' +
807
+ "LIKE '%' + CAST(" +
808
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
809
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS');
810
+ });
811
+ it('convert, no lower, wildcard right', async () => {
812
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val*', true, true, false);
813
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where CAST(' +
814
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
815
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS ' +
816
+ 'LIKE CAST(' +
817
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
818
+ "AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS + '%'");
819
+ });
820
+ it('convert, no lower, wildcard left right', async () => {
821
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val*', true, true, false);
822
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where CAST(' +
823
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
824
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS ' +
825
+ "LIKE '%' + CAST(" +
826
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
827
+ "AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS + '%'");
828
+ });
829
+ // ---
830
+ it('no convert, lower, no wildcard', async () => {
831
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val', true, false, true);
832
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE LOWER('val')");
833
+ });
834
+ it('no convert, lower, wildcard left', async () => {
835
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val', true, false, true);
836
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE '%' + LOWER('val')");
837
+ });
838
+ it('no convert, lower, wildcard right', async () => {
839
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val*', true, false, true);
840
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE LOWER('val') + '%'");
841
+ });
842
+ it('no convert, lower, wildcard left right', async () => {
843
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val*', true, false, true);
844
+ chai_1.assert.strictEqual(result.toQuery(), "select `titi` where LOWER(test) LIKE '%' + LOWER('val') + '%'");
845
+ });
846
+ // ---
847
+ it('convert, lower, no wildcard', async () => {
848
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val', true, true, true);
849
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where LOWER(CAST(' +
850
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
851
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) ' +
852
+ 'LIKE LOWER(CAST(' +
853
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
854
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS)');
855
+ });
856
+ it('convert, lower, wildcard left', async () => {
857
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val', true, true, true);
858
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where LOWER(CAST(' +
859
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
860
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) ' +
861
+ "LIKE '%' + LOWER(CAST(" +
862
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
863
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS)');
864
+ });
865
+ it('convert, lower, wildcard right', async () => {
866
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', 'val*', true, true, true);
867
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where LOWER(CAST(' +
868
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
869
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) ' +
870
+ 'LIKE LOWER(CAST(' +
871
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
872
+ "AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) + '%'");
873
+ });
874
+ it('convert, lower, wildcard left right', async () => {
875
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val*', true, true, true);
876
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where LOWER(CAST(' +
877
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
878
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) ' +
879
+ "LIKE '%' + LOWER(CAST(" +
880
+ "REPLACE(REPLACE(REPLACE(REPLACE('val', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
881
+ "AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) + '%'");
882
+ });
883
+ });
884
+ describe('- no wildcards allowed', () => {
885
+ it('no convert, no lower, no wildcard', async () => {
886
+ const result = knexUtils_1.knexUtils.addSqlServerLikeClause(queryBuilder, 'test', '*val*', false, true, true);
887
+ chai_1.assert.strictEqual(result.toQuery(), 'select `titi` where LOWER(CAST(' +
888
+ "REPLACE(REPLACE(REPLACE(REPLACE(test, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
889
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) ' +
890
+ 'LIKE LOWER(CAST(' +
891
+ "REPLACE(REPLACE(REPLACE(REPLACE('*val*', 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')" +
892
+ 'AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS)');
893
+ });
894
+ });
895
+ });
896
+ });
897
+ //# sourceMappingURL=knexUtils.test.js.map