@@ -14,10 +14,10 @@ const masterKeyOptions = {
1414}
1515
1616const 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' ] } ;
2121 const obj1 = new TestObject ( data1 ) ;
2222 const obj2 = new TestObject ( data2 ) ;
2323 const obj3 = new TestObject ( data3 ) ;
@@ -96,6 +96,27 @@ describe('Parse.Query Aggregate testing', () => {
9696 } ) . catch ( done . fail ) ;
9797 } ) ;
9898
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+
99120 it ( 'group sum query' , ( done ) => {
100121 const options = Object . assign ( { } , masterKeyOptions , {
101122 body : {
@@ -231,7 +252,7 @@ describe('Parse.Query Aggregate testing', () => {
231252 } ) . catch ( done . fail ) ;
232253 } ) ;
233254
234- it ( 'match query' , ( done ) => {
255+ it ( 'match comparison query' , ( done ) => {
235256 const options = Object . assign ( { } , masterKeyOptions , {
236257 body : {
237258 match : { score : { $gt : 15 } } ,
@@ -245,6 +266,127 @@ describe('Parse.Query Aggregate testing', () => {
245266 } ) . catch ( done . fail ) ;
246267 } ) ;
247268
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+
248390 it ( 'project query' , ( done ) => {
249391 const options = Object . assign ( { } , masterKeyOptions , {
250392 body : {
@@ -392,6 +534,23 @@ describe('Parse.Query Aggregate testing', () => {
392534 } ) . catch ( done . fail ) ;
393535 } ) ;
394536
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+
395554 it ( 'distinct class does not exist return empty' , ( done ) => {
396555 const options = Object . assign ( { } , masterKeyOptions , {
397556 body : { distinct : 'unknown' }
0 commit comments