prebid.js 7.18.0 → 7.19.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.
Files changed (197) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/adagioBidAdapter.js +1 -1
  3. package/dist/adbookpspBidAdapter.js +1 -1
  4. package/dist/adfBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/adqueryIdSystem.js +1 -1
  7. package/dist/adrelevantisBidAdapter.js +1 -1
  8. package/dist/adtrgtmeBidAdapter.js +1 -1
  9. package/dist/adxcgBidAdapter.js +1 -1
  10. package/dist/ajaBidAdapter.js +1 -1
  11. package/dist/amxBidAdapter.js +1 -1
  12. package/dist/amxIdSystem.js +1 -1
  13. package/dist/appierAnalyticsAdapter.js +1 -1
  14. package/dist/appnexusBidAdapter.js +1 -1
  15. package/dist/asoBidAdapter.js +1 -1
  16. package/dist/axonixBidAdapter.js +1 -1
  17. package/dist/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +1 -1
  18. package/dist/bidglassBidAdapter.js +1 -1
  19. package/dist/big-richmediaBidAdapter.js +1 -1
  20. package/dist/bridgewellBidAdapter.js +1 -1
  21. package/dist/brightMountainMediaBidAdapter.js +1 -1
  22. package/dist/carodaBidAdapter.js +1 -1
  23. package/dist/cleanioRtdProvider.js +1 -1
  24. package/dist/colossussspBidAdapter.js +1 -1
  25. package/dist/concertBidAdapter.js +1 -1
  26. package/dist/connectadBidAdapter.js +1 -1
  27. package/dist/consumableBidAdapter.js +1 -1
  28. package/dist/conversantAnalyticsAdapter.js +1 -0
  29. package/dist/conversantBidAdapter.js +1 -1
  30. package/dist/craftBidAdapter.js +1 -1
  31. package/dist/criteoBidAdapter.js +1 -1
  32. package/dist/debugging-standalone.js +1 -1
  33. package/dist/debugging.js +1 -1
  34. package/dist/dependencies.json +6 -0
  35. package/dist/dgkeywordRtdProvider.js +1 -1
  36. package/dist/dianomiBidAdapter.js +1 -1
  37. package/dist/dspxBidAdapter.js +1 -1
  38. package/dist/enrichmentFpdModule.js +1 -1
  39. package/dist/eplanningBidAdapter.js +1 -1
  40. package/dist/finativeBidAdapter.js +1 -1
  41. package/dist/fpd.js +1 -0
  42. package/dist/glimpseBidAdapter.js +1 -1
  43. package/dist/gmosspBidAdapter.js +1 -1
  44. package/dist/goldbachBidAdapter.js +1 -1
  45. package/dist/gridBidAdapter.js +1 -1
  46. package/dist/gridNMBidAdapter.js +1 -1
  47. package/dist/gumgumBidAdapter.js +1 -1
  48. package/dist/h12mediaBidAdapter.js +1 -1
  49. package/dist/id5IdSystem.js +1 -1
  50. package/dist/improvedigitalBidAdapter.js +1 -1
  51. package/dist/inmarBidAdapter.js +1 -1
  52. package/dist/insticatorBidAdapter.js +1 -1
  53. package/dist/ixBidAdapter.js +1 -1
  54. package/dist/justpremiumBidAdapter.js +1 -1
  55. package/dist/konduitAnalyticsAdapter.js +1 -1
  56. package/dist/kueezBidAdapter.js +1 -1
  57. package/dist/lassoBidAdapter.js +1 -1
  58. package/dist/lifestreetBidAdapter.js +1 -1
  59. package/dist/liveIntentIdSystem.js +1 -1
  60. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  61. package/dist/logicadBidAdapter.js +1 -1
  62. package/dist/loglyliftBidAdapter.js +1 -1
  63. package/dist/malltvAnalyticsAdapter.js +1 -1
  64. package/dist/marsmediaBidAdapter.js +1 -1
  65. package/dist/mediafuseBidAdapter.js +1 -1
  66. package/dist/mediakeysBidAdapter.js +1 -1
  67. package/dist/mediasquareBidAdapter.js +1 -1
  68. package/dist/mgidBidAdapter.js +1 -1
  69. package/dist/minutemediaBidAdapter.js +1 -1
  70. package/dist/nativoBidAdapter.js +1 -1
  71. package/dist/not-for-prod/prebid.js +123 -121
  72. package/dist/oguryBidAdapter.js +1 -1
  73. package/dist/onetagBidAdapter.js +1 -1
  74. package/dist/ooloAnalyticsAdapter.js +1 -1
  75. package/dist/outbrainBidAdapter.js +1 -1
  76. package/dist/parrableIdSystem.js +1 -1
  77. package/dist/pixfutureBidAdapter.js +1 -1
  78. package/dist/prebid-core.js +1 -1
  79. package/dist/prebidServerBidAdapter.js +1 -1
  80. package/dist/publinkIdSystem.js +1 -1
  81. package/dist/pubmaticBidAdapter.js +1 -1
  82. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  83. package/dist/pxyzBidAdapter.js +1 -1
  84. package/dist/quantcastBidAdapter.js +1 -1
  85. package/dist/readpeakBidAdapter.js +1 -1
  86. package/dist/relaidoBidAdapter.js +1 -1
  87. package/dist/rhythmoneBidAdapter.js +1 -1
  88. package/dist/riseBidAdapter.js +1 -1
  89. package/dist/rubiconAnalyticsAdapter.js +1 -1
  90. package/dist/rubiconBidAdapter.js +1 -1
  91. package/dist/seedingAllianceBidAdapter.js +1 -1
  92. package/dist/seedtagBidAdapter.js +1 -1
  93. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  94. package/dist/sharethroughBidAdapter.js +1 -1
  95. package/dist/shinezBidAdapter.js +1 -1
  96. package/dist/smaatoBidAdapter.js +1 -1
  97. package/dist/smartadserverBidAdapter.js +1 -1
  98. package/dist/smartxBidAdapter.js +1 -1
  99. package/dist/smilewantedBidAdapter.js +1 -1
  100. package/dist/sonobiBidAdapter.js +1 -1
  101. package/dist/sovrnAnalyticsAdapter.js +1 -1
  102. package/dist/sovrnBidAdapter.js +1 -1
  103. package/dist/sspBCBidAdapter.js +1 -1
  104. package/dist/sublimeBidAdapter.js +1 -1
  105. package/dist/synacormediaBidAdapter.js +1 -1
  106. package/dist/taboolaBidAdapter.js +1 -1
  107. package/dist/targetVideoBidAdapter.js +1 -1
  108. package/dist/teadsBidAdapter.js +1 -1
  109. package/dist/trionBidAdapter.js +1 -1
  110. package/dist/tripleliftBidAdapter.js +1 -1
  111. package/dist/ttdBidAdapter.js +1 -1
  112. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  113. package/dist/underdogmediaBidAdapter.js +1 -1
  114. package/dist/undertoneBidAdapter.js +1 -1
  115. package/dist/vidazooBidAdapter.js +1 -1
  116. package/dist/videobyteBidAdapter.js +1 -1
  117. package/dist/visxBidAdapter.js +1 -1
  118. package/dist/vuukleBidAdapter.js +1 -1
  119. package/dist/widespaceBidAdapter.js +1 -1
  120. package/dist/winrBidAdapter.js +1 -1
  121. package/dist/yahoosspBidAdapter.js +1 -1
  122. package/dist/yandexBidAdapter.js +1 -1
  123. package/dist/yieldmoBidAdapter.js +1 -1
  124. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  125. package/libraries/fpd/sua.js +98 -0
  126. package/modules/adfBidAdapter.js +1 -1
  127. package/modules/adkernelAdnBidAdapter.js +1 -0
  128. package/modules/adqueryIdSystem.js +8 -8
  129. package/modules/adxcgBidAdapter.js +1 -1
  130. package/modules/amxBidAdapter.js +1 -1
  131. package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
  132. package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
  133. package/modules/cleanioRtdProvider.js +3 -4
  134. package/modules/colossussspBidAdapter.js +2 -1
  135. package/modules/conversantAnalyticsAdapter.js +560 -0
  136. package/modules/conversantAnalyticsAdapter.md +47 -0
  137. package/modules/criteoBidAdapter.js +1 -1
  138. package/modules/debugging/bidInterceptor.js +2 -2
  139. package/modules/debugging/debugging.js +10 -2
  140. package/modules/dgkeywordRtdProvider.js +21 -3
  141. package/modules/dianomiBidAdapter.js +1 -1
  142. package/modules/enrichmentFpdModule.js +33 -14
  143. package/modules/finativeBidAdapter.js +1 -1
  144. package/modules/gridBidAdapter.js +187 -117
  145. package/modules/improvedigitalBidAdapter.js +2 -2
  146. package/modules/ixBidAdapter.js +94 -23
  147. package/modules/liveIntentIdSystem.js +39 -5
  148. package/modules/mediakeysBidAdapter.js +6 -1
  149. package/modules/mediakeysBidAdapter.md +50 -40
  150. package/modules/nativoBidAdapter.js +1 -1
  151. package/modules/prebidServerBidAdapter/index.js +44 -13
  152. package/modules/readpeakBidAdapter.js +1 -1
  153. package/modules/rubiconBidAdapter.js +2 -3
  154. package/modules/seedingAllianceBidAdapter.js +1 -1
  155. package/modules/sharethroughBidAdapter.js +1 -1
  156. package/modules/taboolaBidAdapter.js +1 -1
  157. package/modules/talkadsBidAdapter.js +1 -0
  158. package/modules/truereachBidAdapter.js +1 -0
  159. package/modules/ttdBidAdapter.js +1 -1
  160. package/modules/vuukleBidAdapter.js +34 -3
  161. package/modules/yahoosspBidAdapter.js +3 -1
  162. package/modules/yandexBidAdapter.js +31 -8
  163. package/package.json +2 -2
  164. package/src/adapterManager.js +2 -4
  165. package/src/cpmBucketManager.js +22 -3
  166. package/src/native.js +1 -5
  167. package/src/prebid.js +3 -3
  168. package/test/spec/cpmBucketManager_spec.js +239 -177
  169. package/test/spec/fpd/sua_spec.js +244 -0
  170. package/test/spec/modules/adfBidAdapter_spec.js +2 -3
  171. package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
  172. package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
  173. package/test/spec/modules/amxBidAdapter_spec.js +3 -2
  174. package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
  175. package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
  176. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
  177. package/test/spec/modules/debugging_mod_spec.js +9 -0
  178. package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
  179. package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
  180. package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
  181. package/test/spec/modules/fpdModule_spec.js +9 -0
  182. package/test/spec/modules/gridBidAdapter_spec.js +87 -31
  183. package/test/spec/modules/ixBidAdapter_spec.js +221 -2
  184. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
  185. package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
  186. package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
  187. package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
  188. package/test/spec/modules/prebidServerBidAdapter_spec.js +159 -4
  189. package/test/spec/modules/seedtagBidAdapter_spec.js +15 -18
  190. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  191. package/test/spec/modules/taboolaBidAdapter_spec.js +2 -2
  192. package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
  193. package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
  194. package/test/spec/modules/yahoosspBidAdapter_spec.js +3 -1
  195. package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
  196. package/test/spec/native_spec.js +5 -0
  197. package/test/spec/unit/pbjs_api_spec.js +44 -0
