From d8fd0fb5cefa211aaf99d4d257515737bdb60ede Mon Sep 17 00:00:00 2001 From: Renan Castro Date: Thu, 6 Jan 2022 20:55:35 -0300 Subject: [PATCH] Fix oplog converter case in which the value is an array but shouldnt be flattened --- packages/mongo/oplog_v2_converter.js | 2 +- packages/mongo/oplog_v2_converter_tests.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index d53ad1ff61..c0420b8bc1 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -63,7 +63,7 @@ const nestedOplogEntryParsers = ( return { ...acc, - ...(typeof setObjectSource[key] === 'object' + ...(!Array.isArray(setObjectSource[key]) && typeof setObjectSource[key] === 'object' ? flattenObject({ [prefixedKey]: setObjectSource[key] }) : { [prefixedKey]: setObjectSource[key], diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index 5620c786fb..51194d0298 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -1,6 +1,6 @@ import { oplogV2V1Converter } from './oplog_v2_converter'; -Tinytest.add('oplog - v2/v1 conversion', function(test) { +Tinytest.only('oplog - v2/v1 conversion', function(test) { const entry1 = { $v: 2, diff: { scustom: { sEJSON$value: { u: { EJSONtail: 'd' } } } }, @@ -33,6 +33,8 @@ Tinytest.add('oplog - v2/v1 conversion', function(test) { }; const entry8 = { $v: 2, diff: { u: { c: 'bar' }, sb: { a: true, u0: 2 } } }; + const entry9 = {"$v":2,"diff":{"sservices":{"sresume":{"u":{"loginTokens":[]}}}}}; + test.equal( JSON.stringify(oplogV2V1Converter(entry1)), JSON.stringify({ @@ -74,4 +76,8 @@ Tinytest.add('oplog - v2/v1 conversion', function(test) { JSON.stringify(oplogV2V1Converter(entry8)), JSON.stringify({ $v: 2, $set: { 'b.0': 2, c: 'bar' } }) ); + test.equal( + JSON.stringify(oplogV2V1Converter(entry9)), + JSON.stringify({ '$v': 2, '$set': { 'services.resume.loginTokens': [] } }) + ); });