diff --git a/libraries/browsiUtils/browsiUtils.js b/libraries/browsiUtils/browsiUtils.js index 9b520ff53a9..2180b7e0a4b 100644 --- a/libraries/browsiUtils/browsiUtils.js +++ b/libraries/browsiUtils/browsiUtils.js @@ -234,7 +234,9 @@ export function getMacroId(macro, slot) { if (macro) { try { const macroResult = evaluate(macro, slot.getSlotElementId(), slot.getAdUnitPath(), (match, p1) => { - return (p1 && slot.getTargeting(p1).join('_')) || 'NA'; + if (!p1) return 'NA'; + const value = slot.getConfig('targeting').targeting?.[p1]; + return (Array.isArray(value) ? value : [value]).filter(v => v != null).join('_') || 'NA'; }); return macroResult; } catch (e) { diff --git a/libraries/gptUtils/gptUtils.js b/libraries/gptUtils/gptUtils.js index 17ca64483ab..8be29f660be 100644 --- a/libraries/gptUtils/gptUtils.js +++ b/libraries/gptUtils/gptUtils.js @@ -24,7 +24,8 @@ export function setKeyValue(key, value) { window.googletag = window.googletag || {cmd: []}; window.googletag.cmd = window.googletag.cmd || []; window.googletag.cmd.push(() => { - window.googletag.pubads().setTargeting(key, value); + const values = Array.isArray(value) ? value : [value]; + window.googletag.setConfig({targeting: {[key]: values}}); }); } diff --git a/libraries/intentIqUtils/gamPredictionReport.js b/libraries/intentIqUtils/gamPredictionReport.js index 2191ade6d35..d239fa16b9e 100644 --- a/libraries/intentIqUtils/gamPredictionReport.js +++ b/libraries/intentIqUtils/gamPredictionReport.js @@ -7,8 +7,9 @@ export function gamPredictionReport (gamObjectReference, sendData) { const getSlotTargeting = (slot) => { const kvs = {}; try { - (slot.getTargetingKeys() || []).forEach((k) => { - kvs[k] = slot.getTargeting(k); + const targeting = slot.getConfig('targeting').targeting; + Object.entries(targeting || {}).forEach(([key, value]) => { + kvs[key] = Array.isArray(value) ? value : [value]; }); } catch (e) { logError('Failed to get targeting keys: ' + e); diff --git a/modules/sirdataRtdProvider.js b/modules/sirdataRtdProvider.js index 81c75692fde..22033751858 100644 --- a/modules/sirdataRtdProvider.js +++ b/modules/sirdataRtdProvider.js @@ -673,7 +673,7 @@ export function addSegmentData(reqBids, data, adUnits, onDone) { window.googletag.cmd.push(() => { window.googletag.pubads().getSlots().forEach(slot => { - if (typeof slot.setTargeting !== 'undefined' && sirdataMergedList.length > 0) { + if (sirdataMergedList.length > 0) { slot.setConfig({targeting: {'sd_rtd': sirdataMergedList}}); } }); diff --git a/test/spec/integration/faker/googletag.js b/test/spec/integration/faker/googletag.js index 4060040b902..a881d957337 100644 --- a/test/spec/integration/faker/googletag.js +++ b/test/spec/integration/faker/googletag.js @@ -6,7 +6,7 @@ var Slot = function Slot({ code, divId }) { divId = divId || `div-id-${randomFive()}`; var slot = { - targeting: [], + targeting: {}, getSlotElementId: function getSlotElementId() { return divId; }, @@ -16,28 +16,26 @@ var Slot = function Slot({ code, divId }) { }, setTargeting: function setTargeting(key, value) { - var obj = []; - obj[key] = value; - this.targeting.push(obj); + this.targeting[key] = Array.isArray(value) ? value : [value]; }, - getTargeting: function getTargeting() { - return this.targeting; + getTargeting: function getTargeting(key) { + return this.targeting[key] || []; }, getTargetingKeys: function getTargetingKeys() { - return []; + return Object.keys(this.targeting); }, getConfig: function getConfig(key) { if (key === 'targeting') { - return this.targeting; + return {targeting: this.targeting}; } }, setConfig: function setConfig(config) { if (config?.targeting) { - this.targeting = config.targeting; + Object.assign(this.targeting, config.targeting); } }, diff --git a/test/spec/modules/browsiRtdProvider_spec.js b/test/spec/modules/browsiRtdProvider_spec.js index 202732202d2..978fd205731 100644 --- a/test/spec/modules/browsiRtdProvider_spec.js +++ b/test/spec/modules/browsiRtdProvider_spec.js @@ -68,10 +68,9 @@ describe('browsi Real time data sub module', function () { it('should return correct macro values', function () { const slot = mockGpt.makeSlot({ code: '/123/abc', divId: 'browsiAd_1' }); - slot.setTargeting('test', ['test', 'value']); - // slot getTargeting doesn't act like GPT so we can't expect real value + slot.setConfig({targeting: {'test': ['test', 'value']}}); const macroResult = browsiUtils.getMacroId({ p: '/' }, slot); - expect(macroResult).to.equal('/123/abc/NA'); + expect(macroResult).to.equal('/123/abc/test_value'); const macroResultB = browsiUtils.getMacroId({}, slot); expect(macroResultB).to.equal('browsiAd_1');