prebid.js 5.19.0 → 6.2.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/.babelrc.js +1 -10
- package/README.md +4 -2
- package/browsers.json +13 -37
- package/gulpfile.js +1 -0
- package/karma.conf.maker.js +1 -1
- package/modules/adheseBidAdapter.js +7 -2
- package/modules/adkernelBidAdapter.js +1 -0
- package/modules/adlivetechBidAdapter.md +61 -0
- package/modules/admixerBidAdapter.js +2 -1
- package/modules/adnuntiusBidAdapter.js +2 -1
- package/modules/adomikAnalyticsAdapter.js +10 -4
- package/modules/adplusBidAdapter.js +203 -0
- package/modules/adplusBidAdapter.md +39 -0
- package/modules/adyoulikeBidAdapter.js +7 -2
- package/modules/airgridRtdProvider.js +1 -1
- package/modules/appnexusBidAdapter.js +28 -5
- package/modules/atsAnalyticsAdapter.js +67 -46
- package/modules/atsAnalyticsAdapter.md +1 -0
- package/modules/beachfrontBidAdapter.js +14 -17
- package/modules/betweenBidAdapter.js +2 -1
- package/modules/browsiRtdProvider.js +106 -18
- package/modules/cleanioRtdProvider.js +192 -0
- package/modules/cleanioRtdProvider.md +59 -0
- package/modules/codefuelBidAdapter.js +1 -3
- package/modules/codefuelBidAdapter.md +3 -3
- package/modules/craftBidAdapter.js +5 -3
- package/modules/datablocksBidAdapter.js +3 -3
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/deepintentBidAdapter.js +1 -1
- package/modules/deltaprojectsBidAdapter.js +252 -0
- package/modules/deltaprojectsBidAdapter.md +32 -0
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +68 -54
- package/modules/freewheel-sspBidAdapter.js +6 -0
- package/modules/glimpseBidAdapter.js +31 -16
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +11 -5
- package/modules/gridBidAdapter.js +1 -0
- package/modules/gumgumBidAdapter.js +5 -1
- package/modules/id5IdSystem.md +6 -6
- package/modules/imRtdProvider.js +31 -0
- package/modules/intersectionRtdProvider.js +114 -0
- package/modules/invibesBidAdapter.js +15 -9
- package/modules/ipromBidAdapter.js +79 -0
- package/modules/ixBidAdapter.js +173 -22
- package/modules/jixieBidAdapter.js +8 -2
- package/modules/justpremiumBidAdapter.js +6 -1
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedAnalyticsAdapter.js +5 -0
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/merkleIdSystem.js +5 -0
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/multibid/index.js +3 -3
- package/modules/nativoBidAdapter.js +32 -2
- package/modules/oguryBidAdapter.js +2 -1
- package/modules/openxBidAdapter.js +7 -2
- package/modules/operaadsBidAdapter.js +21 -1
- package/modules/otmBidAdapter.js +146 -0
- package/modules/otmBidAdapter.md +27 -26
- package/modules/outbrainBidAdapter.js +5 -0
- package/modules/playwireBidAdapter.md +61 -0
- package/modules/prebidServerBidAdapter/index.js +3 -3
- package/modules/pubmaticBidAdapter.js +5 -3
- package/modules/relaidoBidAdapter.js +86 -65
- package/modules/richaudienceBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +2 -2
- package/modules/saambaaBidAdapter.js +420 -0
- package/modules/saambaaBidAdapter.md +65 -68
- package/modules/seedtagBidAdapter.js +6 -0
- package/modules/smaatoBidAdapter.js +9 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/sonobiBidAdapter.js +7 -0
- package/modules/sortableBidAdapter.js +1 -0
- package/modules/sspBCBidAdapter.js +34 -3
- package/modules/tappxBidAdapter.js +3 -1
- package/modules/teadsBidAdapter.js +3 -0
- package/modules/trustxBidAdapter.js +18 -7
- package/modules/undertoneBidAdapter.js +8 -1
- package/modules/userId/index.js +27 -2
- package/modules/ventes.md +71 -0
- package/modules/ventesBidAdapter.js +410 -0
- package/modules/ventesBidAdapter.md +93 -0
- package/modules/vidoomyBidAdapter.js +51 -100
- package/modules/visxBidAdapter.js +20 -3
- package/modules/visxBidAdapter.md +4 -6
- package/modules/yahoosspBidAdapter.js +6 -6
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +41 -10
- package/modules/yieldlabBidAdapter.md +91 -48
- package/modules/yieldoneBidAdapter.js +115 -11
- package/package.json +6 -1
- package/src/adapterManager.js +14 -8
- package/src/auction.js +14 -13
- package/src/targeting.js +2 -2
- package/src/utils.js +7 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +18 -0
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
- package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +65 -2
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
- package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
- package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
- package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
- package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
- package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
- package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +58 -4
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/imRtdProvider_spec.js +25 -0
- package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
- package/test/spec/modules/invibesBidAdapter_spec.js +29 -4
- package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
- package/test/spec/modules/ixBidAdapter_spec.js +288 -5
- package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
- package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
- package/test/spec/modules/konduitWrapper_spec.js +0 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +23 -4
- package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
- package/test/spec/modules/merkleIdSystem_spec.js +18 -0
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/multibid_spec.js +31 -31
- package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
- package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
- package/test/spec/modules/openxBidAdapter_spec.js +5 -26
- package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
- package/test/spec/modules/otmBidAdapter_spec.js +67 -0
- package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +19 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
- package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
- package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
- package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +45 -3
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
- package/test/spec/modules/visxBidAdapter_spec.js +121 -5
- package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/unit/core/adapterManager_spec.js +26 -7
- package/test/spec/unit/core/targeting_spec.js +44 -0
- package/wdio.conf.js +1 -1
|
@@ -507,6 +507,17 @@ describe('S2S Adapter', function () {
|
|
|
507
507
|
resetSyncedStatus();
|
|
508
508
|
});
|
|
509
509
|
|
|
510
|
+
it('should set id to auction ID and source.tid to tid', function () {
|
|
511
|
+
config.setConfig({ s2sConfig: CONFIG });
|
|
512
|
+
|
|
513
|
+
adapter.callBids(OUTSTREAM_VIDEO_REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
|
|
514
|
+
|
|
515
|
+
const requestBid = JSON.parse(server.requests[0].requestBody);
|
|
516
|
+
expect(requestBid.id).to.equal('173afb6d132ba3');
|
|
517
|
+
expect(requestBid.source).to.be.an('object');
|
|
518
|
+
expect(requestBid.source.tid).to.equal('437fbbf5-33f5-487a-8e16-a7112903cfe5');
|
|
519
|
+
});
|
|
520
|
+
|
|
510
521
|
it('should block request if config did not define p1Consent URL in endpoint object config', function() {
|
|
511
522
|
let badConfig = utils.deepClone(CONFIG);
|
|
512
523
|
badConfig.endpoint = { noP1Consent: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction' };
|
|
@@ -1705,7 +1716,7 @@ describe('S2S Adapter', function () {
|
|
|
1705
1716
|
expect(parsedRequestBody.ext.prebid.channel).to.deep.equal({name: 'pbjs', version: 'v$prebid.version$'});
|
|
1706
1717
|
});
|
|
1707
1718
|
|
|
1708
|
-
it('
|
|
1719
|
+
it('extPrebid is now mergedDeep -> should include default channel as well', () => {
|
|
1709
1720
|
const s2sBidRequest = utils.deepClone(REQUEST);
|
|
1710
1721
|
const bidRequests = utils.deepClone(BID_REQUESTS);
|
|
1711
1722
|
|
|
@@ -1714,7 +1725,13 @@ describe('S2S Adapter', function () {
|
|
|
1714
1725
|
adapter.callBids(s2sBidRequest, bidRequests, addBidResponse, done, ajax);
|
|
1715
1726
|
|
|
1716
1727
|
const parsedRequestBody = JSON.parse(server.requests[0].requestBody);
|
|
1717
|
-
|
|
1728
|
+
|
|
1729
|
+
// extPrebid is now deep merged with
|
|
1730
|
+
expect(parsedRequestBody.ext.prebid.channel).to.deep.equal({
|
|
1731
|
+
name: 'pbjs',
|
|
1732
|
+
test: 1,
|
|
1733
|
+
version: 'v$prebid.version$'
|
|
1734
|
+
});
|
|
1718
1735
|
});
|
|
1719
1736
|
|
|
1720
1737
|
it('passes first party data in request', () => {
|
|
@@ -57,23 +57,34 @@ describe('RelaidoAdapter', function () {
|
|
|
57
57
|
serverResponse = {
|
|
58
58
|
body: {
|
|
59
59
|
status: 'ok',
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
ads: [{
|
|
61
|
+
placementId: 100000,
|
|
62
|
+
width: 640,
|
|
63
|
+
height: 360,
|
|
64
|
+
bidId: '2ed93003f7bb99',
|
|
65
|
+
price: 500,
|
|
66
|
+
model: 'vcpm',
|
|
67
|
+
currency: 'JPY',
|
|
68
|
+
creativeId: 1000,
|
|
69
|
+
vast: '<VAST version="3.0"><Ad><InLine></InLine></Ad></VAST>',
|
|
70
|
+
syncUrl: 'https://relaido/sync.html',
|
|
71
|
+
adomain: ['relaido.co.jp', 'www.cmertv.co.jp'],
|
|
72
|
+
mediaType: 'video'
|
|
73
|
+
}],
|
|
66
74
|
playerUrl: 'https://relaido/player.js',
|
|
67
|
-
syncUrl: 'https://
|
|
68
|
-
|
|
75
|
+
syncUrl: 'https://api-dev.ulizaex.com/tr/v1/prebid/sync.html',
|
|
76
|
+
uuid: relaido_uuid,
|
|
69
77
|
}
|
|
70
78
|
};
|
|
71
79
|
serverRequest = {
|
|
72
|
-
method: '
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
method: 'POST',
|
|
81
|
+
data: {
|
|
82
|
+
bids: [{
|
|
83
|
+
bidId: bidRequest.bidId,
|
|
84
|
+
width: bidRequest.mediaTypes.video.playerSize[0][0],
|
|
85
|
+
height: bidRequest.mediaTypes.video.playerSize[0][1],
|
|
86
|
+
mediaType: 'video'}]
|
|
87
|
+
}
|
|
77
88
|
};
|
|
78
89
|
});
|
|
79
90
|
|
|
@@ -195,28 +206,23 @@ describe('RelaidoAdapter', function () {
|
|
|
195
206
|
describe('spec.buildRequests', function () {
|
|
196
207
|
it('should build bid requests by video', function () {
|
|
197
208
|
const bidRequests = spec.buildRequests([bidRequest], bidderRequest);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
expect(
|
|
202
|
-
expect(
|
|
203
|
-
expect(
|
|
204
|
-
expect(
|
|
205
|
-
expect(request.
|
|
206
|
-
expect(request.
|
|
207
|
-
expect(
|
|
208
|
-
expect(request.
|
|
209
|
-
expect(
|
|
210
|
-
expect(request.
|
|
211
|
-
expect(request.
|
|
212
|
-
expect(request.
|
|
213
|
-
expect(
|
|
214
|
-
expect(
|
|
215
|
-
expect(request.data.media_type).to.equal('video');
|
|
216
|
-
expect(request.data.uuid).to.equal(relaido_uuid);
|
|
217
|
-
expect(request.data.width).to.equal(bidRequest.mediaTypes.video.playerSize[0][0]);
|
|
218
|
-
expect(request.data.height).to.equal(bidRequest.mediaTypes.video.playerSize[0][1]);
|
|
219
|
-
expect(request.data.pv).to.equal('$prebid.version$');
|
|
209
|
+
const data = JSON.parse(bidRequests.data);
|
|
210
|
+
expect(data.bids).to.have.lengthOf(1);
|
|
211
|
+
const request = data.bids[0];
|
|
212
|
+
expect(bidRequests.method).to.equal('POST');
|
|
213
|
+
expect(bidRequests.url).to.equal('https://api.relaido.jp/bid/v1/sprebid');
|
|
214
|
+
expect(data.ref).to.equal(bidderRequest.refererInfo.referer);
|
|
215
|
+
expect(data.timeout_ms).to.equal(bidderRequest.timeout);
|
|
216
|
+
expect(request.ad_unit_code).to.equal(bidRequest.adUnitCode);
|
|
217
|
+
expect(request.auction_id).to.equal(bidRequest.auctionId);
|
|
218
|
+
expect(data.bidder).to.equal(bidRequest.bidder);
|
|
219
|
+
expect(request.bidder_request_id).to.equal(bidRequest.bidderRequestId);
|
|
220
|
+
expect(data.bid_requests_count).to.equal(bidRequest.bidRequestsCount);
|
|
221
|
+
expect(request.bid_id).to.equal(bidRequest.bidId);
|
|
222
|
+
expect(request.transaction_id).to.equal(bidRequest.transactionId);
|
|
223
|
+
expect(request.media_type).to.equal('video');
|
|
224
|
+
expect(data.uuid).to.equal(relaido_uuid);
|
|
225
|
+
expect(data.pv).to.equal('$prebid.version$');
|
|
220
226
|
});
|
|
221
227
|
|
|
222
228
|
it('should build bid requests by banner', function () {
|
|
@@ -236,9 +242,10 @@ describe('RelaidoAdapter', function () {
|
|
|
236
242
|
}
|
|
237
243
|
};
|
|
238
244
|
const bidRequests = spec.buildRequests([bidRequest], bidderRequest);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
245
|
+
const data = JSON.parse(bidRequests.data);
|
|
246
|
+
expect(data.bids).to.have.lengthOf(1);
|
|
247
|
+
const request = data.bids[0];
|
|
248
|
+
expect(request.media_type).to.equal('banner');
|
|
242
249
|
});
|
|
243
250
|
|
|
244
251
|
it('should take 1x1 size', function () {
|
|
@@ -258,17 +265,18 @@ describe('RelaidoAdapter', function () {
|
|
|
258
265
|
}
|
|
259
266
|
};
|
|
260
267
|
const bidRequests = spec.buildRequests([bidRequest], bidderRequest);
|
|
261
|
-
|
|
262
|
-
|
|
268
|
+
const data = JSON.parse(bidRequests.data);
|
|
269
|
+
expect(data.bids).to.have.lengthOf(1);
|
|
270
|
+
const request = data.bids[0];
|
|
263
271
|
|
|
264
272
|
expect(request.width).to.equal(1);
|
|
265
273
|
});
|
|
266
274
|
|
|
267
275
|
it('The referrer should be the last', function () {
|
|
268
276
|
const bidRequests = spec.buildRequests([bidRequest], bidderRequest);
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const keys = Object.keys(
|
|
277
|
+
const data = JSON.parse(bidRequests.data);
|
|
278
|
+
expect(data.bids).to.have.lengthOf(1);
|
|
279
|
+
const keys = Object.keys(data);
|
|
272
280
|
expect(keys[0]).to.equal('version');
|
|
273
281
|
expect(keys[keys.length - 1]).to.equal('ref');
|
|
274
282
|
});
|
|
@@ -277,9 +285,9 @@ describe('RelaidoAdapter', function () {
|
|
|
277
285
|
bidRequest.userId = {}
|
|
278
286
|
bidRequest.userId.imuid = 'i.tjHcK_7fTcqnbrS_YA2vaw';
|
|
279
287
|
const bidRequests = spec.buildRequests([bidRequest], bidderRequest);
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
expect(
|
|
288
|
+
const data = JSON.parse(bidRequests.data);
|
|
289
|
+
expect(data.bids).to.have.lengthOf(1);
|
|
290
|
+
expect(data.imuid).to.equal('i.tjHcK_7fTcqnbrS_YA2vaw');
|
|
283
291
|
});
|
|
284
292
|
});
|
|
285
293
|
|
|
@@ -288,29 +296,29 @@ describe('RelaidoAdapter', function () {
|
|
|
288
296
|
const bidResponses = spec.interpretResponse(serverResponse, serverRequest);
|
|
289
297
|
expect(bidResponses).to.have.lengthOf(1);
|
|
290
298
|
const response = bidResponses[0];
|
|
291
|
-
expect(response.requestId).to.equal(serverRequest.bidId);
|
|
292
|
-
expect(response.width).to.equal(serverRequest.width);
|
|
293
|
-
expect(response.height).to.equal(serverRequest.height);
|
|
294
|
-
expect(response.cpm).to.equal(serverResponse.body.price);
|
|
295
|
-
expect(response.currency).to.equal(serverResponse.body.currency);
|
|
296
|
-
expect(response.creativeId).to.equal(serverResponse.body.creativeId);
|
|
297
|
-
expect(response.vastXml).to.equal(serverResponse.body.vast);
|
|
298
|
-
expect(response.meta.advertiserDomains).to.equal(serverResponse.body.adomain);
|
|
299
|
+
expect(response.requestId).to.equal(serverRequest.data.bids[0].bidId);
|
|
300
|
+
expect(response.width).to.equal(serverRequest.data.bids[0].width);
|
|
301
|
+
expect(response.height).to.equal(serverRequest.data.bids[0].height);
|
|
302
|
+
expect(response.cpm).to.equal(serverResponse.body.ads[0].price);
|
|
303
|
+
expect(response.currency).to.equal(serverResponse.body.ads[0].currency);
|
|
304
|
+
expect(response.creativeId).to.equal(serverResponse.body.ads[0].creativeId);
|
|
305
|
+
expect(response.vastXml).to.equal(serverResponse.body.ads[0].vast);
|
|
306
|
+
expect(response.meta.advertiserDomains).to.equal(serverResponse.body.ads[0].adomain);
|
|
299
307
|
expect(response.meta.mediaType).to.equal(VIDEO);
|
|
300
308
|
expect(response.ad).to.be.undefined;
|
|
301
309
|
});
|
|
302
310
|
|
|
303
311
|
it('should build bid response by banner', function () {
|
|
304
|
-
|
|
312
|
+
serverResponse.body.ads[0].mediaType = 'banner';
|
|
305
313
|
const bidResponses = spec.interpretResponse(serverResponse, serverRequest);
|
|
306
314
|
expect(bidResponses).to.have.lengthOf(1);
|
|
307
315
|
const response = bidResponses[0];
|
|
308
|
-
expect(response.requestId).to.equal(serverRequest.bidId);
|
|
309
|
-
expect(response.width).to.equal(serverRequest.width);
|
|
310
|
-
expect(response.height).to.equal(serverRequest.height);
|
|
311
|
-
expect(response.cpm).to.equal(serverResponse.body.price);
|
|
312
|
-
expect(response.currency).to.equal(serverResponse.body.currency);
|
|
313
|
-
expect(response.creativeId).to.equal(serverResponse.body.creativeId);
|
|
316
|
+
expect(response.requestId).to.equal(serverRequest.data.bids[0].bidId);
|
|
317
|
+
expect(response.width).to.equal(serverRequest.data.bids[0].width);
|
|
318
|
+
expect(response.height).to.equal(serverRequest.data.bids[0].height);
|
|
319
|
+
expect(response.cpm).to.equal(serverResponse.body.ads[0].price);
|
|
320
|
+
expect(response.currency).to.equal(serverResponse.body.ads[0].currency);
|
|
321
|
+
expect(response.creativeId).to.equal(serverResponse.body.ads[0].creativeId);
|
|
314
322
|
expect(response.vastXml).to.be.undefined;
|
|
315
323
|
expect(response.ad).to.include(`<div id="rop-prebid">`);
|
|
316
324
|
expect(response.ad).to.include(`<script src="https://relaido/player.js"></script>`);
|
|
@@ -370,8 +378,8 @@ describe('RelaidoAdapter', function () {
|
|
|
370
378
|
it('Should create nurl pixel if bid nurl', function () {
|
|
371
379
|
let bid = {
|
|
372
380
|
bidder: bidRequest.bidder,
|
|
373
|
-
creativeId: serverResponse.body.creativeId,
|
|
374
|
-
cpm: serverResponse.body.price,
|
|
381
|
+
creativeId: serverResponse.body.ads[0].creativeId,
|
|
382
|
+
cpm: serverResponse.body.ads[0].price,
|
|
375
383
|
params: [bidRequest.params],
|
|
376
384
|
auctionId: bidRequest.auctionId,
|
|
377
385
|
requestId: bidRequest.bidId,
|
|
@@ -287,6 +287,23 @@ describe('smaatoBidAdapterTest', () => {
|
|
|
287
287
|
expect(req.regs.ext.us_privacy).to.equal('uspConsentString');
|
|
288
288
|
});
|
|
289
289
|
|
|
290
|
+
it('sends no schain if no schain exists', () => {
|
|
291
|
+
const reqs = spec.buildRequests([singleBannerBidRequest], defaultBidderRequest);
|
|
292
|
+
|
|
293
|
+
const req = extractPayloadOfFirstAndOnlyRequest(reqs);
|
|
294
|
+
expect(req.source.ext.schain).to.not.exist;
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('sends instl if instl exists', () => {
|
|
298
|
+
const instl = { instl: 1 };
|
|
299
|
+
const bidRequestWithInstl = Object.assign({}, singleBannerBidRequest, {ortb2Imp: instl});
|
|
300
|
+
|
|
301
|
+
const reqs = spec.buildRequests([bidRequestWithInstl], defaultBidderRequest);
|
|
302
|
+
|
|
303
|
+
const req = extractPayloadOfFirstAndOnlyRequest(reqs);
|
|
304
|
+
expect(req.imp[0].instl).to.equal(1);
|
|
305
|
+
});
|
|
306
|
+
|
|
290
307
|
it('sends tmax', () => {
|
|
291
308
|
const reqs = spec.buildRequests([singleBannerBidRequest], defaultBidderRequest);
|
|
292
309
|
|
|
@@ -435,6 +452,16 @@ describe('smaatoBidAdapterTest', () => {
|
|
|
435
452
|
expect(req.imp[0].bidfloor).to.be.equal(0.456);
|
|
436
453
|
});
|
|
437
454
|
|
|
455
|
+
it('sends instl if instl exists', () => {
|
|
456
|
+
const instl = { instl: 1 };
|
|
457
|
+
const bidRequestWithInstl = Object.assign({}, singleVideoBidRequest, {ortb2Imp: instl});
|
|
458
|
+
|
|
459
|
+
const reqs = spec.buildRequests([bidRequestWithInstl], defaultBidderRequest);
|
|
460
|
+
|
|
461
|
+
const req = extractPayloadOfFirstAndOnlyRequest(reqs);
|
|
462
|
+
expect(req.imp[0].instl).to.equal(1);
|
|
463
|
+
});
|
|
464
|
+
|
|
438
465
|
it('splits multi format bid requests', () => {
|
|
439
466
|
const combinedBannerAndVideoBidRequest = {
|
|
440
467
|
bidder: 'smaato',
|
|
@@ -516,6 +543,17 @@ describe('smaatoBidAdapterTest', () => {
|
|
|
516
543
|
expect(req.imp[1].video.sequence).to.be.equal(2);
|
|
517
544
|
});
|
|
518
545
|
|
|
546
|
+
it('sends instl if instl exists', () => {
|
|
547
|
+
const instl = { instl: 1 };
|
|
548
|
+
const bidRequestWithInstl = Object.assign({}, longFormVideoBidRequest, {ortb2Imp: instl});
|
|
549
|
+
|
|
550
|
+
const reqs = spec.buildRequests([bidRequestWithInstl], defaultBidderRequest);
|
|
551
|
+
|
|
552
|
+
const req = extractPayloadOfFirstAndOnlyRequest(reqs);
|
|
553
|
+
expect(req.imp[0].instl).to.equal(1);
|
|
554
|
+
expect(req.imp[1].instl).to.equal(1);
|
|
555
|
+
});
|
|
556
|
+
|
|
519
557
|
it('sends bidfloor when configured', () => {
|
|
520
558
|
const longFormVideoBidRequestWithFloor = Object.assign({}, longFormVideoBidRequest);
|
|
521
559
|
longFormVideoBidRequestWithFloor.getFloor = function(arg) {
|
|
@@ -854,6 +892,29 @@ describe('smaatoBidAdapterTest', () => {
|
|
|
854
892
|
expect(req.user.ext.eids).to.have.length(2);
|
|
855
893
|
});
|
|
856
894
|
});
|
|
895
|
+
|
|
896
|
+
describe('schain in request', () => {
|
|
897
|
+
it('schain is added to source.ext.schain', () => {
|
|
898
|
+
const schain = {
|
|
899
|
+
ver: '1.0',
|
|
900
|
+
complete: 1,
|
|
901
|
+
nodes: [
|
|
902
|
+
{
|
|
903
|
+
'asi': 'asi',
|
|
904
|
+
'sid': 'sid',
|
|
905
|
+
'rid': 'rid',
|
|
906
|
+
'hp': 1
|
|
907
|
+
}
|
|
908
|
+
]
|
|
909
|
+
};
|
|
910
|
+
const bidRequestWithSchain = Object.assign({}, singleBannerBidRequest, {schain: schain});
|
|
911
|
+
|
|
912
|
+
const reqs = spec.buildRequests([bidRequestWithSchain], defaultBidderRequest);
|
|
913
|
+
|
|
914
|
+
const req = extractPayloadOfFirstAndOnlyRequest(reqs);
|
|
915
|
+
expect(req.source.ext.schain).to.deep.equal(schain);
|
|
916
|
+
});
|
|
917
|
+
});
|
|
857
918
|
});
|
|
858
919
|
|
|
859
920
|
describe('interpretResponse', () => {
|
|
@@ -189,6 +189,14 @@ describe('The smartx adapter', function () {
|
|
|
189
189
|
domain: '',
|
|
190
190
|
publisher: {
|
|
191
191
|
id: '__name__'
|
|
192
|
+
},
|
|
193
|
+
content: {
|
|
194
|
+
ext: {
|
|
195
|
+
prebid: {
|
|
196
|
+
name: 'pbjs',
|
|
197
|
+
version: '$prebid.version$'
|
|
198
|
+
}
|
|
199
|
+
}
|
|
192
200
|
}
|
|
193
201
|
});
|
|
194
202
|
});
|
|
@@ -525,6 +533,7 @@ describe('The smartx adapter', function () {
|
|
|
525
533
|
bidderRequestObj.bidRequest.bids[0].params.outstream_options.title = 'abc';
|
|
526
534
|
bidderRequestObj.bidRequest.bids[0].params.outstream_options.skipOffset = 2;
|
|
527
535
|
bidderRequestObj.bidRequest.bids[0].params.outstream_options.desiredBitrate = 123;
|
|
536
|
+
bidderRequestObj.bidRequest.bids[0].params.outstream_options.visibilityThreshold = 30;
|
|
528
537
|
|
|
529
538
|
responses[0].renderer.render(responses[0]);
|
|
530
539
|
|
|
@@ -238,14 +238,17 @@ describe('SonobiBidAdapter', function () {
|
|
|
238
238
|
});
|
|
239
239
|
|
|
240
240
|
describe('.buildRequests', function () {
|
|
241
|
+
let sandbox;
|
|
241
242
|
beforeEach(function() {
|
|
242
243
|
sinon.stub(userSync, 'canBidderRegisterSync');
|
|
243
244
|
sinon.stub(utils, 'getGptSlotInfoForAdUnitCode')
|
|
244
|
-
.onFirstCall().returns({gptSlot: '/123123/gpt_publisher/adunit-code-3', divId: 'adunit-code-3-div-id'})
|
|
245
|
+
.onFirstCall().returns({gptSlot: '/123123/gpt_publisher/adunit-code-3', divId: 'adunit-code-3-div-id'});
|
|
246
|
+
sandbox = sinon.createSandbox();
|
|
245
247
|
});
|
|
246
248
|
afterEach(function() {
|
|
247
249
|
userSync.canBidderRegisterSync.restore();
|
|
248
250
|
utils.getGptSlotInfoForAdUnitCode.restore();
|
|
251
|
+
sandbox.restore();
|
|
249
252
|
});
|
|
250
253
|
let bidRequest = [{
|
|
251
254
|
'schain': {
|
|
@@ -333,6 +336,36 @@ describe('SonobiBidAdapter', function () {
|
|
|
333
336
|
uspConsent: 'someCCPAString'
|
|
334
337
|
};
|
|
335
338
|
|
|
339
|
+
it('should set fpd if there is any data in ortb2', function() {
|
|
340
|
+
const ortb2 = {
|
|
341
|
+
site: {
|
|
342
|
+
ext: {
|
|
343
|
+
data: {
|
|
344
|
+
pageType: 'article',
|
|
345
|
+
category: 'tools'
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
user: {
|
|
350
|
+
ext: {
|
|
351
|
+
data: {
|
|
352
|
+
registered: true,
|
|
353
|
+
interests: ['cars']
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
sandbox.stub(config, 'getConfig').callsFake(key => {
|
|
360
|
+
const config = {
|
|
361
|
+
ortb2: ortb2
|
|
362
|
+
};
|
|
363
|
+
return utils.deepAccess(config, key);
|
|
364
|
+
});
|
|
365
|
+
const bidRequests = spec.buildRequests(bidRequest, bidderRequests);
|
|
366
|
+
expect(bidRequests.data.fpd).to.equal(JSON.stringify(ortb2));
|
|
367
|
+
});
|
|
368
|
+
|
|
336
369
|
it('should populate coppa as 1 if set in config', function () {
|
|
337
370
|
config.setConfig({coppa: true});
|
|
338
371
|
const bidRequests = spec.buildRequests(bidRequest, bidderRequests);
|
|
@@ -112,6 +112,13 @@ describe('sortableBidAdapter', function() {
|
|
|
112
112
|
'key2': 'val2'
|
|
113
113
|
}
|
|
114
114
|
},
|
|
115
|
+
'ortb2Imp': {
|
|
116
|
+
'ext': {
|
|
117
|
+
'data': {
|
|
118
|
+
'pbadslot': 'abc/123'
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
115
122
|
'sizes': [
|
|
116
123
|
[300, 250]
|
|
117
124
|
],
|
|
@@ -176,6 +183,10 @@ describe('sortableBidAdapter', function() {
|
|
|
176
183
|
expect(requestBody.imp[0].floor).to.equal(0.21);
|
|
177
184
|
});
|
|
178
185
|
|
|
186
|
+
it('includes pbadslot in the bid request', function () {
|
|
187
|
+
expect(requestBody.imp[0].ext.gpid).to.equal('abc/123');
|
|
188
|
+
});
|
|
189
|
+
|
|
179
190
|
it('sets domain and href correctly', function () {
|
|
180
191
|
expect(requestBody.site.domain).to.equal('example.com');
|
|
181
192
|
expect(requestBody.site.page).to.equal('http://example.com/page?param=val');
|
|
@@ -518,6 +518,33 @@ describe('SSPBC adapter', function () {
|
|
|
518
518
|
expect(payload.user).to.be.an('object').and.to.have.property('[ortb_extensions.consent]', bidRequest.gdprConsent.consentString);
|
|
519
519
|
});
|
|
520
520
|
|
|
521
|
+
it('should send net info and pvid', function () {
|
|
522
|
+
expect(payload.user).to.be.an('object').and.to.have.property('data').that.is.an('array');
|
|
523
|
+
|
|
524
|
+
const userData = payload.user.data;
|
|
525
|
+
expect(userData.length).to.equal(2);
|
|
526
|
+
|
|
527
|
+
const netInfo = userData[0];
|
|
528
|
+
expect(netInfo.id).to.equal('12');
|
|
529
|
+
expect(netInfo.name).to.equal('NetInfo');
|
|
530
|
+
expect(netInfo).to.have.property('segment').that.is.an('array');
|
|
531
|
+
|
|
532
|
+
const pvid = userData[1];
|
|
533
|
+
expect(pvid.id).to.equal('7');
|
|
534
|
+
expect(pvid.name).to.equal('pvid');
|
|
535
|
+
expect(pvid).to.have.property('segment').that.is.an('array');
|
|
536
|
+
expect(pvid.segment[0]).to.have.property('value');
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
it('pvid should be constant on a single page view', function () {
|
|
540
|
+
const userData1 = payload.user.data;
|
|
541
|
+
const userData2 = payloadNative.user.data;
|
|
542
|
+
const pvid1 = userData1[1];
|
|
543
|
+
const pvid2 = userData2[1];
|
|
544
|
+
|
|
545
|
+
expect(pvid1.segment[0].value).to.equal(pvid2.segment[0].value);
|
|
546
|
+
});
|
|
547
|
+
|
|
521
548
|
it('should build correct native payload', function () {
|
|
522
549
|
const nativeAssets = payloadNative.imp && payloadNative.imp[0].native.request;
|
|
523
550
|
|
|
@@ -543,13 +570,16 @@ describe('SSPBC adapter', function () {
|
|
|
543
570
|
expect(videoAssets).to.have.property('api').that.is.an('array');
|
|
544
571
|
});
|
|
545
572
|
|
|
546
|
-
it('should create auxilary placement identifier (size_numUsed)', function () {
|
|
573
|
+
it('should create auxilary placement identifier (size_numUsed), that is constant for a given adUnit', function () {
|
|
547
574
|
const extAssets1 = payload.imp && payload.imp[0].ext.data;
|
|
548
575
|
const extAssets2 = payloadSingle.imp && payloadSingle.imp[0].ext.data;
|
|
549
576
|
|
|
550
|
-
|
|
577
|
+
/*
|
|
578
|
+
note that payload comes from first, and payloadSingle from second auction in the test run
|
|
579
|
+
also, since both have same adUnitName, value of pbsize property should be the same
|
|
580
|
+
*/
|
|
551
581
|
expect(extAssets1).to.have.property('pbsize').that.equals('750x200_1')
|
|
552
|
-
expect(extAssets2).to.have.property('pbsize').that.equals('
|
|
582
|
+
expect(extAssets2).to.have.property('pbsize').that.equals('750x200_1')
|
|
553
583
|
});
|
|
554
584
|
});
|
|
555
585
|
|
|
@@ -183,6 +183,10 @@ describe('Tappx bid adapter', function () {
|
|
|
183
183
|
badBidRequest_v.bids.mediaTypes.video.playerSize = [320, 250];
|
|
184
184
|
assert.isFalse(spec.isBidRequestValid(badBidRequest_v.bids));
|
|
185
185
|
});
|
|
186
|
+
|
|
187
|
+
it('should export the TCF vendor ID', function () {
|
|
188
|
+
expect(spec.gvlid).to.equal(628);
|
|
189
|
+
})
|
|
186
190
|
});
|
|
187
191
|
|
|
188
192
|
/**
|
|
@@ -582,6 +582,138 @@ describe('teadsBidAdapter', () => {
|
|
|
582
582
|
});
|
|
583
583
|
});
|
|
584
584
|
|
|
585
|
+
describe('Global Placement Id', function () {
|
|
586
|
+
let bidRequests = [
|
|
587
|
+
{
|
|
588
|
+
'bidder': 'teads',
|
|
589
|
+
'params': {
|
|
590
|
+
'placementId': 10433394,
|
|
591
|
+
'pageId': 1234
|
|
592
|
+
},
|
|
593
|
+
'adUnitCode': 'adunit-code-1',
|
|
594
|
+
'sizes': [[300, 250], [300, 600]],
|
|
595
|
+
'bidId': '30b31c1838de1e',
|
|
596
|
+
'bidderRequestId': '22edbae2733bf6',
|
|
597
|
+
'auctionId': '1d1a030790a475',
|
|
598
|
+
'creativeId': 'er2ee',
|
|
599
|
+
'deviceWidth': 1680
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
'bidder': 'teads',
|
|
603
|
+
'params': {
|
|
604
|
+
'placementId': 10433395,
|
|
605
|
+
'pageId': 1234
|
|
606
|
+
},
|
|
607
|
+
'adUnitCode': 'adunit-code-2',
|
|
608
|
+
'sizes': [[300, 250], [300, 600]],
|
|
609
|
+
'bidId': '30b31c1838de1f',
|
|
610
|
+
'bidderRequestId': '22edbae2733bf6',
|
|
611
|
+
'auctionId': '1d1a030790a475',
|
|
612
|
+
'creativeId': 'er2ef',
|
|
613
|
+
'deviceWidth': 1680
|
|
614
|
+
}
|
|
615
|
+
];
|
|
616
|
+
|
|
617
|
+
it('should add gpid if ortb2Imp.ext.data.pbadslot is present and is non empty (and ortb2Imp.ext.data.adserver.adslot is not present)', function () {
|
|
618
|
+
const updatedBidRequests = bidRequests.map(function(bidRequest, index) {
|
|
619
|
+
return {
|
|
620
|
+
...bidRequest,
|
|
621
|
+
ortb2Imp: {
|
|
622
|
+
ext: {
|
|
623
|
+
data: {
|
|
624
|
+
pbadslot: '1111/home-left-' + index
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
);
|
|
631
|
+
const request = spec.buildRequests(updatedBidRequests, bidderResquestDefault);
|
|
632
|
+
const payload = JSON.parse(request.data);
|
|
633
|
+
|
|
634
|
+
expect(payload.data[0].gpid).to.equal('1111/home-left-0');
|
|
635
|
+
expect(payload.data[1].gpid).to.equal('1111/home-left-1');
|
|
636
|
+
});
|
|
637
|
+
|
|
638
|
+
it('should add gpid if ortb2Imp.ext.data.pbadslot is present and is non empty (even if ortb2Imp.ext.data.adserver.adslot is present and is non empty too)', function () {
|
|
639
|
+
const updatedBidRequests = bidRequests.map(function(bidRequest, index) {
|
|
640
|
+
return {
|
|
641
|
+
...bidRequest,
|
|
642
|
+
ortb2Imp: {
|
|
643
|
+
ext: {
|
|
644
|
+
data: {
|
|
645
|
+
pbadslot: '1111/home-left-' + index,
|
|
646
|
+
adserver: {
|
|
647
|
+
adslot: '1111/home-left/div-' + index
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
);
|
|
655
|
+
const request = spec.buildRequests(updatedBidRequests, bidderResquestDefault);
|
|
656
|
+
const payload = JSON.parse(request.data);
|
|
657
|
+
|
|
658
|
+
expect(payload.data[0].gpid).to.equal('1111/home-left-0');
|
|
659
|
+
expect(payload.data[1].gpid).to.equal('1111/home-left-1');
|
|
660
|
+
});
|
|
661
|
+
|
|
662
|
+
it('should not add gpid if both ortb2Imp.ext.data.pbadslot and ortb2Imp.ext.data.adserver.adslot are present but empty', function () {
|
|
663
|
+
const updatedBidRequests = bidRequests.map(bidRequest => ({
|
|
664
|
+
...bidRequest,
|
|
665
|
+
ortb2Imp: {
|
|
666
|
+
ext: {
|
|
667
|
+
data: {
|
|
668
|
+
pbadslot: '',
|
|
669
|
+
adserver: {
|
|
670
|
+
adslot: ''
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
}));
|
|
676
|
+
|
|
677
|
+
const request = spec.buildRequests(updatedBidRequests, bidderResquestDefault);
|
|
678
|
+
const payload = JSON.parse(request.data);
|
|
679
|
+
|
|
680
|
+
return payload.data.forEach(bid => {
|
|
681
|
+
expect(bid).not.to.have.property('gpid');
|
|
682
|
+
});
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
it('should not add gpid if both ortb2Imp.ext.data.pbadslot and ortb2Imp.ext.data.adserver.adslot are not present', function () {
|
|
686
|
+
const request = spec.buildRequests(bidRequests, bidderResquestDefault);
|
|
687
|
+
const payload = JSON.parse(request.data);
|
|
688
|
+
|
|
689
|
+
return payload.data.forEach(bid => {
|
|
690
|
+
expect(bid).not.to.have.property('gpid');
|
|
691
|
+
});
|
|
692
|
+
});
|
|
693
|
+
|
|
694
|
+
it('should add gpid if ortb2Imp.ext.data.pbadslot is not present but ortb2Imp.ext.data.adserver.adslot is present and is non empty', function () {
|
|
695
|
+
const updatedBidRequests = bidRequests.map(function(bidRequest, index) {
|
|
696
|
+
return {
|
|
697
|
+
...bidRequest,
|
|
698
|
+
ortb2Imp: {
|
|
699
|
+
ext: {
|
|
700
|
+
data: {
|
|
701
|
+
adserver: {
|
|
702
|
+
adslot: '1111/home-left-' + index
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
};
|
|
708
|
+
});
|
|
709
|
+
const request = spec.buildRequests(updatedBidRequests, bidderResquestDefault);
|
|
710
|
+
const payload = JSON.parse(request.data);
|
|
711
|
+
|
|
712
|
+
expect(payload.data[0].gpid).to.equal('1111/home-left-0');
|
|
713
|
+
expect(payload.data[1].gpid).to.equal('1111/home-left-1');
|
|
714
|
+
});
|
|
715
|
+
});
|
|
716
|
+
|
|
585
717
|
function checkMediaTypesSizes(mediaTypes, expectedSizes) {
|
|
586
718
|
const bidRequestWithBannerSizes = Object.assign(bidRequests[0], mediaTypes);
|
|
587
719
|
const requestWithBannerSizes = spec.buildRequests([bidRequestWithBannerSizes], bidderResquestDefault);
|