Skip to content

Commit

Permalink
PubMatic: For Video: bid.mediaTypes.video.mimes OR bid.params.video.m…
Browse files Browse the repository at this point in the history
…imes should be present and must be a non-empty array (#6926)

* bid.mediaTypes.video.mimes OR bid.params.video.mimes should be present and must be a non-empty array
  • Loading branch information
pm-harshad-mane authored Jun 2, 2021
1 parent b099bcc commit befd64e
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 73 deletions.
25 changes: 21 additions & 4 deletions modules/pubmaticBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -929,7 +929,16 @@ function _assignRenderer(newBid, request) {
newBid.renderer = BB_RENDERER.newRenderer(newBid.rendererCode, adUnitCode);
}
}
};
}

function isNonEmptyArray(test) {
if (utils.isArray(test) === true) {
if (test.length > 0) {
return true;
}
}
return false;
}

export const spec = {
code: BIDDER_CODE,
Expand All @@ -949,15 +958,23 @@ export const spec = {
}
// video ad validation
if (bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty(VIDEO)) {
if (!bid.mediaTypes.video.mimes || (bid.params.video && (!bid.params.video.hasOwnProperty('mimes') || !utils.isArray(bid.params.video.mimes) || bid.params.video.mimes.length === 0))) {
utils.logWarn(LOG_WARN_PREFIX + 'Error: For video ads, mimes is mandatory and must specify atlease 1 mime value. Call to OpenBid will not be sent for ad unit:' + JSON.stringify(bid));
// bid.mediaTypes.video.mimes OR bid.params.video.mimes should be present and must be a non-empty array
let mediaTypesVideoMimes = utils.deepAccess(bid.mediaTypes, 'video.mimes');
let paramsVideoMimes = utils.deepAccess(bid, 'params.video.mimes');
if (isNonEmptyArray(mediaTypesVideoMimes) === false && isNonEmptyArray(paramsVideoMimes) === false) {
utils.logWarn(LOG_WARN_PREFIX + 'Error: For video ads, bid.mediaTypes.video.mimes OR bid.params.video.mimes should be present and must be a non-empty array. Call to OpenBid will not be sent for ad unit:' + JSON.stringify(bid));
return false;
}

if (!bid.mediaTypes[VIDEO].hasOwnProperty('context')) {
utils.logError(`${LOG_WARN_PREFIX}: no context specified in bid. Rejecting bid: `, bid);
return false;
}
if (bid.mediaTypes[VIDEO].context === 'outstream' && !utils.isStr(bid.params.outstreamAU) && !bid.hasOwnProperty('renderer') && !bid.mediaTypes[VIDEO].hasOwnProperty('renderer')) {

if (bid.mediaTypes[VIDEO].context === 'outstream' &&
!utils.isStr(bid.params.outstreamAU) &&
!bid.hasOwnProperty('renderer') &&
!bid.mediaTypes[VIDEO].hasOwnProperty('renderer')) {
utils.logError(`${LOG_WARN_PREFIX}: for "outstream" bids either outstreamAU parameter must be provided or ad unit supplied renderer is required. Rejecting bid: `, bid);
return false;
}
Expand Down
132 changes: 63 additions & 69 deletions test/spec/modules/pubmaticBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -864,78 +864,72 @@ describe('PubMatic adapter', function () {
expect(isValid).to.equal(false);
})

it('should check for mimes if video is present', function() {
it('bid.mediaTypes.video.mimes OR bid.params.video.mimes should be present and must be a non-empty array', function() {
let bid = {
'bidder': 'pubmatic',
'params': {
'adSlot': 'SLOT_NHB1@728x90',
'publisherId': '5890'
},
'mediaTypes': {
'video': {
'playerSize': [
[640, 480]
],
'protocols': [1, 2, 5],
'context': 'instream',
'mimes': ['video/flv'],
'skippable': false,
'skip': 1,
'linearity': 2
}
},
'adUnitCode': 'video1',
'transactionId': '803e3750-0bbe-4ffe-a548-b6eca15087bf',
'sizes': [
[640, 480]
],
'bidId': '2c95df014cfe97',
'bidderRequestId': '1fe59391566442',
'auctionId': '3a4118ef-fb96-4416-b0b0-3cfc1cebc142',
'src': 'client',
'bidRequestsCount': 1,
'bidderRequestsCount': 1,
'bidderWinsCount': 0
'bidder': 'pubmatic',
'params': {
'adSlot': 'SLOT_NHB1@728x90',
'publisherId': '5890',
'video': {}
},
isValid = spec.isBidRequestValid(bid);
expect(isValid).to.equal(true);
})

it('should return false if mimes is not present in video', function() {
let bid = {
'bidder': 'pubmatic',
'params': {
'adSlot': 'SLOT_NHB1@728x90',
'publisherId': '5890'
},
'mediaTypes': {
'video': {
'playerSize': [
[640, 480]
],
'protocols': [1, 2, 5],
'context': 'instream',
'skippable': false,
'skip': 1,
'linearity': 2
}
},
'adUnitCode': 'video1',
'transactionId': '803e3750-0bbe-4ffe-a548-b6eca15087bf',
'sizes': [
[640, 480]
],
'bidId': '2c95df014cfe97',
'bidderRequestId': '1fe59391566442',
'auctionId': '3a4118ef-fb96-4416-b0b0-3cfc1cebc142',
'src': 'client',
'bidRequestsCount': 1,
'bidderRequestsCount': 1,
'bidderWinsCount': 0
'mediaTypes': {
'video': {
'playerSize': [
[640, 480]
],
'protocols': [1, 2, 5],
'context': 'instream',
'skippable': false,
'skip': 1,
'linearity': 2
}
},
isValid = spec.isBidRequestValid(bid);
expect(isValid).to.equal(false);
})
'adUnitCode': 'video1',
'transactionId': '803e3750-0bbe-4ffe-a548-b6eca15087bf',
'sizes': [
[640, 480]
],
'bidId': '2c95df014cfe97',
'bidderRequestId': '1fe59391566442',
'auctionId': '3a4118ef-fb96-4416-b0b0-3cfc1cebc142',
'src': 'client',
'bidRequestsCount': 1,
'bidderRequestsCount': 1,
'bidderWinsCount': 0
};

delete bid.params.video.mimes; // Undefined
bid.mediaTypes.video.mimes = 'string'; // NOT array
expect(spec.isBidRequestValid(bid)).to.equal(false);

delete bid.params.video.mimes; // Undefined
delete bid.mediaTypes.video.mimes; // Undefined
expect(spec.isBidRequestValid(bid)).to.equal(false);

delete bid.params.video.mimes; // Undefined
bid.mediaTypes.video.mimes = ['video/flv']; // Valid
expect(spec.isBidRequestValid(bid)).to.equal(true);

delete bid.mediaTypes.video.mimes; // mediaTypes.video.mimes undefined
bid.params.video = {mimes: 'string'}; // NOT array
expect(spec.isBidRequestValid(bid)).to.equal(false);

delete bid.mediaTypes.video.mimes; // mediaTypes.video.mimes undefined
delete bid.params.video.mimes; // Undefined
expect(spec.isBidRequestValid(bid)).to.equal(false);

delete bid.mediaTypes.video.mimes; // mediaTypes.video.mimes undefined
bid.params.video.mimes = ['video/flv']; // Valid
expect(spec.isBidRequestValid(bid)).to.equal(true);

delete bid.mediaTypes.video.mimes; // Undefined
bid.params.video.mimes = ['video/flv']; // Valid
expect(spec.isBidRequestValid(bid)).to.equal(true);

delete bid.mediaTypes.video.mimes; // Undefined
delete bid.params.video.mimes; // Undefined
expect(spec.isBidRequestValid(bid)).to.equal(false);
});
});

describe('Request formation', function () {
Expand Down

0 comments on commit befd64e

Please sign in to comment.