prebid.js 6.6.0 → 6.10.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 (271) hide show
  1. package/.eslintrc.js +8 -1
  2. package/allowedModules.js +4 -7
  3. package/integrationExamples/gpt/amp/creative.html +11 -33
  4. package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
  5. package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
  6. package/integrationExamples/gpt/userId_example.html +2 -2
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
  8. package/integrationExamples/gpt/x-domain/creative.html +63 -29
  9. package/modules/.submodules.json +3 -0
  10. package/modules/adagioBidAdapter.js +1 -9
  11. package/modules/adagioBidAdapter.md +1 -1
  12. package/modules/adbookpspBidAdapter.js +29 -12
  13. package/modules/adhashBidAdapter.js +4 -4
  14. package/modules/adkernelBidAdapter.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +1 -1
  16. package/modules/adlooxRtdProvider.js +1 -1
  17. package/modules/adnowBidAdapter.js +1 -1
  18. package/modules/adnuntiusRtdProvider.js +96 -0
  19. package/modules/adnuntiusRtdProvider.md +41 -0
  20. package/modules/adomikAnalyticsAdapter.js +2 -2
  21. package/modules/adotBidAdapter.js +1 -1
  22. package/modules/adpod.js +14 -17
  23. package/modules/adrelevantisBidAdapter.js +2 -2
  24. package/modules/adtargetBidAdapter.js +1 -1
  25. package/modules/adtelligentBidAdapter.js +1 -1
  26. package/modules/advangelistsBidAdapter.js +2 -2
  27. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  28. package/modules/adyoulikeBidAdapter.js +1 -1
  29. package/modules/afpBidAdapter.js +1 -1
  30. package/modules/appnexusBidAdapter.js +16 -4
  31. package/modules/asealBidAdapter.js +58 -0
  32. package/modules/asealBidAdapter.md +52 -0
  33. package/modules/beachfrontBidAdapter.js +2 -2
  34. package/modules/betweenBidAdapter.js +1 -1
  35. package/modules/bidViewability.js +1 -1
  36. package/modules/bluebillywigBidAdapter.js +1 -1
  37. package/modules/brandmetricsRtdProvider.js +168 -0
  38. package/modules/brandmetricsRtdProvider.md +40 -0
  39. package/modules/bridgewellBidAdapter.js +1 -1
  40. package/modules/browsiRtdProvider.js +2 -2
  41. package/modules/cleanmedianetBidAdapter.js +1 -1
  42. package/modules/colossussspBidAdapter.js +12 -8
  43. package/modules/colossussspBidAdapter.md +15 -1
  44. package/modules/compassBidAdapter.js +1 -1
  45. package/modules/connectIdSystem.js +1 -1
  46. package/modules/consentManagement.js +2 -3
  47. package/modules/consumableBidAdapter.md +1 -1
  48. package/modules/conversantBidAdapter.js +7 -0
  49. package/modules/craftBidAdapter.js +2 -2
  50. package/modules/criteoBidAdapter.js +10 -1
  51. package/modules/currency.js +27 -5
  52. package/modules/cwireBidAdapter.js +1 -1
  53. package/modules/dailyhuntBidAdapter.js +1 -1
  54. package/modules/dchain.js +1 -1
  55. package/modules/displayioBidAdapter.js +157 -0
  56. package/modules/displayioBidAdapter.md +148 -0
  57. package/modules/dspxBidAdapter.js +69 -29
  58. package/modules/dspxBidAdapter.md +2 -1
  59. package/modules/e_volutionBidAdapter.js +158 -0
  60. package/modules/emx_digitalBidAdapter.js +2 -2
  61. package/modules/fluctBidAdapter.js +0 -1
  62. package/modules/gamoshiBidAdapter.js +1 -1
  63. package/modules/gdprEnforcement.js +2 -2
  64. package/modules/glomexBidAdapter.js +1 -1
  65. package/modules/gnetBidAdapter.js +3 -3
  66. package/modules/gnetBidAdapter.md +4 -4
  67. package/modules/goldbachBidAdapter.js +2 -2
  68. package/modules/gptPreAuction.js +1 -1
  69. package/modules/gridBidAdapter.js +15 -1
  70. package/modules/gumgumBidAdapter.js +57 -43
  71. package/modules/hadronIdSystem.js +96 -0
  72. package/modules/hadronIdSystem.md +35 -0
  73. package/modules/hadronRtdProvider.js +254 -0
  74. package/modules/hadronRtdProvider.md +126 -0
  75. package/modules/haloIdSystem.md +4 -35
  76. package/modules/haloRtdProvider.md +3 -126
  77. package/modules/hybridBidAdapter.js +1 -1
  78. package/modules/improvedigitalBidAdapter.js +6 -1
  79. package/modules/insticatorBidAdapter.js +1 -1
  80. package/modules/interactiveOffersBidAdapter.js +9 -6
  81. package/modules/intersectionRtdProvider.js +1 -1
  82. package/modules/ixBidAdapter.js +2 -2
  83. package/modules/jwplayerRtdProvider.js +72 -7
  84. package/modules/jwplayerRtdProvider.md +27 -11
  85. package/modules/kargoBidAdapter.js +2 -2
  86. package/modules/livewrappedBidAdapter.js +1 -1
  87. package/modules/lunamediahbBidAdapter.js +32 -4
  88. package/modules/malltvBidAdapter.js +7 -3
  89. package/modules/malltvBidAdapter.md +64 -51
  90. package/modules/mass.js +3 -5
  91. package/modules/mediakeysBidAdapter.js +2 -2
  92. package/modules/medianetAnalyticsAdapter.js +2 -2
  93. package/modules/medianetRtdProvider.js +1 -1
  94. package/modules/mediasquareBidAdapter.js +1 -0
  95. package/modules/nextMillenniumBidAdapter.js +1 -0
  96. package/modules/nextrollBidAdapter.js +1 -1
  97. package/modules/oguryBidAdapter.js +7 -14
  98. package/modules/onetagBidAdapter.js +1 -1
  99. package/modules/openwebBidAdapter.js +1 -1
  100. package/modules/openxAnalyticsAdapter.js +2 -2
  101. package/modules/openxBidAdapter.js +1 -1
  102. package/modules/parrableIdSystem.js +1 -1
  103. package/modules/permutiveRtdProvider.js +1 -1
  104. package/modules/pilotxBidAdapter.js +147 -0
  105. package/modules/pilotxBidAdapter.md +50 -0
  106. package/modules/pixfutureBidAdapter.js +2 -2
  107. package/modules/prebidServerBidAdapter/index.js +63 -41
  108. package/modules/priceFloors.js +15 -14
  109. package/modules/pubmaticBidAdapter.js +1 -1
  110. package/modules/quantcastBidAdapter.js +1 -1
  111. package/modules/reconciliationRtdProvider.js +1 -1
  112. package/modules/richaudienceBidAdapter.js +7 -2
  113. package/modules/riseBidAdapter.js +17 -6
  114. package/modules/roxotAnalyticsAdapter.js +1 -1
  115. package/modules/rtbhouseBidAdapter.js +1 -1
  116. package/modules/rtdModule/index.js +9 -11
  117. package/modules/rubiconAnalyticsAdapter.js +8 -2
  118. package/modules/rubiconBidAdapter.js +1 -1
  119. package/modules/saambaaBidAdapter.js +420 -420
  120. package/modules/seedingAllianceBidAdapter.js +3 -3
  121. package/modules/sharethroughBidAdapter.js +12 -17
  122. package/modules/sigmoidAnalyticsAdapter.js +1 -1
  123. package/modules/sirdataRtdProvider.js +1 -1
  124. package/modules/sizeMappingV2.js +2 -9
  125. package/modules/smarticoBidAdapter.js +1 -1
  126. package/modules/sortableAnalyticsAdapter.js +5 -4
  127. package/modules/sovrnAnalyticsAdapter.js +2 -2
  128. package/modules/sovrnBidAdapter.js +93 -18
  129. package/modules/sovrnBidAdapter.md +80 -2
  130. package/modules/sspBCBidAdapter.js +54 -21
  131. package/modules/synacormediaBidAdapter.js +32 -11
  132. package/modules/targetVideoBidAdapter.js +1 -1
  133. package/modules/telariaBidAdapter.js +22 -29
  134. package/modules/trustpidSystem.js +197 -0
  135. package/modules/trustpidSystem.md +45 -0
  136. package/modules/undertoneBidAdapter.js +17 -1
  137. package/modules/userId/eids.js +16 -1
  138. package/modules/userId/eids.md +10 -2
  139. package/modules/userId/index.js +2 -2
  140. package/modules/userId/userId.md +17 -2
  141. package/modules/ventesBidAdapter.js +1 -1
  142. package/modules/verizonMediaIdSystem.js +1 -1
  143. package/modules/vibrantmediaBidAdapter.js +220 -0
  144. package/modules/vibrantmediaBidAdapter.md +92 -0
  145. package/modules/viewability.js +177 -0
  146. package/modules/viewability.md +87 -0
  147. package/modules/viewdeosDXBidAdapter.js +1 -1
  148. package/modules/voxBidAdapter.js +1 -1
  149. package/modules/waardexBidAdapter.js +1 -1
  150. package/modules/weboramaRtdProvider.js +264 -34
  151. package/modules/weboramaRtdProvider.md +110 -40
  152. package/modules/widespaceBidAdapter.js +2 -2
  153. package/modules/winrBidAdapter.js +7 -7
  154. package/modules/yahoosspBidAdapter.js +3 -1
  155. package/modules/yieldlabBidAdapter.js +1 -1
  156. package/modules/yieldmoBidAdapter.js +2 -2
  157. package/modules/yieldoneBidAdapter.js +6 -0
  158. package/modules/yuktamediaAnalyticsAdapter.js +1 -1
  159. package/package.json +3 -1
  160. package/plugins/poly/arrayFrom.js +3 -0
  161. package/plugins/poly/find.js +3 -0
  162. package/plugins/poly/findIndex.js +3 -0
  163. package/plugins/poly/includes.js +3 -0
  164. package/plugins/poly/package.json +8 -0
  165. package/src/Renderer.js +1 -1
  166. package/src/adRendering.js +38 -0
  167. package/src/adapterManager.js +33 -28
  168. package/src/adapters/bidderFactory.js +13 -11
  169. package/src/adloader.js +3 -2
  170. package/src/auction.js +140 -117
  171. package/src/auctionIndex.js +85 -0
  172. package/src/auctionManager.js +4 -1
  173. package/src/bidderSettings.js +69 -0
  174. package/src/bidfactory.js +18 -6
  175. package/src/config.js +3 -4
  176. package/src/cpmBucketManager.js +1 -1
  177. package/src/native.js +30 -22
  178. package/src/prebid.js +4 -20
  179. package/src/secureCreatives.js +133 -49
  180. package/src/sizeMapping.js +1 -1
  181. package/src/storageManager.js +1 -1
  182. package/src/targeting.js +13 -4
  183. package/src/userSync.js +1 -1
  184. package/src/utils.js +16 -19
  185. package/src/video.js +11 -12
  186. package/src/videoCache.js +10 -9
  187. package/test/fixtures/fixtures.js +2 -1
  188. package/test/helpers/indexStub.js +28 -0
  189. package/test/helpers/syncPromise.js +71 -0
  190. package/test/spec/auctionmanager_spec.js +269 -90
  191. package/test/spec/config_spec.js +24 -1
  192. package/test/spec/e2e/longform/basic_w_bidderSettings.spec.js +1 -1
  193. package/test/spec/e2e/longform/basic_w_custom_adserver_translation.spec.js +1 -1
  194. package/test/spec/e2e/longform/basic_w_priceGran.spec.js +1 -1
  195. package/test/spec/e2e/longform/basic_w_requireExactDuration.spec.js +1 -1
  196. package/test/spec/e2e/longform/basic_wo_brandCategoryExclusion.spec.js +1 -1
  197. package/test/spec/e2e/longform/basic_wo_requireExactDuration.spec.js +1 -1
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
  199. package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
  200. package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
  201. package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
  202. package/test/spec/modules/adpod_spec.js +91 -156
  203. package/test/spec/modules/afpBidAdapter_spec.js +1 -1
  204. package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
  205. package/test/spec/modules/asealBidAdapter_spec.js +144 -0
  206. package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
  207. package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
  208. package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
  209. package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
  210. package/test/spec/modules/currency_spec.js +36 -15
  211. package/test/spec/modules/deepintentDpesIdsystem_spec.js +1 -1
  212. package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
  213. package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
  214. package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
  215. package/test/spec/modules/eids_spec.js +2 -2
  216. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +1 -1
  217. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +1 -1
  218. package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
  219. package/test/spec/modules/gridBidAdapter_spec.js +18 -0
  220. package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
  221. package/test/spec/modules/hadronIdSystem_spec.js +57 -0
  222. package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
  223. package/test/spec/modules/idxIdSystem_spec.js +1 -1
  224. package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
  225. package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
  226. package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
  227. package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
  228. package/test/spec/modules/mass_spec.js +2 -14
  229. package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -1
  230. package/test/spec/modules/multibid_spec.js +1 -1
  231. package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
  232. package/test/spec/modules/onetagBidAdapter_spec.js +1 -1
  233. package/test/spec/modules/openxAnalyticsAdapter_spec.js +1 -1
  234. package/test/spec/modules/parrableIdSystem_spec.js +1 -1
  235. package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
  236. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
  237. package/test/spec/modules/priceFloors_spec.js +37 -24
  238. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  239. package/test/spec/modules/realTimeDataModule_spec.js +51 -2
  240. package/test/spec/modules/riseBidAdapter_spec.js +30 -4
  241. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
  242. package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
  243. package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
  244. package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
  245. package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
  246. package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
  247. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +1 -1
  248. package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
  249. package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
  250. package/test/spec/modules/trustpidSystem_spec.js +232 -0
  251. package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
  252. package/test/spec/modules/userId_spec.js +40 -40
  253. package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
  254. package/test/spec/modules/viewability_spec.js +280 -0
  255. package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
  256. package/test/spec/modules/widespaceBidAdapter_spec.js +1 -1
  257. package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
  258. package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
  259. package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -1
  260. package/test/spec/native_spec.js +62 -40
  261. package/test/spec/sizeMapping_spec.js +1 -1
  262. package/test/spec/unit/core/adapterManager_spec.js +24 -2
  263. package/test/spec/unit/core/auctionIndex_spec.js +129 -0
  264. package/test/spec/unit/core/bidderFactory_spec.js +65 -12
  265. package/test/spec/unit/core/bidderSettings_spec.js +123 -0
  266. package/test/spec/unit/core/targeting_spec.js +93 -0
  267. package/test/spec/unit/pbjs_api_spec.js +81 -43
  268. package/test/spec/unit/secureCreatives_spec.js +143 -24
  269. package/test/spec/videoCache_spec.js +18 -19
  270. package/test/spec/video_spec.js +51 -61
  271. package/webpack.conf.js +1 -1
