Skip to content

Commit d51e5e2

Browse files
fix(core): fix issue with sending defaults for DMA params (#1000)
-fix(): fix issue with sending defaults for DMA params
1 parent b68f814 commit d51e5e2

File tree

5 files changed

+147
-52
lines changed

5 files changed

+147
-52
lines changed

src/1_utils.js

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,49 +1335,42 @@ utils.shouldAddDMAParams = function(endPointURL) {
13351335
};
13361336

13371337
utils.setDMAParams = function(data, dmaObj = {}, endPoint) {
1338-
const DMA_EEA = "dma_eea";
1339-
const DMA_Ad_Personalization = "dma_ad_personalization";
1340-
const DMA_Ad_User_Data = "dma_ad_user_data";
1341-
1338+
const v1_DMAEndPoints = [ "/v1/open", "/v1/pageview" ];
1339+
const v2_DMAEndPoints = [ "/v2/event/standard", "/v2/event/custom" ];
13421340
const dmaParams = {
1343-
[DMA_EEA]: dmaObj.eeaRegion || false,
1344-
[DMA_Ad_Personalization]: dmaObj.adPersonalizationConsent || false,
1345-
[DMA_Ad_User_Data]: dmaObj.adUserDataUsageConsent || false
1341+
dma_eea: dmaObj['eeaRegion'],
1342+
dma_ad_personalization: dmaObj['adPersonalizationConsent'],
1343+
dma_ad_user_data: dmaObj['adUserDataUsageConsent']
13461344
};
1347-
1348-
const allowDMAParamURLMap = utils.allowDMAParamURLMap;
1349-
1350-
for (const [key, value] of Object.entries(allowDMAParamURLMap)) {
1351-
if (endPoint.includes(key)) {
1352-
1353-
if (value === '') {
1354-
Object.assign(data, dmaParams);
1345+
if (v1_DMAEndPoints.includes(endPoint)) {
1346+
Object.assign(data, dmaParams);
1347+
}
1348+
else if (v2_DMAEndPoints.includes(endPoint)) {
1349+
try {
1350+
let user_data;
1351+
if (!data['user_data']) {
1352+
user_data = {};
13551353
}
13561354
else {
1357-
let updatedValue;
1358-
const valueExists = value in data;
1359-
if (!valueExists || data[value] === '') {
1360-
updatedValue = JSON.stringify(dmaParams);
1361-
}
1362-
else {
1363-
try {
1364-
const innerJSONObject = JSON.parse(data[value]);
1365-
const mergedObject = Object.assign({}, innerJSONObject, dmaParams);
1366-
updatedValue = JSON.stringify(mergedObject);
1367-
} catch (error) {
1368-
console.error(`setDMAParams:: ${value} is not a valid JSON string`);
1369-
}
1370-
}
1371-
if (updatedValue) {
1372-
data[value] = updatedValue;
1373-
}
1355+
user_data = JSON.parse(data['user_data']);
13741356
}
1375-
break;
1357+
Object.assign(user_data, dmaParams);
1358+
data['user_data'] = JSON.stringify(user_data);
1359+
} catch (error) {
1360+
console.error(`setDMAParams:: ${data['user_data']} is not a valid JSON string`);
13761361
}
13771362
}
13781363
};
13791364

13801365

1366+
/**
1367+
* @param {?} value
1368+
* Check if given value is boolean or not
1369+
*/
1370+
utils.isBoolean = function(value) {
1371+
return (value === true || value === false);
1372+
};
1373+
13811374
/**
13821375
* @param {String} url
13831376
* A utility function to validate url

src/6_branch.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ Branch.prototype._api = function(resource, obj, callback) {
217217
}
218218
if (utils.shouldAddDMAParams(resource.endpoint)) {
219219
var dmaData = this._storage.get('branch_dma_data', true);
220-
obj["branch_dma_data"] = dmaData ? safejson.parse(dmaData) : {};
220+
obj["branch_dma_data"] = dmaData ? safejson.parse(dmaData) : null;
221221
}
222222
if (resource.endpoint !== '/_r') {
223223
resource.destination = config.api_endpoint;
@@ -1957,14 +1957,31 @@ Branch.prototype['setAPIResponseCallback'] = wrap(callback_params.NO_CALLBACK, f
19571957
*/
19581958
Branch.prototype['setDMAParamsForEEA'] = wrap(callback_params.CALLBACK_ERR, function(done, eeaRegion, adPersonalizationConsent, adUserDataUsageConsent) {
19591959
try {
1960-
var dmaObj = {};
1961-
dmaObj.eeaRegion = eeaRegion || false;
1962-
dmaObj.adPersonalizationConsent = adPersonalizationConsent || false;
1963-
dmaObj.adUserDataUsageConsent = adUserDataUsageConsent || false;
1960+
const validateParam = (param, paramName) => {
1961+
if (!utils.isBoolean(param)) {
1962+
console.warn(`setDMAParamsForEEA: ${paramName} must be boolean, but got ${param}`);
1963+
return false;
1964+
}
1965+
return true;
1966+
};
1967+
const isValid = (
1968+
validateParam(eeaRegion, "eeaRegion") &&
1969+
validateParam(adPersonalizationConsent, "adPersonalizationConsent") &&
1970+
validateParam(adUserDataUsageConsent, "adUserDataUsageConsent")
1971+
);
1972+
if (!isValid) {
1973+
return;
1974+
}
1975+
1976+
const dmaObj = {
1977+
eeaRegion,
1978+
adPersonalizationConsent,
1979+
adUserDataUsageConsent
1980+
};
1981+
19641982
this._storage.set('branch_dma_data', safejson.stringify(dmaObj), true);
1965-
}
1966-
catch (e) {
1967-
console.error("setDMAParamsForEEA::An error occured while setting DMA parameters for EEA", e);
1983+
} catch (e) {
1984+
console.error("setDMAParamsForEEA::An error occurred while setting DMA parameters for EEA", e);
19681985
}
19691986
done();
19701987
}, true);

test/1_utils.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,21 @@ describe('utils', function() {
13721372
utils.setDMAParams(data2, dmaObj, '/v2/event/custom');
13731373
assert.deepEqual(data2, { "user_data":"{\"dma_eea\":true,\"dma_ad_personalization\":true,\"dma_ad_user_data\":false}" });
13741374
});
1375+
it('should add DMA parameters for valid endpoints: v2/event/custom', () => {
1376+
const dmaObj = {
1377+
eeaRegion: true,
1378+
adPersonalizationConsent: true,
1379+
adUserDataUsageConsent: false
1380+
};
1381+
1382+
const data2 = {
1383+
};
1384+
data2.user_data = JSON.stringify({
1385+
"test": true
1386+
});
1387+
utils.setDMAParams(data2, dmaObj, '/v2/event/custom');
1388+
assert.deepEqual(data2, { "user_data": "{\"test\":true,\"dma_eea\":true,\"dma_ad_personalization\":true,\"dma_ad_user_data\":false}" });
1389+
});
13751390
it('should add DMA parameters for valid endpoints: v1/pageview', () => {
13761391
const dmaObj = {
13771392
eeaRegion: true,

test/6_branch_new.js

Lines changed: 79 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,91 @@ describe('Branch - new', function() {
7878
branch_instance.setDMAParamsForEEA.call(thisObj, dmaObj.eeaRegion, dmaObj.adPersonalizationConsent, dmaObj.adUserDataUsageConsent);
7979
sinon.assert.calledWith(storageSetStub, 'branch_dma_data', stringifieddmaObj, true);
8080
});
81-
it('should store default dma params inside branch_dma_data of storage', function() {
81+
it('should not store dma params inside branch_dma_data of storage if eeaRegion is not set', function() {
8282
const thisObj = {
8383
_storage: {
8484
set: () => {}
8585
},
8686
_queue: task_queue()
8787
};
8888
const storageSetStub = sandbox.stub(thisObj._storage, 'set');
89-
const dmaObj = {};
90-
dmaObj.eeaRegion = false;
91-
dmaObj.adPersonalizationConsent = false;
92-
dmaObj.adUserDataUsageConsent = false;
93-
const stringifieddmaObj = JSON.stringify(dmaObj);
9489
branch_instance.setDMAParamsForEEA.call(thisObj);
95-
sinon.assert.calledWith(storageSetStub, 'branch_dma_data', stringifieddmaObj, true);
90+
sinon.assert.notCalled(storageSetStub);
91+
});
92+
it('should not store dma params inside branch_dma_data of storage if eeaRegion is null', function() {
93+
const thisObj = {
94+
_storage: {
95+
set: () => {}
96+
},
97+
_queue: task_queue()
98+
};
99+
const storageSetStub = sandbox.stub(thisObj._storage, 'set');
100+
const dmaObj = {};
101+
dmaObj.eeaRegion = null;
102+
dmaObj.adPersonalizationConsent = true;
103+
dmaObj.adUserDataUsageConsent = true;
104+
branch_instance.setDMAParamsForEEA.call(thisObj, dmaObj.eeaRegion, dmaObj.adPersonalizationConsent, dmaObj.adUserDataUsageConsent);
105+
sinon.assert.notCalled(storageSetStub);
106+
});
107+
it('should log warning if eeaRegion is not boolean', function() {
108+
const thisObj = {
109+
_storage: {
110+
set: () => {}
111+
},
112+
_queue: task_queue()
113+
};
114+
const consoleErrorStub = sandbox.stub(console, 'warn');
115+
try {
116+
const dmaObj = {};
117+
dmaObj.eeaRegion = null;
118+
dmaObj.adPersonalizationConsent = true;
119+
dmaObj.adUserDataUsageConsent = true;
120+
branch_instance.setDMAParamsForEEA.call(thisObj, dmaObj.eeaRegion, dmaObj.adPersonalizationConsent, dmaObj.adUserDataUsageConsent);
121+
122+
} catch (e) {
123+
124+
}
125+
sinon.assert.calledWith(consoleErrorStub, 'setDMAParamsForEEA: eeaRegion must be boolean, but got null');
126+
});
127+
it('should log warning if adPersonalizationConsent is not boolean', function() {
128+
const thisObj = {
129+
_storage: {
130+
set: () => {}
131+
},
132+
_queue: task_queue()
133+
};
134+
const consoleErrorStub = sandbox.stub(console, 'warn');
135+
try {
136+
const dmaObj = {};
137+
dmaObj.eeaRegion = true;
138+
dmaObj.adPersonalizationConsent = null;
139+
dmaObj.adUserDataUsageConsent = true;
140+
branch_instance.setDMAParamsForEEA.call(thisObj, dmaObj.eeaRegion, dmaObj.adPersonalizationConsent, dmaObj.adUserDataUsageConsent);
141+
142+
} catch (e) {
143+
144+
}
145+
sinon.assert.calledWith(consoleErrorStub, 'setDMAParamsForEEA: adPersonalizationConsent must be boolean, but got null');
146+
});
147+
it('should log warning if eeaRegion is not boolean', function() {
148+
const thisObj = {
149+
_storage: {
150+
set: () => {}
151+
},
152+
_queue: task_queue()
153+
};
154+
const consoleErrorStub = sandbox.stub(console, 'warn');
155+
try {
156+
const dmaObj = {};
157+
dmaObj.eeaRegion = true;
158+
dmaObj.adPersonalizationConsent = true;
159+
dmaObj.adUserDataUsageConsent = null;
160+
branch_instance.setDMAParamsForEEA.call(thisObj, dmaObj.eeaRegion, dmaObj.adPersonalizationConsent, dmaObj.adUserDataUsageConsent);
161+
162+
} catch (e) {
163+
164+
}
165+
sinon.assert.calledWith(consoleErrorStub, 'setDMAParamsForEEA: adUserDataUsageConsent must be boolean, but got null');
96166
});
97167
it('should catch and log exception', function() {
98168
const thisObj = {
@@ -108,12 +178,12 @@ describe('Branch - new', function() {
108178
dmaObj.eeaRegion = false;
109179
dmaObj.adPersonalizationConsent = false;
110180
dmaObj.adUserDataUsageConsent = false;
111-
branch_instance.setDMAParamsForEEA.call(thisObj);
181+
branch_instance.setDMAParamsForEEA.call(thisObj, dmaObj.eeaRegion, dmaObj.adPersonalizationConsent, dmaObj.adUserDataUsageConsent);
112182

113183
} catch (e) {
114184

115185
}
116-
sinon.assert.calledWith(consoleErrorStub, 'setDMAParamsForEEA::An error occured while setting DMA parameters for EEA', sinon.match.instanceOf(Error));
186+
sinon.assert.calledWith(consoleErrorStub, 'setDMAParamsForEEA::An error occurred while setting DMA parameters for EEA', sinon.match.instanceOf(Error));
117187
});
118188
});
119189
describe('setAPIUrl', function() {

test/branch-deps.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ goog.addDependency('../../../../src/1_utils.js', ['utils'], ['config', 'goog.jso
55
goog.addDependency('../../../../src/2_resources.js', ['resources'], ['config', 'utils']);
66
goog.addDependency('../../../../src/2_session.js', ['session'], ['goog.json', 'safejson', 'storage', 'utils']);
77
goog.addDependency('../../../../src/2_storage.js', ['storage'], ['goog.json', 'utils']);
8-
goog.addDependency('../../../../src/3_api.js', ['Server'], ['goog.json', 'safejson', 'storage', 'utils']);
8+
goog.addDependency('../../../../src/3_api.js', ['Server'], ['goog.json', 'safejson', 'storage', 'utils'], {'lang': 'es6'});
99
goog.addDependency('../../../../src/3_banner_utils.js', ['banner_utils'], ['safejson', 'storage', 'utils']);
1010
goog.addDependency('../../../../src/4_banner_css.js', ['banner_css'], ['banner_utils', 'utils']);
1111
goog.addDependency('../../../../src/4_banner_html.js', ['banner_html'], ['banner_utils', 'session', 'storage', 'utils']);
1212
goog.addDependency('../../../../src/5_banner.js', ['banner'], ['banner_css', 'banner_html', 'banner_utils', 'utils']);
13-
goog.addDependency('../../../../src/6_branch.js', ['Branch'], ['Server', 'banner', 'branch_view', 'config', 'goog.json', 'journeys_utils', 'resources', 'safejson', 'session', 'storage', 'task_queue', 'utils']);
13+
goog.addDependency('../../../../src/6_branch.js', ['Branch'], ['Server', 'banner', 'branch_view', 'config', 'goog.json', 'journeys_utils', 'resources', 'safejson', 'session', 'storage', 'task_queue', 'utils'], {'lang': 'es6'});
1414
goog.addDependency('../../../../src/7_initialization.js', ['branch_instance'], ['Branch', 'config']);
1515
goog.addDependency('../../../../src/branch_view.js', ['branch_view'], ['banner_css', 'journeys_utils', 'safejson', 'utils']);
1616
goog.addDependency('../../../../src/extern.js', [], []);

0 commit comments

Comments
 (0)