Skip to content

Commit abc2881

Browse files
jbartek25faisalvs
authored and
Chris Pabst
committed
Improve Digital bid adapter: added support for cat and genre (prebid#7899)
* Feature Prebid First Party Data (#2) * HBT-166: Added PageCategory and Genre to request object from First-Party-Data * HBT-166: Added PageCategory and Genre to request object from First-Party-Data and Rewrite Test Cases * Update improvedigitalBidAdapter.js Version increased Co-authored-by: Faisal Islam <[email protected]>
1 parent 13886b5 commit abc2881

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

modules/improvedigitalBidAdapter.js

+24-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { deepSetValue, logError, _each, getBidRequest, isNumber, isArray, deepAccess, isFn, isPlainObject, logWarn, getBidIdParameter, getUniqueIdentifierStr, isEmpty, isInteger } from '../src/utils.js';
1+
import { deepSetValue, logError, _each, getBidRequest, isNumber, isArray, deepAccess, isFn, isPlainObject, logWarn, getBidIdParameter, getUniqueIdentifierStr, isEmpty, isInteger, isStr } from '../src/utils.js';
22
import { registerBidder } from '../src/adapters/bidderFactory.js';
33
import { config } from '../src/config.js';
44
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
@@ -11,7 +11,7 @@ const RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js
1111
const VIDEO_TARGETING = ['skip', 'skipmin', 'skipafter'];
1212

1313
export const spec = {
14-
version: '7.5.0',
14+
version: '7.6.0',
1515
code: BIDDER_CODE,
1616
gvlid: 253,
1717
aliases: ['id'],
@@ -73,6 +73,22 @@ export const spec = {
7373
requestParameters.referrer = bidderRequest.refererInfo.referer;
7474
}
7575

76+
// Adding first party data
77+
const site = config.getConfig('ortb2.site');
78+
if (site) {
79+
const pageCategory = site.pagecat || site.cat;
80+
if (pageCategory && isArray(pageCategory)) {
81+
requestParameters.pagecat = pageCategory.filter((category) => {
82+
return category && isStr(category)
83+
});
84+
}
85+
const genre = deepAccess(site, 'content.genre');
86+
if (genre && isStr(genre)) {
87+
requestParameters.genre = genre;
88+
}
89+
}
90+
// End of adding first party data
91+
7692
requestParameters.schain = bidRequests[0].schain;
7793

7894
if (bidRequests[0].userId) {
@@ -621,6 +637,12 @@ export function ImproveDigitalAdServerJSClient(endPoint) {
621637
if (requestParameters.schain) {
622638
impressionBidRequestObject.schain = requestParameters.schain;
623639
}
640+
if (requestParameters.pagecat) {
641+
impressionBidRequestObject.pagecat = requestParameters.pagecat;
642+
}
643+
if (requestParameters.genre) {
644+
impressionBidRequestObject.genre = requestParameters.genre;
645+
}
624646
if (requestParameters.user) {
625647
impressionBidRequestObject.user = requestParameters.user;
626648
}

test/spec/modules/improvedigitalBidAdapter_spec.js

+42
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,48 @@ describe('Improve Digital Adapter Tests', function () {
515515
});
516516
getConfigStub.restore();
517517
});
518+
519+
it('should set pagecat and genre ➞ fpd:ortb2.site', function() {
520+
config.setConfig(JSON.parse('{"ortb2":{"site":{"cat":["IAB2"],"pagecat":["IAB2-2"],"content":{"genre":"Adventure"}}}}'));
521+
const bidRequest = Object.assign({}, simpleBidRequest);
522+
const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
523+
const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
524+
expect(params.bid_request.pagecat).to.be.an('array');
525+
expect(params.bid_request.pagecat).to.deep.equal(['IAB2-2']);
526+
expect(params.bid_request.genre).to.be.a('string');
527+
expect(params.bid_request.genre).be.equal('Adventure');
528+
});
529+
530+
it('should not set pagecat and genre when malformed data provided ➞ fpd:ortb2.site', function() {
531+
config.setConfig(JSON.parse('{"ortb2":{"site":{"pagecat":"IAB2-2","content":{"genre":["Adventure"]}}}}'));
532+
const bidRequest = Object.assign({}, simpleBidRequest);
533+
const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
534+
const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
535+
expect(params.bid_request.pagecat).does.not.exist;
536+
expect(params.bid_request.genre).does.not.exist;
537+
});
538+
539+
it('should use cat when pagecat not available ➞ fpd:ortb2.site', function() {
540+
config.setConfig(JSON.parse('{"ortb2":{"site":{"cat":["IAB2"]}}}'));
541+
const bidRequest = Object.assign({}, simpleBidRequest);
542+
const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
543+
const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
544+
expect(params.bid_request.pagecat).to.be.an('array');
545+
expect(params.bid_request.pagecat).to.deep.equal(['IAB2']);
546+
});
547+
548+
it('should format pagecat correctly ➞ fpd:ortb2.site', function() {
549+
config.setConfig(JSON.parse('{"ortb2":{"site":{"cat":["IAB2", ["IAB-1"], "IAB3", 123, ""]}}}'));
550+
const bidRequest = Object.assign({}, simpleBidRequest);
551+
const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
552+
const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
553+
expect(params.bid_request.pagecat).to.be.an('array');
554+
expect(params.bid_request.pagecat).to.deep.equal([
555+
'IAB2',
556+
'IAB3'
557+
]
558+
);
559+
});
518560
});
519561

520562
const serverResponse = {

0 commit comments

Comments
 (0)