prebid.js 8.3.0 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/brandmetricsRtdProvider.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +135 -135
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pulsepointBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stroeerCoreBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/topicsFpdModule.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/voxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
- package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -2
- package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
- package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
- package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
- package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
- package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +1 -1
- package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +1 -1
- package/integrationExamples/videoModule/videojs/eventListeners.html +1 -1
- package/integrationExamples/videoModule/videojs/eventsUI.html +1 -1
- package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +1 -1
- package/integrationExamples/videoModule/videojs/mediaMetadata.html +1 -1
- package/integrationExamples/videoModule/videojs/playlist.html +1 -1
- package/modules/33acrossBidAdapter.js +24 -14
- package/modules/33acrossIdSystem.js +15 -4
- package/modules/adagioBidAdapter.js +0 -1
- package/modules/admanBidAdapter.js +4 -0
- package/modules/brandmetricsRtdProvider.js +36 -2
- package/modules/brandmetricsRtdProvider.md +17 -2
- package/modules/gdprEnforcement.js +27 -22
- package/modules/gridBidAdapter.js +19 -0
- package/modules/ixBidAdapter.js +40 -2
- package/modules/kargoBidAdapter.js +4 -0
- package/modules/minutemediaBidAdapter.js +17 -2
- package/modules/oguryBidAdapter.js +29 -16
- package/modules/pubmaticBidAdapter.js +16 -1
- package/modules/pulsepointBidAdapter.js +63 -424
- package/modules/pulsepointBidAdapter.md +39 -45
- package/modules/sharedIdSystem.js +1 -1
- package/modules/sovrnBidAdapter.js +5 -1
- package/modules/stroeerCoreBidAdapter.js +2 -3
- package/modules/teadsBidAdapter.js +2 -0
- package/modules/topicsFpdModule.js +4 -1
- package/modules/topicsFpdModule.md +4 -0
- package/modules/userId/index.js +2 -2
- package/modules/vidazooBidAdapter.js +5 -7
- package/modules/voxBidAdapter.js +16 -5
- package/modules/yahoosspBidAdapter.js +38 -33
- package/modules/yahoosspBidAdapter.md +96 -95
- package/modules/yandexBidAdapter.js +12 -15
- package/package.json +1 -1
- package/src/activities/redactor.js +1 -1
- package/src/auction.js +24 -2
- package/src/constants.json +3 -1
- package/src/fpd/sua.js +8 -2
- package/test/spec/auctionmanager_spec.js +29 -1
- package/test/spec/fpd/enrichment_spec.js +7 -1
- package/test/spec/fpd/sua_spec.js +12 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +188 -35
- package/test/spec/modules/33acrossIdSystem_spec.js +122 -27
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +69 -7
- package/test/spec/modules/gdprEnforcement_spec.js +43 -2
- package/test/spec/modules/gridBidAdapter_spec.js +42 -0
- package/test/spec/modules/ixBidAdapter_spec.js +72 -0
- package/test/spec/modules/kargoBidAdapter_spec.js +121 -106
- package/test/spec/modules/minutemediaBidAdapter_spec.js +36 -5
- package/test/spec/modules/oguryBidAdapter_spec.js +208 -108
- package/test/spec/modules/pubmaticBidAdapter_spec.js +119 -0
- package/test/spec/modules/pulsepointBidAdapter_spec.js +225 -486
- package/test/spec/modules/sovrnBidAdapter_spec.js +24 -4
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +8 -5
- package/test/spec/modules/teadsBidAdapter_spec.js +70 -21
- package/test/spec/modules/topicsFpdModule_spec.js +10 -4
- package/test/spec/modules/vidazooBidAdapter_spec.js +0 -5
- package/test/spec/modules/voxBidAdapter_spec.js +93 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +402 -314
- package/test/spec/modules/yandexBidAdapter_spec.js +21 -3
- package/integrationExamples/gpt/inskin_example.html +0 -100
|
@@ -3,7 +3,6 @@ import { config } from 'src/config.js';
|
|
|
3
3
|
import { BANNER, VIDEO } from 'src/mediaTypes.js';
|
|
4
4
|
import { spec } from 'modules/yahoosspBidAdapter.js';
|
|
5
5
|
import {createEidsArray} from '../../../modules/userId/eids';
|
|
6
|
-
import {deepClone} from '../../../src/utils';
|
|
7
6
|
|
|
8
7
|
const DEFAULT_BID_ID = '84ab500420319d';
|
|
9
8
|
const DEFAULT_BID_DCN = '2093845709823475';
|
|
@@ -13,18 +12,20 @@ const DEFAULT_AD_UNIT_CODE = '/19968336/header-bid-tag-1';
|
|
|
13
12
|
const DEFAULT_AD_UNIT_TYPE = 'banner';
|
|
14
13
|
const DEFAULT_PARAMS_BID_OVERRIDE = {};
|
|
15
14
|
const DEFAULT_VIDEO_CONTEXT = 'instream';
|
|
16
|
-
const ADAPTER_VERSION = '1.0
|
|
15
|
+
const ADAPTER_VERSION = '1.1.0';
|
|
16
|
+
const DEFAULT_BIDDER_CODE = 'yahooAds';
|
|
17
|
+
const VALID_BIDDER_CODES = [DEFAULT_BIDDER_CODE, 'yahoossp', 'yahooAdvertising'];
|
|
17
18
|
const PREBID_VERSION = '$prebid.version$';
|
|
18
19
|
const INTEGRATION_METHOD = 'prebid.js';
|
|
19
20
|
|
|
20
21
|
// Utility functions
|
|
21
|
-
const generateBidRequest = ({bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
|
|
22
|
+
const generateBidRequest = ({bidderCode, bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
|
|
22
23
|
const bidRequest = {
|
|
23
24
|
adUnitCode,
|
|
24
25
|
auctionId: 'b06c5141-fe8f-4cdf-9d7d-54415490a917',
|
|
25
26
|
bidId,
|
|
26
27
|
bidderRequestsCount: 1,
|
|
27
|
-
bidder:
|
|
28
|
+
bidder: bidderCode,
|
|
28
29
|
bidderRequestId: '7101db09af0db2',
|
|
29
30
|
bidderWinsCount: 0,
|
|
30
31
|
mediaTypes: {},
|
|
@@ -79,7 +80,7 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
|
|
|
79
80
|
adUnitCode: adUnitCode || 'default-adUnitCode',
|
|
80
81
|
auctionId: 'd4c83a3b-18e4-4208-b98b-63848449c7aa',
|
|
81
82
|
auctionStart: new Date().getTime(),
|
|
82
|
-
bidderCode:
|
|
83
|
+
bidderCode: bidRequestArray[0].bidder,
|
|
83
84
|
bidderRequestId: '112f1c7c5d399a',
|
|
84
85
|
bids: bidRequestArray,
|
|
85
86
|
refererInfo: {
|
|
@@ -107,8 +108,9 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
|
|
|
107
108
|
return bidderRequest;
|
|
108
109
|
};
|
|
109
110
|
|
|
110
|
-
const generateBuildRequestMock = ({bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
|
|
111
|
+
const generateBuildRequestMock = ({bidderCode, bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
|
|
111
112
|
const bidRequestConfig = {
|
|
113
|
+
bidderCode: bidderCode || DEFAULT_BIDDER_CODE,
|
|
112
114
|
bidId: bidId || DEFAULT_BID_ID,
|
|
113
115
|
pos: pos || DEFAULT_BID_POS,
|
|
114
116
|
adUnitCode: adUnitCode || DEFAULT_AD_UNIT_CODE,
|
|
@@ -174,21 +176,28 @@ const generateResponseMock = (admPayloadType, vastVersion, videoContext) => {
|
|
|
174
176
|
seatbid: [{ bid: [ bidResponse ], seat: 13107 }]
|
|
175
177
|
}
|
|
176
178
|
};
|
|
177
|
-
const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: admPayloadType, videoContext
|
|
179
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: admPayloadType, videoContext});
|
|
178
180
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
179
|
-
|
|
180
181
|
return {serverResponse, data, bidderRequest};
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
// Unit tests
|
|
184
|
-
describe('
|
|
185
|
+
describe('Yahoo Advertising Bid Adapter:', () => {
|
|
186
|
+
beforeEach(() => {
|
|
187
|
+
config.resetConfig();
|
|
188
|
+
});
|
|
189
|
+
|
|
185
190
|
describe('Validate basic properties', () => {
|
|
186
191
|
it('should define the correct bidder code', () => {
|
|
187
|
-
expect(spec.code).to.equal('
|
|
192
|
+
expect(spec.code).to.equal('yahooAds');
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('should define the correct bidder aliases', () => {
|
|
196
|
+
expect(spec.aliases).to.deep.equal(['yahoossp', 'yahooAdvertising']);
|
|
188
197
|
});
|
|
189
198
|
|
|
190
199
|
it('should define the correct vendor ID', () => {
|
|
191
|
-
expect(spec.gvlid).to.equal(25)
|
|
200
|
+
expect(spec.gvlid).to.equal(25);
|
|
192
201
|
});
|
|
193
202
|
});
|
|
194
203
|
|
|
@@ -271,33 +280,62 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
271
280
|
});
|
|
272
281
|
|
|
273
282
|
describe('user consent parameters are updated', () => {
|
|
274
|
-
|
|
283
|
+
const syncOptions = {
|
|
275
284
|
iframeEnabled: true,
|
|
276
285
|
pixelEnabled: true
|
|
277
286
|
};
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
287
|
+
describe('when all consent data is set', () => {
|
|
288
|
+
const pixelObjects = spec.getUserSyncs(
|
|
289
|
+
syncOptions,
|
|
290
|
+
SERVER_RESPONSES,
|
|
291
|
+
bidderRequest.gdprConsent,
|
|
292
|
+
bidderRequest.uspConsent,
|
|
293
|
+
bidderRequest.gppConsent
|
|
294
|
+
);
|
|
295
|
+
pixelObjects.forEach(pixelObject => {
|
|
296
|
+
let url = pixelObject.url;
|
|
297
|
+
let urlParams = new URL(url).searchParams;
|
|
298
|
+
const expectedParams = {
|
|
299
|
+
'baz': 'true',
|
|
300
|
+
'gdpr_consent': bidderRequest.gdprConsent.consentString,
|
|
301
|
+
'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
|
|
302
|
+
'us_privacy': bidderRequest.uspConsent,
|
|
303
|
+
'gpp': bidderRequest.gppConsent.gppString,
|
|
304
|
+
'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
|
|
305
|
+
}
|
|
306
|
+
for (const [key, value] of Object.entries(expectedParams)) {
|
|
307
|
+
it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
|
|
308
|
+
expect(urlParams.get(key)).to.equal(value);
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
describe('when no consent data is set', () => {
|
|
315
|
+
const pixelObjects = spec.getUserSyncs(
|
|
316
|
+
syncOptions,
|
|
317
|
+
SERVER_RESPONSES,
|
|
318
|
+
undefined,
|
|
319
|
+
undefined,
|
|
320
|
+
undefined
|
|
321
|
+
);
|
|
322
|
+
pixelObjects.forEach(pixelObject => {
|
|
323
|
+
let url = pixelObject.url;
|
|
324
|
+
let urlParams = new URL(url).searchParams;
|
|
325
|
+
const expectedParams = {
|
|
326
|
+
'baz': 'true',
|
|
327
|
+
'gdpr_consent': '',
|
|
328
|
+
'gdpr': '0',
|
|
329
|
+
'us_privacy': '',
|
|
330
|
+
'gpp': '',
|
|
331
|
+
'gpp_sid': ''
|
|
332
|
+
}
|
|
333
|
+
for (const [key, value] of Object.entries(expectedParams)) {
|
|
334
|
+
it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
|
|
335
|
+
expect(urlParams.get(key)).to.equal(value);
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
});
|
|
301
339
|
});
|
|
302
340
|
});
|
|
303
341
|
});
|
|
@@ -647,9 +685,9 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
647
685
|
};
|
|
648
686
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
|
|
649
687
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
650
|
-
|
|
651
|
-
expect(
|
|
652
|
-
|
|
688
|
+
const user = data.user;
|
|
689
|
+
expect(user[param]).to.be.a('object');
|
|
690
|
+
expect(user[param]).to.be.deep.include({[param]: {a: '123', b: '456'}});
|
|
653
691
|
});
|
|
654
692
|
});
|
|
655
693
|
|
|
@@ -669,12 +707,14 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
669
707
|
};
|
|
670
708
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
|
|
671
709
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
expect(
|
|
675
|
-
expect(
|
|
676
|
-
expect(
|
|
677
|
-
expect(
|
|
710
|
+
const user = data.user;
|
|
711
|
+
const site = data.site;
|
|
712
|
+
expect(user.data[0][param]).to.exist;
|
|
713
|
+
expect(user.data[0][param]).to.be.a('string');
|
|
714
|
+
expect(user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
|
|
715
|
+
expect(site.content.data[0][param]).to.exist;
|
|
716
|
+
expect(site.content.data[0][param]).to.be.a('string');
|
|
717
|
+
expect(site.content.data[0][param]).to.be.equal(ortb2.site.content.data[0][param]);
|
|
678
718
|
});
|
|
679
719
|
});
|
|
680
720
|
|
|
@@ -688,9 +728,10 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
688
728
|
};
|
|
689
729
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
|
|
690
730
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
691
|
-
|
|
692
|
-
expect(
|
|
693
|
-
expect(
|
|
731
|
+
const user = data.user;
|
|
732
|
+
expect(user.data[0][param]).to.exist;
|
|
733
|
+
expect(user.data[0][param]).to.be.a('array');
|
|
734
|
+
expect(user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
|
|
694
735
|
});
|
|
695
736
|
});
|
|
696
737
|
|
|
@@ -704,10 +745,10 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
704
745
|
};
|
|
705
746
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
|
|
706
747
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
707
|
-
|
|
708
|
-
expect(
|
|
709
|
-
expect(
|
|
710
|
-
|
|
748
|
+
const user = data.user;
|
|
749
|
+
expect(user.data[0][param]).to.exist;
|
|
750
|
+
expect(user.data[0][param]).to.be.a('object');
|
|
751
|
+
expect(user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
|
|
711
752
|
});
|
|
712
753
|
});
|
|
713
754
|
|
|
@@ -815,26 +856,33 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
815
856
|
});
|
|
816
857
|
|
|
817
858
|
describe('Endpoint & Impression Request Mode:', () => {
|
|
818
|
-
|
|
819
|
-
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
820
|
-
const testOverrideEndpoint = 'http://foo.bar.baz.com/bidderRequest';
|
|
859
|
+
afterEach(() => {
|
|
821
860
|
config.setConfig({
|
|
822
|
-
|
|
823
|
-
|
|
861
|
+
yahooAds: {
|
|
862
|
+
singleRequestMode: undefined
|
|
824
863
|
}
|
|
825
864
|
});
|
|
826
|
-
const response = spec.buildRequests(validBidRequests, bidderRequest)[0];
|
|
827
|
-
expect(response).to.deep.include(
|
|
828
|
-
{
|
|
829
|
-
method: 'POST',
|
|
830
|
-
url: testOverrideEndpoint
|
|
831
|
-
});
|
|
832
865
|
});
|
|
833
866
|
|
|
834
|
-
|
|
835
|
-
config
|
|
836
|
-
|
|
867
|
+
VALID_BIDDER_CODES.forEach(bidderCode => {
|
|
868
|
+
it(`should route request to config override endpoint for ${bidderCode} override config`, () => {
|
|
869
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode});
|
|
870
|
+
const testOverrideEndpoint = 'http://foo.bar.baz.com/bidderRequest';
|
|
871
|
+
const cfg = {};
|
|
872
|
+
cfg[bidderCode] = {
|
|
873
|
+
endpoint: testOverrideEndpoint
|
|
874
|
+
};
|
|
875
|
+
config.setConfig(cfg);
|
|
876
|
+
const response = spec.buildRequests(validBidRequests, bidderRequest)[0];
|
|
877
|
+
expect(response).to.deep.include(
|
|
878
|
+
{
|
|
879
|
+
method: 'POST',
|
|
880
|
+
url: testOverrideEndpoint
|
|
881
|
+
});
|
|
837
882
|
});
|
|
883
|
+
});
|
|
884
|
+
|
|
885
|
+
it('should route request to /bidRequest endpoint when dcn & pos present', () => {
|
|
838
886
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
839
887
|
const response = spec.buildRequests(validBidRequests, bidderRequest);
|
|
840
888
|
expect(response[0]).to.deep.include({
|
|
@@ -862,15 +910,15 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
862
910
|
bidderRequest.bids = validBidRequests;
|
|
863
911
|
|
|
864
912
|
config.setConfig({
|
|
865
|
-
|
|
913
|
+
yahooAds: {
|
|
866
914
|
singleRequestMode: true
|
|
867
915
|
}
|
|
868
916
|
});
|
|
869
917
|
|
|
870
|
-
const
|
|
871
|
-
expect(
|
|
918
|
+
const responsePayload = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
919
|
+
expect(responsePayload.imp).to.be.an('array').with.lengthOf(2);
|
|
872
920
|
|
|
873
|
-
expect(
|
|
921
|
+
expect(responsePayload.imp[0]).to.deep.include({
|
|
874
922
|
id: DEFAULT_BID_ID,
|
|
875
923
|
ext: {
|
|
876
924
|
pos: DEFAULT_BID_POS,
|
|
@@ -878,7 +926,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
878
926
|
}
|
|
879
927
|
});
|
|
880
928
|
|
|
881
|
-
expect(
|
|
929
|
+
expect(responsePayload.imp[1]).to.deep.include({
|
|
882
930
|
id: BID_ID_2,
|
|
883
931
|
ext: {
|
|
884
932
|
pos: BID_POS_2,
|
|
@@ -896,8 +944,9 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
896
944
|
|
|
897
945
|
it('buildRequests(): should return an array with the correct amount of request objects', () => {
|
|
898
946
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
899
|
-
const
|
|
900
|
-
expect(
|
|
947
|
+
const reqs = spec.buildRequests(validBidRequests, bidderRequest);
|
|
948
|
+
expect(reqs).to.be.an('array').to.have.lengthOf(1);
|
|
949
|
+
expect(reqs[0]).to.be.an('object').that.has.keys('method', 'url', 'data', 'options', 'bidderRequest');
|
|
901
950
|
});
|
|
902
951
|
});
|
|
903
952
|
|
|
@@ -905,7 +954,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
905
954
|
it('should return request objects with the relevant custom headers and content type declaration', () => {
|
|
906
955
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
907
956
|
bidderRequest.gdprConsent.gdprApplies = false;
|
|
908
|
-
const options = spec.buildRequests(validBidRequests, bidderRequest).options;
|
|
957
|
+
const options = spec.buildRequests(validBidRequests, bidderRequest)[0].options;
|
|
909
958
|
expect(options).to.deep.equal(
|
|
910
959
|
{
|
|
911
960
|
contentType: 'application/json',
|
|
@@ -921,6 +970,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
921
970
|
it('should set the allowed sources user eids', () => {
|
|
922
971
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
923
972
|
validBidRequests[0].userIdAsEids = createEidsArray({
|
|
973
|
+
connectId: 'connectId_FROM_USER_ID_MODULE',
|
|
924
974
|
admixerId: 'admixerId_FROM_USER_ID_MODULE',
|
|
925
975
|
adtelligentId: 'adtelligentId_FROM_USER_ID_MODULE',
|
|
926
976
|
amxId: 'amxId_FROM_USER_ID_MODULE',
|
|
@@ -933,9 +983,10 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
933
983
|
criteoId: 'criteoId_FROM_USER_ID_MODULE',
|
|
934
984
|
fabrickId: 'fabrickId_FROM_USER_ID_MODULE',
|
|
935
985
|
});
|
|
936
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
986
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
937
987
|
|
|
938
988
|
expect(data.user.ext.eids).to.deep.equal([
|
|
989
|
+
{source: 'yahoo.com', uids: [{id: 'connectId_FROM_USER_ID_MODULE', atype: 3}]},
|
|
939
990
|
{source: 'admixer.net', uids: [{id: 'admixerId_FROM_USER_ID_MODULE', atype: 3}]},
|
|
940
991
|
{source: 'adtelligent.com', uids: [{id: 'adtelligentId_FROM_USER_ID_MODULE', atype: 3}]},
|
|
941
992
|
{source: 'amxdt.net', uids: [{id: 'amxId_FROM_USER_ID_MODULE', atype: 1}]},
|
|
@@ -955,7 +1006,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
955
1006
|
validBidRequests[0].userIdAsEids = createEidsArray({
|
|
956
1007
|
justId: 'justId_FROM_USER_ID_MODULE'
|
|
957
1008
|
});
|
|
958
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1009
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
959
1010
|
|
|
960
1011
|
expect(data.user.ext.eids).to.deep.equal([]);
|
|
961
1012
|
});
|
|
@@ -964,7 +1015,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
964
1015
|
describe('Request Payload oRTB bid validation:', () => {
|
|
965
1016
|
it('should generate a valid openRTB bid-request object in the data field', () => {
|
|
966
1017
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
967
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1018
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
968
1019
|
expect(data.site).to.deep.equal({
|
|
969
1020
|
id: bidderRequest.bids[0].params.dcn,
|
|
970
1021
|
page: bidderRequest.refererInfo.page
|
|
@@ -1013,7 +1064,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1013
1064
|
it('should generate a valid openRTB imp.ext object in the bid-request', () => {
|
|
1014
1065
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
1015
1066
|
const bid = validBidRequests[0];
|
|
1016
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1067
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1017
1068
|
expect(data.imp[0].ext).to.deep.equal({
|
|
1018
1069
|
pos: bid.params.pos,
|
|
1019
1070
|
dfp_ad_unit_code: DEFAULT_AD_UNIT_CODE
|
|
@@ -1023,7 +1074,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1023
1074
|
it('should use siteId value as site.id in the outbound bid-request when using "pubId" integration mode', () => {
|
|
1024
1075
|
let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true});
|
|
1025
1076
|
validBidRequests[0].params.siteId = '1234567';
|
|
1026
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1077
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1027
1078
|
expect(data.site.id).to.equal('1234567');
|
|
1028
1079
|
});
|
|
1029
1080
|
|
|
@@ -1039,7 +1090,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1039
1090
|
}
|
|
1040
1091
|
}
|
|
1041
1092
|
let { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
|
|
1042
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1093
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1043
1094
|
expect(data.site.publisher).to.deep.equal({
|
|
1044
1095
|
ext: {
|
|
1045
1096
|
publisherblob: 'pblob',
|
|
@@ -1060,7 +1111,7 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1060
1111
|
}
|
|
1061
1112
|
}
|
|
1062
1113
|
let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true, ortb2});
|
|
1063
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1114
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1064
1115
|
expect(data.site.publisher).to.deep.equal({
|
|
1065
1116
|
id: DEFAULT_PUBID,
|
|
1066
1117
|
ext: {
|
|
@@ -1073,17 +1124,13 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1073
1124
|
it('should use placementId value as imp.tagid in the outbound bid-request when using "pubId" integration mode', () => {
|
|
1074
1125
|
let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true});
|
|
1075
1126
|
validBidRequests[0].params.placementId = 'header-300x250';
|
|
1076
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest).data;
|
|
1127
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1077
1128
|
expect(data.imp[0].tagid).to.deep.equal('header-300x250');
|
|
1078
1129
|
});
|
|
1079
1130
|
});
|
|
1080
1131
|
|
|
1081
1132
|
describe('Request Payload oRTB bid.imp validation:', () => {
|
|
1082
|
-
|
|
1083
|
-
it('should generate a valid "Banner" imp object', () => {
|
|
1084
|
-
config.setConfig({
|
|
1085
|
-
yahoossp: {}
|
|
1086
|
-
});
|
|
1133
|
+
it('should generate a valid "Banner" imp object when mode config override is undefined', () => {
|
|
1087
1134
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
1088
1135
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1089
1136
|
expect(data.imp[0].video).to.not.exist;
|
|
@@ -1093,74 +1140,82 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1093
1140
|
});
|
|
1094
1141
|
});
|
|
1095
1142
|
|
|
1096
|
-
// Validate Banner imp when
|
|
1097
|
-
|
|
1098
|
-
config
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1143
|
+
// Validate Banner imp when config value for mode="banner"
|
|
1144
|
+
VALID_BIDDER_CODES.forEach(bidderCode => {
|
|
1145
|
+
it(`should generate a valid "Banner" imp object for ${bidderCode} config override`, () => {
|
|
1146
|
+
const cfg = {};
|
|
1147
|
+
cfg[bidderCode] = {
|
|
1148
|
+
mode: BANNER
|
|
1149
|
+
};
|
|
1150
|
+
config.setConfig(cfg);
|
|
1151
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode});
|
|
1152
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1153
|
+
expect(data.imp[0].video).to.not.exist;
|
|
1154
|
+
expect(data.imp[0].banner).to.deep.equal({
|
|
1155
|
+
mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
|
|
1156
|
+
format: [{w: 300, h: 250}, {w: 300, h: 600}]
|
|
1157
|
+
});
|
|
1107
1158
|
});
|
|
1108
|
-
});
|
|
1109
1159
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1160
|
+
// Validate Video imp
|
|
1161
|
+
it(`should generate a valid "Video" only imp object for ${bidderCode} config override`, () => {
|
|
1162
|
+
const cfg = {};
|
|
1163
|
+
cfg[bidderCode] = {
|
|
1164
|
+
mode: VIDEO
|
|
1165
|
+
};
|
|
1166
|
+
config.setConfig(cfg);
|
|
1167
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video'});
|
|
1168
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1169
|
+
expect(data.imp[0].banner).to.not.exist;
|
|
1170
|
+
expect(data.imp[0].video).to.deep.equal({
|
|
1171
|
+
mimes: ['video/mp4', 'application/javascript'],
|
|
1172
|
+
w: 300,
|
|
1173
|
+
h: 250,
|
|
1174
|
+
api: [2],
|
|
1175
|
+
protocols: [2, 5],
|
|
1176
|
+
startdelay: 0,
|
|
1177
|
+
linearity: 1,
|
|
1178
|
+
maxbitrate: undefined,
|
|
1179
|
+
maxduration: undefined,
|
|
1180
|
+
minduration: undefined,
|
|
1181
|
+
delivery: undefined,
|
|
1182
|
+
pos: undefined,
|
|
1183
|
+
playbackmethod: undefined,
|
|
1184
|
+
rewarded: undefined,
|
|
1185
|
+
placement: undefined
|
|
1186
|
+
});
|
|
1134
1187
|
});
|
|
1135
|
-
});
|
|
1136
1188
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1189
|
+
// Validate multi-format Video+banner imp
|
|
1190
|
+
it(`should generate a valid multi-format "Video + Banner" imp object for ${bidderCode} config override`, () => {
|
|
1191
|
+
const cfg = {};
|
|
1192
|
+
cfg[bidderCode] = {
|
|
1193
|
+
mode: 'all'
|
|
1194
|
+
};
|
|
1195
|
+
config.setConfig(cfg);
|
|
1196
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'multi-format'});
|
|
1197
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1198
|
+
expect(data.imp[0].banner).to.deep.equal({
|
|
1199
|
+
mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
|
|
1200
|
+
format: [{w: 300, h: 250}, {w: 300, h: 600}]
|
|
1201
|
+
});
|
|
1202
|
+
expect(data.imp[0].video).to.deep.equal({
|
|
1203
|
+
mimes: ['video/mp4', 'application/javascript'],
|
|
1204
|
+
w: 300,
|
|
1205
|
+
h: 250,
|
|
1206
|
+
api: [2],
|
|
1207
|
+
protocols: [2, 5],
|
|
1208
|
+
startdelay: 0,
|
|
1209
|
+
linearity: 1,
|
|
1210
|
+
maxbitrate: undefined,
|
|
1211
|
+
maxduration: undefined,
|
|
1212
|
+
minduration: undefined,
|
|
1213
|
+
delivery: undefined,
|
|
1214
|
+
pos: undefined,
|
|
1215
|
+
playbackmethod: undefined,
|
|
1216
|
+
rewarded: undefined,
|
|
1217
|
+
placement: undefined
|
|
1218
|
+
});
|
|
1164
1219
|
});
|
|
1165
1220
|
});
|
|
1166
1221
|
|
|
@@ -1179,7 +1234,6 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1179
1234
|
invalidKey5: undefined
|
|
1180
1235
|
};
|
|
1181
1236
|
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1182
|
-
|
|
1183
1237
|
expect(data.imp[0].ext.kvs).to.deep.equal({
|
|
1184
1238
|
key1: 'String',
|
|
1185
1239
|
key2: 123456,
|
|
@@ -1192,10 +1246,6 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1192
1246
|
describe('Multiple adUnit validations:', () => {
|
|
1193
1247
|
// Multiple banner adUnits
|
|
1194
1248
|
it('should generate multiple bid-requests for each adUnit - 2 banner only', () => {
|
|
1195
|
-
config.setConfig({
|
|
1196
|
-
yahoossp: { mode: 'banner' }
|
|
1197
|
-
});
|
|
1198
|
-
|
|
1199
1249
|
const BID_ID_2 = '84ab50xxxxx';
|
|
1200
1250
|
const BID_POS_2 = 'footer';
|
|
1201
1251
|
const AD_UNIT_CODE_2 = 'test-ad-unit-code-123';
|
|
@@ -1209,12 +1259,12 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1209
1259
|
validBidRequests = [bidRequest, bidRequest2, bidRequest3];
|
|
1210
1260
|
bidderRequest.bids = validBidRequests;
|
|
1211
1261
|
|
|
1212
|
-
const
|
|
1213
|
-
expect(
|
|
1214
|
-
expect(
|
|
1215
|
-
|
|
1216
|
-
expect(
|
|
1217
|
-
expect(
|
|
1262
|
+
const reqs = spec.buildRequests(validBidRequests, bidderRequest)
|
|
1263
|
+
expect(reqs).to.be.a('array');
|
|
1264
|
+
expect(reqs.length).to.equal(2);
|
|
1265
|
+
reqs.forEach(req => {
|
|
1266
|
+
expect(req.data.imp[0].video).to.not.exist
|
|
1267
|
+
expect(req.data.imp[0].banner).to.deep.equal({
|
|
1218
1268
|
mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
|
|
1219
1269
|
format: [{w: 300, h: 250}, {w: 300, h: 600}]
|
|
1220
1270
|
});
|
|
@@ -1223,9 +1273,11 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1223
1273
|
|
|
1224
1274
|
// Multiple video adUnits
|
|
1225
1275
|
it('should generate multiple bid-requests for each adUnit - 2 video only', () => {
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1276
|
+
const cfg = {};
|
|
1277
|
+
cfg[DEFAULT_BIDDER_CODE] = {
|
|
1278
|
+
mode: VIDEO
|
|
1279
|
+
};
|
|
1280
|
+
config.setConfig(cfg);
|
|
1229
1281
|
const BID_ID_2 = '84ab50xxxxx';
|
|
1230
1282
|
const BID_POS_2 = 'footer';
|
|
1231
1283
|
const AD_UNIT_CODE_2 = 'test-ad-unit-code-123';
|
|
@@ -1233,18 +1285,18 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1233
1285
|
const BID_POS_3 = 'hero';
|
|
1234
1286
|
const AD_UNIT_CODE_3 = 'video-ad-unit';
|
|
1235
1287
|
|
|
1236
|
-
let {
|
|
1237
|
-
const {
|
|
1238
|
-
const {
|
|
1288
|
+
let {bidRequest, validBidRequests, bidderRequest} = generateBuildRequestMock({adUnitType: 'video'}); // video
|
|
1289
|
+
const {bidRequest: bidRequest2} = generateBuildRequestMock({bidId: BID_ID_2, pos: BID_POS_2, adUnitCode: AD_UNIT_CODE_2, adUnitType: 'video'}); // video
|
|
1290
|
+
const {bidRequest: bidRequest3} = generateBuildRequestMock({bidId: BID_ID_3, pos: BID_POS_3, adUnitCode: AD_UNIT_CODE_3}); // banner (should be filtered)
|
|
1239
1291
|
validBidRequests = [bidRequest, bidRequest2, bidRequest3];
|
|
1240
1292
|
bidderRequest.bids = validBidRequests;
|
|
1241
1293
|
|
|
1242
|
-
const
|
|
1243
|
-
expect(
|
|
1244
|
-
expect(
|
|
1245
|
-
|
|
1246
|
-
expect(
|
|
1247
|
-
expect(
|
|
1294
|
+
const reqs = spec.buildRequests(validBidRequests, bidderRequest)
|
|
1295
|
+
expect(reqs).to.be.a('array');
|
|
1296
|
+
expect(reqs.length).to.equal(2);
|
|
1297
|
+
reqs.forEach(req => {
|
|
1298
|
+
expect(req.data.imp[0].banner).to.not.exist
|
|
1299
|
+
expect(req.data.imp[0].video).to.deep.equal({
|
|
1248
1300
|
mimes: ['video/mp4', 'application/javascript'],
|
|
1249
1301
|
w: 300,
|
|
1250
1302
|
h: 250,
|
|
@@ -1265,9 +1317,9 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1265
1317
|
});
|
|
1266
1318
|
// Mixed adUnits 1-banner, 1-video, 1-native (should filter out native)
|
|
1267
1319
|
it('should generate multiple bid-requests for both "video & banner" adUnits', () => {
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1320
|
+
const cfg = {};
|
|
1321
|
+
cfg[DEFAULT_BIDDER_CODE] = { mode: 'all' };
|
|
1322
|
+
config.setConfig(cfg);
|
|
1271
1323
|
const BID_ID_2 = '84ab50xxxxx';
|
|
1272
1324
|
const BID_POS_2 = 'footer';
|
|
1273
1325
|
const AD_UNIT_CODE_2 = 'video-ad-unit';
|
|
@@ -1281,21 +1333,21 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1281
1333
|
validBidRequests = [bidRequest, bidRequest2, bidRequest3];
|
|
1282
1334
|
bidderRequest.bids = validBidRequests;
|
|
1283
1335
|
|
|
1284
|
-
const
|
|
1285
|
-
expect(
|
|
1286
|
-
expect(
|
|
1287
|
-
|
|
1288
|
-
expect(
|
|
1336
|
+
const reqs = spec.buildRequests(validBidRequests, bidderRequest);
|
|
1337
|
+
expect(reqs).to.be.a('array');
|
|
1338
|
+
expect(reqs.length).to.equal(2);
|
|
1339
|
+
reqs.forEach(req => {
|
|
1340
|
+
expect(req.data.imp[0].native).to.not.exist;
|
|
1289
1341
|
});
|
|
1290
1342
|
|
|
1291
|
-
const data1 =
|
|
1343
|
+
const data1 = reqs[0].data;
|
|
1292
1344
|
expect(data1.imp[0].video).to.not.exist;
|
|
1293
1345
|
expect(data1.imp[0].banner).to.deep.equal({
|
|
1294
1346
|
mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
|
|
1295
1347
|
format: [{w: 300, h: 250}, {w: 300, h: 600}]
|
|
1296
1348
|
});
|
|
1297
1349
|
|
|
1298
|
-
const data2 =
|
|
1350
|
+
const data2 = reqs[1].data;
|
|
1299
1351
|
expect(data2.imp[0].banner).to.not.exist;
|
|
1300
1352
|
expect(data2.imp[0].video).to.deep.equal({
|
|
1301
1353
|
mimes: ['video/mp4', 'application/javascript'],
|
|
@@ -1318,90 +1370,98 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1318
1370
|
});
|
|
1319
1371
|
|
|
1320
1372
|
describe('Video params firstlook & bidOverride validations:', () => {
|
|
1321
|
-
|
|
1322
|
-
config
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1373
|
+
VALID_BIDDER_CODES.forEach(bidderCode => {
|
|
1374
|
+
it(`should first look at params.bidOverride for video placement data for ${bidderCode} config override`, () => {
|
|
1375
|
+
const cfg = {};
|
|
1376
|
+
cfg[bidderCode] = {
|
|
1377
|
+
mode: VIDEO
|
|
1378
|
+
};
|
|
1379
|
+
config.setConfig(cfg);
|
|
1380
|
+
const bidOverride = {
|
|
1381
|
+
imp: {
|
|
1382
|
+
video: {
|
|
1383
|
+
mimes: ['video/mp4'],
|
|
1384
|
+
w: 400,
|
|
1385
|
+
h: 350,
|
|
1386
|
+
api: [1],
|
|
1387
|
+
protocols: [1, 3],
|
|
1388
|
+
startdelay: 0,
|
|
1389
|
+
linearity: 1,
|
|
1390
|
+
maxbitrate: 400000,
|
|
1391
|
+
maxduration: 3600,
|
|
1392
|
+
minduration: 1500,
|
|
1393
|
+
delivery: 1,
|
|
1394
|
+
pos: 123456,
|
|
1395
|
+
playbackmethod: 1,
|
|
1396
|
+
rewarded: 1,
|
|
1397
|
+
placement: 1
|
|
1398
|
+
}
|
|
1343
1399
|
}
|
|
1344
1400
|
}
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
expect(data.imp[0].video).to.deep.equal(bidOverride.imp.video);
|
|
1349
|
-
});
|
|
1350
|
-
|
|
1351
|
-
it('should second look at bid.mediaTypes.video for video placement data', () => {
|
|
1352
|
-
config.setConfig({
|
|
1353
|
-
yahoossp: { mode: 'video' }
|
|
1354
|
-
});
|
|
1355
|
-
let { bidRequest, bidderRequest } = generateBuildRequestMock({adUnitType: 'video'});
|
|
1356
|
-
bidRequest.mediaTypes.video = {
|
|
1357
|
-
mimes: ['video/mp4'],
|
|
1358
|
-
playerSize: [400, 350],
|
|
1359
|
-
api: [1],
|
|
1360
|
-
protocols: [1, 3],
|
|
1361
|
-
startdelay: 0,
|
|
1362
|
-
linearity: 1,
|
|
1363
|
-
maxbitrate: 400000,
|
|
1364
|
-
maxduration: 3600,
|
|
1365
|
-
minduration: 1500,
|
|
1366
|
-
delivery: 1,
|
|
1367
|
-
pos: 123456,
|
|
1368
|
-
playbackmethod: 1,
|
|
1369
|
-
placement: 1
|
|
1370
|
-
}
|
|
1371
|
-
const validBidRequests = [bidRequest];
|
|
1372
|
-
bidderRequest.bids = validBidRequests;
|
|
1373
|
-
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1374
|
-
expect(data.imp[0].video).to.deep.equal({
|
|
1375
|
-
mimes: ['video/mp4'],
|
|
1376
|
-
w: 400,
|
|
1377
|
-
h: 350,
|
|
1378
|
-
api: [1],
|
|
1379
|
-
protocols: [1, 3],
|
|
1380
|
-
startdelay: 0,
|
|
1381
|
-
linearity: 1,
|
|
1382
|
-
maxbitrate: 400000,
|
|
1383
|
-
maxduration: 3600,
|
|
1384
|
-
minduration: 1500,
|
|
1385
|
-
delivery: 1,
|
|
1386
|
-
pos: 123456,
|
|
1387
|
-
playbackmethod: 1,
|
|
1388
|
-
placement: 1,
|
|
1389
|
-
rewarded: undefined
|
|
1401
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video', bidOverrideObject: bidOverride});
|
|
1402
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1403
|
+
expect(data.imp[0].video).to.deep.equal(bidOverride.imp.video);
|
|
1390
1404
|
});
|
|
1391
|
-
});
|
|
1392
1405
|
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1406
|
+
it(`should second look at bid.mediaTypes.video for video placement data for ${bidderCode} config override`, () => {
|
|
1407
|
+
const cfg = {};
|
|
1408
|
+
cfg[bidderCode] = {
|
|
1409
|
+
mode: VIDEO
|
|
1410
|
+
};
|
|
1411
|
+
config.setConfig(cfg);
|
|
1412
|
+
let { bidRequest, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video'});
|
|
1413
|
+
bidRequest.mediaTypes.video = {
|
|
1414
|
+
mimes: ['video/mp4'],
|
|
1415
|
+
playerSize: [400, 350],
|
|
1416
|
+
api: [1],
|
|
1417
|
+
protocols: [1, 3],
|
|
1418
|
+
startdelay: 0,
|
|
1419
|
+
linearity: 1,
|
|
1420
|
+
maxbitrate: 400000,
|
|
1421
|
+
maxduration: 3600,
|
|
1422
|
+
minduration: 1500,
|
|
1423
|
+
delivery: 1,
|
|
1424
|
+
pos: 123456,
|
|
1425
|
+
playbackmethod: 1,
|
|
1426
|
+
placement: 1
|
|
1427
|
+
}
|
|
1428
|
+
const validBidRequests = [bidRequest];
|
|
1429
|
+
bidderRequest.bids = validBidRequests;
|
|
1430
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1431
|
+
expect(data.imp[0].video).to.deep.equal({
|
|
1432
|
+
mimes: ['video/mp4'],
|
|
1433
|
+
w: 400,
|
|
1434
|
+
h: 350,
|
|
1435
|
+
api: [1],
|
|
1436
|
+
protocols: [1, 3],
|
|
1437
|
+
startdelay: 0,
|
|
1438
|
+
linearity: 1,
|
|
1439
|
+
maxbitrate: 400000,
|
|
1440
|
+
maxduration: 3600,
|
|
1441
|
+
minduration: 1500,
|
|
1442
|
+
delivery: 1,
|
|
1443
|
+
pos: 123456,
|
|
1444
|
+
playbackmethod: 1,
|
|
1445
|
+
placement: 1,
|
|
1446
|
+
rewarded: undefined
|
|
1447
|
+
});
|
|
1396
1448
|
});
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1449
|
+
|
|
1450
|
+
it(`should use params.bidOverride.device.ip override for ${bidderCode} config override`, () => {
|
|
1451
|
+
const cfg = {};
|
|
1452
|
+
cfg[bidderCode] = {
|
|
1453
|
+
mode: 'all'
|
|
1454
|
+
};
|
|
1455
|
+
config.setConfig(cfg);
|
|
1456
|
+
const bidOverride = {
|
|
1457
|
+
device: {
|
|
1458
|
+
ip: '1.2.3.4'
|
|
1459
|
+
}
|
|
1400
1460
|
}
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1461
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video', bidOverrideObject: bidOverride});
|
|
1462
|
+
const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
|
|
1463
|
+
expect(data.device.ip).to.deep.equal(bidOverride.device.ip);
|
|
1464
|
+
});
|
|
1405
1465
|
});
|
|
1406
1466
|
});
|
|
1407
1467
|
// #endregion buildRequests():
|
|
@@ -1417,6 +1477,22 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1417
1477
|
});
|
|
1418
1478
|
|
|
1419
1479
|
describe('for mediaTypes: "video"', () => {
|
|
1480
|
+
beforeEach(() => {
|
|
1481
|
+
config.setConfig({
|
|
1482
|
+
yahooAds: {
|
|
1483
|
+
mode: VIDEO
|
|
1484
|
+
}
|
|
1485
|
+
});
|
|
1486
|
+
});
|
|
1487
|
+
|
|
1488
|
+
afterEach(() => {
|
|
1489
|
+
config.setConfig({
|
|
1490
|
+
yahooAds: {
|
|
1491
|
+
mode: undefined
|
|
1492
|
+
}
|
|
1493
|
+
});
|
|
1494
|
+
});
|
|
1495
|
+
|
|
1420
1496
|
it('should insert video VPAID payload into vastXml', () => {
|
|
1421
1497
|
const { serverResponse, bidderRequest } = generateResponseMock('video');
|
|
1422
1498
|
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
@@ -1434,28 +1510,38 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1434
1510
|
expect(response[0].mediaType).to.equal('video');
|
|
1435
1511
|
})
|
|
1436
1512
|
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1513
|
+
describe('wrapped in video players for display inventory', () => {
|
|
1514
|
+
beforeEach(() => {
|
|
1515
|
+
config.setConfig({
|
|
1516
|
+
yahooAds: {
|
|
1517
|
+
mode: undefined
|
|
1518
|
+
}
|
|
1519
|
+
});
|
|
1520
|
+
});
|
|
1445
1521
|
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1522
|
+
it('should insert video DAP O2 Player into ad', () => {
|
|
1523
|
+
const { serverResponse, bidderRequest } = generateResponseMock('dap-o2', 'vpaid');
|
|
1524
|
+
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1525
|
+
expect(response[0].ad).to.equal('<script>o2playerSettings</script>');
|
|
1526
|
+
expect(response[0].vastUrl).to.be.undefined;
|
|
1527
|
+
expect(response[0].vastXml).to.be.undefined;
|
|
1528
|
+
expect(response[0].mediaType).to.equal('banner');
|
|
1529
|
+
});
|
|
1530
|
+
|
|
1531
|
+
it('should insert video DAP Unified Player into ad', () => {
|
|
1532
|
+
const { serverResponse, bidderRequest } = generateResponseMock('dap-up', 'vpaid');
|
|
1533
|
+
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1534
|
+
expect(response[0].ad).to.equal('<script>YAHOO.VideoPlatform.VideoPlayer</script>');
|
|
1535
|
+
expect(response[0].vastUrl).to.be.undefined;
|
|
1536
|
+
expect(response[0].vastXml).to.be.undefined;
|
|
1537
|
+
expect(response[0].mediaType).to.equal('banner');
|
|
1538
|
+
})
|
|
1539
|
+
});
|
|
1454
1540
|
});
|
|
1455
1541
|
|
|
1456
1542
|
describe('Support Advertiser domains', () => {
|
|
1457
1543
|
it('should append bid-response adomain to meta.advertiserDomains', () => {
|
|
1458
|
-
const { serverResponse, bidderRequest } = generateResponseMock('
|
|
1544
|
+
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1459
1545
|
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1460
1546
|
expect(response[0].meta.advertiserDomains).to.be.a('array');
|
|
1461
1547
|
expect(response[0].meta.advertiserDomains[0]).to.equal('advertiser-domain.com');
|
|
@@ -1490,53 +1576,55 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
1490
1576
|
});
|
|
1491
1577
|
|
|
1492
1578
|
describe('Time To Live (ttl)', () => {
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1579
|
+
VALID_BIDDER_CODES.forEach(bidderCode => {
|
|
1580
|
+
const UNSUPPORTED_TTL_FORMATS = ['string', [1, 2, 3], true, false, null, undefined];
|
|
1581
|
+
UNSUPPORTED_TTL_FORMATS.forEach(param => {
|
|
1582
|
+
it(`should not allow unsupported global ${bidderCode}.ttl formats and default to 300`, () => {
|
|
1583
|
+
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1584
|
+
const cfg = {};
|
|
1585
|
+
cfg['yahooAds'] = { ttl: param };
|
|
1586
|
+
config.setConfig(cfg);
|
|
1587
|
+
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1588
|
+
expect(response[0].ttl).to.equal(300);
|
|
1499
1589
|
});
|
|
1500
|
-
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1501
|
-
expect(response[0].ttl).to.equal(300);
|
|
1502
|
-
});
|
|
1503
1590
|
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1591
|
+
it('should not allow unsupported params.ttl formats and default to 300', () => {
|
|
1592
|
+
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1593
|
+
bidderRequest.bids[0].params.ttl = param;
|
|
1594
|
+
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1595
|
+
expect(response[0].ttl).to.equal(300);
|
|
1596
|
+
});
|
|
1509
1597
|
});
|
|
1510
|
-
});
|
|
1511
1598
|
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1599
|
+
const UNSUPPORTED_TTL_VALUES = [-1, 3601];
|
|
1600
|
+
UNSUPPORTED_TTL_VALUES.forEach(param => {
|
|
1601
|
+
it('should not allow invalid global config ttl values 3600 < ttl < 0 and default to 300', () => {
|
|
1602
|
+
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1603
|
+
config.setConfig({
|
|
1604
|
+
yahooAds: { ttl: param }
|
|
1605
|
+
});
|
|
1606
|
+
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1607
|
+
expect(response[0].ttl).to.equal(300);
|
|
1608
|
+
});
|
|
1609
|
+
|
|
1610
|
+
it('should not allow invalid params.ttl values 3600 < ttl < 0 and default to 300', () => {
|
|
1611
|
+
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1612
|
+
bidderRequest.bids[0].params.ttl = param;
|
|
1613
|
+
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1614
|
+
expect(response[0].ttl).to.equal(300);
|
|
1518
1615
|
});
|
|
1519
|
-
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1520
|
-
expect(response[0].ttl).to.equal(300);
|
|
1521
1616
|
});
|
|
1522
1617
|
|
|
1523
|
-
it('should
|
|
1618
|
+
it('should give presedence to Gloabl ttl over params.ttl ', () => {
|
|
1524
1619
|
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1525
|
-
|
|
1620
|
+
config.setConfig({
|
|
1621
|
+
yahooAds: { ttl: 500 }
|
|
1622
|
+
});
|
|
1623
|
+
bidderRequest.bids[0].params.ttl = 400;
|
|
1526
1624
|
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1527
|
-
expect(response[0].ttl).to.equal(
|
|
1625
|
+
expect(response[0].ttl).to.equal(500);
|
|
1528
1626
|
});
|
|
1529
1627
|
});
|
|
1530
|
-
|
|
1531
|
-
it('should give presedence to Gloabl ttl over params.ttl ', () => {
|
|
1532
|
-
const { serverResponse, bidderRequest } = generateResponseMock('banner');
|
|
1533
|
-
config.setConfig({
|
|
1534
|
-
yahoossp: { ttl: 500 }
|
|
1535
|
-
});
|
|
1536
|
-
bidderRequest.bids[0].params.ttl = 400;
|
|
1537
|
-
const response = spec.interpretResponse(serverResponse, {bidderRequest});
|
|
1538
|
-
expect(response[0].ttl).to.equal(500);
|
|
1539
|
-
});
|
|
1540
1628
|
});
|
|
1541
1629
|
|
|
1542
1630
|
describe('Aliasing support', () => {
|