From c82eb4e8d89a6494e71a05b6e241b68f8949c7e6 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Tue, 2 Jul 2024 02:35:53 +0200 Subject: [PATCH 01/12] Update ParseObjectTest.js --- integration/test/ParseObjectTest.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index ef3aed26a..5463ce8f4 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2056,6 +2056,35 @@ describe('Parse Object', () => { expect(obj.get('string')).toBeInstanceOf(String); }); + fit('returns correct field values', async () => { + const values = [ + { field: 'string', value: 'string' }, + { field: 'number', value: 1 }, + { field: 'boolean', value: true }, + { field: 'array', value: [1, 2, 3] }, + { field: 'object1', value: { key: 'value' } }, + { field: 'object2', value: { key1: 'value1', key2: 'value2' } }, + { field: 'object3', value: { key1: 1, key2: 2 } }, + { field: 'object4', value: { '1': 1 } }, + { field: 'date', value: new Date() }, + { field: 'file', value: Parse.File.fromJSON({ + __type: 'File', + name: 'name', + url: 'http://localhost:8378/1/files/test/name', + }) }, + { field: 'geoPoint', value: new Parse.GeoPoint(40, -30) }, + { field: 'bytes', value: { __type: 'Bytes', base64: 'ZnJveW8=' } }, + ]; + for (const value of values) { + const object = new TestObject(); + object.set(value.field, value.value); + await object.save(); + const query = new Parse.Query(TestObject); + const objectAgain = await query.get(object.id); + expect(objectAgain.get(value.field)).toEqual(value.value); + } + }); + describe('allowCustomObjectId', () => { it('can save without setting an objectId', async () => { await reconfigureServer({ allowCustomObjectId: true }); From 9cd41e7e0662fec4a1d465b715ead926c365ba2b Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Tue, 2 Jul 2024 02:39:52 +0200 Subject: [PATCH 02/12] Update ParseObjectTest.js --- integration/test/ParseObjectTest.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 5463ce8f4..38c32109e 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2067,11 +2067,14 @@ describe('Parse Object', () => { { field: 'object3', value: { key1: 1, key2: 2 } }, { field: 'object4', value: { '1': 1 } }, { field: 'date', value: new Date() }, - { field: 'file', value: Parse.File.fromJSON({ - __type: 'File', - name: 'name', - url: 'http://localhost:8378/1/files/test/name', - }) }, + { + field: 'file', + value: Parse.File.fromJSON({ + __type: 'File', + name: 'name', + url: 'http://localhost:1337/parse/files/integration/name', + }), + }, { field: 'geoPoint', value: new Parse.GeoPoint(40, -30) }, { field: 'bytes', value: { __type: 'Bytes', base64: 'ZnJveW8=' } }, ]; From 6b7d271dd4d878432f06723d6fa1d824bfdf2943 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Tue, 2 Jul 2024 03:28:31 +0200 Subject: [PATCH 03/12] udpate --- integration/test/ParseObjectTest.js | 37 +++++++++++++++-------------- src/ObjectStateMutations.ts | 2 +- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 38c32109e..6b5c3537a 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2058,25 +2058,26 @@ describe('Parse Object', () => { fit('returns correct field values', async () => { const values = [ - { field: 'string', value: 'string' }, - { field: 'number', value: 1 }, - { field: 'boolean', value: true }, - { field: 'array', value: [1, 2, 3] }, - { field: 'object1', value: { key: 'value' } }, - { field: 'object2', value: { key1: 'value1', key2: 'value2' } }, - { field: 'object3', value: { key1: 1, key2: 2 } }, + // { field: 'string', value: 'string' }, + // { field: 'number', value: 1 }, + // { field: 'boolean', value: true }, + // { field: 'array', value: [1, 2, 3] }, + // { field: 'object1', value: { key: 'value' } }, + // { field: 'object2', value: { key1: 'value1', key2: 'value2' } }, + // { field: 'object3', value: { key1: 1, key2: 2 } }, + { field: 'object4', value: { '1x1': 1 } }, { field: 'object4', value: { '1': 1 } }, - { field: 'date', value: new Date() }, - { - field: 'file', - value: Parse.File.fromJSON({ - __type: 'File', - name: 'name', - url: 'http://localhost:1337/parse/files/integration/name', - }), - }, - { field: 'geoPoint', value: new Parse.GeoPoint(40, -30) }, - { field: 'bytes', value: { __type: 'Bytes', base64: 'ZnJveW8=' } }, + // { field: 'date', value: new Date() }, + // { + // field: 'file', + // value: Parse.File.fromJSON({ + // __type: 'File', + // name: 'name', + // url: 'http://localhost:1337/parse/files/integration/name', + // }), + // }, + // { field: 'geoPoint', value: new Parse.GeoPoint(40, -30) }, + // { field: 'bytes', value: { __type: 'Bytes', base64: 'ZnJveW8=' } }, ]; for (const value of values) { const object = new TestObject(); diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index 3292fb88e..ad4a8534c 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -191,7 +191,7 @@ export function commitServerChanges( typeof val === 'object' && !Array.isArray(val) && Object.keys(val).length > 0 && - Object.keys(val).some(k => !isNaN(parseInt(k))) && + Object.keys(val).some(k => k === String(Number(k)) && Number.isInteger(Number(k))) && !['sentPerUTCOffset', 'failedPerUTCOffset'].includes(attr) ) { val = Object.values(val); From d89efcb40eac00c3ba59f49f7c553ea17bceac3a Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Tue, 2 Jul 2024 03:29:14 +0200 Subject: [PATCH 04/12] Update ParseObjectTest.js --- integration/test/ParseObjectTest.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 6b5c3537a..1c55d2851 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2062,11 +2062,11 @@ describe('Parse Object', () => { // { field: 'number', value: 1 }, // { field: 'boolean', value: true }, // { field: 'array', value: [1, 2, 3] }, - // { field: 'object1', value: { key: 'value' } }, - // { field: 'object2', value: { key1: 'value1', key2: 'value2' } }, - // { field: 'object3', value: { key1: 1, key2: 2 } }, - { field: 'object4', value: { '1x1': 1 } }, - { field: 'object4', value: { '1': 1 } }, + // { field: 'object', value: { key: 'value' } }, + // { field: 'object', value: { key1: 'value1', key2: 'value2' } }, + // { field: 'object', value: { key1: 1, key2: 2 } }, + { field: 'object', value: { '1x1': 1 } }, + { field: 'object', value: { '1': 1 } }, // { field: 'date', value: new Date() }, // { // field: 'file', From 48699d96f519c793d68ba513c3769a112f9778ff Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:46:03 +0200 Subject: [PATCH 05/12] Update ObjectStateMutations.ts Signed-off-by: Manuel <5673677+mtrezza@users.noreply.github.com> --- src/ObjectStateMutations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index ad4a8534c..be8b6e1f4 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -191,7 +191,7 @@ export function commitServerChanges( typeof val === 'object' && !Array.isArray(val) && Object.keys(val).length > 0 && - Object.keys(val).some(k => k === String(Number(k)) && Number.isInteger(Number(k))) && + Object.keys(val).every(k => k === String(Number(k)) && Number.isInteger(Number(k))) && !['sentPerUTCOffset', 'failedPerUTCOffset'].includes(attr) ) { val = Object.values(val); From 1f3f28a8497edf4cca30afbae29a612804509065 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:47:11 +0200 Subject: [PATCH 06/12] Update ParseObjectTest.js Signed-off-by: Manuel <5673677+mtrezza@users.noreply.github.com> --- integration/test/ParseObjectTest.js | 1 + 1 file changed, 1 insertion(+) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 1c55d2851..d86e19de3 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2066,6 +2066,7 @@ describe('Parse Object', () => { // { field: 'object', value: { key1: 'value1', key2: 'value2' } }, // { field: 'object', value: { key1: 1, key2: 2 } }, { field: 'object', value: { '1x1': 1 } }, + { field: 'object', value: { '1x1': 1, '2': 2 } }, { field: 'object', value: { '1': 1 } }, // { field: 'date', value: new Date() }, // { From ca3005191088b6c79bf3326c6bab575ea70f657c Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:51:54 +0200 Subject: [PATCH 07/12] Update ParseObjectTest.js Signed-off-by: Manuel <5673677+mtrezza@users.noreply.github.com> --- integration/test/ParseObjectTest.js | 1 + 1 file changed, 1 insertion(+) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index d86e19de3..b9565408b 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2067,6 +2067,7 @@ describe('Parse Object', () => { // { field: 'object', value: { key1: 1, key2: 2 } }, { field: 'object', value: { '1x1': 1 } }, { field: 'object', value: { '1x1': 1, '2': 2 } }, + { field: 'object', value: { '0': 0 } }, { field: 'object', value: { '1': 1 } }, // { field: 'date', value: new Date() }, // { From 764c0784f35dddb7d6b348c7d22b71b0f61fa81d Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Sat, 6 Jul 2024 15:10:35 +0200 Subject: [PATCH 08/12] Update ParseObjectTest.js --- integration/test/ParseObjectTest.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index b9565408b..d96e4e41f 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2061,14 +2061,17 @@ describe('Parse Object', () => { // { field: 'string', value: 'string' }, // { field: 'number', value: 1 }, // { field: 'boolean', value: true }, - // { field: 'array', value: [1, 2, 3] }, - // { field: 'object', value: { key: 'value' } }, - // { field: 'object', value: { key1: 'value1', key2: 'value2' } }, - // { field: 'object', value: { key1: 1, key2: 2 } }, + { field: 'array', value: [0, 1, 2] }, + { field: 'array', value: [1, 2, 3] }, + { field: 'array', value: [{ '0': 'a' }, 2, 3] }, + { field: 'object', value: { key: 'value' } }, + { field: 'object', value: { key1: 'value1', key2: 'value2' } }, + { field: 'object', value: { key1: 1, key2: 2 } }, { field: 'object', value: { '1x1': 1 } }, { field: 'object', value: { '1x1': 1, '2': 2 } }, { field: 'object', value: { '0': 0 } }, { field: 'object', value: { '1': 1 } }, + { field: 'object', value: { '0': { '0': 'a', '1': 'b' } } }, // { field: 'date', value: new Date() }, // { // field: 'file', From b0254c331bd9ec64139a16a36571b0f6831875d5 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Sun, 7 Jul 2024 13:23:04 +0200 Subject: [PATCH 09/12] Update ObjectStateMutations.ts --- src/ObjectStateMutations.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index be8b6e1f4..49e0ca879 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -191,8 +191,7 @@ export function commitServerChanges( typeof val === 'object' && !Array.isArray(val) && Object.keys(val).length > 0 && - Object.keys(val).every(k => k === String(Number(k)) && Number.isInteger(Number(k))) && - !['sentPerUTCOffset', 'failedPerUTCOffset'].includes(attr) + Object.keys(val).every(k => k === String(Number(k)) && Number.isInteger(Number(k))) ) { val = Object.values(val); } From ea09c84c66b78083eb258095e8df95f16bb11dec Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Sun, 7 Jul 2024 13:38:21 +0200 Subject: [PATCH 10/12] revert JSON array check --- src/ObjectStateMutations.ts | 12 +----------- src/__tests__/ObjectStateMutations-test.js | 10 ---------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index 49e0ca879..cd3616278 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -184,17 +184,7 @@ export function commitServerChanges( ) { const ParseObject = CoreManager.getParseObject(); for (const attr in changes) { - let val = changes[attr]; - // Check for JSON array { '0': { something }, '1': { something } } - if ( - val && - typeof val === 'object' && - !Array.isArray(val) && - Object.keys(val).length > 0 && - Object.keys(val).every(k => k === String(Number(k)) && Number.isInteger(Number(k))) - ) { - val = Object.values(val); - } + const val = changes[attr]; nestedSet(serverData, attr, val); if ( val && diff --git a/src/__tests__/ObjectStateMutations-test.js b/src/__tests__/ObjectStateMutations-test.js index b224ef326..de5738376 100644 --- a/src/__tests__/ObjectStateMutations-test.js +++ b/src/__tests__/ObjectStateMutations-test.js @@ -313,16 +313,6 @@ describe('ObjectStateMutations', () => { expect(serverData).toEqual({ items: [{ count: 15 }, { count: 4 }] }); }); - it('can commit nested json array changes from the server to empty serverData', () => { - const serverData = {}; - const objectCache = {}; - ObjectStateMutations.commitServerChanges(serverData, objectCache, { - items: { '0': { count: 20 }, '1': { count: 5 } }, - }); - expect(serverData).toEqual({ items: [{ count: 20 }, { count: 5 }] }); - expect(objectCache).toEqual({ items: '[{"count":20},{"count":5}]' }); - }); - it('can commit json array with PushStatus offset fields', () => { const serverData = {}; const objectCache = {}; From 81a2d089ea1ffdfe3a1e57eafe93dafc53f7da34 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Sun, 7 Jul 2024 13:38:28 +0200 Subject: [PATCH 11/12] unfit --- integration/test/ParseObjectTest.js | 30 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index d96e4e41f..07877eddf 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -2056,11 +2056,11 @@ describe('Parse Object', () => { expect(obj.get('string')).toBeInstanceOf(String); }); - fit('returns correct field values', async () => { + it('returns correct field values', async () => { const values = [ - // { field: 'string', value: 'string' }, - // { field: 'number', value: 1 }, - // { field: 'boolean', value: true }, + { field: 'string', value: 'string' }, + { field: 'number', value: 1 }, + { field: 'boolean', value: true }, { field: 'array', value: [0, 1, 2] }, { field: 'array', value: [1, 2, 3] }, { field: 'array', value: [{ '0': 'a' }, 2, 3] }, @@ -2072,17 +2072,17 @@ describe('Parse Object', () => { { field: 'object', value: { '0': 0 } }, { field: 'object', value: { '1': 1 } }, { field: 'object', value: { '0': { '0': 'a', '1': 'b' } } }, - // { field: 'date', value: new Date() }, - // { - // field: 'file', - // value: Parse.File.fromJSON({ - // __type: 'File', - // name: 'name', - // url: 'http://localhost:1337/parse/files/integration/name', - // }), - // }, - // { field: 'geoPoint', value: new Parse.GeoPoint(40, -30) }, - // { field: 'bytes', value: { __type: 'Bytes', base64: 'ZnJveW8=' } }, + { field: 'date', value: new Date() }, + { + field: 'file', + value: Parse.File.fromJSON({ + __type: 'File', + name: 'name', + url: 'http://localhost:1337/parse/files/integration/name', + }), + }, + { field: 'geoPoint', value: new Parse.GeoPoint(40, -30) }, + { field: 'bytes', value: { __type: 'Bytes', base64: 'ZnJveW8=' } }, ]; for (const value of values) { const object = new TestObject(); From 0457db8a972c73ef423d0c31fbd96d7a6643a9f8 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Sun, 7 Jul 2024 14:30:20 +0200 Subject: [PATCH 12/12] add test --- src/__tests__/ObjectStateMutations-test.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/__tests__/ObjectStateMutations-test.js b/src/__tests__/ObjectStateMutations-test.js index de5738376..99dbe5134 100644 --- a/src/__tests__/ObjectStateMutations-test.js +++ b/src/__tests__/ObjectStateMutations-test.js @@ -313,6 +313,17 @@ describe('ObjectStateMutations', () => { expect(serverData).toEqual({ items: [{ count: 15 }, { count: 4 }] }); }); + it('can commit nested json array changes from the server to empty serverData', () => { + const serverData = {}; + const objectCache = {}; + ObjectStateMutations.commitServerChanges(serverData, objectCache, { + items: { '0': { count: 20 }, '1': { count: 5 } }, + }); + // Should not transform + expect(serverData).toEqual({ items: { '0': { count: 20 }, '1': { count: 5 } } }); + expect(objectCache).toEqual({ items: '{"0":{"count":20},"1":{"count":5}}' }); + }); + it('can commit json array with PushStatus offset fields', () => { const serverData = {}; const objectCache = {};