From d52a1a265ab7c2c83076328851c9eb0bfb725a2c Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Thu, 27 Jun 2024 20:38:18 -0500 Subject: [PATCH 1/3] fix: JSON Array check on dot notation doesn't for for `PushStatus` offset fields --- src/ObjectStateMutations.ts | 4 +++- src/__tests__/ObjectStateMutations-test.js | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index a22593d14..67b2f304a 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -186,12 +186,14 @@ export function commitServerChanges( for (const attr in changes) { let val = changes[attr]; // Check for JSON array { '0': { something }, '1': { something } } + // TODO: Improve JSON array check with a more robust method (consecutive indexes) if ( val && typeof val === 'object' && !Array.isArray(val) && Object.keys(val).length > 0 && - Object.keys(val).some(k => !isNaN(parseInt(k))) + Object.keys(val).some(k => !isNaN(parseInt(k))) && + !['sentPerUTCOffset', 'failedPerUTCOffset'].includes(attr) ) { val = Object.values(val); } diff --git a/src/__tests__/ObjectStateMutations-test.js b/src/__tests__/ObjectStateMutations-test.js index 56fc7640d..6d2de6cbd 100644 --- a/src/__tests__/ObjectStateMutations-test.js +++ b/src/__tests__/ObjectStateMutations-test.js @@ -323,6 +323,17 @@ describe('ObjectStateMutations', () => { expect(objectCache).toEqual({ items: '[{"count":20},{"count":5}]' }); }); + it('can commit json array with missing indexes', () => { + const serverData = {}; + const objectCache = {}; + ObjectStateMutations.commitServerChanges(serverData, objectCache, { + sentPerUTCOffset: { '1': { count: 20 } }, + }); + // Should not transform to an array + expect(serverData).toEqual({ sentPerUTCOffset: { '1': { count: 20 } } }); + expect(objectCache).toEqual({ sentPerUTCOffset: '{"1":{"count":20}}' }); + }); + it('can generate a default state for implementations', () => { expect(ObjectStateMutations.defaultState()).toEqual({ serverData: {}, From d0a20b08711b093c1d40d42deefd83cb3db342f0 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Thu, 27 Jun 2024 20:54:04 -0500 Subject: [PATCH 2/3] improve tests --- src/__tests__/ObjectStateMutations-test.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/__tests__/ObjectStateMutations-test.js b/src/__tests__/ObjectStateMutations-test.js index 6d2de6cbd..b224ef326 100644 --- a/src/__tests__/ObjectStateMutations-test.js +++ b/src/__tests__/ObjectStateMutations-test.js @@ -323,15 +323,22 @@ describe('ObjectStateMutations', () => { expect(objectCache).toEqual({ items: '[{"count":20},{"count":5}]' }); }); - it('can commit json array with missing indexes', () => { + it('can commit json array with PushStatus offset fields', () => { const serverData = {}; const objectCache = {}; ObjectStateMutations.commitServerChanges(serverData, objectCache, { sentPerUTCOffset: { '1': { count: 20 } }, + failedPerUTCOffset: { '5': { count: 25 } }, }); // Should not transform to an array - expect(serverData).toEqual({ sentPerUTCOffset: { '1': { count: 20 } } }); - expect(objectCache).toEqual({ sentPerUTCOffset: '{"1":{"count":20}}' }); + expect(serverData).toEqual({ + sentPerUTCOffset: { '1': { count: 20 } }, + failedPerUTCOffset: { '5': { count: 25 } }, + }); + expect(objectCache).toEqual({ + sentPerUTCOffset: '{"1":{"count":20}}', + failedPerUTCOffset: '{"5":{"count":25}}', + }); }); it('can generate a default state for implementations', () => { From d2e8ba736785c9b0e6141ea079bbd018fc9edde9 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Thu, 27 Jun 2024 20:57:25 -0500 Subject: [PATCH 3/3] remove todo --- src/ObjectStateMutations.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index 67b2f304a..3292fb88e 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -186,7 +186,6 @@ export function commitServerChanges( for (const attr in changes) { let val = changes[attr]; // Check for JSON array { '0': { something }, '1': { something } } - // TODO: Improve JSON array check with a more robust method (consecutive indexes) if ( val && typeof val === 'object' &&