Skip to content

Commit 4422d44

Browse files
Alex404Damsarares-mihai-predaDarianAvasanalex-calauz-cnxcosminser
authored
Connatix Bid Adapter: Support For Video Media Type (prebid#11933)
* upgrade prebid js * added conversantBidAdapter * added criteoBidAdapter, tripleliftBidAdapter, pulsepointBidAdapter * adtelligent bid adapter * remove oneVideoBidAdapter from modules.json * added yieldmo bid adapter * build:connatix script * removed flocIdSystem & TrustxBidAdapter from modules.json * added aniview bid adapter * moved line * added nextMillennium adapter to modules.json * newline at the end of the file * added new adapters * added minutemedia adapter * added richaudience adapter * Revert "added richaudience adapter" This reverts commit d87cb0d. * Revert "added minutemedia adapter" This reverts commit ac53dff. * Added Permutive RTD module * comma * [feat] add sharethroughBidAdapter * Add consentManagementGpp module * fix gpp signal (#5) * remove gpp module because no need to support it yet * LiveRamp submodule identityLink * added sonobi bid adapter * upgrade to prebid 8.17.0 * added pgamsspBidAdapter because its alias was removed from adtelligentBidAdapter in 8.x.0 * added ozone as Connatix bidder partner * added showheroes adapter * added seedtag bid adaptor * added minutemedia * removed duplicated minute media * added sovrn bid adapter * fix: add consentManagementGpp module * added new build and gannet adapters * renamed build command * added specific modules for gannett * added kueezRtb bid adaptor * added video media type support for connatix bid adapter * added all the recommended params to video media type mock * improved validateVideo function * impreoved validateVideo function once again:) * removed redundant checks in bid request validation * clarified test it statement * improved unit tests * updated validateVideo function * removed modules.json * removed connatix build script --------- Co-authored-by: Rares Mihai Preda <[email protected]> Co-authored-by: Darian <[email protected]> Co-authored-by: alexandru.calauz <[email protected]> Co-authored-by: cosminser <[email protected]> Co-authored-by: Gaina Dan <[email protected]> Co-authored-by: Cristi Silav <[email protected]> Co-authored-by: mariusszabo <[email protected]> Co-authored-by: Marius Szabo <[email protected]> Co-authored-by: Octavia Suceava <[email protected]> Co-authored-by: Marius Potor <[email protected]>
1 parent b6184e2 commit 4422d44

File tree

2 files changed

+91
-10
lines changed

2 files changed

+91
-10
lines changed

modules/connatixBidAdapter.js

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import {
1111
} from '../src/utils.js';
1212

1313
import {
14+
ADPOD,
1415
BANNER,
16+
VIDEO,
1517
} from '../src/mediaTypes.js';
1618

1719
const BIDDER_CODE = 'connatix';
@@ -41,10 +43,28 @@ export function getBidFloor(bid) {
4143
}
4244
}
4345

46+
export function validateBanner(mediaTypes) {
47+
if (!mediaTypes[BANNER]) {
48+
return true;
49+
}
50+
51+
const banner = deepAccess(mediaTypes, BANNER, {});
52+
return (Boolean(banner.sizes) && isArray(mediaTypes[BANNER].sizes) && mediaTypes[BANNER].sizes.length > 0);
53+
}
54+
55+
export function validateVideo(mediaTypes) {
56+
const video = mediaTypes[VIDEO];
57+
if (!video) {
58+
return true;
59+
}
60+
61+
return video.context !== ADPOD;
62+
}
63+
4464
export const spec = {
4565
code: BIDDER_CODE,
4666
gvlid: 143,
47-
supportedMediaTypes: [BANNER],
67+
supportedMediaTypes: [BANNER, VIDEO],
4868

4969
/*
5070
* Validate the bid request.
@@ -57,17 +77,24 @@ export const spec = {
5777
const params = deepAccess(bid, 'params', {});
5878
const bidder = deepAccess(bid, 'bidder');
5979

60-
const banner = deepAccess(mediaTypes, BANNER, {});
61-
6280
const hasBidId = Boolean(bidId);
6381
const isValidBidder = (bidder === BIDDER_CODE);
64-
const isValidSize = (Boolean(banner.sizes) && isArray(mediaTypes[BANNER].sizes) && mediaTypes[BANNER].sizes.length > 0);
65-
const hasSizes = mediaTypes[BANNER] ? isValidSize : false;
82+
const hasMediaTypes = Boolean(mediaTypes) && (Boolean(mediaTypes[BANNER]) || Boolean(mediaTypes[VIDEO]));
83+
const isValidBanner = validateBanner(mediaTypes);
84+
const isValidVideo = validateVideo(mediaTypes);
6685
const hasRequiredBidParams = Boolean(params.placementId);
6786

68-
const isValid = isValidBidder && hasBidId && hasSizes && hasRequiredBidParams;
87+
const isValid = isValidBidder && hasBidId && hasMediaTypes && isValidBanner && isValidVideo && hasRequiredBidParams;
6988
if (!isValid) {
70-
logError(`Invalid bid request: isValidBidder: ${isValidBidder} hasBidId: ${hasBidId}, hasSizes: ${hasSizes}, hasRequiredBidParams: ${hasRequiredBidParams}`);
89+
logError(
90+
`Invalid bid request:
91+
isValidBidder: ${isValidBidder},
92+
hasBidId: ${hasBidId},
93+
hasMediaTypes: ${hasMediaTypes},
94+
isValidBanner: ${isValidBanner},
95+
isValidVideo: ${isValidVideo},
96+
hasRequiredBidParams: ${hasRequiredBidParams}`
97+
);
7198
}
7299
return isValid;
73100
},
@@ -129,12 +156,13 @@ export const spec = {
129156
cpm: bidResponse.Cpm,
130157
ttl: bidResponse.Ttl || DEFAULT_MAX_TTL,
131158
currency: 'USD',
132-
mediaType: BANNER,
159+
mediaType: bidResponse.VastXml ? VIDEO : BANNER,
133160
netRevenue: true,
134161
width: bidResponse.Width,
135162
height: bidResponse.Height,
136163
creativeId: bidResponse.CreativeId,
137164
ad: bidResponse.Ad,
165+
vastXml: bidResponse.VastXml,
138166
referrer: referrer,
139167
}));
140168
},

test/spec/modules/connatixBidAdapter_spec.js

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
spec,
44
getBidFloor as connatixGetBidFloor
55
} from '../../../modules/connatixBidAdapter.js';
6-
import { BANNER } from '../../../src/mediaTypes.js';
6+
import { ADPOD, BANNER, VIDEO } from '../../../src/mediaTypes.js';
77

88
describe('connatixBidAdapter', function () {
99
let bid;
@@ -24,6 +24,26 @@ describe('connatixBidAdapter', function () {
2424
};
2525
};
2626

27+
function addVideoToBidMock(bid) {
28+
const mediaTypes = {
29+
video: {
30+
context: 'instream',
31+
w: 1280,
32+
h: 720,
33+
playerSize: [1280, 720],
34+
placement: 1,
35+
plcmt: 1,
36+
api: [1, 2],
37+
mimes: ['video/mp4', 'application/javascript'],
38+
minduration: 30,
39+
maxduration: 60,
40+
startdelay: 0,
41+
}
42+
}
43+
44+
bid.mediaTypes = mediaTypes;
45+
}
46+
2747
describe('isBidRequestValid', function () {
2848
this.beforeEach(function () {
2949
bid = mockBidRequest();
@@ -52,7 +72,7 @@ describe('connatixBidAdapter', function () {
5272
delete bid.mediaTypes;
5373
expect(spec.isBidRequestValid(bid)).to.be.false;
5474
});
55-
it('Should return false if banner is missing from mediaTypes ', function () {
75+
it('Should return false if both banner and video are missing from mediaTypes', function () {
5676
delete bid.mediaTypes.banner;
5777
expect(spec.isBidRequestValid(bid)).to.be.false;
5878
});
@@ -68,6 +88,15 @@ describe('connatixBidAdapter', function () {
6888
bid.mediaTypes.banner.sizes = [];
6989
expect(spec.isBidRequestValid(bid)).to.be.false;
7090
});
91+
it('Should return true if video is set correctly', function () {
92+
addVideoToBidMock(bid);
93+
expect(spec.isBidRequestValid(bid)).to.be.true;
94+
});
95+
it('Should return false if context is set to adpod on video media type', function() {
96+
addVideoToBidMock(bid);
97+
bid.mediaTypes.video.context = ADPOD;
98+
expect(spec.isBidRequestValid(bid)).to.be.false;
99+
});
71100
it('Should return true if add an extra field was added to the bidRequest', function () {
72101
bid.params.test = 1;
73102
expect(spec.isBidRequestValid(bid)).to.be.true;
@@ -197,6 +226,30 @@ describe('connatixBidAdapter', function () {
197226
expect(bidResponses[0].cpm).to.equal(firstBidCpm);
198227
expect(bidResponses[1].cpm).to.equal(secondBidCpm);
199228
});
229+
230+
it('Should contain specific values for banner bids', function () {
231+
const adHtml = 'ad html'
232+
serverResponse.body.Bids = [ { ...Bid, Ad: adHtml } ];
233+
234+
const bidResponses = spec.interpretResponse(serverResponse);
235+
const [ bidResponse ] = bidResponses;
236+
237+
expect(bidResponse.vastXml).to.be.undefined;
238+
expect(bidResponse.ad).to.equal(adHtml);
239+
expect(bidResponse.mediaType).to.equal(BANNER);
240+
});
241+
242+
it('Should contain specific values for video bids', function () {
243+
const adVastXml = 'ad vast xml'
244+
serverResponse.body.Bids = [ { ...Bid, VastXml: adVastXml } ];
245+
246+
const bidResponses = spec.interpretResponse(serverResponse);
247+
const [ bidResponse ] = bidResponses;
248+
249+
expect(bidResponse.ad).to.be.undefined;
250+
expect(bidResponse.vastXml).to.equal(adVastXml);
251+
expect(bidResponse.mediaType).to.equal(VIDEO);
252+
});
200253
});
201254

202255
describe('getUserSyncs', function() {

0 commit comments

Comments
 (0)