@@ -514,8 +514,8 @@ describe('SSPBC adapter', function () {
514
514
  });
515
515
 
516
516
  it('should send gdpr data', function () {
517
- expect(payload.regs).to.be.an('object').and.to.have.property('[ortb_extensions.gdpr]', 1);
518
- expect(payload.user).to.be.an('object').and.to.have.property('[ortb_extensions.consent]', bidRequest.gdprConsent.consentString);
517
+ expect(payload.regs).to.be.an('object').and.to.have.property('gdpr', 1);
518
+ expect(payload.user).to.be.an('object').and.to.have.property('consent', bidRequest.gdprConsent.consentString);
519
519
  });
520
520
 
521
521
  it('should send net info and pvid', function () {
@@ -653,7 +653,7 @@ describe('SSPBC adapter', function () {
653
653
 
654
654
  let nativeBid = resultNative[0];
655
655
  expect(nativeBid).to.have.keys('bidderCode', 'cpm', 'creativeId', 'currency', 'width', 'height', 'meta', 'mediaType', 'netRevenue', 'requestId', 'ttl', 'native');
656
- expect(nativeBid.native).to.have.keys('image', 'icon', 'title', 'sponsoredBy', 'body', 'clickUrl', 'impressionTrackers');
656
+ expect(nativeBid.native).to.have.keys('image', 'icon', 'title', 'sponsoredBy', 'body', 'clickUrl', 'impressionTrackers', 'javascriptTrackers');
657
657
  });
658
658
  });
