mk9-prebid
Version:
Header Bidding Management Library
686 lines (662 loc) • 20.6 kB
JavaScript
import pubxaiAnalyticsAdapter from 'modules/pubxaiAnalyticsAdapter.js';
import { getDeviceType, getBrowser, getOS } from 'modules/pubxaiAnalyticsAdapter.js';
import {
expect
} from 'chai';
import adapterManager from 'src/adapterManager.js';
import * as utils from 'src/utils.js';
import {
server
} from 'test/mocks/xhr.js';
let events = require('src/events');
let constants = require('src/constants.json');
describe('pubxai analytics adapter', function() {
beforeEach(function() {
sinon.stub(events, 'getEvents').returns([]);
});
afterEach(function() {
events.getEvents.restore();
});
describe('track', function() {
let initOptions = {
samplingRate: '1',
pubxId: '6c415fc0-8b0e-4cf5-be73-01526a4db625'
};
let location = utils.getWindowLocation();
let prebidEvent = {
'auctionInit': {
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'timestamp': 1603865707180,
'auctionStatus': 'inProgress',
'adUnits': [{
'code': '/19968336/header-bid-tag-1',
'mediaTypes': {
'banner': {
'sizes': [
[
300,
250
]
]
}
},
'bids': [{
'bidder': 'appnexus',
'params': {
'placementId': 13144370
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'floorData': {
'skipped': false,
'skipRate': 0,
'modelVersion': 'test model 1.0',
'location': 'fetch',
'floorProvider': 'PubXFloorProvider',
'fetchStatus': 'success'
}
}],
'sizes': [
[
300,
250
]
],
'transactionId': '41ec8eaf-3e7c-4a8b-8344-ab796ff6e294'
}],
'adUnitCodes': [
'/19968336/header-bid-tag-1'
],
'bidderRequests': [{
'bidderCode': 'appnexus',
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'bidderRequestId': '184cbc05bb90ba',
'bids': [{
'bidder': 'appnexus',
'params': {
'placementId': 13144370
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'floorData': {
'skipped': false,
'skipRate': 0,
'modelVersion': 'test model 1.0',
'location': 'fetch',
'floorProvider': 'PubXFloorProvider',
'fetchStatus': 'success'
},
'mediaTypes': {
'banner': {
'sizes': [
[
300,
250
]
]
}
},
'adUnitCode': '/19968336/header-bid-tag-1',
'transactionId': '41ec8eaf-3e7c-4a8b-8344-ab796ff6e294',
'sizes': [
[
300,
250
]
],
'bidId': '248f9a4489835e',
'bidderRequestId': '184cbc05bb90ba',
'src': 'client',
'bidRequestsCount': 1,
'bidderRequestsCount': 1,
'bidderWinsCount': 0
}],
'auctionStart': 1603865707180,
'timeout': 1000,
'refererInfo': {
'referer': 'http://local-pnh.net:8080/stream/',
'reachedTop': true,
'isAmp': false,
'numIframes': 0,
'stack': [
'http://local-pnh.net:8080/stream/'
],
'canonicalUrl': null
},
'start': 1603865707182
}],
'noBids': [],
'bidsReceived': [],
'winningBids': [],
'timeout': 1000,
'config': {
'samplingRate': '1',
'pubxId': '6c415fc0-8b0e-4cf5-be73-01526a4db625'
}
},
'bidRequested': {
'bidderCode': 'appnexus',
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'bidderRequestId': '184cbc05bb90ba',
'bids': [{
'bidder': 'appnexus',
'params': {
'placementId': 13144370
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'floorData': {
'skipped': false,
'skipRate': 0,
'modelVersion': 'test model 1.0',
'location': 'fetch',
'floorProvider': 'PubXFloorProvider',
'fetchStatus': 'success'
},
'mediaTypes': {
'banner': {
'sizes': [
[
300,
250
]
]
}
},
'adUnitCode': '/19968336/header-bid-tag-1',
'transactionId': '41ec8eaf-3e7c-4a8b-8344-ab796ff6e294',
'sizes': [
[
300,
250
]
],
'bidId': '248f9a4489835e',
'bidderRequestId': '184cbc05bb90ba',
'src': 'client',
'bidRequestsCount': 1,
'bidderRequestsCount': 1,
'bidderWinsCount': 0
}],
'auctionStart': 1603865707180,
'timeout': 1000,
'refererInfo': {
'referer': 'http://local-pnh.net:8080/stream/',
'reachedTop': true,
'isAmp': false,
'numIframes': 0,
'stack': [
'http://local-pnh.net:8080/stream/'
],
'canonicalUrl': null
},
'start': 1603865707182
},
'bidTimeout': [],
'bidResponse': {
'bidderCode': 'appnexus',
'width': 300,
'height': 250,
'statusMessage': 'Bid available',
'adId': '32780c4bc382cb',
'requestId': '248f9a4489835e',
'mediaType': 'banner',
'source': 'client',
'cpm': 0.5,
'creativeId': 96846035,
'currency': 'USD',
'netRevenue': true,
'ttl': 300,
'adUnitCode': '/19968336/header-bid-tag-1',
'appnexus': {
'buyerMemberId': 9325
},
'meta': {
'advertiserId': 2529885
},
'ad': '<!-- Creative 96846035 served by Member 9325 via AppNexus -->',
'originalCpm': 0.5,
'originalCurrency': 'USD',
'floorData': {
'fetchStatus': 'success',
'floorProvider': 'PubXFloorProvider',
'location': 'fetch',
'modelVersion': 'test model 1.0',
'skipRate': 0,
'skipped': false,
'floorValue': 0.4,
'floorRule': '/19968336/header-bid-tag-1|banner',
'floorCurrency': 'USD',
'cpmAfterAdjustments': 0.5,
'enforcements': {
'enforceJS': true,
'enforcePBS': false,
'floorDeals': true,
'bidAdjustment': true
},
'matchedFields': {
'gptSlot': '/19968336/header-bid-tag-1',
'mediaType': 'banner'
}
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'responseTimestamp': 1616654313071,
'requestTimestamp': 1616654312804,
'bidder': 'appnexus',
'timeToRespond': 267,
'pbLg': '0.50',
'pbMg': '0.50',
'pbHg': '0.50',
'pbAg': '0.50',
'pbDg': '0.50',
'pbCg': '0.50',
'size': '300x250',
'adserverTargeting': {
'hb_bidder': 'appnexus',
'hb_adid': '32780c4bc382cb',
'hb_pb': '0.50',
'hb_size': '300x250',
'hb_source': 'client',
'hb_format': 'banner'
},
},
'auctionEnd': {
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'timestamp': 1616654312804,
'auctionEnd': 1616654313090,
'auctionStatus': 'completed',
'adUnits': [{
'code': '/19968336/header-bid-tag-1',
'mediaTypes': {
'banner': {
'sizes': [
[
300,
250
]
]
}
},
'bids': [{
'bidder': 'appnexus',
'params': {
'placementId': 13144370
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'floorData': {
'skipped': false,
'skipRate': 0,
'modelVersion': 'test model 1.0',
'location': 'fetch',
'floorProvider': 'PubXFloorProvider',
'fetchStatus': 'success'
}
}],
'sizes': [
[
300,
250
]
],
'transactionId': '41ec8eaf-3e7c-4a8b-8344-ab796ff6e294'
}],
'adUnitCodes': [
'/19968336/header-bid-tag-1'
],
'bidderRequests': [{
'bidderCode': 'appnexus',
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'bidderRequestId': '184cbc05bb90ba',
'bids': [{
'bidder': 'appnexus',
'params': {
'placementId': 13144370
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'floorData': {
'skipped': false,
'skipRate': 0,
'modelVersion': 'test model 1.0',
'location': 'fetch',
'floorProvider': 'PubXFloorProvider',
'fetchStatus': 'success'
},
'mediaTypes': {
'banner': {
'sizes': [
[
300,
250
]
]
}
},
'adUnitCode': '/19968336/header-bid-tag-1',
'transactionId': '41ec8eaf-3e7c-4a8b-8344-ab796ff6e294',
'sizes': [
[
300,
250
]
],
'bidId': '248f9a4489835e',
'bidderRequestId': '184cbc05bb90ba',
'src': 'client',
'bidRequestsCount': 1,
'bidderRequestsCount': 1,
'bidderWinsCount': 0
}],
'auctionStart': 1603865707180,
'timeout': 1000,
'refererInfo': {
'referer': 'http://local-pnh.net:8080/stream/',
'reachedTop': true,
'isAmp': false,
'numIframes': 0,
'stack': [
'http://local-pnh.net:8080/stream/'
],
'canonicalUrl': null
},
'start': 1603865707182
}],
'noBids': [],
'bidsReceived': [{
'bidderCode': 'appnexus',
'width': 300,
'height': 250,
'statusMessage': 'Bid available',
'adId': '32780c4bc382cb',
'requestId': '248f9a4489835e',
'mediaType': 'banner',
'source': 'client',
'cpm': 0.5,
'creativeId': 96846035,
'currency': 'USD',
'netRevenue': true,
'ttl': 300,
'adUnitCode': '/19968336/header-bid-tag-1',
'appnexus': {
'buyerMemberId': 9325
},
'meta': {
'advertiserId': 2529885
},
'ad': '<!-- Creative 96846035 served by Member 9325 via AppNexus -->',
'originalCpm': 0.5,
'originalCurrency': 'USD',
'floorData': {
'fetchStatus': 'success',
'floorProvider': 'PubXFloorProvider',
'location': 'fetch',
'modelVersion': 'test model 1.0',
'skipRate': 0,
'skipped': false,
'floorValue': 0.4,
'floorRule': '/19968336/header-bid-tag-1|banner',
'floorCurrency': 'USD',
'cpmAfterAdjustments': 0.5,
'enforcements': {
'enforceJS': true,
'enforcePBS': false,
'floorDeals': true,
'bidAdjustment': true
},
'matchedFields': {
'gptSlot': '/19968336/header-bid-tag-1',
'mediaType': 'banner'
}
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'responseTimestamp': 1616654313071,
'requestTimestamp': 1616654312804,
'bidder': 'appnexus',
'timeToRespond': 267,
'pbLg': '0.50',
'pbMg': '0.50',
'pbHg': '0.50',
'pbAg': '0.50',
'pbDg': '0.50',
'pbCg': '0.50',
'size': '300x250',
'adserverTargeting': {
'hb_bidder': 'appnexus',
'hb_adid': '32780c4bc382cb',
'hb_pb': '0.50',
'hb_size': '300x250',
'hb_source': 'client',
'hb_format': 'banner'
},
'status': 'rendered',
'params': [{
'placementId': 13144370
}]
}],
'winningBids': [],
'timeout': 1000
},
'bidWon': {
'bidderCode': 'appnexus',
'width': 300,
'height': 250,
'statusMessage': 'Bid available',
'adId': '32780c4bc382cb',
'requestId': '248f9a4489835e',
'mediaType': 'banner',
'source': 'client',
'cpm': 0.5,
'creativeId': 96846035,
'currency': 'USD',
'netRevenue': true,
'ttl': 300,
'adUnitCode': '/19968336/header-bid-tag-1',
'appnexus': {
'buyerMemberId': 9325
},
'meta': {
'advertiserId': 2529885
},
'ad': '<!-- Creative 96846035 served by Member 9325 via AppNexus -->',
'originalCpm': 0.5,
'originalCurrency': 'USD',
'floorData': {
'fetchStatus': 'success',
'floorProvider': 'PubXFloorProvider',
'location': 'fetch',
'modelVersion': 'test model 1.0',
'skipRate': 0,
'skipped': false,
'floorValue': 0.4,
'floorRule': '/19968336/header-bid-tag-1|banner',
'floorCurrency': 'USD',
'cpmAfterAdjustments': 0.5,
'enforcements': {
'enforceJS': true,
'enforcePBS': false,
'floorDeals': true,
'bidAdjustment': true
},
'matchedFields': {
'gptSlot': '/19968336/header-bid-tag-1',
'mediaType': 'banner'
}
},
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'responseTimestamp': 1616654313071,
'requestTimestamp': 1616654312804,
'bidder': 'appnexus',
'timeToRespond': 267,
'pbLg': '0.50',
'pbMg': '0.50',
'pbHg': '0.50',
'pbAg': '0.50',
'pbDg': '0.50',
'pbCg': '0.50',
'size': '300x250',
'adserverTargeting': {
'hb_bidder': 'appnexus',
'hb_adid': '32780c4bc382cb',
'hb_pb': '0.50',
'hb_size': '300x250',
'hb_source': 'client',
'hb_format': 'banner'
},
'status': 'rendered',
'params': [{
'placementId': 13144370
}]
},
'pageDetail': {
'host': location.host,
'path': location.pathname,
'search': location.search
},
};
let expectedAfterBid = {
'bids': [{
'bidderCode': 'appnexus',
'bidId': '248f9a4489835e',
'adUnitCode': '/19968336/header-bid-tag-1',
'gptSlotCode': utils.getGptSlotInfoForAdUnitCode('/19968336/header-bid-tag-1').gptSlot || null,
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'sizes': '300x250',
'renderStatus': 2,
'requestTimestamp': 1616654312804,
'creativeId': 96846035,
'currency': 'USD',
'cpm': 0.5,
'netRevenue': true,
'mediaType': 'banner',
'statusMessage': 'Bid available',
'floorData': {
'fetchStatus': 'success',
'floorProvider': 'PubXFloorProvider',
'location': 'fetch',
'modelVersion': 'test model 1.0',
'skipRate': 0,
'skipped': false,
'floorValue': 0.4,
'floorRule': '/19968336/header-bid-tag-1|banner',
'floorCurrency': 'USD',
'cpmAfterAdjustments': 0.5,
'enforcements': {
'enforceJS': true,
'enforcePBS': false,
'floorDeals': true,
'bidAdjustment': true
},
'matchedFields': {
'gptSlot': '/19968336/header-bid-tag-1',
'mediaType': 'banner'
}
},
'timeToRespond': 267,
'responseTimestamp': 1616654313071
}],
'pageDetail': {
'host': location.host,
'path': location.pathname,
'search': location.search,
'adUnitCount': 1
},
'floorDetail': {
'fetchStatus': 'success',
'floorProvider': 'PubXFloorProvider',
'location': 'fetch',
'modelVersion': 'test model 1.0',
'skipRate': 0,
'skipped': false
},
'deviceDetail': {
'platform': navigator.platform,
'deviceType': getDeviceType(),
'deviceOS': getOS(),
'browser': getBrowser()
},
'initOptions': initOptions
};
let expectedAfterBidWon = {
'winningBid': {
'adUnitCode': '/19968336/header-bid-tag-1',
'gptSlotCode': utils.getGptSlotInfoForAdUnitCode('/19968336/header-bid-tag-1').gptSlot || null,
'auctionId': 'bc3806e4-873e-453c-8ae5-204f35e923b4',
'bidderCode': 'appnexus',
'bidId': '248f9a4489835e',
'cpm': 0.5,
'creativeId': 96846035,
'currency': 'USD',
'floorData': {
'fetchStatus': 'success',
'floorProvider': 'PubXFloorProvider',
'location': 'fetch',
'modelVersion': 'test model 1.0',
'skipRate': 0,
'skipped': false,
'floorValue': 0.4,
'floorRule': '/19968336/header-bid-tag-1|banner',
'floorCurrency': 'USD',
'cpmAfterAdjustments': 0.5,
'enforcements': {
'enforceJS': true,
'enforcePBS': false,
'floorDeals': true,
'bidAdjustment': true
},
'matchedFields': {
'gptSlot': '/19968336/header-bid-tag-1',
'mediaType': 'banner'
}
},
'floorProvider': 'PubXFloorProvider',
'isWinningBid': true,
'mediaType': 'banner',
'netRevenue': true,
'placementId': 13144370,
'renderedSize': '300x250',
'renderStatus': 4,
'responseTimestamp': 1616654313071,
'requestTimestamp': 1616654312804,
'status': 'rendered',
'statusMessage': 'Bid available',
'timeToRespond': 267
},
'deviceDetail': {
'platform': navigator.platform,
'deviceType': getDeviceType(),
'deviceOS': getOS(),
'browser': getBrowser()
},
'initOptions': initOptions
}
adapterManager.registerAnalyticsAdapter({
code: 'pubxai',
adapter: pubxaiAnalyticsAdapter
});
beforeEach(function() {
adapterManager.enableAnalytics({
provider: 'pubxai',
options: initOptions
});
});
afterEach(function() {
pubxaiAnalyticsAdapter.disableAnalytics();
});
it('builds and sends auction data', function() {
// Step 1: Send auction init event
events.emit(constants.EVENTS.AUCTION_INIT, prebidEvent['auctionInit']);
// Step 2: Send bid requested event
events.emit(constants.EVENTS.BID_REQUESTED, prebidEvent['bidRequested']);
// Step 3: Send bid response event
events.emit(constants.EVENTS.BID_RESPONSE, prebidEvent['bidResponse']);
// Step 4: Send bid time out event
events.emit(constants.EVENTS.BID_TIMEOUT, prebidEvent['bidTimeout']);
// Step 5: Send auction end event
events.emit(constants.EVENTS.AUCTION_END, prebidEvent['auctionEnd']);
expect(server.requests.length).to.equal(1);
let realAfterBid = JSON.parse(server.requests[0].requestBody);
expect(realAfterBid).to.deep.equal(expectedAfterBid);
// Step 6: Send auction bid won event
events.emit(constants.EVENTS.BID_WON, prebidEvent['bidWon']);
expect(server.requests.length).to.equal(2);
let winEventData = JSON.parse(server.requests[1].requestBody);
expect(winEventData).to.deep.equal(expectedAfterBidWon);
});
});
});