Skip to content
This repository was archived by the owner on Mar 12, 2025. It is now read-only.

Commit 3cfbf9d

Browse files
pm-azhar-mullaAzhar
and
Azhar
authored
PubMatic Analytics Adapter: added support for Bidder alias (prebid#7153)
* Changed net revenue to True * Added support for bidderAlias * Removed the code converting bidder to lowercase Co-authored-by: Azhar <[email protected]>
1 parent a633a63 commit 3cfbf9d

File tree

2 files changed

+137
-3
lines changed

2 files changed

+137
-3
lines changed

modules/pubmaticAnalyticsAdapter.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ function setMediaTypes(types, bid) {
8282

8383
function copyRequiredBidDetails(bid) {
8484
return utils.pick(bid, [
85-
'bidder', bidder => bidder.toLowerCase(),
85+
'bidder',
8686
'bidId',
8787
'status', () => NO_BID, // default a bid to NO_BID until response is recieved or bid is timed out
8888
'finalSource as source',
@@ -196,12 +196,17 @@ function getValueForKgpv(bid, adUnitId) {
196196
}
197197
}
198198

199+
function getAdapterNameForAlias(aliasName) {
200+
return adapterManager.aliasRegistry[aliasName] || aliasName;
201+
}
202+
199203
function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) {
200204
highestBid = (highestBid && highestBid.length > 0) ? highestBid[0] : null;
201205
return Object.keys(adUnit.bids).reduce(function(partnerBids, bidId) {
202206
let bid = adUnit.bids[bidId];
203207
partnerBids.push({
204-
'pn': bid.bidder,
208+
'pn': getAdapterNameForAlias(bid.bidder),
209+
'bc': bid.bidder,
205210
'bidid': bid.bidId,
206211
'db': bid.bidResponse ? 0 : 1,
207212
'kgpv': getValueForKgpv(bid, adUnitId),
@@ -287,6 +292,7 @@ function executeBidsLoggerCall(e, highestCpmBids) {
287292
function executeBidWonLoggerCall(auctionId, adUnitId) {
288293
const winningBidId = cache.auctions[auctionId].adUnitCodes[adUnitId].bidWon;
289294
const winningBid = cache.auctions[auctionId].adUnitCodes[adUnitId].bids[winningBidId];
295+
const adapterName = getAdapterNameForAlias(winningBid.bidder);
290296
let pixelURL = END_POINT_WIN_BID_LOGGER;
291297
pixelURL += 'pubid=' + publisherId;
292298
pixelURL += '&purl=' + enc(config.getConfig('pageUrl') || cache.auctions[auctionId].referer || '');
@@ -296,7 +302,8 @@ function executeBidWonLoggerCall(auctionId, adUnitId) {
296302
pixelURL += '&pid=' + enc(profileId);
297303
pixelURL += '&pdvid=' + enc(profileVersionId);
298304
pixelURL += '&slot=' + enc(adUnitId);
299-
pixelURL += '&pn=' + enc(winningBid.bidder);
305+
pixelURL += '&pn=' + enc(adapterName);
306+
pixelURL += '&bc=' + enc(winningBid.bidder);
300307
pixelURL += '&en=' + enc(winningBid.bidResponse.bidPriceUSD);
301308
pixelURL += '&eg=' + enc(winningBid.bidResponse.bidGrossCpmUSD);
302309
pixelURL += '&kgpv=' + enc(getValueForKgpv(winningBid, adUnitId));

test/spec/modules/pubmaticAnalyticsAdapter_spec.js

+127
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pubmaticAnalyticsAdapter from 'modules/pubmaticAnalyticsAdapter.js';
2+
import adapterManager from 'src/adapterManager.js';
23
import CONSTANTS from 'src/constants.json';
34
import { config } from 'src/config.js';
45
import {
@@ -342,6 +343,7 @@ describe('pubmatic analytics adapter', function () {
342343
expect(data.s[0].ps).to.be.an('array');
343344
expect(data.s[0].ps.length).to.equal(1);
344345
expect(data.s[0].ps[0].pn).to.equal('pubmatic');
346+
expect(data.s[0].ps[0].bc).to.equal('pubmatic');
345347
expect(data.s[0].ps[0].bidid).to.equal('2ecff0db240757');
346348
expect(data.s[0].ps[0].piid).to.equal('partnerImpressionID-1');
347349
expect(data.s[0].ps[0].db).to.equal(0);
@@ -366,6 +368,7 @@ describe('pubmatic analytics adapter', function () {
366368
expect(data.s[1].ps).to.be.an('array');
367369
expect(data.s[1].ps.length).to.equal(1);
368370
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
371+
expect(data.s[0].ps[0].bc).to.equal('pubmatic');
369372
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
370373
expect(data.s[1].ps[0].piid).to.equal('partnerImpressionID-2');
371374
expect(data.s[1].ps[0].db).to.equal(0);
@@ -401,6 +404,7 @@ describe('pubmatic analytics adapter', function () {
401404
expect(decodeURIComponent(data.slot)).to.equal('/19968336/header-bid-tag-0');
402405
expect(decodeURIComponent(data.kgpv)).to.equal('/19968336/header-bid-tag-0');
403406
expect(data.pn).to.equal('pubmatic');
407+
expect(data.bc).to.equal('pubmatic');
404408
expect(data.eg).to.equal('1.23');
405409
expect(data.en).to.equal('1.23');
406410
expect(data.piid).to.equal('partnerImpressionID-1');
@@ -441,6 +445,7 @@ describe('pubmatic analytics adapter', function () {
441445
expect(data.s[0].ps).to.be.an('array');
442446
expect(data.s[0].ps.length).to.equal(1);
443447
expect(data.s[0].ps[0].pn).to.equal('pubmatic');
448+
expect(data.s[0].ps[0].bc).to.equal('pubmatic');
444449
expect(data.s[0].ps[0].bidid).to.equal('2ecff0db240757');
445450
expect(data.s[0].ps[0].kgpv).to.equal('/19968336/header-bid-tag-0');
446451
expect(data.s[0].ps[0].eg).to.equal(1.23);
@@ -508,6 +513,7 @@ describe('pubmatic analytics adapter', function () {
508513
expect(data.s[0].ps).to.be.an('array');
509514
expect(data.s[0].ps.length).to.equal(1);
510515
expect(data.s[0].ps[0].pn).to.equal('pubmatic');
516+
expect(data.s[0].ps[0].bc).to.equal('pubmatic');
511517
expect(data.s[0].ps[0].bidid).to.equal('2ecff0db240757');
512518
expect(data.s[0].ps[0].kgpv).to.equal('/19968336/header-bid-tag-0');
513519
expect(data.s[0].ps[0].eg).to.equal(1);
@@ -551,6 +557,7 @@ describe('pubmatic analytics adapter', function () {
551557
expect(data.s[1].ps).to.be.an('array');
552558
expect(data.s[1].ps.length).to.equal(1);
553559
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
560+
expect(data.s[0].ps[0].bc).to.equal('pubmatic');
554561
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
555562
expect(data.s[1].ps[0].db).to.equal(1);
556563
expect(data.s[1].ps[0].kgpv).to.equal('this-is-a-kgpv');
@@ -587,6 +594,7 @@ describe('pubmatic analytics adapter', function () {
587594
expect(data.s[1].ps).to.be.an('array');
588595
expect(data.s[1].ps.length).to.equal(1);
589596
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
597+
expect(data.s[0].ps[0].bc).to.equal('pubmatic');
590598
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
591599
expect(data.s[1].ps[0].db).to.equal(1);
592600
expect(data.s[1].ps[0].kgpv).to.equal('this-is-a-kgpv');
@@ -629,6 +637,7 @@ describe('pubmatic analytics adapter', function () {
629637
expect(data.s[1].ps).to.be.an('array');
630638
expect(data.s[1].ps.length).to.equal(1);
631639
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
640+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
632641
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
633642
expect(data.s[1].ps[0].db).to.equal(0);
634643
expect(data.s[1].ps[0].kgpv).to.equal('this-is-a-kgpv');
@@ -685,6 +694,7 @@ describe('pubmatic analytics adapter', function () {
685694
expect(data.s[1].ps).to.be.an('array');
686695
expect(data.s[1].ps.length).to.equal(1);
687696
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
697+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
688698
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
689699
expect(data.s[1].ps[0].db).to.equal(0);
690700
expect(data.s[1].ps[0].kgpv).to.equal('this-is-a-kgpv');
@@ -730,6 +740,7 @@ describe('pubmatic analytics adapter', function () {
730740
expect(data.s[1].ps).to.be.an('array');
731741
expect(data.s[1].ps.length).to.equal(1);
732742
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
743+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
733744
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
734745
expect(data.s[1].ps[0].db).to.equal(0);
735746
expect(data.s[1].ps[0].kgpv).to.equal('*');
@@ -783,6 +794,7 @@ describe('pubmatic analytics adapter', function () {
783794
expect(data.s[1].ps).to.be.an('array');
784795
expect(data.s[1].ps.length).to.equal(1);
785796
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
797+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
786798
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
787799
expect(data.s[1].ps[0].db).to.equal(0);
788800
expect(data.s[1].ps[0].kgpv).to.equal('*');
@@ -833,6 +845,7 @@ describe('pubmatic analytics adapter', function () {
833845
expect(data.s[1].ps).to.be.an('array');
834846
expect(data.s[1].ps.length).to.equal(1);
835847
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
848+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
836849
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
837850
expect(data.s[1].ps[0].db).to.equal(0);
838851
expect(data.s[1].ps[0].kgpv).to.equal('*');
@@ -885,6 +898,7 @@ describe('pubmatic analytics adapter', function () {
885898
expect(data.s[1].ps).to.be.an('array');
886899
expect(data.s[1].ps.length).to.equal(1);
887900
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
901+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
888902
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
889903
expect(data.s[1].ps[0].db).to.equal(0);
890904
expect(data.s[1].ps[0].kgpv).to.equal('*');
@@ -910,5 +924,118 @@ describe('pubmatic analytics adapter', function () {
910924
firstTracker.split('?')[1].split('&').map(e => e.split('=')).forEach(e => data[e[0]] = e[1]);
911925
expect(data.kgpv).to.equal('*');
912926
});
927+
928+
it('Logger: best case + win tracker in case of Bidder Aliases', function() {
929+
MOCK.BID_REQUESTED['bids'][0]['bidder'] = 'pubmatic_alias';
930+
adapterManager.aliasRegistry['pubmatic_alias'] = 'pubmatic';
931+
932+
sandbox.stub($$PREBID_GLOBAL$$, 'getHighestCpmBids').callsFake((key) => {
933+
return [MOCK.BID_RESPONSE[0], MOCK.BID_RESPONSE[1]]
934+
});
935+
936+
config.setConfig({
937+
testGroupId: 15
938+
});
939+
940+
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
941+
events.emit(BID_REQUESTED, MOCK.BID_REQUESTED);
942+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
943+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[1]);
944+
events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
945+
events.emit(AUCTION_END, MOCK.AUCTION_END);
946+
events.emit(SET_TARGETING, MOCK.SET_TARGETING);
947+
events.emit(BID_WON, MOCK.BID_WON[0]);
948+
events.emit(BID_WON, MOCK.BID_WON[1]);
949+
950+
clock.tick(2000 + 1000);
951+
expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
952+
let request = requests[2]; // logger is executed late, trackers execute first
953+
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
954+
let data = getLoggerJsonFromRequest(request.requestBody);
955+
expect(data.pubid).to.equal('9999');
956+
expect(data.pid).to.equal('1111');
957+
expect(data.pdvid).to.equal('20');
958+
expect(data.iid).to.equal('25c6d7f5-699a-4bfc-87c9-996f915341fa');
959+
expect(data.to).to.equal('3000');
960+
expect(data.purl).to.equal('http://www.test.com/page.html');
961+
expect(data.orig).to.equal('www.test.com');
962+
expect(data.tst).to.equal(1519767016);
963+
expect(data.tgid).to.equal(15);
964+
expect(data.s).to.be.an('array');
965+
expect(data.s.length).to.equal(2);
966+
967+
// slot 1
968+
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
969+
expect(data.s[0].sz).to.deep.equal(['640x480']);
970+
expect(data.s[0].ps).to.be.an('array');
971+
expect(data.s[0].ps.length).to.equal(1);
972+
expect(data.s[0].ps[0].pn).to.equal('pubmatic');
973+
expect(data.s[0].ps[0].bc).to.equal('pubmatic_alias');
974+
expect(data.s[0].ps[0].bidid).to.equal('2ecff0db240757');
975+
expect(data.s[0].ps[0].piid).to.equal('partnerImpressionID-1');
976+
expect(data.s[0].ps[0].db).to.equal(0);
977+
expect(data.s[0].ps[0].kgpv).to.equal('/19968336/header-bid-tag-0');
978+
expect(data.s[0].ps[0].kgpsv).to.equal('/19968336/header-bid-tag-0');
979+
expect(data.s[0].ps[0].psz).to.equal('640x480');
980+
expect(data.s[0].ps[0].eg).to.equal(1.23);
981+
expect(data.s[0].ps[0].en).to.equal(1.23);
982+
expect(data.s[0].ps[0].di).to.equal('');
983+
expect(data.s[0].ps[0].dc).to.equal('');
984+
expect(data.s[0].ps[0].l1).to.equal(3214);
985+
expect(data.s[0].ps[0].l2).to.equal(0);
986+
expect(data.s[0].ps[0].ss).to.equal(0);
987+
expect(data.s[0].ps[0].t).to.equal(0);
988+
expect(data.s[0].ps[0].wb).to.equal(1);
989+
expect(data.s[0].ps[0].af).to.equal('video');
990+
expect(data.s[0].ps[0].ocpm).to.equal(1.23);
991+
expect(data.s[0].ps[0].ocry).to.equal('USD');
992+
993+
// slot 2
994+
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
995+
expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
996+
expect(data.s[1].ps).to.be.an('array');
997+
expect(data.s[1].ps.length).to.equal(1);
998+
expect(data.s[1].ps[0].pn).to.equal('pubmatic');
999+
expect(data.s[1].ps[0].bc).to.equal('pubmatic');
1000+
expect(data.s[1].ps[0].bidid).to.equal('3bd4ebb1c900e2');
1001+
expect(data.s[1].ps[0].piid).to.equal('partnerImpressionID-2');
1002+
expect(data.s[1].ps[0].db).to.equal(0);
1003+
expect(data.s[1].ps[0].kgpv).to.equal('this-is-a-kgpv');
1004+
expect(data.s[1].ps[0].kgpsv).to.equal('this-is-a-kgpv');
1005+
expect(data.s[1].ps[0].psz).to.equal('728x90');
1006+
expect(data.s[1].ps[0].eg).to.equal(1.52);
1007+
expect(data.s[1].ps[0].en).to.equal(1.52);
1008+
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
1009+
expect(data.s[1].ps[0].dc).to.equal('PMP');
1010+
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
1011+
expect(data.s[1].ps[0].l1).to.equal(3214);
1012+
expect(data.s[1].ps[0].l2).to.equal(0);
1013+
expect(data.s[1].ps[0].ss).to.equal(1);
1014+
expect(data.s[1].ps[0].t).to.equal(0);
1015+
expect(data.s[1].ps[0].wb).to.equal(1);
1016+
expect(data.s[1].ps[0].af).to.equal('banner');
1017+
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
1018+
expect(data.s[1].ps[0].ocry).to.equal('USD');
1019+
1020+
// tracker slot1
1021+
let firstTracker = requests[0].url;
1022+
expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
1023+
data = {};
1024+
firstTracker.split('?')[1].split('&').map(e => e.split('=')).forEach(e => data[e[0]] = e[1]);
1025+
expect(data.pubid).to.equal('9999');
1026+
expect(decodeURIComponent(data.purl)).to.equal('http://www.test.com/page.html');
1027+
expect(data.tst).to.equal('1519767014');
1028+
expect(data.iid).to.equal('25c6d7f5-699a-4bfc-87c9-996f915341fa');
1029+
expect(data.bidid).to.equal('2ecff0db240757');
1030+
expect(data.pid).to.equal('1111');
1031+
expect(data.pdvid).to.equal('20');
1032+
expect(decodeURIComponent(data.slot)).to.equal('/19968336/header-bid-tag-0');
1033+
expect(decodeURIComponent(data.kgpv)).to.equal('/19968336/header-bid-tag-0');
1034+
expect(data.pn).to.equal('pubmatic');
1035+
expect(data.bc).to.equal('pubmatic_alias');
1036+
expect(data.eg).to.equal('1.23');
1037+
expect(data.en).to.equal('1.23');
1038+
expect(data.piid).to.equal('partnerImpressionID-1');
1039+
});
9131040
});
9141041
});

0 commit comments

Comments
 (0)