659
659
 
@@ -668,8 +668,8 @@ describe('SSPBC adapter', function () {
668
668
  });
669
669
 
670
670
  it('should send no syncs, if frame sync is not allowed', function () {
671
- expect(syncResultImage).to.be.undefined;
672
- expect(syncResultNone).to.be.undefined;
671
+ expect(syncResultImage).to.have.length(0); ;
672
+ expect(syncResultNone).to.have.length(0); ;
673
673
  });
674
674
  });
675
675
 
@@ -686,7 +686,7 @@ describe('SSPBC adapter', function () {
686
686
  let notificationPayload = spec.onBidWon(bid);
687
687
  expect(notificationPayload).to.have.property('event').that.equals('bidWon');
688
688
  expect(notificationPayload).to.have.property('requestId').that.equals(bid.auctionId);
689
- expect(notificationPayload).to.have.property('adUnit').that.deep.equals([bid.adUnitCode]);
689
+ expect(notificationPayload).to.have.property('tagid').that.deep.equals([bid.adUnitCode]);
690
690
  expect(notificationPayload).to.have.property('siteId').that.is.an('array');
691
691
  expect(notificationPayload).to.have.property('slotId').that.is.an('array');
692
692
  });
@@ -707,7 +707,7 @@ describe('SSPBC adapter', function () {
707
707
 
708
708
  expect(notificationPayload).to.have.property('event').that.equals('timeout');
709
709
  expect(notificationPayload).to.have.property('requestId').that.equals(bids_timeouted[0].auctionId);
710
- expect(notificationPayload).to.have.property('adUnit').that.deep.equals([bids_timeouted[0].adUnitCode, bids_timeouted[1].adUnitCode]);
710
+ expect(notificationPayload).to.have.property('tagid').that.deep.equals([bids_timeouted[0].adUnitCode, bids_timeouted[1].adUnitCode]);
711
711
  });
