diff --git a/src/initialization.js b/src/initialization.js index b4df68b..74528a0 100644 --- a/src/initialization.js +++ b/src/initialization.js @@ -92,7 +92,15 @@ function initializeGoogleDFP(common, settings, isInitialized) { } function parseSettingsString(settingsString) { - return JSON.parse(settingsString.replace(/"/g, '"')); + if (!settingsString) { + return []; + } + try { + return JSON.parse(settingsString.replace(/"/g, '"')); + } catch (error) { + console.error('Settings string contains invalid JSON'); + } + return []; } module.exports = initialization; diff --git a/test/tests.js b/test/tests.js index 677ecae..5ceb5ed 100644 --- a/test/tests.js +++ b/test/tests.js @@ -1265,4 +1265,65 @@ describe('DoubleClick', function () { done(); }); }); + + describe('Parse Settings String', function () { + it('should treat falsy settings as empty mappings', function (done) { + mParticle.forwarder.init( + { + advertiserId: '123456', + eventMapping: null, + customVariables: null, + customParams: null, + }, + reportService.cb, + true + ); + + window.dataLayer = []; + + const result = mParticle.forwarder.process({ + EventDataType: MessageTypes.PageEvent, + EventCategory: mParticle.EventType.Unknown, + EventName: 'Test Event', + CustomFlags: { 'DoubleClick.Counter': 'standard' }, + }); + + result.should.equal( + 'Error logging event or event type not supported on forwarder DoubleclickDFP' + ); + window.dataLayer.length.should.equal(0); + done(); + }); + + it('should parse arrays with "', function (done) { + mParticle.forwarder.init( + { + advertiserId: '123456', + eventMapping: + '[{"jsmap":"-1978027768","map":"x","maptype":"EventClass.Id","value":"g;a"}]', + customVariables: '[]', + customParams: '[]', + }, + reportService.cb, + true + ); + + window.dataLayer = []; + + mParticle.forwarder.process({ + EventDataType: MessageTypes.PageEvent, + EventCategory: mParticle.EventType.Unknown, + EventName: 'Test Event', + CustomFlags: { 'DoubleClick.Counter': 'standard' }, + }); + + window.dataLayer[0][0].should.equal('event'); + window.dataLayer[0][1].should.equal('conversion'); + window.dataLayer[0][2].should.have.property( + 'send_to', + 'DC-123456/g/a+standard' + ); + done(); + }); + }); });