@@ -1422,6 +1422,153 @@ describe('Parse.Query testing', () => {
1422
1422
} ) ;
1423
1423
} ) ;
1424
1424
1425
+ it ( 'properly includes array' , ( done ) => {
1426
+ let objects = [ ] ;
1427
+ let total = 0 ;
1428
+ while ( objects . length != 5 ) {
1429
+ let object = new Parse . Object ( 'AnObject' ) ;
1430
+ object . set ( 'key' , objects . length ) ;
1431
+ total += objects . length ;
1432
+ objects . push ( object ) ;
1433
+ }
1434
+ Parse . Object . saveAll ( objects ) . then ( ( ) => {
1435
+ let object = new Parse . Object ( "AContainer" ) ;
1436
+ object . set ( 'objects' , objects ) ;
1437
+ return object . save ( ) ;
1438
+ } ) . then ( ( ) => {
1439
+ let query = new Parse . Query ( 'AContainer' ) ;
1440
+ query . include ( 'objects' ) ;
1441
+ return query . find ( )
1442
+ } ) . then ( ( results ) => {
1443
+ expect ( results . length ) . toBe ( 1 ) ;
1444
+ let res = results [ 0 ] ;
1445
+ let objects = res . get ( 'objects' ) ;
1446
+ expect ( objects . length ) . toBe ( 5 ) ;
1447
+ objects . forEach ( ( object ) => {
1448
+ total -= object . get ( 'key' ) ;
1449
+ } ) ;
1450
+ expect ( total ) . toBe ( 0 ) ;
1451
+ done ( )
1452
+ } , ( ) => {
1453
+ fail ( 'should not fail' ) ;
1454
+ done ( ) ;
1455
+ } )
1456
+ } ) ;
1457
+
1458
+ it ( 'properly includes array of mixed objects' , ( done ) => {
1459
+ let objects = [ ] ;
1460
+ let total = 0 ;
1461
+ while ( objects . length != 5 ) {
1462
+ let object = new Parse . Object ( 'AnObject' ) ;
1463
+ object . set ( 'key' , objects . length ) ;
1464
+ total += objects . length ;
1465
+ objects . push ( object ) ;
1466
+ }
1467
+ while ( objects . length != 10 ) {
1468
+ let object = new Parse . Object ( 'AnotherObject' ) ;
1469
+ object . set ( 'key' , objects . length ) ;
1470
+ total += objects . length ;
1471
+ objects . push ( object ) ;
1472
+ }
1473
+ Parse . Object . saveAll ( objects ) . then ( ( ) => {
1474
+ let object = new Parse . Object ( "AContainer" ) ;
1475
+ object . set ( 'objects' , objects ) ;
1476
+ return object . save ( ) ;
1477
+ } ) . then ( ( ) => {
1478
+ let query = new Parse . Query ( 'AContainer' ) ;
1479
+ query . include ( 'objects' ) ;
1480
+ return query . find ( )
1481
+ } ) . then ( ( results ) => {
1482
+ expect ( results . length ) . toBe ( 1 ) ;
1483
+ let res = results [ 0 ] ;
1484
+ let objects = res . get ( 'objects' ) ;
1485
+ expect ( objects . length ) . toBe ( 10 ) ;
1486
+ objects . forEach ( ( object ) => {
1487
+ total -= object . get ( 'key' ) ;
1488
+ } ) ;
1489
+ expect ( total ) . toBe ( 0 ) ;
1490
+ done ( )
1491
+ } , ( err ) => {
1492
+ fail ( 'should not fail' ) ;
1493
+ done ( ) ;
1494
+ } )
1495
+ } ) ;
1496
+
1497
+ it ( 'properly nested array of mixed objects with bad ids' , ( done ) => {
1498
+ let objects = [ ] ;
1499
+ let total = 0 ;
1500
+ while ( objects . length != 5 ) {
1501
+ let object = new Parse . Object ( 'AnObject' ) ;
1502
+ object . set ( 'key' , objects . length ) ;
1503
+ objects . push ( object ) ;
1504
+ }
1505
+ while ( objects . length != 10 ) {
1506
+ let object = new Parse . Object ( 'AnotherObject' ) ;
1507
+ object . set ( 'key' , objects . length ) ;
1508
+ objects . push ( object ) ;
1509
+ }
1510
+ Parse . Object . saveAll ( objects ) . then ( ( ) => {
1511
+ let object = new Parse . Object ( "AContainer" ) ;
1512
+ for ( var i = 0 ; i < objects . length ; i ++ ) {
1513
+ if ( i % 2 == 0 ) {
1514
+ objects [ i ] . id = 'randomThing'
1515
+ } else {
1516
+ total += objects [ i ] . get ( 'key' ) ;
1517
+ }
1518
+ }
1519
+ object . set ( 'objects' , objects ) ;
1520
+ return object . save ( ) ;
1521
+ } ) . then ( ( ) => {
1522
+ let query = new Parse . Query ( 'AContainer' ) ;
1523
+ query . include ( 'objects' ) ;
1524
+ return query . find ( )
1525
+ } ) . then ( ( results ) => {
1526
+ expect ( results . length ) . toBe ( 1 ) ;
1527
+ let res = results [ 0 ] ;
1528
+ let objects = res . get ( 'objects' ) ;
1529
+ expect ( objects . length ) . toBe ( 5 ) ;
1530
+ objects . forEach ( ( object ) => {
1531
+ total -= object . get ( 'key' ) ;
1532
+ } ) ;
1533
+ expect ( total ) . toBe ( 0 ) ;
1534
+ done ( )
1535
+ } , ( err ) => {
1536
+ console . error ( err ) ;
1537
+ fail ( 'should not fail' ) ;
1538
+ done ( ) ;
1539
+ } )
1540
+ } ) ;
1541
+
1542
+ it ( 'properly fetches nested pointers' , ( done ) => {
1543
+ let color = new Parse . Object ( 'Color' ) ;
1544
+ color . set ( 'hex' , '#133733' ) ;
1545
+ let circle = new Parse . Object ( 'Circle' ) ;
1546
+ circle . set ( 'radius' , 1337 ) ;
1547
+
1548
+ Parse . Object . saveAll ( [ color , circle ] ) . then ( ( ) => {
1549
+ circle . set ( 'color' , color ) ;
1550
+ let badCircle = new Parse . Object ( 'Circle' ) ;
1551
+ badCircle . id = 'badId' ;
1552
+ let complexFigure = new Parse . Object ( 'ComplexFigure' ) ;
1553
+ complexFigure . set ( 'consistsOf' , [ circle , badCircle ] ) ;
1554
+ return complexFigure . save ( ) ;
1555
+ } ) . then ( ( ) => {
1556
+ let q = new Parse . Query ( 'ComplexFigure' ) ;
1557
+ q . include ( 'consistsOf.color' ) ;
1558
+ return q . find ( )
1559
+ } ) . then ( ( results ) => {
1560
+ expect ( results . length ) . toBe ( 1 ) ;
1561
+ let figure = results [ 0 ] ;
1562
+ expect ( figure . get ( 'consistsOf' ) . length ) . toBe ( 1 ) ;
1563
+ expect ( figure . get ( 'consistsOf' ) [ 0 ] . get ( 'color' ) . get ( 'hex' ) ) . toBe ( '#133733' ) ;
1564
+ done ( ) ;
1565
+ } , ( err ) => {
1566
+ fail ( 'should not fail' ) ;
1567
+ done ( ) ;
1568
+ } )
1569
+
1570
+ } ) ;
1571
+
1425
1572
it ( "result object creation uses current extension" , function ( done ) {
1426
1573
var ParentObject = Parse . Object . extend ( { className : "ParentObject" } ) ;
1427
1574
// Add a foo() method to ChildObject.
@@ -2209,4 +2356,41 @@ describe('Parse.Query testing', () => {
2209
2356
} )
2210
2357
} )
2211
2358
2359
+ it ( 'query with two OR subqueries (regression test #1259)' , done => {
2360
+ let relatedObject = new Parse . Object ( 'Class2' ) ;
2361
+ relatedObject . save ( ) . then ( relatedObject => {
2362
+ let anObject = new Parse . Object ( 'Class1' ) ;
2363
+ let relation = anObject . relation ( 'relation' ) ;
2364
+ relation . add ( relatedObject ) ;
2365
+ return anObject . save ( ) ;
2366
+ } ) . then ( anObject => {
2367
+ let q1 = anObject . relation ( 'relation' ) . query ( ) ;
2368
+ q1 . doesNotExist ( 'nonExistantKey1' ) ;
2369
+ let q2 = anObject . relation ( 'relation' ) . query ( ) ;
2370
+ q2 . doesNotExist ( 'nonExistantKey2' ) ;
2371
+ let orQuery = Parse . Query . or ( q1 , q2 ) . find ( ) . then ( results => {
2372
+ expect ( results . length ) . toEqual ( 1 ) ;
2373
+ expect ( results [ 0 ] . objectId ) . toEqual ( q1 . objectId ) ;
2374
+ done ( ) ;
2375
+ } ) ;
2376
+ } ) ;
2377
+ } ) ;
2378
+
2379
+ it ( 'objectId containedIn with multiple large array' , done => {
2380
+ let obj = new Parse . Object ( 'MyClass' ) ;
2381
+ obj . save ( ) . then ( obj => {
2382
+ let longListOfStrings = [ ] ;
2383
+ for ( let i = 0 ; i < 130 ; i ++ ) {
2384
+ longListOfStrings . push ( i . toString ( ) ) ;
2385
+ }
2386
+ longListOfStrings . push ( obj . id ) ;
2387
+ let q = new Parse . Query ( 'MyClass' ) ;
2388
+ q . containedIn ( 'objectId' , longListOfStrings ) ;
2389
+ q . containedIn ( 'objectId' , longListOfStrings ) ;
2390
+ return q . find ( ) ;
2391
+ } ) . then ( results => {
2392
+ expect ( results . length ) . toEqual ( 1 ) ;
2393
+ done ( ) ;
2394
+ } ) ;
2395
+ } ) ;
2212
2396
} ) ;
0 commit comments