712
712
  });
713
713
  });
@@ -2,7 +2,7 @@ import {assert} from 'chai';
2
2
  import {spec} from 'modules/stroeerCoreBidAdapter.js';
3
3
  import * as utils from 'src/utils.js';
4
4
  import {BANNER, VIDEO} from '../../../src/mediaTypes.js';
5
- import find from 'core-js-pure/features/array/find.js';
5
+ import find from 'prebidjs-polyfill/find.js';
6
6
 
7
7
  describe('stroeerCore bid adapter', function () {
8
8
  let sandbox;
@@ -1231,4 +1231,74 @@ describe('synacormediaBidAdapter ', function () {
1231
1231
  expect(usersyncs).to.be.an('array').that.is.empty;
1232
1232
  });
1233
1233
  });
1234
+
1235
+ describe('Bid Requests with price module should use if available', function () {
1236
+ let validVideoBidRequest = {
1237
+ bidder: 'synacormedia',
1238
+ params: {
1239
+ bidfloor: '0.50',
1240
+ seatId: 'prebid',
1241
+ placementId: 'demo1',
1242
+ pos: 1,
1243
+ video: {}
1244
+ },
1245
+ renderer: {
1246
+ url: '../syncOutstreamPlayer.js'
1247
+ },
1248
+ mediaTypes: {
1249
+ video: {
1250
+ playerSize: [[300, 250]],
1251
+ context: 'outstream'
1252
+ }
1253
+ },
1254
+ adUnitCode: 'div-1',
1255
+ transactionId: '0869f34e-090b-4b20-84ee-46ff41405a39',
1256
+ sizes: [[300, 250]],
1257
+ bidId: '22b3a2268d9f0e',
1258
+ bidderRequestId: '1d195910597e13',
1259
+ auctionId: '3375d336-2aea-4ee7-804c-6d26b621ad20',
1260
+ src: 'client',
1261
+ bidRequestsCount: 1,
1262
+ bidderRequestsCount: 1,
1263
+ bidderWinsCount: 0
1264
+ };
1265
+
1266
+ let validBannerBidRequest = {
1267
+ bidId: '9876abcd',
1268
+ sizes: [[300, 250]],
1269
+ params: {
1270
+ bidfloor: '0.50',
1271
+ seatId: 'prebid',
1272
+ placementId: '1234',
1273
+ }
1274
+ };
1275
+
1276
+ let bidderRequest = {
1277
+ refererInfo: {
1278
+ referer: 'http://localhost:9999/'
1279
+ },
1280
+ bidderCode: 'synacormedia',
1281
+ auctionId: 'f8a75621-d672-4cbb-9275-3db7d74fb110'
1282
+ };
1283
+
1284
+ it('should return valid bidfloor using price module for banner/video impression', function () {
1285
+ let bannerRequest = spec.buildRequests([validBannerBidRequest], bidderRequest);
1286
+ let videoRequest = spec.buildRequests([validVideoBidRequest], bidderRequest);
1287
+
1288
+ expect(bannerRequest.data.imp[0].bidfloor).to.equal(0.5);
1289
+ expect(videoRequest.data.imp[0].bidfloor).to.equal(0.5);
1290
+
1291
+ let priceModuleFloor = 3;
1292
+ let floorResponse = { currency: 'USD', floor: priceModuleFloor };
1293
+
1294
+ validBannerBidRequest.getFloor = () => { return floorResponse; };
1295
+ validVideoBidRequest.getFloor = () => { return floorResponse; };
1296
+
1297
+ bannerRequest = spec.buildRequests([validBannerBidRequest], bidderRequest);
1298
+ videoRequest = spec.buildRequests([validVideoBidRequest], bidderRequest);
1299
+
1300
+ expect(bannerRequest.data.imp[0].bidfloor).to.equal(priceModuleFloor);
1301
+ expect(videoRequest.data.imp[0].bidfloor).to.equal(priceModuleFloor);
1302
+ });
1303
+ });
1234
1304
  });