@@ -607,15 +607,14 @@ describe('S2S Adapter', function () {
607
607
  resetSyncedStatus();
608
608
  });
609
609
 
610
- it('should set id to auction ID and source.tid to tid', function () {
610
+ it('should set id and source.tid to auction ID', function () {
611
611
  config.setConfig({ s2sConfig: CONFIG });
612
612
 
613
613
  adapter.callBids(OUTSTREAM_VIDEO_REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
614
614
 
615
615
  const requestBid = JSON.parse(server.requests[0].requestBody);
616
- expect(requestBid.id).to.equal('173afb6d132ba3');
617
- expect(requestBid.source).to.be.an('object');
618
- expect(requestBid.source.tid).to.equal('437fbbf5-33f5-487a-8e16-a7112903cfe5');
616
+ expect(requestBid.id).to.equal(BID_REQUESTS[0].auctionId);
617
+ expect(requestBid.source.tid).to.equal(BID_REQUESTS[0].auctionId);
619
618
  });
620
619
 
621
620
  it('should block request if config did not define p1Consent URL in endpoint object config', function () {
@@ -3481,5 +3480,161 @@ describe('S2S Adapter', function () {
3481
3480
  const parsedRequestBody = JSON.parse(server.requests[1].requestBody);
3482
3481
  expect(parsedRequestBody.cur).to.deep.equal(['JPY']);
3483
3482
  });
3483
+
3484
+ it('should correctly set the floorMin key when multiple bids with various bidfloors exist', function () {
3485
+ const s2sConfig = Object.assign({}, CONFIG, {
3486
+ extPrebid: {
3487
+ floors: {
3488
+ enabled: true
3489
+ }
3490
+ },
3491
+ bidders: ['b1', 'b2']
3492
+ });
3493
+
3494
+ const bidderRequests = [
3495
+ {
3496
+ ...BID_REQUESTS[0],
3497
+ bidderCode: 'b1',
3498
+ bids: [{
3499
+ bidder: 'b1',
3500
+ bidId: 1,
3501
+ getFloor: () => ({
3502
+ currency: 'US',
3503
+ floor: 1.23
3504
+ })
3505
+ }]
3506
+ },
3507
+ {
3508
+ ...BID_REQUESTS[0],
3509
+ bidderCode: 'b2',
3510
+ bids: [{
3511
+ bidder: 'b2',
3512
+ bidId: 2,
3513
+ getFloor: () => ({
3514
+ currency: 'EUR',
3515
+ floor: 3.21
3516
+ })
3517
+ }],
3518
+ }
3519
+ ];
3520
+
3521
+ const adUnits = [
3522
+ {
3523
+ code: 'au1',
3524
+ transactionId: 't1',
3525
+ mediaTypes: {
3526
+ banner: {sizes: [1, 1]}
3527
+ },
3528
+ bids: [{bidder: 'b1', bid_id: 1}]
3529
+ },
3530
+ {
3531
+ code: 'au2',
3532
+ transactionId: 't2',
3533
+ bids: [{bidder: 'b2', bid_id: 2}],
3534
+ mediaTypes: {
3535
+ banner: {sizes: [1, 1]}
3536
+ }
3537
+ }
3538
+ ];
3539
+
3540
+ const _config = {
3541
+ s2sConfig: s2sConfig,
3542
+ };
3543
+
3544
+ const s2sBidRequest = utils.deepClone(REQUEST);
3545
+ s2sBidRequest.s2sConfig = s2sConfig;
3546
+ s2sBidRequest.ad_units = adUnits;
3547
+ config.setConfig(_config);
3548
+
3549
+ adapter.callBids(s2sBidRequest, bidderRequests, addBidResponse, done, ajax);
3550
+ const requestBid = JSON.parse(server.requests[0].requestBody);
3551
+ expect(requestBid.imp[0].bidfloor).to.equal(1.23);
3552
+ expect(requestBid.imp[1].bidfloor).to.equal(3.21);
3553
+
3554
+ // first imp floorCur should be set
3555
+ expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: true, floorMin: 1.23, floorMinCur: 'US' });
3556
+ });
3557
+
3558
+ it('should correctly set the floorMin key when multiple bids with various bidfloors exist and ortb2Imp contains the lowest floorMin', function () {
3559
+ const s2sConfig = Object.assign({}, CONFIG, {
3560
+ extPrebid: {
3561
+ floors: {
3562
+ enabled: true
3563
+ }
3564
+ },
3565
+ bidders: ['b1', 'b2']
3566
+ });
3567
+
3568
+ const bidderRequests = [
3569
+ {
3570
+ ...BID_REQUESTS[0],
3571
+ bidderCode: 'b1',
3572
+ bids: [{
3573
+ bidder: 'b1',
3574
+ bidId: 1,
3575
+ getFloor: () => ({
3576
+ currency: 'CUR',
3577
+ floor: 1.23
3578
+ })
3579
+ }]
3580
+ },
3581
+ {
3582
+ ...BID_REQUESTS[0],
3583
+ bidderCode: 'b2',
3584
+ bids: [{
3585
+ bidder: 'b2',
3586
+ bidId: 2,
3587
+ getFloor: () => ({
3588
+ currency: 'CUR',
3589
+ floor: 3.21
3590
+ })
3591
+ }],
3592
+ }
3593
+ ];
3594
+
3595
+ const adUnits = [
3596
+ {
3597
+ code: 'au1',
3598
+ transactionId: 't1',
3599
+ mediaTypes: {
3600
+ banner: {sizes: [1, 1]}
3601
+ },
3602
+ bids: [{bidder: 'b1', bid_id: 1}]
3603
+ },
3604
+ {
3605
+ code: 'au2',
3606
+ transactionId: 't2',
3607
+ bids: [{bidder: 'b2', bid_id: 2}],
3608
+ mediaTypes: {
3609
+ banner: {sizes: [1, 1]}
3610
+ },
3611
+ ortb2Imp: {
3612
+ ext: {
3613
+ prebid: {
3614
+ floors: {
3615
+ floorMin: 1
3616
+ }
3617
+ }
3618
+ }
3619
+ }
3620
+ }
3621
+ ];
3622
+
3623
+ const _config = {
3624
+ s2sConfig: s2sConfig,
3625
+ };
3626
+
3627
+ const s2sBidRequest = utils.deepClone(REQUEST);
3628
+ s2sBidRequest.s2sConfig = s2sConfig;
3629
+ s2sBidRequest.ad_units = adUnits;
3630
+ config.setConfig(_config);
3631
+
3632
+ adapter.callBids(s2sBidRequest, bidderRequests, addBidResponse, done, ajax);
3633
+ const requestBid = JSON.parse(server.requests[0].requestBody);
3634
+ expect(requestBid.imp[0].bidfloor).to.equal(1.23);
3635
+ expect(requestBid.imp[1].bidfloor).to.equal(3.21);
3636
+
3637
+ expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: true, floorMin: 1, floorMinCur: 'CUR' });
3638
+ });
3484
3639
  });
