Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adkernel: tmax support #4548

Merged
merged 1 commit into from
Dec 9, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 9 additions & 20 deletions modules/adkernelBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ export const spec = {
},
buildRequests: function(bidRequests, bidderRequest) {
let impDispatch = dispatchImps(bidRequests, bidderRequest.refererInfo);
const {gdprConsent, auctionId} = bidderRequest;
const {gdprConsent, auctionId, refererInfo, timeout} = bidderRequest;
const requests = [];
Object.keys(impDispatch).forEach(host => {
Object.keys(impDispatch[host]).forEach(zoneId => {
const request = buildRtbRequest(impDispatch[host][zoneId], auctionId, gdprConsent, bidderRequest.refererInfo);
const request = buildRtbRequest(impDispatch[host][zoneId], auctionId, gdprConsent, refererInfo, timeout);
requests.push({
method: 'POST',
url: `https://${host}/hb?zone=${zoneId}&v=${VERSION}`,
Expand Down Expand Up @@ -107,8 +107,7 @@ function dispatchImps(bidRequests, refererInfo) {
return bidRequests.map(bidRequest => buildImp(bidRequest, secure))
.reduce((acc, curr, index) => {
let bidRequest = bidRequests[index];
let zoneId = bidRequest.params.zoneId;
let host = bidRequest.params.host;
let {zoneId, host} = bidRequest.params;
acc[host] = acc[host] || {};
acc[host][zoneId] = acc[host][zoneId] || [];
acc[host][zoneId].push(curr);
Expand All @@ -126,14 +125,14 @@ function buildImp(bidRequest, secure) {
};

if (utils.deepAccess(bidRequest, `mediaTypes.banner`)) {
let sizes = canonicalizeSizesArray(bidRequest.mediaTypes.banner.sizes);
let sizes = utils.getAdUnitSizes(bidRequest);
imp.banner = {
format: sizes.map(wh => utils.parseGPTSingleSizeArrayToRtbSize(wh)),
topframe: 0
};
} else if (utils.deepAccess(bidRequest, 'mediaTypes.video')) {
let size = canonicalizeSizesArray(bidRequest.mediaTypes.video.playerSize)[0];
imp.video = utils.parseGPTSingleSizeArrayToRtbSize(size);
let sizes = bidRequest.mediaTypes.video.playerSize || [];
imp.video = utils.parseGPTSingleSizeArrayToRtbSize(sizes[0]) || {};
if (bidRequest.params.video) {
Object.keys(bidRequest.params.video)
.filter(key => includes(VIDEO_TARGETING, key))
Expand All @@ -146,27 +145,16 @@ function buildImp(bidRequest, secure) {
return imp;
}

/**
* Convert input array of sizes to canonical form Array[Array[Number]]
* @param sizes
* @return Array[Array[Number]]
*/
function canonicalizeSizesArray(sizes) {
if (sizes.length === 2 && !utils.isArray(sizes[0])) {
return [sizes];
}
return sizes;
}

/**
* Builds complete rtb request
* @param imps collection of impressions
* @param auctionId
* @param gdprConsent
* @param refInfo
* @param timeout
* @return Object complete rtb request
*/
function buildRtbRequest(imps, auctionId, gdprConsent, refInfo) {
function buildRtbRequest(imps, auctionId, gdprConsent, refInfo, timeout) {
let req = {
'id': auctionId,
'imp': imps,
Expand All @@ -178,6 +166,7 @@ function buildRtbRequest(imps, auctionId, gdprConsent, refInfo) {
'js': 1,
'language': getLanguage()
},
'tmax': parseInt(timeout),
'ext': {
'adk_usersync': 1
}
Expand Down
9 changes: 8 additions & 1 deletion test/spec/modules/adkernelBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,10 @@ describe('Adkernel adapter', function () {
};

function buildBidderRequest(url = 'https://example.com/index.html', params = {}) {
return Object.assign({}, params, {refererInfo: {referer: url, reachedTop: true}})
return Object.assign({}, params, {refererInfo: {referer: url, reachedTop: true}, timeout: 3000});
}
const DEFAULT_BIDDER_REQUEST = buildBidderRequest();

function buildRequest(bidRequests, bidderRequest = DEFAULT_BIDDER_REQUEST, dnt = true) {
let dntmock = sinon.stub(utils, 'getDNT').callsFake(() => dnt);
let pbRequests = spec.buildRequests(bidRequests, bidderRequest);
Expand Down Expand Up @@ -266,6 +267,12 @@ describe('Adkernel adapter', function () {
let [_, bidRequests] = buildRequest([bid1_zone1], DEFAULT_BIDDER_REQUEST, false);
expect(bidRequests[0].device).to.not.have.property('dnt');
});

it('should forward default bidder timeout', function() {
let [_, bidRequests] = buildRequest([bid1_zone1], DEFAULT_BIDDER_REQUEST);
let bidRequest = bidRequests[0];
expect(bidRequests[0]).to.have.property('tmax', 3000);
});
});

describe('video request building', function () {
Expand Down