1
+ 'use strict' ;
1
2
// This is a port of the test suite:
2
3
// hungry/js/test/parse_relation_test.js
3
4
@@ -237,7 +238,7 @@ describe('Parse.Relation testing', () => {
237
238
success : function ( list ) {
238
239
equal ( list . length , 1 , "There should be only one result" ) ;
239
240
equal ( list [ 0 ] . id , parent2 . id ,
240
- "Should have gotten back the right result" ) ;
241
+ "Should have gotten back the right result" ) ;
241
242
done ( ) ;
242
243
}
243
244
} ) ;
@@ -246,7 +247,7 @@ describe('Parse.Relation testing', () => {
246
247
}
247
248
} ) ;
248
249
} ) ;
249
-
250
+
250
251
it ( "queries on relation fields with multiple ins" , ( done ) => {
251
252
var ChildObject = Parse . Object . extend ( "ChildObject" ) ;
252
253
var childObjects = [ ] ;
@@ -268,7 +269,7 @@ describe('Parse.Relation testing', () => {
268
269
relation2 . add ( childObjects [ 4 ] ) ;
269
270
relation2 . add ( childObjects [ 5 ] ) ;
270
271
relation2 . add ( childObjects [ 6 ] ) ;
271
-
272
+
272
273
var otherChild2 = parent2 . relation ( "otherChild" ) ;
273
274
otherChild2 . add ( childObjects [ 0 ] ) ;
274
275
otherChild2 . add ( childObjects [ 1 ] ) ;
@@ -290,7 +291,7 @@ describe('Parse.Relation testing', () => {
290
291
done ( ) ;
291
292
} ) ;
292
293
} ) ;
293
-
294
+
294
295
it ( "query on pointer and relation fields with equal" , ( done ) => {
295
296
var ChildObject = Parse . Object . extend ( "ChildObject" ) ;
296
297
var childObjects = [ ] ;
@@ -306,29 +307,29 @@ describe('Parse.Relation testing', () => {
306
307
relation . add ( childObjects [ 0 ] ) ;
307
308
relation . add ( childObjects [ 1 ] ) ;
308
309
relation . add ( childObjects [ 2 ] ) ;
309
-
310
+
310
311
var parent2 = new ParentObject ( ) ;
311
312
parent2 . set ( "x" , 3 ) ;
312
313
parent2 . set ( "toChild" , childObjects [ 2 ] ) ;
313
-
314
+
314
315
var parents = [ ] ;
315
316
parents . push ( parent ) ;
316
317
parents . push ( parent2 ) ;
317
318
parents . push ( new ParentObject ( ) ) ;
318
-
319
+
319
320
return Parse . Object . saveAll ( parents ) . then ( ( ) => {
320
321
var query = new Parse . Query ( ParentObject ) ;
321
322
query . equalTo ( "objectId" , parent . id ) ;
322
323
query . equalTo ( "toChilds" , childObjects [ 2 ] ) ;
323
-
324
+
324
325
return query . find ( ) . then ( ( list ) => {
325
326
equal ( list . length , 1 , "There should be 1 result" ) ;
326
327
done ( ) ;
327
328
} ) ;
328
329
} ) ;
329
330
} ) ;
330
331
} ) ;
331
-
332
+
332
333
it ( "query on pointer and relation fields with equal bis" , ( done ) => {
333
334
var ChildObject = Parse . Object . extend ( "ChildObject" ) ;
334
335
var childObjects = [ ] ;
@@ -344,31 +345,31 @@ describe('Parse.Relation testing', () => {
344
345
relation . add ( childObjects [ 0 ] ) ;
345
346
relation . add ( childObjects [ 1 ] ) ;
346
347
relation . add ( childObjects [ 2 ] ) ;
347
-
348
+
348
349
var parent2 = new ParentObject ( ) ;
349
350
parent2 . set ( "x" , 3 ) ;
350
351
parent2 . relation ( "toChilds" ) . add ( childObjects [ 2 ] ) ;
351
-
352
+
352
353
var parents = [ ] ;
353
354
parents . push ( parent ) ;
354
355
parents . push ( parent2 ) ;
355
356
parents . push ( new ParentObject ( ) ) ;
356
-
357
+
357
358
return Parse . Object . saveAll ( parents ) . then ( ( ) => {
358
359
var query = new Parse . Query ( ParentObject ) ;
359
360
query . equalTo ( "objectId" , parent2 . id ) ;
360
361
// childObjects[2] is in 2 relations
361
362
// before the fix, that woul yield 2 results
362
363
query . equalTo ( "toChilds" , childObjects [ 2 ] ) ;
363
-
364
+
364
365
return query . find ( ) . then ( ( list ) => {
365
366
equal ( list . length , 1 , "There should be 1 result" ) ;
366
367
done ( ) ;
367
368
} ) ;
368
369
} ) ;
369
370
} ) ;
370
371
} ) ;
371
-
372
+
372
373
it ( "or queries on pointer and relation fields" , ( done ) => {
373
374
var ChildObject = Parse . Object . extend ( "ChildObject" ) ;
374
375
var childObjects = [ ] ;
@@ -384,16 +385,16 @@ describe('Parse.Relation testing', () => {
384
385
relation . add ( childObjects [ 0 ] ) ;
385
386
relation . add ( childObjects [ 1 ] ) ;
386
387
relation . add ( childObjects [ 2 ] ) ;
387
-
388
+
388
389
var parent2 = new ParentObject ( ) ;
389
390
parent2 . set ( "x" , 3 ) ;
390
391
parent2 . set ( "toChild" , childObjects [ 2 ] ) ;
391
-
392
+
392
393
var parents = [ ] ;
393
394
parents . push ( parent ) ;
394
395
parents . push ( parent2 ) ;
395
396
parents . push ( new ParentObject ( ) ) ;
396
-
397
+
397
398
return Parse . Object . saveAll ( parents ) . then ( ( ) => {
398
399
var query1 = new Parse . Query ( ParentObject ) ;
399
400
query1 . containedIn ( "toChilds" , [ childObjects [ 2 ] ] ) ;
@@ -501,5 +502,154 @@ describe('Parse.Relation testing', () => {
501
502
} ) ;
502
503
} ) ;
503
504
504
- } ) ;
505
+ it ( 'should properly get related objects with unfetched queries' , ( done ) => {
506
+ let objects = [ ] ;
507
+ let owners = [ ] ;
508
+ let allObjects = [ ] ;
509
+ // Build 10 Objects and 10 owners
510
+ while ( objects . length != 10 ) {
511
+ let object = new Parse . Object ( 'AnObject' ) ;
512
+ object . set ( {
513
+ index : objects . length ,
514
+ even : objects . length % 2 == 0
515
+ } ) ;
516
+ objects . push ( object ) ;
517
+ let owner = new Parse . Object ( 'AnOwner' ) ;
518
+ owners . push ( owner ) ;
519
+ allObjects . push ( object ) ;
520
+ allObjects . push ( owner ) ;
521
+ }
522
+
523
+ let anotherOwner = new Parse . Object ( 'AnotherOwner' ) ;
505
524
525
+ return Parse . Object . saveAll ( allObjects . concat ( [ anotherOwner ] ) ) . then ( ( ) => {
526
+ // put all the AnObject into the anotherOwner relationKey
527
+ anotherOwner . relation ( 'relationKey' ) . add ( objects ) ;
528
+ // Set each object[i] into owner[i];
529
+ owners . forEach ( ( owner , i ) => {
530
+ owner . set ( 'key' , objects [ i ] ) ;
531
+ } ) ;
532
+ return Parse . Object . saveAll ( owners . concat ( [ anotherOwner ] ) ) ;
533
+ } ) . then ( ( ) => {
534
+ // Query on the relation of another owner
535
+ let object = new Parse . Object ( 'AnotherOwner' ) ;
536
+ object . id = anotherOwner . id ;
537
+ let relationQuery = object . relation ( 'relationKey' ) . query ( ) ;
538
+ // Just get the even ones
539
+ relationQuery . equalTo ( 'even' , true ) ;
540
+ // Make the query on anOwner
541
+ let query = new Parse . Query ( 'AnOwner' ) ;
542
+ // where key match the relation query.
543
+ query . matchesQuery ( 'key' , relationQuery ) ;
544
+ query . include ( 'key' ) ;
545
+ return query . find ( ) ;
546
+ } ) . then ( ( results ) => {
547
+ expect ( results . length ) . toBe ( 5 ) ;
548
+ results . forEach ( ( result ) => {
549
+ expect ( result . get ( 'key' ) . get ( 'even' ) ) . toBe ( true ) ;
550
+ } ) ;
551
+ return Promise . resolve ( ) ;
552
+ } ) . then ( ( ) => {
553
+ // Query on the relation of another owner
554
+ let object = new Parse . Object ( 'AnotherOwner' ) ;
555
+ object . id = anotherOwner . id ;
556
+ let relationQuery = object . relation ( 'relationKey' ) . query ( ) ;
557
+ // Just get the even ones
558
+ relationQuery . equalTo ( 'even' , true ) ;
559
+ // Make the query on anOwner
560
+ let query = new Parse . Query ( 'AnOwner' ) ;
561
+ // where key match the relation query.
562
+ query . doesNotMatchQuery ( 'key' , relationQuery ) ;
563
+ query . include ( 'key' ) ;
564
+ return query . find ( ) ;
565
+ } ) . then ( ( results ) => {
566
+ expect ( results . length ) . toBe ( 5 ) ;
567
+ results . forEach ( ( result ) => {
568
+ expect ( result . get ( 'key' ) . get ( 'even' ) ) . toBe ( false ) ;
569
+ } ) ;
570
+ done ( ) ;
571
+ } )
572
+ } ) ;
573
+
574
+ it ( "select query" , function ( done ) {
575
+ var RestaurantObject = Parse . Object . extend ( "Restaurant" ) ;
576
+ var PersonObject = Parse . Object . extend ( "Person" ) ;
577
+ var OwnerObject = Parse . Object . extend ( 'Owner' ) ;
578
+ var restaurants = [
579
+ new RestaurantObject ( { ratings : 5 , location : "Djibouti" } ) ,
580
+ new RestaurantObject ( { ratings : 3 , location : "Ouagadougou" } ) ,
581
+ ] ;
582
+ let persons = [
583
+ new PersonObject ( { name : "Bob" , hometown : "Djibouti" } ) ,
584
+ new PersonObject ( { name : "Tom" , hometown : "Ouagadougou" } ) ,
585
+ new PersonObject ( { name : "Billy" , hometown : "Detroit" } ) ,
586
+ ] ;
587
+ let owner = new OwnerObject ( { name : 'Joe' } ) ;
588
+ let ownerId ;
589
+ let allObjects = [ owner ] . concat ( restaurants ) . concat ( persons ) ;
590
+ expect ( allObjects . length ) . toEqual ( 6 ) ;
591
+ Parse . Object . saveAll ( [ owner ] . concat ( restaurants ) . concat ( persons ) ) . then ( function ( ) {
592
+ ownerId = owner . id ;
593
+ owner . relation ( 'restaurants' ) . add ( restaurants ) ;
594
+ return owner . save ( )
595
+ } ) . then ( ( ) => {
596
+ let unfetchedOwner = new OwnerObject ( ) ;
597
+ unfetchedOwner . id = owner . id ;
598
+ var query = unfetchedOwner . relation ( 'restaurants' ) . query ( ) ;
599
+ query . greaterThan ( "ratings" , 4 ) ;
600
+ var mainQuery = new Parse . Query ( PersonObject ) ;
601
+ mainQuery . matchesKeyInQuery ( "hometown" , "location" , query ) ;
602
+ mainQuery . find ( expectSuccess ( {
603
+ success : function ( results ) {
604
+ equal ( results . length , 1 ) ;
605
+ if ( results . length > 0 ) {
606
+ equal ( results [ 0 ] . get ( 'name' ) , 'Bob' ) ;
607
+ }
608
+ done ( ) ;
609
+ }
610
+ } ) ) ;
611
+ } ) ;
612
+ } ) ;
613
+
614
+ it ( "dontSelect query" , function ( done ) {
615
+ var RestaurantObject = Parse . Object . extend ( "Restaurant" ) ;
616
+ var PersonObject = Parse . Object . extend ( "Person" ) ;
617
+ var OwnerObject = Parse . Object . extend ( 'Owner' ) ;
618
+ var restaurants = [
619
+ new RestaurantObject ( { ratings : 5 , location : "Djibouti" } ) ,
620
+ new RestaurantObject ( { ratings : 3 , location : "Ouagadougou" } ) ,
621
+ ] ;
622
+ let persons = [
623
+ new PersonObject ( { name : "Bob" , hometown : "Djibouti" } ) ,
624
+ new PersonObject ( { name : "Tom" , hometown : "Ouagadougou" } ) ,
625
+ new PersonObject ( { name : "Billy" , hometown : "Detroit" } ) ,
626
+ ] ;
627
+ let owner = new OwnerObject ( { name : 'Joe' } ) ;
628
+ let ownerId ;
629
+ let allObjects = [ owner ] . concat ( restaurants ) . concat ( persons ) ;
630
+ expect ( allObjects . length ) . toEqual ( 6 ) ;
631
+ Parse . Object . saveAll ( [ owner ] . concat ( restaurants ) . concat ( persons ) ) . then ( function ( ) {
632
+ ownerId = owner . id ;
633
+ owner . relation ( 'restaurants' ) . add ( restaurants ) ;
634
+ return owner . save ( )
635
+ } ) . then ( ( ) => {
636
+ let unfetchedOwner = new OwnerObject ( ) ;
637
+ unfetchedOwner . id = owner . id ;
638
+ var query = unfetchedOwner . relation ( 'restaurants' ) . query ( ) ;
639
+ query . greaterThan ( "ratings" , 4 ) ;
640
+ var mainQuery = new Parse . Query ( PersonObject ) ;
641
+ mainQuery . doesNotMatchKeyInQuery ( "hometown" , "location" , query ) ;
642
+ mainQuery . ascending ( 'name' ) ;
643
+ mainQuery . find ( expectSuccess ( {
644
+ success : function ( results ) {
645
+ equal ( results . length , 2 ) ;
646
+ if ( results . length > 0 ) {
647
+ equal ( results [ 0 ] . get ( 'name' ) , 'Billy' ) ;
648
+ equal ( results [ 1 ] . get ( 'name' ) , 'Tom' ) ;
649
+ }
650
+ done ( ) ;
651
+ }
652
+ } ) ) ;
653
+ } ) ;
654
+ } ) ;
655
+ } ) ;
0 commit comments