1
- import { anything , instance , mock , verify , when , deepEqual } from 'ts-mockito' ;
2
- import { QueryBuilder , WhereExpression } from 'typeorm' ;
3
1
import { Class , Filter , Query , SortDirection , SortNulls } from '@nestjs-query/core' ;
2
+ import { anything , deepEqual , instance , mock , verify , when } from 'ts-mockito' ;
3
+ import { QueryBuilder , WhereExpression } from 'typeorm' ;
4
+ import { CustomFilterRegistry , FilterQueryBuilder , WhereBuilder } from '../../src/query' ;
4
5
import { closeTestConnection , createTestConnection , getTestConnection } from '../__fixtures__/connection.fixture' ;
5
6
import { TestSoftDeleteEntity } from '../__fixtures__/test-soft-delete.entity' ;
6
7
import { TestEntity } from '../__fixtures__/test.entity' ;
7
- import { FilterQueryBuilder , WhereBuilder } from '../../src/query' ;
8
8
9
9
describe ( 'FilterQueryBuilder' , ( ) : void => {
10
10
beforeEach ( createTestConnection ) ;
@@ -98,15 +98,23 @@ describe('FilterQueryBuilder', (): void => {
98
98
it ( 'should not call whereBuilder#build' , ( ) => {
99
99
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
100
100
expectSelectSQLSnapshot ( { } , instance ( mockWhereBuilder ) ) ;
101
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
101
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
102
102
} ) ;
103
103
104
104
it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
105
105
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
106
106
const query = { filter : { stringType : { eq : 'foo' } } } ;
107
- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , 'TestEntity' ) ) . thenCall (
108
- ( where : WhereExpression , field : Filter < TestEntity > , relationNames : string [ ] , alias : string ) =>
109
- where . andWhere ( `${ alias } .stringType = 'foo'` ) ,
107
+ when (
108
+ mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , TestEntity , undefined , 'TestEntity' ) ,
109
+ ) . thenCall (
110
+ (
111
+ where : WhereExpression ,
112
+ field : Filter < TestEntity > ,
113
+ relationNames : string [ ] ,
114
+ klass : Class < any > ,
115
+ customFilters : CustomFilterRegistry ,
116
+ alias : string ,
117
+ ) => where . andWhere ( `${ alias } .stringType = 'foo'` ) ,
110
118
) ;
111
119
expectSelectSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
112
120
} ) ;
@@ -116,19 +124,23 @@ describe('FilterQueryBuilder', (): void => {
116
124
it ( 'should apply empty paging args' , ( ) => {
117
125
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
118
126
expectSelectSQLSnapshot ( { } , instance ( mockWhereBuilder ) ) ;
119
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( { } ) , 'TestEntity' ) ) . never ( ) ;
127
+ verify (
128
+ mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( { } ) , TestEntity , undefined , 'TestEntity' ) ,
129
+ ) . never ( ) ;
120
130
} ) ;
121
131
122
132
it ( 'should apply paging args going forward' , ( ) => {
123
133
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
124
134
expectSelectSQLSnapshot ( { paging : { limit : 10 , offset : 11 } } , instance ( mockWhereBuilder ) ) ;
125
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( { } ) , 'TestEntity' ) ) . never ( ) ;
135
+ verify (
136
+ mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( { } ) , TestEntity , undefined , 'TestEntity' ) ,
137
+ ) . never ( ) ;
126
138
} ) ;
127
139
128
140
it ( 'should apply paging args going backward' , ( ) => {
129
141
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
130
142
expectSelectSQLSnapshot ( { paging : { limit : 10 , offset : 10 } } , instance ( mockWhereBuilder ) ) ;
131
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
143
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
132
144
} ) ;
133
145
} ) ;
134
146
@@ -139,7 +151,7 @@ describe('FilterQueryBuilder', (): void => {
139
151
{ sorting : [ { field : 'numberType' , direction : SortDirection . ASC } ] } ,
140
152
instance ( mockWhereBuilder ) ,
141
153
) ;
142
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
154
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
143
155
} ) ;
144
156
145
157
it ( 'should apply ASC NULLS_FIRST sorting' , ( ) => {
@@ -148,7 +160,7 @@ describe('FilterQueryBuilder', (): void => {
148
160
{ sorting : [ { field : 'numberType' , direction : SortDirection . ASC , nulls : SortNulls . NULLS_FIRST } ] } ,
149
161
instance ( mockWhereBuilder ) ,
150
162
) ;
151
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
163
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
152
164
} ) ;
153
165
154
166
it ( 'should apply ASC NULLS_LAST sorting' , ( ) => {
@@ -157,7 +169,7 @@ describe('FilterQueryBuilder', (): void => {
157
169
{ sorting : [ { field : 'numberType' , direction : SortDirection . ASC , nulls : SortNulls . NULLS_LAST } ] } ,
158
170
instance ( mockWhereBuilder ) ,
159
171
) ;
160
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
172
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
161
173
} ) ;
162
174
163
175
it ( 'should apply DESC sorting' , ( ) => {
@@ -166,7 +178,7 @@ describe('FilterQueryBuilder', (): void => {
166
178
{ sorting : [ { field : 'numberType' , direction : SortDirection . DESC } ] } ,
167
179
instance ( mockWhereBuilder ) ,
168
180
) ;
169
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
181
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
170
182
} ) ;
171
183
172
184
it ( 'should apply DESC NULLS_FIRST sorting' , ( ) => {
@@ -183,7 +195,7 @@ describe('FilterQueryBuilder', (): void => {
183
195
{ sorting : [ { field : 'numberType' , direction : SortDirection . DESC , nulls : SortNulls . NULLS_LAST } ] } ,
184
196
instance ( mockWhereBuilder ) ,
185
197
) ;
186
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
198
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
187
199
} ) ;
188
200
189
201
it ( 'should apply multiple sorts' , ( ) => {
@@ -199,7 +211,7 @@ describe('FilterQueryBuilder', (): void => {
199
211
} ,
200
212
instance ( mockWhereBuilder ) ,
201
213
) ;
202
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
214
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , TestEntity , undefined , 'TestEntity' ) ) . never ( ) ;
203
215
} ) ;
204
216
} ) ;
205
217
} ) ;
@@ -214,17 +226,17 @@ describe('FilterQueryBuilder', (): void => {
214
226
it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
215
227
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
216
228
const query = { filter : { stringType : { eq : 'foo' } } } ;
217
- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , undefined ) ) . thenCall (
218
- ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ,
219
- ) ;
229
+ when (
230
+ mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , TestEntity , undefined , undefined ) ,
231
+ ) . thenCall ( ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ) ;
220
232
expectUpdateSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
221
233
} ) ;
222
234
} ) ;
223
235
describe ( 'with paging' , ( ) => {
224
236
it ( 'should ignore paging args' , ( ) => {
225
237
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
226
238
expectUpdateSQLSnapshot ( { paging : { limit : 10 , offset : 11 } } , instance ( mockWhereBuilder ) ) ;
227
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
239
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
228
240
} ) ;
229
241
} ) ;
230
242
@@ -235,7 +247,7 @@ describe('FilterQueryBuilder', (): void => {
235
247
{ sorting : [ { field : 'numberType' , direction : SortDirection . ASC } ] } ,
236
248
instance ( mockWhereBuilder ) ,
237
249
) ;
238
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
250
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
239
251
} ) ;
240
252
241
253
it ( 'should apply ASC NULLS_FIRST sorting' , ( ) => {
@@ -244,7 +256,7 @@ describe('FilterQueryBuilder', (): void => {
244
256
{ sorting : [ { field : 'numberType' , direction : SortDirection . ASC , nulls : SortNulls . NULLS_FIRST } ] } ,
245
257
instance ( mockWhereBuilder ) ,
246
258
) ;
247
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
259
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
248
260
} ) ;
249
261
250
262
it ( 'should apply ASC NULLS_LAST sorting' , ( ) => {
@@ -253,7 +265,7 @@ describe('FilterQueryBuilder', (): void => {
253
265
{ sorting : [ { field : 'numberType' , direction : SortDirection . ASC , nulls : SortNulls . NULLS_LAST } ] } ,
254
266
instance ( mockWhereBuilder ) ,
255
267
) ;
256
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
268
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
257
269
} ) ;
258
270
259
271
it ( 'should apply DESC sorting' , ( ) => {
@@ -262,7 +274,7 @@ describe('FilterQueryBuilder', (): void => {
262
274
{ sorting : [ { field : 'numberType' , direction : SortDirection . DESC } ] } ,
263
275
instance ( mockWhereBuilder ) ,
264
276
) ;
265
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
277
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
266
278
} ) ;
267
279
268
280
it ( 'should apply DESC NULLS_FIRST sorting' , ( ) => {
@@ -271,7 +283,7 @@ describe('FilterQueryBuilder', (): void => {
271
283
{ sorting : [ { field : 'numberType' , direction : SortDirection . DESC , nulls : SortNulls . NULLS_FIRST } ] } ,
272
284
instance ( mockWhereBuilder ) ,
273
285
) ;
274
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
286
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
275
287
} ) ;
276
288
277
289
it ( 'should apply DESC NULLS_LAST sorting' , ( ) => {
@@ -280,7 +292,7 @@ describe('FilterQueryBuilder', (): void => {
280
292
{ sorting : [ { field : 'numberType' , direction : SortDirection . DESC , nulls : SortNulls . NULLS_LAST } ] } ,
281
293
instance ( mockWhereBuilder ) ,
282
294
) ;
283
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
295
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
284
296
} ) ;
285
297
286
298
it ( 'should apply multiple sorts' , ( ) => {
@@ -296,7 +308,7 @@ describe('FilterQueryBuilder', (): void => {
296
308
} ,
297
309
instance ( mockWhereBuilder ) ,
298
310
) ;
299
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
311
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
300
312
} ) ;
301
313
} ) ;
302
314
} ) ;
@@ -311,17 +323,17 @@ describe('FilterQueryBuilder', (): void => {
311
323
it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
312
324
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
313
325
const query = { filter : { stringType : { eq : 'foo' } } } ;
314
- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , undefined ) ) . thenCall (
315
- ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ,
316
- ) ;
326
+ when (
327
+ mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , TestEntity , undefined , undefined ) ,
328
+ ) . thenCall ( ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ) ;
317
329
expectDeleteSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
318
330
} ) ;
319
331
} ) ;
320
332
describe ( 'with paging' , ( ) => {
321
333
it ( 'should ignore paging args' , ( ) => {
322
334
const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
323
335
expectDeleteSQLSnapshot ( { paging : { limit : 10 , offset : 11 } } , instance ( mockWhereBuilder ) ) ;
324
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
336
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
325
337
} ) ;
326
338
} ) ;
327
339
@@ -339,7 +351,7 @@ describe('FilterQueryBuilder', (): void => {
339
351
} ,
340
352
instance ( mockWhereBuilder ) ,
341
353
) ;
342
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
354
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
343
355
} ) ;
344
356
} ) ;
345
357
} ) ;
@@ -357,17 +369,17 @@ describe('FilterQueryBuilder', (): void => {
357
369
it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
358
370
const mockWhereBuilder = mock < WhereBuilder < TestSoftDeleteEntity > > ( WhereBuilder ) ;
359
371
const query = { filter : { stringType : { eq : 'foo' } } } ;
360
- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , undefined ) ) . thenCall (
361
- ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ,
362
- ) ;
372
+ when (
373
+ mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , TestSoftDeleteEntity , undefined , undefined ) ,
374
+ ) . thenCall ( ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ) ;
363
375
expectSoftDeleteSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
364
376
} ) ;
365
377
} ) ;
366
378
describe ( 'with paging' , ( ) => {
367
379
it ( 'should ignore paging args' , ( ) => {
368
380
const mockWhereBuilder = mock < WhereBuilder < TestSoftDeleteEntity > > ( WhereBuilder ) ;
369
381
expectSoftDeleteSQLSnapshot ( { paging : { limit : 10 , offset : 11 } } , instance ( mockWhereBuilder ) ) ;
370
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
382
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
371
383
} ) ;
372
384
} ) ;
373
385
@@ -383,7 +395,7 @@ describe('FilterQueryBuilder', (): void => {
383
395
} ,
384
396
instance ( mockWhereBuilder ) ,
385
397
) ;
386
- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
398
+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , anything ( ) , anything ( ) ) ) . never ( ) ;
387
399
} ) ;
388
400
} ) ;
389
401
} ) ;
0 commit comments