Skip to content

Commit

Permalink
Taboola Bid Adapter: fix ortb2 user override issue (#11516)
Browse files Browse the repository at this point in the history
* pass-user-fields

* pass-user-fields

* tests added
  • Loading branch information
ahmadlob committed May 29, 2024
1 parent 38ca7c2 commit 84e4359
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 30 deletions.
49 changes: 26 additions & 23 deletions modules/taboolaBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export const userData = {
return tblaId;
}
}
return undefined;
},
getCookieDataByKey(cookieData, key) {
if (!cookieData) {
Expand All @@ -78,6 +79,7 @@ export const userData = {
if (hasLocalStorage() && localStorageIsEnabled()) {
return getDataFromLocalStorage(STORAGE_KEY);
}
return undefined;
},
getFromTRC() {
return window.TRC ? window.TRC.user_id : 0;
Expand Down Expand Up @@ -274,35 +276,38 @@ function getSiteProperties({publisherId}, refererInfo, ortb2) {
function fillTaboolaReqData(bidderRequest, bidRequest, data) {
const {refererInfo, gdprConsent = {}, uspConsent} = bidderRequest;
const site = getSiteProperties(bidRequest.params, refererInfo, bidderRequest.ortb2);
const device = {ua: navigator.userAgent};
let user = {
buyeruid: userData.getUserId(gdprConsent, uspConsent),
ext: {}
};
if (bidderRequest && bidderRequest.ortb2 && bidderRequest.ortb2.user) {
user.data = bidderRequest.ortb2.user.data;
deepSetValue(data, 'device.ua', navigator.userAgent);
const extractedUserId = userData.getUserId(gdprConsent, uspConsent);
if (data.user == undefined) {
data.user = {
buyeruid: 0,
ext: {}
}
}
const regs = {
coppa: 0,
ext: {}
};

if (extractedUserId && extractedUserId !== 0) {
deepSetValue(data, 'user.buyeruid', extractedUserId);
}
if (data.regs?.ext == undefined) {
data.regs = {
ext: {}
}
}
deepSetValue(data, 'regs.coppa', 0);
if (gdprConsent.gdprApplies) {
user.ext.consent = bidderRequest.gdprConsent.consentString;
regs.ext.gdpr = 1;
deepSetValue(data, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
deepSetValue(data, 'regs.ext.gdpr', 1);
}

if (uspConsent) {
regs.ext.us_privacy = uspConsent;
deepSetValue(data, 'regs.ext.us_privacy', uspConsent);
}

if (bidderRequest.ortb2?.regs?.gpp) {
regs.ext.gpp = bidderRequest.ortb2.regs.gpp;
regs.ext.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
deepSetValue(data, 'regs.ext.gpp', bidderRequest.ortb2.regs.gpp);
deepSetValue(data, 'regs.ext.gpp_sid', bidderRequest.ortb2.regs.gpp_sid);
}

if (config.getConfig('coppa')) {
regs.coppa = 1;
deepSetValue(data, 'regs.coppa', 1);
}

const ortb2 = bidderRequest.ortb2 || {
Expand All @@ -311,16 +316,14 @@ function fillTaboolaReqData(bidderRequest, bidRequest, data) {
wlang: []
};

deepSetValue(data, 'source.fd', 1);

data.id = bidderRequest.bidderRequestId;
data.site = site;
data.device = device;
data.source = {fd: 1};
data.tmax = (bidderRequest.timeout == undefined) ? undefined : parseInt(bidderRequest.timeout);
data.bcat = ortb2.bcat || bidRequest.params.bcat || [];
data.badv = ortb2.badv || bidRequest.params.badv || [];
data.wlang = ortb2.wlang || bidRequest.params.wlang || [];
data.user = user;
data.regs = regs;
deepSetValue(data, 'ext.pageType', ortb2?.ext?.data?.pageType || ortb2?.ext?.data?.section || bidRequest.params.pageType);
deepSetValue(data, 'ext.prebid.version', '$prebid.version$');
}
Expand Down
57 changes: 50 additions & 7 deletions test/spec/modules/taboolaBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,13 @@ describe('Taboola Adapter', function () {
}],
id: 'mock-uuid',
'test': 0,
'device': {'ua': navigator.userAgent},
'user': {
'buyeruid': 0,
'ext': {},
},
'regs': {'ext': {}, 'coppa': 0},
'source': {'fd': 1},
'site': {
'id': commonBidRequest.params.publisherId,
'name': commonBidRequest.params.publisherId,
Expand All @@ -208,16 +215,9 @@ describe('Taboola Adapter', function () {
'publisher': {'id': commonBidRequest.params.publisherId},
'content': {'language': navigator.language}
},
'device': {'ua': navigator.userAgent},
'source': {'fd': 1},
'bcat': [],
'badv': [],
'wlang': [],
'user': {
'buyeruid': 0,
'ext': {},
},
'regs': {'coppa': 0, 'ext': {}},
'ext': {
'prebid': {
'version': '$prebid.version$'
Expand Down Expand Up @@ -363,12 +363,33 @@ describe('Taboola Adapter', function () {
bcat: ['EX1', 'EX2', 'EX3'],
badv: ['site.com'],
wlang: ['de'],
user: {
id: 'externalUserIdPassed'
}
}
}
const res = spec.buildRequests([defaultBidRequest], bidderRequest);
expect(res.data.bcat).to.deep.equal(bidderRequest.ortb2.bcat)
expect(res.data.badv).to.deep.equal(bidderRequest.ortb2.badv)
expect(res.data.wlang).to.deep.equal(bidderRequest.ortb2.wlang)
expect(res.data.user.id).to.deep.equal(bidderRequest.ortb2.user.id)
});

it('should pass user entities', function () {
const bidderRequest = {
...commonBidderRequest,
ortb2: {
user: {
id: 'userid',
buyeruid: 'buyeruid',
yob: 1990
}
}
}
const res = spec.buildRequests([defaultBidRequest], bidderRequest);
expect(res.data.user.id).to.deep.equal(bidderRequest.ortb2.user.id)
expect(res.data.user.buyeruid).to.deep.equal(bidderRequest.ortb2.user.buyeruid)
expect(res.data.user.yob).to.deep.equal(bidderRequest.ortb2.user.yob)
});

it('should pass pageType if exists in ortb2', function () {
Expand Down Expand Up @@ -503,6 +524,28 @@ describe('Taboola Adapter', function () {
expect(res.data.user.buyeruid).to.equal('12121212');
});

it('should get buyeruid from cookie as priority and external user id from ortb2 object', function () {
getDataFromLocalStorage.returns(51525152);
hasLocalStorage.returns(false);
localStorageIsEnabled.returns(false);
cookiesAreEnabled.returns(true);
getCookie.returns('taboola%20global%3Auser-id=12121212');

const bidderRequest = {
...commonBidderRequest,
ortb2: {
user: {
id: 'userid',
buyeruid: 'buyeruid',
yob: 1990
}
}
};
const res = spec.buildRequests([defaultBidRequest], bidderRequest);
expect(res.data.user.id).to.deep.equal('userid')
expect(res.data.user.buyeruid).to.equal('12121212');
});

it('should get user id from cookie if local storage isn`t defined, only TGID_COOKIE_KEY exists', function () {
getDataFromLocalStorage.returns(51525152);
hasLocalStorage.returns(false);
Expand Down

0 comments on commit 84e4359

Please sign in to comment.