From 954a8a41596d83532f47aada0dc00cc158adb1a2 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Mon, 26 Sep 2016 13:26:06 -0400 Subject: [PATCH] Better support for null values in arrays (#2777) * Adds reproduction for #2752 * Make sure we support null values in arrays of pointers for inclusion --- spec/ParseObject.spec.js | 33 +++++++++++++++++++++++++++++++++ src/RestQuery.js | 4 ++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/spec/ParseObject.spec.js b/spec/ParseObject.spec.js index 61988011..807b4b8d 100644 --- a/spec/ParseObject.spec.js +++ b/spec/ParseObject.spec.js @@ -1922,4 +1922,37 @@ describe('Parse.Object testing', () => { done(); }) }); + + it('should handle includes on null arrays #2752', (done) => { + let obj1 = new Parse.Object("AnObject"); + let obj2 = new Parse.Object("AnotherObject"); + let obj3 = new Parse.Object("NestedObject"); + obj3.set({ + "foo": "bar" + }) + obj2.set({ + "key": obj3 + }) + + Parse.Object.saveAll([obj1, obj2]).then(() => { + obj1.set("objects", [null, null, obj2]); + return obj1.save(); + }).then(() => { + let query = new Parse.Query("AnObject"); + query.include("objects.key"); + return query.find(); + }).then((res) => { + let obj = res[0]; + expect(obj.get("objects")).not.toBe(undefined); + let array = obj.get("objects"); + expect(Array.isArray(array)).toBe(true); + expect(array[0]).toBe(null); + expect(array[1]).toBe(null); + expect(array[2].get("key").get("foo")).toEqual("bar"); + done(); + }).catch(err => { + jfail(err); + done(); + }) + }); }); diff --git a/src/RestQuery.js b/src/RestQuery.js index 717b53f9..ac3c985a 100644 --- a/src/RestQuery.js +++ b/src/RestQuery.js @@ -555,7 +555,7 @@ function findPointers(object, path) { return answer; } - if (typeof object !== 'object') { + if (typeof object !== 'object' || !object) { return []; } @@ -585,7 +585,7 @@ function replacePointers(object, path, replace) { .filter((obj) => typeof obj !== 'undefined'); } - if (typeof object !== 'object') { + if (typeof object !== 'object' || !object) { return object; }