diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 8657f1f57..ef3aed26a 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -292,6 +292,18 @@ describe('Parse Object', () => { assert.strictEqual(result.get('a').b.c.d, 2); }); + it('can set nested fields without repeating pending operations on toJSON (regression test for #1452)', async () => { + const a = new Parse.Object('MyObject'); + a.set('obj', {}); + await a.save(); + a.set('obj.a', 0); + const json = a.toJSON(); + expect(json.obj).toEqual({ a: 0 }); + expect(new Set(Object.keys(json))).toEqual( + new Set(['objectId', 'createdAt', 'updatedAt', 'obj']) + ); + }); + it('can increment nested field and retain full object', async () => { const obj = new Parse.Object('TestIncrementObject'); obj.set('objectField', { number: 5, letter: 'a' }); diff --git a/src/ParseObject.js b/src/ParseObject.js index 826a2458e..b011ce151 100644 --- a/src/ParseObject.js +++ b/src/ParseObject.js @@ -470,10 +470,6 @@ class ParseObject { json[attr] = encode(attrs[attr], false, false, seen, offline); } } - const pending = this._getPendingOps(); - for (const attr in pending[0]) { - json[attr] = pending[0][attr].toJSON(offline); - } if (this.id) { json.objectId = this.id; diff --git a/src/__tests__/ParseObject-test.js b/src/__tests__/ParseObject-test.js index bd6643ff2..890d77ff4 100644 --- a/src/__tests__/ParseObject-test.js +++ b/src/__tests__/ParseObject-test.js @@ -667,6 +667,14 @@ describe('ParseObject', () => { 'objectField.number': 20, otherField: { hello: 'world' }, }); + expect(o.toJSON()).toEqual({ + objectField: { + number: 20, + letter: 'a', + }, + otherField: { hello: 'world' }, + objectId: 'setNested', + }); }); it('can set multiple nested fields (regression test for #1450)', () => {