diff --git a/spec/MongoTransform.spec.js b/spec/MongoTransform.spec.js index f0bb6ec4d9..bfe7b914db 100644 --- a/spec/MongoTransform.spec.js +++ b/spec/MongoTransform.spec.js @@ -308,4 +308,32 @@ describe('transformUpdate', () => { expect(output).toEqual({}); done(); }); + + it('skips transforming \'File\' fields for class _GlobalConfig', (done) => { + var input = { + __type: "File", + name: "name", + url: "url" + }; + + var output = transform.transformUpdate("_GlobalConfig", input, { + fields: {} + }); + expect(output).toEqual({ $set: Object({ __type: 'File', name: 'name', url: 'url' }) }); + done(); + }); + + it('skips transforming \'GeoPoint\' fields for class _GlobalConfig', (done) => { + var input = { + __type: "GeoPoint", + name: "10", + url: "20" + }; + + var output = transform.transformUpdate("_GlobalConfig", input, { + fields: {} + }); + expect(output).toEqual({ $set: Object({ __type: 'GeoPoint', name: '10', url: '20' }) }); + done(); + }); }); diff --git a/src/Adapters/Storage/Mongo/MongoTransform.js b/src/Adapters/Storage/Mongo/MongoTransform.js index e91abbb563..2ef38f4512 100644 --- a/src/Adapters/Storage/Mongo/MongoTransform.js +++ b/src/Adapters/Storage/Mongo/MongoTransform.js @@ -84,7 +84,8 @@ const transformKeyValueForUpdate = (className, restKey, restValue, parseFormatSc } // Handle atomic values - var value = transformTopLevelAtom(restValue); + var skipTransform = className === "_GlobalConfig" && restValue && (restValue.__type === 'File' || restValue.__type === 'GeoPoint'); + var value = skipTransform ? restValue : transformTopLevelAtom(restValue); if (value !== CannotTransform) { if (timeField && (typeof value === 'string')) { value = new Date(value); @@ -380,6 +381,7 @@ const transformUpdate = (className, restUpdate, parseFormatSchema) => { if (restUpdate[restKey] && restUpdate[restKey].__type === 'Relation') { continue; } + var out = transformKeyValueForUpdate(className, restKey, restUpdate[restKey], parseFormatSchema); // If the output value is an object with any $ keys, it's an