@@ -234,9 +234,7 @@ describe('TelariaAdapter', () => {
234
234
  }];
235
235
 
236
236
  it('should get correct bid response', () => {
237
- let expectedResponseKeys = ['bidderCode', 'width', 'height', 'statusMessage', 'adId', 'mediaType', 'source',
238
- 'getStatusCode', 'getSize', 'requestId', 'cpm', 'creativeId', 'vastXml',
239
- 'vastUrl', 'currency', 'netRevenue', 'ttl', 'ad', 'meta'];
237
+ let expectedResponseKeys = ['requestId', 'cpm', 'creativeId', 'vastXml', 'vastUrl', 'mediaType', 'width', 'height', 'currency', 'netRevenue', 'ttl', 'ad', 'meta'];
240
238
 
241
239
  let bidRequest = spec.buildRequests(stub, BIDDER_REQUEST)[0];
242
240
  bidRequest.bidId = '1234';
@@ -0,0 +1,232 @@
1
+ import { expect } from 'chai';
2
+ import { trustpidSubmodule } from 'modules/trustpidSystem.js';
3
+ import { storage } from 'modules/trustpidSystem.js';
4
+
5
+ describe('trustpid System', () => {
6
+ const connectDataKey = 'fcIdConnectData';
7
+ const connectDomainKey = 'fcIdConnectDomain';
8
+
9
+ const getStorageData = (idGraph) => {
10
+ if (!idGraph) {
11
+ idGraph = {id: 501, domain: ''};
12
+ }
13
+ return {
14
+ 'connectId': {
15
+ 'idGraph': [idGraph],
16
+ }
17
+ }
18
+ };
19
+
20
+ it('should have the correct module name declared', () => {
21
+ expect(trustpidSubmodule.name).to.equal('trustpid');
22
+ });
23
+
24
+ describe('trustpid getId()', () => {
25
+ afterEach(() => {
26
+ storage.removeDataFromLocalStorage(connectDataKey);
27
+ storage.removeDataFromLocalStorage(connectDomainKey);
28
+ });
29
+
30
+ it('it should return object with key callback', () => {
31
+ expect(trustpidSubmodule.getId()).to.have.property('callback');
32
+ });
33
+
34
+ it('should return object with key callback with value type - function', () => {
35
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData()));
36
+ expect(trustpidSubmodule.getId()).to.have.property('callback');
37
+ expect(typeof trustpidSubmodule.getId().callback).to.be.equal('function');
38
+ });
39
+
40
+ it('tests if localstorage & JSON works properly ', () => {
41
+ const idGraph = {
42
+ 'domain': 'domainValue',
43
+ 'umid': 'umidValue',
44
+ };
45
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
46
+ expect(JSON.parse(storage.getDataFromLocalStorage(connectDataKey))).to.have.property('connectId');
47
+ });
48
+
49
+ it('returns {callback: func} if domains don\'t match', () => {
50
+ const idGraph = {
51
+ 'domain': 'domainValue',
52
+ 'umid': 'umidValue',
53
+ };
54
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify('differentDomainValue'));
55
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
56
+ expect(trustpidSubmodule.getId()).to.have.property('callback');
57
+ });
58
+
59
+ it('returns {id: {trustpid: data.trustpid}} if we have the right data stored in the localstorage ', () => {
60
+ const idGraph = {
61
+ 'domain': 'uat.mno.link',
62
+ 'umid': 'umidValue',
63
+ };
64
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify('uat.mno.link'));
65
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
66
+ const response = trustpidSubmodule.getId();
67
+ expect(response).to.have.property('id');
68
+ expect(response.id).to.have.property('trustpid');
69
+ expect(response.id.trustpid).to.be.equal('umidValue-xxxx');
70
+ });
71
+
72
+ it('returns {trustpid: data.trustpid} if we have the right data stored in the localstorage right after the callback is called', (done) => {
73
+ const idGraph = {
74
+ 'domain': 'uat.mno.link',
75
+ 'umid': 'umidValue',
76
+ };
77
+ const response = trustpidSubmodule.getId();
78
+ expect(response).to.have.property('callback');
79
+ expect(response.callback.toString()).contain('result(callback)');
80
+
81
+ if (typeof response.callback === 'function') {
82
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify('uat.mno.link'));
83
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
84
+ response.callback(function (result) {
85
+ expect(result).to.not.be.null;
86
+ expect(result).to.have.property('trustpid');
87
+ expect(result.trustpid).to.be.equal('umidValue-xxxx');
88
+ done()
89
+ })
90
+ }
91
+ });
92
+
93
+ it('returns null if domains don\'t match', (done) => {
94
+ const idGraph = {
95
+ 'domain': 'uat.mno.link',
96
+ 'umid': 'umidValue',
97
+ };
98
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify('differentDomainValue'));
99
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
100
+
101
+ const response = trustpidSubmodule.getId();
102
+ expect(response).to.have.property('callback');
103
+ expect(response.callback.toString()).contain('result(callback)');
104
+
105
+ if (typeof response.callback === 'function') {
106
+ setTimeout(() => {
107
+ expect(JSON.parse(storage.getDataFromLocalStorage(connectDomainKey))).to.be.equal('differentDomainValue');
108
+ }, 100)
109
+ response.callback(function (result) {
110
+ expect(result).to.be.null;
111
+ done()
112
+ })
113
+ }
114
+ });
115
+
116
+ it('returns {trustpid: data.trustpid} if we have the right data stored in the localstorage right after 500ms delay', (done) => {
117
+ const idGraph = {
118
+ 'domain': 'uat.mno.link',
119
+ 'umid': 'umidValue',
120
+ };
121
+
122
+ const response = trustpidSubmodule.getId();
123
+ expect(response).to.have.property('callback');
124
+ expect(response.callback.toString()).contain('result(callback)');
125
+
126
+ if (typeof response.callback === 'function') {
127
+ setTimeout(() => {
128
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify('uat.mno.link'));
129
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
130
+ }, 500);
131
+ response.callback(function (result) {
132
+ expect(result).to.not.be.null;
133
+ expect(result).to.have.property('trustpid');
134
+ expect(result.trustpid).to.be.equal('umidValue-xxxx');
135
+ done()
136
+ })
137
+ }
138
+ });
139
+
140
+ it('returns null if we have the data stored in the localstorage after 500ms delay and the max (waiting) delay is only 200ms ', (done) => {
141
+ const idGraph = {
142
+ 'domain': 'uat.mno.link',
143
+ 'umid': 'umidValue',
144
+ };
145
+
146
+ const response = trustpidSubmodule.getId({params: {maxDelayTime: 200}});
147
+ expect(response).to.have.property('callback');
148
+ expect(response.callback.toString()).contain('result(callback)');
149
+
150
+ if (typeof response.callback === 'function') {
151
+ setTimeout(() => {
152
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify('uat.mno.link'));
153
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
154
+ }, 500);
155
+ response.callback(function (result) {
156
+ expect(result).to.be.null;
157
+ done()
158
+ })
159
+ }
160
+ });
161
+ });
162
+
163
+ describe('trustpid decode()', () => {
164
+ const VALID_API_RESPONSES = [
165
+ {
166
+ expected: '32a97f612',
167
+ payload: {
168
+ trustpid: '32a97f612'
169
+ }
170
+ },
171
+ {
172
+ expected: '32a97f61',
173
+ payload: {
174
+ trustpid: '32a97f61',
175
+ }
176
+ },
177
+ ];
178
+ VALID_API_RESPONSES.forEach(responseData => {
179
+ it('should return a newly constructed object with the trustpid for a payload with {trustpid: value}', () => {
180
+ expect(trustpidSubmodule.decode(responseData.payload)).to.deep.equal(
181
+ {trustpid: responseData.expected}
182
+ );
183
+ });
184
+ });
185
+
186
+ [{}, '', {foo: 'bar'}].forEach((response) => {
187
+ it(`should return null for an invalid response "${JSON.stringify(response)}"`, () => {
188
+ expect(trustpidSubmodule.decode(response)).to.be.null;
189
+ });
190
+ });
191
+ });
192
+
193
+ describe('trustpid messageHandler for acronyms', () => {
194
+ afterEach(() => {
195
+ storage.removeDataFromLocalStorage(connectDataKey);
196
+ storage.removeDataFromLocalStorage(connectDomainKey);
197
+ });
198
+
199
+ const domains = [
200
+ {domain: 'tmi.mno.link', acronym: 'ndye'},
201
+ {domain: 'tmi.vodafone.de', acronym: 'pqnx'},
202
+ {domain: 'tmi.telekom.de', acronym: 'avgw'},
203
+ {domain: 'tmi.tmid.es', acronym: 'kjws'},
204
+ {domain: 'uat.mno.link', acronym: 'xxxx'},
205
+ {domain: 'es.tmiservice.orange.com', acronym: 'aplw'},
206
+ ];
207
+
208
+ domains.forEach(({domain, acronym}) => {
209
+ it(`correctly sets trustpid value and acronym to ${acronym} for ${domain} domain`, (done) => {
210
+ const idGraph = {
211
+ 'domain': domain,
212
+ 'umid': 'umidValue',
213
+ };
214
+
215
+ storage.setDataInLocalStorage(connectDomainKey, JSON.stringify(domain));
216
+ storage.setDataInLocalStorage(connectDataKey, JSON.stringify(getStorageData(idGraph)));
217
+
218
+ const eventData = {
219
+ data: `{\"msgType\":\"MNOSELECTOR\",\"body\":{\"url\":\"https://${domain}/some/path\"}}`
220
+ };
221
+
222
+ window.dispatchEvent(new MessageEvent('message', eventData));
223
+
224
+ const response = trustpidSubmodule.getId();
225
+ expect(response).to.have.property('id');
226
+ expect(response.id).to.have.property('trustpid');
227
+ expect(response.id.trustpid).to.be.equal(`umidValue-${acronym}`);
228
+ done();
229
+ });
230
+ });
231
+ });
232
+ });
@@ -1,5 +1,7 @@
1
- import { expect } from 'chai';
2
- import { spec } from 'modules/undertoneBidAdapter.js';
1
+ import {expect} from 'chai';
2
+ import {spec} from 'modules/undertoneBidAdapter.js';
3
+ import {BANNER, VIDEO} from '../../../src/mediaTypes';
4
+ import {deepClone} from '../../../src/utils';
3
5
 
