Skip to content

Commit 57156cf

Browse files
committed
Merge pull request #1314 from ParsePlatform/flovilmart.issue1302
Fixes issue #1302
2 parents 3f8a1aa + edfa409 commit 57156cf

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

spec/ParseQuery.spec.js

+76-1
Original file line numberDiff line numberDiff line change
@@ -1492,7 +1492,82 @@ describe('Parse.Query testing', () => {
14921492
fail('should not fail');
14931493
done();
14941494
})
1495-
})
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+
});
14961571

14971572
it("result object creation uses current extension", function(done) {
14981573
var ParentObject = Parse.Object.extend({ className: "ParentObject" });

src/RestQuery.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,8 @@ function findPointers(object, path) {
537537
// pointers inflated.
538538
function replacePointers(object, path, replace) {
539539
if (object instanceof Array) {
540-
return object.map((obj) => replacePointers(obj, path, replace));
540+
return object.map((obj) => replacePointers(obj, path, replace))
541+
.filter((obj) => obj != null && obj != undefined);
541542
}
542543

543544
if (typeof object !== 'object') {

0 commit comments

Comments
 (0)