@@ -14,10 +14,10 @@ const masterKeyOptions = {
14
14
}
15
15
16
16
const loadTestData = ( ) => {
17
- const data1 = { score : 10 , name : 'foo' , sender : { group : 'A' } , size : [ 'S' , 'M' ] } ;
18
- const data2 = { score : 10 , name : 'foo' , sender : { group : 'A' } , size : [ 'M' , 'L' ] } ;
19
- const data3 = { score : 10 , name : 'bar' , sender : { group : 'B' } , size : [ 'S' ] } ;
20
- const data4 = { score : 20 , name : 'dpl' , sender : { group : 'B' } , size : [ 'S' ] } ;
17
+ const data1 = { score : 10 , name : 'foo' , sender : { group : 'A' } , views : 900 , size : [ 'S' , 'M' ] } ;
18
+ const data2 = { score : 10 , name : 'foo' , sender : { group : 'A' } , views : 800 , size : [ 'M' , 'L' ] } ;
19
+ const data3 = { score : 10 , name : 'bar' , sender : { group : 'B' } , views : 700 , size : [ 'S' ] } ;
20
+ const data4 = { score : 20 , name : 'dpl' , sender : { group : 'B' } , views : 700 , size : [ 'S' ] } ;
21
21
const obj1 = new TestObject ( data1 ) ;
22
22
const obj2 = new TestObject ( data2 ) ;
23
23
const obj3 = new TestObject ( data3 ) ;
@@ -96,6 +96,27 @@ describe('Parse.Query Aggregate testing', () => {
96
96
} ) . catch ( done . fail ) ;
97
97
} ) ;
98
98
99
+ it ( 'group by pointer' , ( done ) => {
100
+ const pointer1 = new TestObject ( ) ;
101
+ const pointer2 = new TestObject ( ) ;
102
+ const obj1 = new TestObject ( { pointer : pointer1 } ) ;
103
+ const obj2 = new TestObject ( { pointer : pointer2 } ) ;
104
+ const obj3 = new TestObject ( { pointer : pointer1 } ) ;
105
+ const pipeline = [
106
+ { group : { objectId : '$pointer' } }
107
+ ] ;
108
+ Parse . Object . saveAll ( [ pointer1 , pointer2 , obj1 , obj2 , obj3 ] ) . then ( ( ) => {
109
+ const query = new Parse . Query ( TestObject ) ;
110
+ return query . aggregate ( pipeline ) ;
111
+ } ) . then ( ( results ) => {
112
+ expect ( results . length ) . toEqual ( 3 ) ;
113
+ expect ( results . some ( result => result . objectId === pointer1 . id ) ) . toEqual ( true ) ;
114
+ expect ( results . some ( result => result . objectId === pointer2 . id ) ) . toEqual ( true ) ;
115
+ expect ( results . some ( result => result . objectId === null ) ) . toEqual ( true ) ;
116
+ done ( ) ;
117
+ } ) ;
118
+ } ) ;
119
+
99
120
it ( 'group sum query' , ( done ) => {
100
121
const options = Object . assign ( { } , masterKeyOptions , {
101
122
body : {
@@ -231,7 +252,7 @@ describe('Parse.Query Aggregate testing', () => {
231
252
} ) . catch ( done . fail ) ;
232
253
} ) ;
233
254
234
- it ( 'match query' , ( done ) => {
255
+ it ( 'match comparison query' , ( done ) => {
235
256
const options = Object . assign ( { } , masterKeyOptions , {
236
257
body : {
237
258
match : { score : { $gt : 15 } } ,
@@ -245,6 +266,127 @@ describe('Parse.Query Aggregate testing', () => {
245
266
} ) . catch ( done . fail ) ;
246
267
} ) ;
247
268
269
+ it ( 'match multiple comparison query' , ( done ) => {
270
+ const options = Object . assign ( { } , masterKeyOptions , {
271
+ body : {
272
+ match : { score : { $gt : 5 , $lt : 15 } } ,
273
+ }
274
+ } ) ;
275
+ rp . get ( Parse . serverURL + '/aggregate/TestObject' , options )
276
+ . then ( ( resp ) => {
277
+ expect ( resp . results . length ) . toBe ( 3 ) ;
278
+ expect ( resp . results [ 0 ] . score ) . toBe ( 10 ) ;
279
+ expect ( resp . results [ 1 ] . score ) . toBe ( 10 ) ;
280
+ expect ( resp . results [ 2 ] . score ) . toBe ( 10 ) ;
281
+ done ( ) ;
282
+ } ) . catch ( done . fail ) ;
283
+ } ) ;
284
+
285
+ it ( 'match complex comparison query' , ( done ) => {
286
+ const options = Object . assign ( { } , masterKeyOptions , {
287
+ body : {
288
+ match : { score : { $gt : 5 , $lt : 15 } , views : { $gt : 850 , $lt : 1000 } } ,
289
+ }
290
+ } ) ;
291
+ rp . get ( Parse . serverURL + '/aggregate/TestObject' , options )
292
+ . then ( ( resp ) => {
293
+ expect ( resp . results . length ) . toBe ( 1 ) ;
294
+ expect ( resp . results [ 0 ] . score ) . toBe ( 10 ) ;
295
+ expect ( resp . results [ 0 ] . views ) . toBe ( 900 ) ;
296
+ done ( ) ;
297
+ } ) . catch ( done . fail ) ;
298
+ } ) ;
299
+
300
+ it ( 'match comparison and equality query' , ( done ) => {
301
+ const options = Object . assign ( { } , masterKeyOptions , {
302
+ body : {
303
+ match : { score : { $gt : 5 , $lt : 15 } , views : 900 } ,
304
+ }
305
+ } ) ;
306
+ rp . get ( Parse . serverURL + '/aggregate/TestObject' , options )
307
+ . then ( ( resp ) => {
308
+ expect ( resp . results . length ) . toBe ( 1 ) ;
309
+ expect ( resp . results [ 0 ] . score ) . toBe ( 10 ) ;
310
+ expect ( resp . results [ 0 ] . views ) . toBe ( 900 ) ;
311
+ done ( ) ;
312
+ } ) . catch ( done . fail ) ;
313
+ } ) ;
314
+
315
+ it ( 'match $or query' , ( done ) => {
316
+ const options = Object . assign ( { } , masterKeyOptions , {
317
+ body : {
318
+ match : { $or : [ { score : { $gt : 15 , $lt : 25 } } , { views : { $gt : 750 , $lt : 850 } } ] } ,
319
+ }
320
+ } ) ;
321
+ rp . get ( Parse . serverURL + '/aggregate/TestObject' , options )
322
+ . then ( ( resp ) => {
323
+ expect ( resp . results . length ) . toBe ( 2 ) ;
324
+ // Match score { $gt: 15, $lt: 25 }
325
+ expect ( resp . results . some ( result => result . score === 20 ) ) . toEqual ( true ) ;
326
+ expect ( resp . results . some ( result => result . views === 700 ) ) . toEqual ( true ) ;
327
+
328
+ // Match view { $gt: 750, $lt: 850 }
329
+ expect ( resp . results . some ( result => result . score === 10 ) ) . toEqual ( true ) ;
330
+ expect ( resp . results . some ( result => result . views === 800 ) ) . toEqual ( true ) ;
331
+ done ( ) ;
332
+ } ) . catch ( done . fail ) ;
333
+ } ) ;
334
+
335
+ it ( 'match objectId query' , ( done ) => {
336
+ const obj1 = new TestObject ( ) ;
337
+ const obj2 = new TestObject ( ) ;
338
+ Parse . Object . saveAll ( [ obj1 , obj2 ] ) . then ( ( ) => {
339
+ const pipeline = [
340
+ { match : { objectId : obj1 . id } }
341
+ ] ;
342
+ const query = new Parse . Query ( TestObject ) ;
343
+ return query . aggregate ( pipeline ) ;
344
+ } ) . then ( ( results ) => {
345
+ expect ( results . length ) . toEqual ( 1 ) ;
346
+ expect ( results [ 0 ] . objectId ) . toEqual ( obj1 . id ) ;
347
+ done ( ) ;
348
+ } ) ;
349
+ } ) ;
350
+
351
+ it ( 'match field query' , ( done ) => {
352
+ const obj1 = new TestObject ( { name : 'TestObject1' } ) ;
353
+ const obj2 = new TestObject ( { name : 'TestObject2' } ) ;
354
+ Parse . Object . saveAll ( [ obj1 , obj2 ] ) . then ( ( ) => {
355
+ const pipeline = [
356
+ { match : { name : 'TestObject1' } }
357
+ ] ;
358
+ const query = new Parse . Query ( TestObject ) ;
359
+ return query . aggregate ( pipeline ) ;
360
+ } ) . then ( ( results ) => {
361
+ expect ( results . length ) . toEqual ( 1 ) ;
362
+ expect ( results [ 0 ] . objectId ) . toEqual ( obj1 . id ) ;
363
+ done ( ) ;
364
+ } ) ;
365
+ } ) ;
366
+
367
+ it ( 'match pointer query' , ( done ) => {
368
+ const pointer1 = new TestObject ( ) ;
369
+ const pointer2 = new TestObject ( ) ;
370
+ const obj1 = new TestObject ( { pointer : pointer1 } ) ;
371
+ const obj2 = new TestObject ( { pointer : pointer2 } ) ;
372
+ const obj3 = new TestObject ( { pointer : pointer1 } ) ;
373
+
374
+ Parse . Object . saveAll ( [ pointer1 , pointer2 , obj1 , obj2 , obj3 ] ) . then ( ( ) => {
375
+ const pipeline = [
376
+ { match : { pointer : pointer1 . id } }
377
+ ] ;
378
+ const query = new Parse . Query ( TestObject ) ;
379
+ return query . aggregate ( pipeline ) ;
380
+ } ) . then ( ( results ) => {
381
+ expect ( results . length ) . toEqual ( 2 ) ;
382
+ expect ( results [ 0 ] . pointer . objectId ) . toEqual ( pointer1 . id ) ;
383
+ expect ( results [ 1 ] . pointer . objectId ) . toEqual ( pointer1 . id ) ;
384
+ expect ( results . some ( result => result . objectId === obj1 . id ) ) . toEqual ( true ) ;
385
+ expect ( results . some ( result => result . objectId === obj3 . id ) ) . toEqual ( true ) ;
386
+ done ( ) ;
387
+ } ) ;
388
+ } ) ;
389
+
248
390
it ( 'project query' , ( done ) => {
249
391
const options = Object . assign ( { } , masterKeyOptions , {
250
392
body : {
@@ -392,6 +534,23 @@ describe('Parse.Query Aggregate testing', () => {
392
534
} ) . catch ( done . fail ) ;
393
535
} ) ;
394
536
537
+ it ( 'distinct pointer' , ( done ) => {
538
+ const pointer1 = new TestObject ( ) ;
539
+ const pointer2 = new TestObject ( ) ;
540
+ const obj1 = new TestObject ( { pointer : pointer1 } ) ;
541
+ const obj2 = new TestObject ( { pointer : pointer2 } ) ;
542
+ const obj3 = new TestObject ( { pointer : pointer1 } ) ;
543
+ Parse . Object . saveAll ( [ pointer1 , pointer2 , obj1 , obj2 , obj3 ] ) . then ( ( ) => {
544
+ const query = new Parse . Query ( TestObject ) ;
545
+ return query . distinct ( 'pointer' ) ;
546
+ } ) . then ( ( results ) => {
547
+ expect ( results . length ) . toEqual ( 2 ) ;
548
+ expect ( results . some ( result => result . objectId === pointer1 . id ) ) . toEqual ( true ) ;
549
+ expect ( results . some ( result => result . objectId === pointer2 . id ) ) . toEqual ( true ) ;
550
+ done ( ) ;
551
+ } ) ;
552
+ } ) ;
553
+
395
554
it ( 'distinct class does not exist return empty' , ( done ) => {
396
555
const options = Object . assign ( { } , masterKeyOptions , {
397
556
body : { distinct : 'unknown' }
0 commit comments