4
6
  const URL = 'https://hb.undertone.com/hb';
5
7
  const BIDDER_CODE = 'undertone';
@@ -276,6 +278,57 @@ describe('Undertone Adapter', () => {
276
278
  sandbox.restore();
277
279
  });
278
280
 
281
+ describe('getFloor', function () {
282
+ it('should send 0 floor when getFloor is undefined', function() {
283
+ const request = spec.buildRequests(videoBidReq, bidderReq);
284
+ const bidReq = JSON.parse(request.data)['x-ut-hb-params'][0];
285
+ expect(bidReq.mediaType).to.deep.equal(VIDEO);
286
+ expect(bidReq.bidfloor).to.deep.equal(0);
287
+ });
288
+ it('should send mocked floor when defined on video media-type', function() {
289
+ const clonedVideoBidReqArr = deepClone(videoBidReq);
290
+ const mockedFloorResponse = {
291
+ currency: 'USD',
292
+ floor: 2.3
293
+ };
294
+ clonedVideoBidReqArr[1].getFloor = () => mockedFloorResponse;
295
+
296
+ const request = spec.buildRequests(clonedVideoBidReqArr, bidderReq);
297
+ const bidReq1 = JSON.parse(request.data)['x-ut-hb-params'][0];
298
+ const bidReq2 = JSON.parse(request.data)['x-ut-hb-params'][1];
299
+ expect(bidReq1.mediaType).to.deep.equal(VIDEO);
300
+ expect(bidReq1.bidfloor).to.deep.equal(0);
301
+
302
+ expect(bidReq2.mediaType).to.deep.equal(VIDEO);
303
+ expect(bidReq2.bidfloor).to.deep.equal(mockedFloorResponse.floor);
304
+ });
305
+ it('should send mocked floor on banner media-type', function() {
306
+ const clonedValidBidReqArr = [deepClone(validBidReq)];
307
+ const mockedFloorResponse = {
308
+ currency: 'USD',
309
+ floor: 2.3
310
+ };
311
+ clonedValidBidReqArr[0].getFloor = () => mockedFloorResponse;
312
+
313
+ const request = spec.buildRequests(clonedValidBidReqArr, bidderReq);
314
+ const bidReq = JSON.parse(request.data)['x-ut-hb-params'][0];
315
+ expect(bidReq.mediaType).to.deep.equal(BANNER);
316
+ expect(bidReq.bidfloor).to.deep.equal(mockedFloorResponse.floor);
317
+ });
318
+ it('should send 0 floor on invalid currency', function() {
319
+ const clonedValidBidReqArr = [deepClone(validBidReq)];
320
+ const mockedFloorResponse = {
321
+ currency: 'EUR',
322
+ floor: 2.3
323
+ };
324
+ clonedValidBidReqArr[0].getFloor = () => mockedFloorResponse;
325
+
326
+ const request = spec.buildRequests(clonedValidBidReqArr, bidderReq);
327
+ const bidReq = JSON.parse(request.data)['x-ut-hb-params'][0];
328
+ expect(bidReq.mediaType).to.deep.equal(BANNER);
329
+ expect(bidReq.bidfloor).to.deep.equal(0);
330
+ });
331
+ });
279
332
  describe('supply chain', function () {
280
333
  it('should send supply chain if found on first bid', function () {
281
334
  const request = spec.buildRequests(supplyChainedBidReqs, bidderReq);