Skip to content

Commit

Permalink
Fix: Incorrect generation of analytics impression url when bid respon…
Browse files Browse the repository at this point in the history
…se is a VAST URL (videoTrackers.js) (#12252)

* Fixed issue of adding analytics impression pixel via Prebid's vastTrackers.js module.Getting object Required Array<string>.

* Add test

---------

Co-authored-by: shubham.si <[email protected]>
Co-authored-by: Demetrio Girardi <[email protected]>
  • Loading branch information
3 people authored Oct 7, 2024
1 parent 22aa7ce commit df04741
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 13 deletions.
11 changes: 8 additions & 3 deletions libraries/vastTrackers/vastTrackers.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,24 @@ import {activityParams} from '../../src/activities/activityParams.js';

const vastTrackers = [];

addBidResponse.before(function (next, adUnitcode, bidResponse, reject) {
export function reset() {
vastTrackers.length = 0;
}

export function addTrackersToResponse(next, adUnitcode, bidResponse, reject) {
if (FEATURES.VIDEO && bidResponse.mediaType === VIDEO) {
const vastTrackers = getVastTrackers(bidResponse);
if (vastTrackers) {
bidResponse.vastXml = insertVastTrackers(vastTrackers, bidResponse.vastXml);
const impTrackers = vastTrackers.get('impressions');
if (impTrackers) {
bidResponse.vastImpUrl = [].concat(impTrackers).concat(bidResponse.vastImpUrl).filter(t => t);
bidResponse.vastImpUrl = [].concat([...impTrackers]).concat(bidResponse.vastImpUrl).filter(t => t);
}
}
}
next(adUnitcode, bidResponse, reject);
});
}
addBidResponse.before(addTrackersToResponse);

export function registerVastTrackers(moduleType, moduleName, trackerFn) {
if (typeof trackerFn === 'function') {
Expand Down
43 changes: 33 additions & 10 deletions test/spec/libraries/vastTrackers_spec.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
import {addImpUrlToTrackers, getVastTrackers, insertVastTrackers, registerVastTrackers} from 'libraries/vastTrackers/vastTrackers.js';
import {
addImpUrlToTrackers,
addTrackersToResponse,
getVastTrackers,
insertVastTrackers,
registerVastTrackers,
reset
} from 'libraries/vastTrackers/vastTrackers.js';
import {MODULE_TYPE_ANALYTICS} from '../../../src/activities/modules.js';

describe('vast trackers', () => {
beforeEach(() => {
registerVastTrackers(MODULE_TYPE_ANALYTICS, 'test', function(bidResponse) {
return [
{'event': 'impressions', 'url': `https://vasttracking.mydomain.com/vast?cpm=${bidResponse.cpm}`}
];
});
})
afterEach(() => {
reset();
});

it('insert into tracker list', function() {
let trackers = getVastTrackers({'cpm': 1.0});
if (!trackers || !trackers.get('impressions')) {
registerVastTrackers(MODULE_TYPE_ANALYTICS, 'test', function(bidResponse) {
return [
{'event': 'impressions', 'url': `https://vasttracking.mydomain.com/vast?cpm=${bidResponse.cpm}`}
];
});
}
trackers = getVastTrackers({'cpm': 1.0});
const trackers = getVastTrackers({'cpm': 1.0});
expect(trackers).to.be.a('map');
expect(trackers.get('impressions')).to.exists;
expect(trackers.get('impressions').has('https://vasttracking.mydomain.com/vast?cpm=1')).to.be.true;
Expand All @@ -30,4 +40,17 @@ describe('vast trackers', () => {
expect(trackers.get('impressions')).to.exists;
expect(trackers.get('impressions').has('imptracker.com')).to.be.true;
});

if (FEATURES.VIDEO) {
it('should add trackers to bid response', () => {
const bidResponse = {
mediaType: 'video',
cpm: 1
}
addTrackersToResponse(sinon.stub(), 'au', bidResponse);
expect(bidResponse.vastImpUrl).to.eql([
'https://vasttracking.mydomain.com/vast?cpm=1'
])
});
}
})

0 comments on commit df04741

Please sign in to comment.