3485
3640
  });
@@ -361,28 +361,25 @@ describe('Seedtag Adapter', function () {
361
361
  it('should add schain to payload when exposed on validBidRequest', function () {
362
362
  // https://github.com/prebid/Prebid.js/blob/master/modules/schain.md#sample-code-for-passing-the-schain-object
363
363
  const schain = {
364
- validation: 'strict',
365
- config: {
366
- ver: '1.0',
367
- complete: 1,
368
- nodes: [
369
- {
370
- asi: 'indirectseller.com',
371
- sid: '00001',
372
- hp: 1,
373
- },
364
+ ver: '1.0',
365
+ complete: 1,
366
+ nodes: [
367
+ {
368
+ asi: 'indirectseller.com',
369
+ sid: '00001',
370
+ hp: 1,
371
+ },
374
372
 
375
- {
376
- asi: 'indirectseller-2.com',
377
- sid: '00002',
378
- hp: 1,
379
- },
380
- ],
381
- },
373
+ {
374
+ asi: 'indirectseller-2.com',
375
+ sid: '00002',
376
+ hp: 1,
377
+ },
378
+ ],
382
379
  };
383
380
 
384
381
  // duplicate
385
- const bidRequests = JSON.parse(JSON.stringify(validBidRequests))
382
+ const bidRequests = JSON.parse(JSON.stringify(validBidRequests));
386
383
  bidRequests[0].schain = schain;
387
384
 
388
385
  const request = spec.buildRequests(bidRequests, bidderRequest);
@@ -172,6 +172,7 @@ describe('sharethrough adapter spec', function () {
172
172
  refererInfo: {
173
173
  ref: 'https://referer.com',
174
174
  },
175
+ auctionId: 'auction-id'
175
176
  };
176
177
  });
177
178
 
@@ -233,7 +234,7 @@ describe('sharethrough adapter spec', function () {
233
234
  expect(openRtbReq.device.ua).to.equal(navigator.userAgent);
234
235
  expect(openRtbReq.regs.coppa).to.equal(1);
235
236
 
236
- expect(openRtbReq.source.tid).to.equal(bidRequests[0].transactionId);
237
+ expect(openRtbReq.source.tid).to.equal(bidderRequest.auctionId);
237
238
  expect(openRtbReq.source.ext.version).not.to.be.undefined;
238
239
  expect(openRtbReq.source.ext.str).not.to.be.undefined;
239
240
  expect(openRtbReq.source.ext.schain).to.deep.equal(bidRequests[0].schain);
@@ -449,7 +449,7 @@ describe('Taboola Adapter', function () {
449
449
  cpm: bid.price,
450
450
  creativeId: bid.crid,
451
451
  ttl: 60,
452
- netRevenue: false,
452
+ netRevenue: true,
453
453
  currency: serverResponse.body.cur,
454
454
  mediaType: 'banner',
455
455
  ad: bid.adm,
@@ -475,7 +475,7 @@ describe('Taboola Adapter', function () {
475
475
  cpm: bid.price,
476
476
  creativeId: bid.crid,
477
477
  ttl: 125,
478
- netRevenue: false,
478
+ netRevenue: true,
479
479
  currency: serverResponse.body.cur,
480
480
  mediaType: 'banner',
481
481
  ad: bid.adm,
@@ -272,10 +272,10 @@ describe('ttdBidAdapter', function () {
272
272
  expect(requestBody.imp[0].ext.gpid).to.equal(gpid);
273
273
  });
274
274
 
275
- it('sends transaction id in source.tid', function () {
275
+ it('sends auction id in source.tid', function () {
276
276
  const requestBody = testBuildRequests(baseBannerBidRequests, baseBidderRequest).data;
277
277
  expect(requestBody.source).to.be.not.null;
278
- expect(requestBody.source.tid).to.equal('1111474f-58b1-4368-b812-84f8c937a099');
278
+ expect(requestBody.source.tid).to.equal(baseBidderRequest.auctionId);
279
279
  });
280
280
 
281
281
  it('includes the ad size in the bid request', function () {
@@ -557,7 +557,7 @@ describe('ttdBidAdapter', function () {
557
557
  const requestBody = testBuildRequests(baseBannerMultipleBidRequests, baseBidderRequest).data;
558
558
  expect(requestBody.imp.length).to.equal(2);
559
559
  expect(requestBody.source).to.be.not.null;
560
- expect(requestBody.source.tid).to.equal('1111474f-58b1-4368-b812-84f8c937a099');
560
+ expect(requestBody.source.tid).to.equal(baseBidderRequest.auctionId);
561
561
  expect(requestBody.imp[0].ext).to.be.not.null;
562
562
  expect(requestBody.imp[0].ext.tid).to.equal('8651474f-58b1-4368-b812-84f8c937a099');
563
563
  expect(requestBody.imp[1].ext).to.be.not.null;
@@ -1,5 +1,6 @@
1
1
  import { expect } from 'chai';
2
2
  import { spec } from 'modules/vuukleBidAdapter.js';
3
+ import { config } from '../../../src/config.js';
3
4
 
4
5
  describe('vuukleBidAdapterTests', function() {
5
6
  let bidRequestData = {
@@ -34,6 +35,13 @@ describe('vuukleBidAdapterTests', function() {
34
35
  expect(req_data.bidId).to.equal('testbid');
35
36
  });
36
37
 
38
+ it('validate_generated_params_tmax', function() {
39
+ request = spec.buildRequests(bidRequestData.bids, {timeout: 1234});
40
+ let req_data = request[0].data;
41
+
42
+ expect(req_data.tmax).to.equal(1234);
43
+ });
44
+
37
45
  it('validate_response_params', function() {
38
46
  let serverResponse = {
39
47
  body: {
@@ -58,4 +66,83 @@ describe('vuukleBidAdapterTests', function() {
58
66
  expect(bid.creativeId).to.equal('12345');
59
67
  expect(bid.meta.advertiserDomains).to.deep.equal(['example.com']);
60
68
  });
69
+
70
+ describe('consent handling', function() {
71
+ const bidderRequest = {
72
+ gdprConsent: {
73
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
74
+ gdprApplies: 1,
75
+ vendorData: {
76
+ vendor: {
77
+ consents: {
78
+ 1004: 1
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ it('must handle consent 1/1', function() {
86
+ request = spec.buildRequests(bidRequestData.bids, bidderRequest);
87
+ let req_data = request[0].data;
88
+
89
+ expect(req_data.gdpr).to.equal(1);
90
+ expect(req_data.consentGiven).to.equal(1);
91
+ expect(req_data.consent).to.equal('COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw');
92
+ })
93
+
94
+ it('must handle consent 0/1', function() {
95
+ bidderRequest.gdprConsent.gdprApplies = 0;
96
+ request = spec.buildRequests(bidRequestData.bids, bidderRequest);
97
+ let req_data = request[0].data;
98
+
99
+ expect(req_data.gdpr).to.equal(0);
100
+ expect(req_data.consentGiven).to.equal(1);
101
+ })
102
+
103
+ it('must handle consent 0/0', function() {
104
+ bidderRequest.gdprConsent.gdprApplies = 0;
105
+ bidderRequest.gdprConsent.vendorData = undefined;
106
+ request = spec.buildRequests(bidRequestData.bids, bidderRequest);
107
+ let req_data = request[0].data;
108
+
109
+ expect(req_data.gdpr).to.equal(0);
110
+ expect(req_data.consentGiven).to.equal(0);
111
+ })
112
+
113
+ it('must handle consent undef', function() {
114
+ request = spec.buildRequests(bidRequestData.bids, {});
115
+ let req_data = request[0].data;
116
+
117
+ expect(req_data.gdpr).to.equal(0);
118
+ expect(req_data.consentGiven).to.equal(0);
119
+ })
120
+ })
121
+
122
+ it('must handle usp consent', function() {
123
+ request = spec.buildRequests(bidRequestData.bids, {uspConsent: '1YNN'});
124
+ let req_data = request[0].data;
125
+
126
+ expect(req_data.uspConsent).to.equal('1YNN');
127
+ })
128
+
129
+ it('must handle undefined usp consent', function() {
130
+ request = spec.buildRequests(bidRequestData.bids, {});
131
+ let req_data = request[0].data;
132
+
133
+ expect(req_data.uspConsent).to.equal(undefined);
134
+ })
135
+
136
+ it('must handle coppa flag', function() {
137
+ sinon.stub(config, 'getConfig')
138
+ .withArgs('coppa')
139
+ .returns(true);
140
+
141
+ request = spec.buildRequests(bidRequestData.bids);
142
+ let req_data = request[0].data;
143
+
144
+ expect(req_data.coppa).to.equal(1);
145
+
146
+ config.getConfig.restore();
147
+ })
61
148
  });
@@ -847,7 +847,9 @@ describe('YahooSSP Bid Adapter:', () => {
847
847
  expect(data.device).to.deep.equal({
848
848
  dnt: 0,
849
849
  ua: navigator.userAgent,
850
- ip: undefined
850
+ ip: undefined,
851
+ w: window.screen.width,
852
+ h: window.screen.height
851
853
  });
852
854
 
853
855
  expect(data.regs).to.deep.equal({
@@ -64,7 +64,9 @@ describe('Yandex adapter', function () {
64
64
 
65
65
  const bidderRequest = {
66
66
  refererInfo: {
67
- domain: 'yandex.ru'
67
+ domain: 'ya.ru',
68
+ ref: 'https://ya.ru/',
69
+ page: 'https://ya.ru/',
68
70
  },
69
71
  gdprConsent
70
72
  };
@@ -72,7 +74,7 @@ describe('Yandex adapter', function () {
72
74
  it('creates a valid banner request', function () {
73
75
  const bannerRequest = getBidRequest();
74
76
  bannerRequest.getFloor = () => ({
75
- currency: 'USD',
77
+ currency: 'EUR',
76
78
  // floor: 0.5
77
79
  });
78
80
 
@@ -89,11 +91,11 @@ describe('Yandex adapter', function () {
89
91
  const parsedRequestUrl = parseUrl(url);
90
92
  const { search: query } = parsedRequestUrl
91
93
 
92
- expect(parsedRequestUrl.hostname).to.equal('bs-metadsp.yandex.ru');
94
+ expect(parsedRequestUrl.hostname).to.equal('bs.yandex.ru');
93
95
  expect(parsedRequestUrl.pathname).to.equal('/metadsp/123');
94
96
 
95
97
  expect(query['imp-id']).to.equal('1');
96
- expect(query['target-ref']).to.equal('yandex.ru');
98
+ expect(query['target-ref']).to.equal('ya.ru');
97
99
  expect(query['ssp-id']).to.equal('10500');
98
100
 
99
101
  expect(query['gdpr']).to.equal('1');
@@ -101,7 +103,8 @@ describe('Yandex adapter', function () {
101
103
 
102
104
  expect(request.data).to.exist;
103
105
  expect(data.site).to.not.equal(null);
104
- expect(data.site.page).to.equal('yandex.ru');
106
+ expect(data.site.page_url).to.equal('https://ya.ru/');
107
+ expect(data.site.ref_url).to.equal('https://ya.ru/');
105
108
 
106
109
  // expect(data.device).to.not.equal(null);
107
110
  // expect(data.device.w).to.equal(window.innerWidth);
@@ -190,6 +190,11 @@ describe('native.js', function () {
190
190
  expect(targeting.hb_native_foo).to.equal(bid.native.foo);
191
191
  });
192
192
 
193
+ it('can get targeting from null native keys', () => {
194
+ const targeting = getNativeTargeting({...bid, native: {...bid.native, displayUrl: null}});
195
+ expect(targeting.hb_native_displayurl).to.not.be.ok;
196
+ })
197
+
193
198
  it('sends placeholders for configured assets', function () {
194
199
  const adUnit = {
195
200
  transactionId: 'au',
@@ -1841,6 +1841,50 @@ describe('Unit: Prebid Module', function () {
1841
1841
  .and.to.match(/[a-f0-9\-]{36}/i);
1842
1842
  });
1843
1843
 
1844
+ describe('transactionId', () => {
1845
+ let adUnit;
1846
+ beforeEach(() => {
1847
+ adUnit = {
1848
+ code: 'adUnit',
1849
+ mediaTypes: {
1850
+ banner: {
1851
+ sizes: [300, 250]
1852
+ }
1853
+ },
1854
+ bids: [
1855
+ {
1856
+ bidder: 'mock-bidder',
1857
+ }
1858
+ ]
1859
+ };
1860
+ });
1861
+ it('should be set to ortb2Imp.ext.tid, if specified', () => {
1862
+ $$PREBID_GLOBAL$$.requestBids({
1863
+ adUnits: [
1864
+ {...adUnit, ortb2Imp: {ext: {tid: 'custom-tid'}}}
1865
+ ]
1866
+ });
1867
+ sinon.assert.match(auctionArgs.adUnits[0], {
1868
+ transactionId: 'custom-tid',
1869
+ ortb2Imp: {
1870
+ ext: {
1871
+ tid: 'custom-tid'
1872
+ }
1873
+ }
1874
+ })
1875
+ });
1876
+ it('should be copied to ortb2Imp.ext.tid, if not specified', () => {
1877
+ $$PREBID_GLOBAL$$.requestBids({
1878
+ adUnits: [
1879
+ adUnit
1880
+ ]
1881
+ });
1882
+ const tid = auctionArgs.adUnits[0].transactionId;
1883
+ expect(tid).to.exist;
1884
+ expect(auctionArgs.adUnits[0].ortb2Imp.ext.tid).to.eql(tid);
1885
+ });
1886
+ });
1887
+
1844
1888
  it('should always set ortb2.ext.tid same as transactionId in adUnits', function () {
1845
1889
  $$PREBID_GLOBAL$$.requestBids({
1846
1890
  adUnits: [