From 5e36120bfd09cf3217f085da23c380fb9e590e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kartal=20Kaan=20Bozdo=C4=9Fan?= Date: Wed, 16 Feb 2022 13:50:02 +0300 Subject: [PATCH 1/3] Expanded an existing test to reproduce #1452 --- src/__tests__/ParseObject-test.js | 8 ++++++++ 1 file changed, 8 insertions(+) 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)', () => { From 1ae6b290bcb2feef0fcfe00184f279060f7401fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kartal=20Kaan=20Bozdo=C4=9Fan?= Date: Wed, 16 Feb 2022 13:50:50 +0300 Subject: [PATCH 2/3] Fix #1452 by not applying pending updates a second time in ParseObject.toJSON() --- src/ParseObject.js | 4 ---- 1 file changed, 4 deletions(-) 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; From 21bcaaee21dac9555ec0fca9866276fe7ad00a32 Mon Sep 17 00:00:00 2001 From: Kartal Kaan Bozdogan Date: Thu, 2 May 2024 23:08:55 +0200 Subject: [PATCH 3/3] Added new integration test --- integration/test/ParseObjectTest.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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' });