@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.
- package/README.md +236 -0
- package/dist/src/config/configs.d.ts +19 -0
- package/dist/src/config/configs.d.ts.map +1 -0
- package/dist/src/config/configs.js +27 -0
- package/dist/src/config/configs.js.map +1 -0
- package/dist/src/config/constants.d.ts +21 -0
- package/dist/src/config/constants.d.ts.map +1 -0
- package/dist/src/config/constants.js +21 -0
- package/dist/src/config/constants.js.map +1 -0
- package/dist/src/config/init.d.ts +16 -0
- package/dist/src/config/init.d.ts.map +1 -0
- package/dist/src/config/init.js +33 -0
- package/dist/src/config/init.js.map +1 -0
- package/dist/src/databaseContext.d.ts +9 -0
- package/dist/src/databaseContext.d.ts.map +1 -0
- package/dist/src/databaseContext.js +3 -0
- package/dist/src/databaseContext.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +26 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/knexUtils.d.ts +134 -0
- package/dist/src/knexUtils.d.ts.map +1 -0
- package/dist/src/knexUtils.js +349 -0
- package/dist/src/knexUtils.js.map +1 -0
- package/dist/src/knexUtils.test.d.ts +2 -0
- package/dist/src/knexUtils.test.d.ts.map +1 -0
- package/dist/src/knexUtils.test.js +897 -0
- package/dist/src/knexUtils.test.js.map +1 -0
- package/dist/src/transactionManager.d.ts +34 -0
- package/dist/src/transactionManager.d.ts.map +1 -0
- package/dist/src/transactionManager.js +75 -0
- package/dist/src/transactionManager.js.map +1 -0
- package/dist/src/transactionManager.test.d.ts +10 -0
- package/dist/src/transactionManager.test.d.ts.map +1 -0
- package/dist/src/transactionManager.test.js +255 -0
- package/dist/src/transactionManager.test.js.map +1 -0
- package/dist/src/utils/logger.d.ts +12 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +53 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/testingConfigurations.d.ts +9 -0
- package/dist/src/utils/testingConfigurations.d.ts.map +1 -0
- package/dist/src/utils/testingConfigurations.js +16 -0
- package/dist/src/utils/testingConfigurations.js.map +1 -0
- package/dist/testing/testClient.d.ts +15 -0
- package/dist/testing/testClient.d.ts.map +1 -0
- package/dist/testing/testClient.js +55 -0
- package/dist/testing/testClient.js.map +1 -0
- package/dist/testing/testRepo.d.ts +8 -0
- package/dist/testing/testRepo.d.ts.map +1 -0
- package/dist/testing/testRepo.js +31 -0
- package/dist/testing/testRepo.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +76 -0
- package/src/config/configs.ts +34 -0
- package/src/config/constants.ts +33 -0
- package/src/config/init.ts +33 -0
- package/src/databaseContext.ts +9 -0
- package/src/index.ts +9 -0
- package/src/knexUtils.test.ts +1526 -0
- package/src/knexUtils.ts +459 -0
- package/src/transactionManager.test.ts +302 -0
- package/src/transactionManager.ts +94 -0
- package/src/utils/logger.ts +60 -0
- 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
|