prebid.js 7.18.0 → 7.20.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 (313) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adWMGAnalyticsAdapter.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adfBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  10. package/dist/adkernelBidAdapter.js +1 -1
  11. package/dist/adlooxAdServerVideo.js +1 -1
  12. package/dist/adlooxAnalyticsAdapter.js +1 -1
  13. package/dist/adlooxRtdProvider.js +1 -1
  14. package/dist/adomikAnalyticsAdapter.js +1 -1
  15. package/dist/adqueryIdSystem.js +1 -1
  16. package/dist/adrelevantisBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgAnalyticsAdapter.js +1 -1
  19. package/dist/adxcgBidAdapter.js +1 -1
  20. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  21. package/dist/ajaBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/aolBidAdapter.js +1 -1
  25. package/dist/appierAnalyticsAdapter.js +1 -1
  26. package/dist/appnexusBidAdapter.js +1 -1
  27. package/dist/asoBidAdapter.js +1 -1
  28. package/dist/atsAnalyticsAdapter.js +1 -1
  29. package/dist/axonixBidAdapter.js +1 -1
  30. package/dist/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +1 -1
  31. package/dist/bidViewability.js +1 -1
  32. package/dist/bidglassBidAdapter.js +1 -1
  33. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  34. package/dist/big-richmediaBidAdapter.js +1 -1
  35. package/dist/bridgewellBidAdapter.js +1 -1
  36. package/dist/brightMountainMediaBidAdapter.js +1 -1
  37. package/dist/byDataAnalyticsAdapter.js +1 -1
  38. package/dist/carodaBidAdapter.js +1 -1
  39. package/dist/categoryTranslation.js +1 -1
  40. package/dist/cleanioRtdProvider.js +1 -1
  41. package/dist/colossussspBidAdapter.js +1 -1
  42. package/dist/concertAnalyticsAdapter.js +1 -1
  43. package/dist/concertBidAdapter.js +1 -1
  44. package/dist/connectIdSystem.js +1 -1
  45. package/dist/connectadBidAdapter.js +1 -1
  46. package/dist/consentManagement.js +1 -1
  47. package/dist/consentManagementUsp.js +1 -1
  48. package/dist/consumableBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -0
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/currency.js +1 -1
  54. package/dist/datablocksAnalyticsAdapter.js +1 -1
  55. package/dist/dchain.js +1 -1
  56. package/dist/debugging-standalone.js +1 -1
  57. package/dist/debugging.js +1 -1
  58. package/dist/dependencies.json +9 -0
  59. package/dist/dfpAdServerVideo.js +1 -1
  60. package/dist/dgkeywordRtdProvider.js +1 -1
  61. package/dist/dianomiBidAdapter.js +1 -1
  62. package/dist/dspxBidAdapter.js +1 -1
  63. package/dist/enrichmentFpdModule.js +1 -1
  64. package/dist/eplanningAnalyticsAdapter.js +1 -1
  65. package/dist/eplanningBidAdapter.js +1 -1
  66. package/dist/finativeBidAdapter.js +1 -1
  67. package/dist/fintezaAnalyticsAdapter.js +1 -1
  68. package/dist/fpd.js +1 -0
  69. package/dist/ftrackIdSystem.js +1 -1
  70. package/dist/gdprEnforcement.js +1 -1
  71. package/dist/glimpseBidAdapter.js +1 -1
  72. package/dist/gmosspBidAdapter.js +1 -1
  73. package/dist/goldbachBidAdapter.js +1 -1
  74. package/dist/googleAnalyticsAdapter.js +1 -1
  75. package/dist/gridBidAdapter.js +1 -1
  76. package/dist/gridNMBidAdapter.js +1 -1
  77. package/dist/gumgumBidAdapter.js +1 -1
  78. package/dist/h12mediaBidAdapter.js +1 -1
  79. package/dist/hadronAnalyticsAdapter.js +1 -1
  80. package/dist/id5AnalyticsAdapter.js +1 -1
  81. package/dist/id5IdSystem.js +1 -1
  82. package/dist/improvedigitalBidAdapter.js +1 -1
  83. package/dist/inmarBidAdapter.js +1 -1
  84. package/dist/insticatorBidAdapter.js +1 -1
  85. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  86. package/dist/ixBidAdapter.js +1 -1
  87. package/dist/justpremiumBidAdapter.js +1 -1
  88. package/dist/kargoAnalyticsAdapter.js +1 -1
  89. package/dist/kinessoIdSystem.js +1 -1
  90. package/dist/konduitAnalyticsAdapter.js +1 -1
  91. package/dist/kueezBidAdapter.js +1 -1
  92. package/dist/lassoBidAdapter.js +1 -1
  93. package/dist/lifestreetBidAdapter.js +1 -1
  94. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  95. package/dist/liveIntentIdSystem.js +1 -1
  96. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  97. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  98. package/dist/logicadBidAdapter.js +1 -1
  99. package/dist/loglyliftBidAdapter.js +1 -1
  100. package/dist/lotamePanoramaIdSystem.js +1 -1
  101. package/dist/magniteAnalyticsAdapter.js +1 -0
  102. package/dist/malltvAnalyticsAdapter.js +1 -1
  103. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  104. package/dist/marsmediaBidAdapter.js +1 -1
  105. package/dist/mass.js +1 -1
  106. package/dist/mediafuseBidAdapter.js +1 -1
  107. package/dist/mediakeysBidAdapter.js +1 -1
  108. package/dist/medianetAnalyticsAdapter.js +1 -1
  109. package/dist/mediasquareBidAdapter.js +1 -1
  110. package/dist/mgidBidAdapter.js +1 -1
  111. package/dist/minutemediaBidAdapter.js +1 -1
  112. package/dist/multibid.js +1 -1
  113. package/dist/nativoBidAdapter.js +1 -1
  114. package/dist/not-for-prod/prebid.js +198 -194
  115. package/dist/oguryBidAdapter.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/openxAnalyticsAdapter.js +1 -1
  119. package/dist/optimonAnalyticsAdapter.js +1 -1
  120. package/dist/outbrainBidAdapter.js +1 -1
  121. package/dist/parrableIdSystem.js +1 -1
  122. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  123. package/dist/pixfutureBidAdapter.js +1 -1
  124. package/dist/prebid-core.js +2 -2
  125. package/dist/prebidServerBidAdapter.js +1 -1
  126. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  127. package/dist/priceFloors.js +1 -1
  128. package/dist/publinkIdSystem.js +1 -1
  129. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  130. package/dist/pubmaticBidAdapter.js +1 -1
  131. package/dist/pubperfAnalyticsAdapter.js +1 -1
  132. package/dist/pubstackAnalyticsAdapter.js +1 -1
  133. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  134. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  135. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/quantcastBidAdapter.js +1 -1
  138. package/dist/quantcastIdSystem.js +1 -1
  139. package/dist/readpeakBidAdapter.js +1 -1
  140. package/dist/realvuAnalyticsAdapter.js +1 -1
  141. package/dist/relaidoBidAdapter.js +1 -1
  142. package/dist/relevantAnalyticsAdapter.js +1 -1
  143. package/dist/rhythmoneBidAdapter.js +1 -1
  144. package/dist/riseBidAdapter.js +1 -1
  145. package/dist/rivrAnalyticsAdapter.js +1 -1
  146. package/dist/roxotAnalyticsAdapter.js +1 -1
  147. package/dist/rtdModule.js +1 -1
  148. package/dist/rubiconAnalyticsAdapter.js +1 -1
  149. package/dist/rubiconBidAdapter.js +1 -1
  150. package/dist/s2sTesting.js +1 -1
  151. package/dist/scaleableAnalyticsAdapter.js +1 -1
  152. package/dist/schain.js +1 -1
  153. package/dist/seedingAllianceBidAdapter.js +1 -1
  154. package/dist/seedtagBidAdapter.js +1 -1
  155. package/dist/sharedIdSystem.js +1 -1
  156. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  157. package/dist/sharethroughBidAdapter.js +1 -1
  158. package/dist/shinezBidAdapter.js +1 -1
  159. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  160. package/dist/smaatoBidAdapter.js +1 -1
  161. package/dist/smartadserverBidAdapter.js +1 -1
  162. package/dist/smartxBidAdapter.js +1 -1
  163. package/dist/smilewantedBidAdapter.js +1 -1
  164. package/dist/sonobiAnalyticsAdapter.js +1 -1
  165. package/dist/sonobiBidAdapter.js +1 -1
  166. package/dist/sovrnAnalyticsAdapter.js +1 -1
  167. package/dist/sovrnBidAdapter.js +1 -1
  168. package/dist/sspBCBidAdapter.js +1 -1
  169. package/dist/staqAnalyticsAdapter.js +1 -1
  170. package/dist/sublimeBidAdapter.js +1 -1
  171. package/dist/synacormediaBidAdapter.js +1 -1
  172. package/dist/taboolaBidAdapter.js +1 -1
  173. package/dist/tapadIdSystem.js +1 -1
  174. package/dist/targetVideoBidAdapter.js +1 -1
  175. package/dist/teadsBidAdapter.js +1 -1
  176. package/dist/teadsIdSystem.js +1 -0
  177. package/dist/terceptAnalyticsAdapter.js +1 -1
  178. package/dist/trionBidAdapter.js +1 -1
  179. package/dist/tripleliftBidAdapter.js +1 -1
  180. package/dist/ttdBidAdapter.js +1 -1
  181. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  182. package/dist/underdogmediaBidAdapter.js +1 -1
  183. package/dist/undertoneBidAdapter.js +1 -1
  184. package/dist/userId.js +1 -1
  185. package/dist/vidazooBidAdapter.js +1 -1
  186. package/dist/videobyteBidAdapter.js +1 -1
  187. package/dist/visxBidAdapter.js +1 -1
  188. package/dist/vrtcalBidAdapter.js +1 -1
  189. package/dist/vuukleBidAdapter.js +1 -1
  190. package/dist/weboramaRtdProvider.js +1 -1
  191. package/dist/widespaceBidAdapter.js +1 -1
  192. package/dist/winrBidAdapter.js +1 -1
  193. package/dist/yahoosspBidAdapter.js +1 -1
  194. package/dist/yandexBidAdapter.js +1 -1
  195. package/dist/yieldmoBidAdapter.js +1 -1
  196. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  197. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  198. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  199. package/libraries/fpd/sua.js +98 -0
  200. package/modules/.submodules.json +1 -0
  201. package/modules/adfBidAdapter.js +1 -1
  202. package/modules/adkernelAdnBidAdapter.js +1 -0
  203. package/modules/adkernelBidAdapter.js +2 -2
  204. package/modules/adqueryIdSystem.js +8 -8
  205. package/modules/adxcgBidAdapter.js +1 -1
  206. package/modules/amxBidAdapter.js +1 -1
  207. package/modules/aolBidAdapter.js +25 -2
  208. package/modules/appnexusBidAdapter.js +19 -2
  209. package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
  210. package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
  211. package/modules/categoryTranslation.js +4 -4
  212. package/modules/cleanioRtdProvider.js +3 -4
  213. package/modules/colossussspBidAdapter.js +2 -1
  214. package/modules/connectIdSystem.js +16 -1
  215. package/modules/conversantAnalyticsAdapter.js +560 -0
  216. package/modules/conversantAnalyticsAdapter.md +47 -0
  217. package/modules/criteoBidAdapter.js +1 -1
  218. package/modules/currency.js +11 -11
  219. package/modules/dchain.js +2 -2
  220. package/modules/debugging/bidInterceptor.js +2 -2
  221. package/modules/debugging/debugging.js +10 -2
  222. package/modules/debugging/legacy.js +2 -2
  223. package/modules/dgkeywordRtdProvider.js +21 -3
  224. package/modules/dianomiBidAdapter.js +1 -1
  225. package/modules/enrichmentFpdModule.js +33 -14
  226. package/modules/eplanningBidAdapter.js +48 -2
  227. package/modules/finativeBidAdapter.js +1 -1
  228. package/modules/gridBidAdapter.js +187 -117
  229. package/modules/improvedigitalBidAdapter.js +2 -2
  230. package/modules/ixBidAdapter.js +94 -23
  231. package/modules/liveIntentIdSystem.js +39 -5
  232. package/modules/lotamePanoramaIdSystem.js +10 -6
  233. package/modules/magniteAnalyticsAdapter.js +902 -0
  234. package/modules/magniteAnalyticsAdapter.md +18 -0
  235. package/modules/mass.js +2 -2
  236. package/modules/mediakeysBidAdapter.js +6 -1
  237. package/modules/mediakeysBidAdapter.md +50 -40
  238. package/modules/multibid/index.js +5 -5
  239. package/modules/nativoBidAdapter.js +1 -1
  240. package/modules/pixfutureBidAdapter.js +46 -15
  241. package/modules/prebidServerBidAdapter/index.js +54 -19
  242. package/modules/priceFloors.js +8 -22
  243. package/modules/readpeakBidAdapter.js +1 -1
  244. package/modules/rubiconAnalyticsAdapter.js +14 -9
  245. package/modules/rubiconBidAdapter.js +2 -3
  246. package/modules/seedingAllianceBidAdapter.js +1 -1
  247. package/modules/sharethroughBidAdapter.js +1 -1
  248. package/modules/taboolaBidAdapter.js +5 -5
  249. package/modules/talkadsBidAdapter.js +1 -0
  250. package/modules/teadsIdSystem.js +234 -0
  251. package/modules/teadsIdSystem.md +22 -0
  252. package/modules/truereachBidAdapter.js +1 -0
  253. package/modules/ttdBidAdapter.js +1 -1
  254. package/modules/userId/index.js +21 -14
  255. package/modules/vrtcalBidAdapter.js +7 -1
  256. package/modules/vuukleBidAdapter.js +34 -3
  257. package/modules/yahoosspBidAdapter.js +4 -2
  258. package/modules/yandexBidAdapter.js +31 -8
  259. package/package.json +2 -2
  260. package/src/adapterManager.js +2 -4
  261. package/src/adapters/bidderFactory.js +13 -11
  262. package/src/auction.js +140 -69
  263. package/src/constants.json +8 -0
  264. package/src/cpmBucketManager.js +22 -3
  265. package/src/native.js +1 -5
  266. package/src/prebid.js +5 -6
  267. package/src/targeting.js +31 -14
  268. package/test/fixtures/fixtures.js +2 -1
  269. package/test/spec/auctionmanager_spec.js +109 -21
  270. package/test/spec/cpmBucketManager_spec.js +239 -177
  271. package/test/spec/fpd/sua_spec.js +244 -0
  272. package/test/spec/modules/adfBidAdapter_spec.js +2 -3
  273. package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
  274. package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
  275. package/test/spec/modules/amxBidAdapter_spec.js +3 -2
  276. package/test/spec/modules/aolBidAdapter_spec.js +42 -9
  277. package/test/spec/modules/appnexusBidAdapter_spec.js +24 -0
  278. package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
  279. package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
  280. package/test/spec/modules/connectIdSystem_spec.js +20 -0
  281. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
  282. package/test/spec/modules/currency_spec.js +14 -6
  283. package/test/spec/modules/debugging_mod_spec.js +9 -0
  284. package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
  285. package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
  286. package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
  287. package/test/spec/modules/eplanningBidAdapter_spec.js +285 -1
  288. package/test/spec/modules/fpdModule_spec.js +9 -0
  289. package/test/spec/modules/gridBidAdapter_spec.js +87 -31
  290. package/test/spec/modules/ixBidAdapter_spec.js +221 -2
  291. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
  292. package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
  293. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +0 -1
  294. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +1942 -0
  295. package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
  296. package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
  297. package/test/spec/modules/prebidServerBidAdapter_spec.js +202 -15
  298. package/test/spec/modules/priceFloors_spec.js +5 -5
  299. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +2 -3
  300. package/test/spec/modules/seedtagBidAdapter_spec.js +15 -18
  301. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  302. package/test/spec/modules/taboolaBidAdapter_spec.js +112 -13
  303. package/test/spec/modules/teadsIdSystem_spec.js +271 -0
  304. package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
  305. package/test/spec/modules/userId_spec.js +39 -4
  306. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -1
  307. package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
  308. package/test/spec/modules/yahoosspBidAdapter_spec.js +48 -1
  309. package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
  310. package/test/spec/native_spec.js +5 -0
  311. package/test/spec/unit/core/bidderFactory_spec.js +66 -11
  312. package/test/spec/unit/core/targeting_spec.js +28 -9
  313. package/test/spec/unit/pbjs_api_spec.js +48 -2
@@ -351,6 +351,11 @@ describe('currency', function () {
351
351
  });
352
352
 
353
353
  describe('currency.addBidResponseDecorator', function () {
354
+ let reject;
355
+ beforeEach(() => {
356
+ reject = sinon.stub().returns({status: 'rejected'});
357
+ });
358
+
354
359
  it('should leave bid at 1 when currency support is not enabled and fromCurrency is USD', function () {
355
360
  setConfig({});
356
361
  var bid = makeBid({ 'cpm': 1, 'currency': 'USD' });
@@ -368,8 +373,9 @@ describe('currency', function () {
368
373
  var innerBid;
369
374
  addBidResponseHook(function(adCodeId, bid) {
370
375
  innerBid = bid;
371
- }, 'elementId', bid);
372
- expect(innerBid.statusMessage).to.equal('Bid returned empty or error response');
376
+ }, 'elementId', bid, reject);
377
+ expect(innerBid.status).to.equal('rejected');
378
+ expect(reject.calledOnce).to.be.true;
373
379
  });
374
380
 
375
381
  it('should not buffer bid when currency is already in desired currency', function () {
@@ -395,8 +401,9 @@ describe('currency', function () {
395
401
  var innerBid;
396
402
  addBidResponseHook(function(adCodeId, bid) {
397
403
  innerBid = bid;
398
- }, 'elementId', bid);
399
- expect(innerBid.statusMessage).to.equal('Bid returned empty or error response');
404
+ }, 'elementId', bid, reject);
405
+ expect(innerBid.status).to.equal('rejected');
406
+ expect(reject.calledOnce).to.be.true;
400
407
  });
401
408
 
402
409
  it('should result in NO_BID when adServerCurrency is not supported in file', function () {
@@ -407,8 +414,9 @@ describe('currency', function () {
407
414
  var innerBid;
408
415
  addBidResponseHook(function(adCodeId, bid) {
409
416
  innerBid = bid;
410
- }, 'elementId', bid);
411
- expect(innerBid.statusMessage).to.equal('Bid returned empty or error response');
417
+ }, 'elementId', bid, reject);
418
+ expect(innerBid.status).to.equal('rejected');
419
+ expect(reject.calledOnce).to.be.true;
412
420
  });
413
421
 
414
422
  it('should return 1 when currency support is enabled and same currency code is requested as is set to adServerCurrency', function () {
@@ -273,6 +273,15 @@ describe('bid interceptor', () => {
273
273
  });
274
274
  });
275
275
 
276
+ describe('Debugging config', () => {
277
+ it('should behave gracefully when sessionStorage throws', () => {
278
+ const logError = sinon.stub();
279
+ const getStorage = () => { throw new Error() };
280
+ getConfig({enabled: false}, {getStorage, logger: {logError}, hook});
281
+ expect(logError.called).to.be.true;
282
+ });
283
+ });
284
+
276
285
  describe('bidderBidInterceptor', () => {
277
286
  let next, interceptBids, onCompletion, interceptResult, done, addBid;
278
287
 
@@ -302,7 +302,7 @@ describe('Digital Garage Keyword Module', function () {
302
302
  JSON.stringify(DUMMY_RESPONSE)
303
303
  );
304
304
  }
305
- }, 1000);
305
+ }, 50);
306
306
  });
307
307
  it('should get profiles ok(200).', function (done) {
308
308
  let pbjs = cloneDeep(config);
@@ -347,5 +347,87 @@ describe('Digital Garage Keyword Module', function () {
347
347
  JSON.stringify(DUMMY_RESPONSE)
348
348
  );
349
349
  });
350
+ it('change url.', function (done) {
351
+ const dummyUrl = 'https://www.test.com/test'
352
+ let pbjs = cloneDeep(config);
353
+ pbjs.adUnits = cloneDeep(AD_UNITS);
354
+ if (IGNORE_SET_ORTB2) {
355
+ pbjs._ignoreSetOrtb2 = true;
356
+ }
357
+ let moduleConfig = cloneDeep(DEF_CONFIG);
358
+ moduleConfig.params.url = dummyUrl;
359
+ dgRtd.getDgKeywordsAndSet(
360
+ pbjs,
361
+ () => {
362
+ const url = dgRtd.getProfileApiUrl(dummyUrl);
363
+ expect(url.indexOf('?fpid=') === -1).to.equal(true);
364
+ expect(url).to.equal(server.requests[0].url);
365
+ done();
366
+ },
367
+ moduleConfig,
368
+ null
369
+ );
370
+ const request = server.requests[0];
371
+ request.respond(
372
+ 200,
373
+ DUMMY_RESPONSE_HEADER,
374
+ JSON.stringify(DUMMY_RESPONSE)
375
+ );
376
+ });
377
+ it('add fpid stored in local strage.', function (done) {
378
+ const uuid = 'uuid_abcdefghijklmnopqrstuvwxyz';
379
+ let pbjs = cloneDeep(config);
380
+ pbjs.adUnits = cloneDeep(AD_UNITS);
381
+ if (IGNORE_SET_ORTB2) {
382
+ pbjs._ignoreSetOrtb2 = true;
383
+ }
384
+ let moduleConfig = cloneDeep(DEF_CONFIG);
385
+ window.localStorage.setItem('ope_fpid', uuid);
386
+ dgRtd.getDgKeywordsAndSet(
387
+ pbjs,
388
+ () => {
389
+ const url = dgRtd.getProfileApiUrl(null);
390
+ expect(url.indexOf(uuid) > 0).to.equal(true);
391
+ expect(url).to.equal(server.requests[0].url);
392
+ done();
393
+ },
394
+ moduleConfig,
395
+ null
396
+ );
397
+ const request = server.requests[0];
398
+ request.respond(
399
+ 200,
400
+ DUMMY_RESPONSE_HEADER,
401
+ JSON.stringify(DUMMY_RESPONSE)
402
+ );
403
+ });
404
+ it('disable fpid stored in local strage.', function (done) {
405
+ const uuid = 'uuid_abcdefghijklmnopqrstuvwxyz';
406
+ let pbjs = cloneDeep(config);
407
+ pbjs.adUnits = cloneDeep(AD_UNITS);
408
+ if (IGNORE_SET_ORTB2) {
409
+ pbjs._ignoreSetOrtb2 = true;
410
+ }
411
+ let moduleConfig = cloneDeep(DEF_CONFIG);
412
+ window.localStorage.setItem('ope_fpid', uuid);
413
+ moduleConfig.params.disableReadFpid = true;
414
+ dgRtd.getDgKeywordsAndSet(
415
+ pbjs,
416
+ () => {
417
+ const url = dgRtd.getProfileApiUrl(null, moduleConfig.params.disableReadFpid);
418
+ expect(url.indexOf(uuid) > 0).to.equal(false);
419
+ expect(url).to.equal(server.requests[0].url);
420
+ done();
421
+ },
422
+ moduleConfig,
423
+ null
424
+ );
425
+ const request = server.requests[0];
426
+ request.respond(
427
+ 200,
428
+ DUMMY_RESPONSE_HEADER,
429
+ JSON.stringify(DUMMY_RESPONSE)
430
+ );
431
+ });
350
432
  });
351
433
  });
@@ -159,14 +159,13 @@ describe('Dianomi adapter', () => {
159
159
  {
160
160
  bidId: 'bidId',
161
161
  params: { smartadId: 1234 },
162
- transactionId: 'transactionId',
163
162
  },
164
163
  ];
165
164
  let request = JSON.parse(
166
- spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data
165
+ spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' }, auctionId: 'tid' }).data
167
166
  );
168
167
 
169
- assert.equal(request.source.tid, validBidRequests[0].transactionId);
168
+ assert.equal(request.source.tid, 'tid');
170
169
  assert.equal(request.source.fd, 1);
171
170
  });
172
171
 
@@ -1,6 +1,8 @@
1
1
  import { expect } from 'chai';
2
2
  import { getRefererInfo } from 'src/refererDetection.js';
3
- import { processFpd, coreStorage } from 'modules/enrichmentFpdModule.js';
3
+ import {processFpd, coreStorage, resetEnrichments} from 'modules/enrichmentFpdModule.js';
4
+ import * as enrichmentModule from 'modules/enrichmentFpdModule.js';
5
+ import {GreedyPromise} from '../../../src/utils/promise.js';
4
6
 
5
7
  describe('the first party data enrichment module', function() {
6
8
  let width;
@@ -11,6 +13,8 @@ describe('the first party data enrichment module', function() {
11
13
  let coreStorageStub;
12
14
  let canonical;
13
15
  let keywords;
16
+ let lowEntropySuaStub;
17
+ let highEntropySuaStub;
14
18
 
15
19
  before(function() {
16
20
  canonical = document.createElement('link');
@@ -20,6 +24,7 @@ describe('the first party data enrichment module', function() {
20
24
  });
21
25
 
22
26
  beforeEach(function() {
27
+ resetEnrichments();
23
28
  querySelectorStub = sinon.stub(window.top.document, 'querySelector');
24
29
  querySelectorStub.withArgs("link[rel='canonical']").returns(canonical);
25
30
  querySelectorStub.withArgs("meta[name='keywords']").returns(keywords);
@@ -35,6 +40,8 @@ describe('the first party data enrichment module', function() {
35
40
  .returns(null) // co.uk
36
41
  .onSecondCall()
37
42
  .returns('writeable'); // domain.co.uk
43
+ lowEntropySuaStub = sinon.stub(enrichmentModule.sua, 'le').callsFake(() => null);
44
+ highEntropySuaStub = sinon.stub(enrichmentModule.sua, 'he').callsFake(() => GreedyPromise.resolve());
38
45
  });
39
46
 
40
47
  afterEach(function() {
@@ -46,13 +53,21 @@ describe('the first party data enrichment module', function() {
46
53
  canonical.rel = 'canonical';
47
54
  keywords = document.createElement('meta');
48
55
  keywords.name = 'keywords';
56
+ lowEntropySuaStub.restore();
57
+ highEntropySuaStub.restore();
49
58
  });
50
59
 
60
+ function syncProcessFpd(fpdConf, ortb2Fragments) {
61
+ let result;
62
+ processFpd(fpdConf, ortb2Fragments).then((res) => { result = res; });
63
+ return result;
64
+ };
65
+
51
66
  it('adds ref and device values', function() {
52
67
  width = 800;
53
68
  height = 500;
54
69
 
55
- let validated = processFpd({}, {}).global;
70
+ let validated = syncProcessFpd({}, {}).global;
56
71
 
57
72
  const {ref, page, domain} = getRefererInfo();
58
73
  expect(validated.site.ref).to.equal(ref || undefined);
@@ -67,7 +82,7 @@ describe('the first party data enrichment module', function() {
67
82
  height = 500;
68
83
  canonical.href = 'https://www.subdomain.domain.co.uk/path?query=12345';
69
84
 
70
- let validated = processFpd({}, {}).global;
85
+ let validated = syncProcessFpd({}, {}).global;
71
86
 
72
87
  expect(validated.site.ref).to.equal(getRefererInfo().ref || undefined);
73
88
  expect(validated.site.page).to.equal('https://www.subdomain.domain.co.uk/path?query=12345');
@@ -82,7 +97,7 @@ describe('the first party data enrichment module', function() {
82
97
  height = 500;
83
98
  keywords.content = 'value1,value2,value3';
84
99
 
85
- let validated = processFpd({}, {}).global;
100
+ let validated = syncProcessFpd({}, {}).global;
86
101
 
87
102
  expect(validated.site.keywords).to.equal('value1,value2,value3');
88
103
  });
@@ -91,7 +106,7 @@ describe('the first party data enrichment module', function() {
91
106
  width = 800;
92
107
  height = 500;
93
108
 
94
- let validated = processFpd({}, {global: {device: {w: 1200, h: 700}, site: {ref: 'https://someUrl.com', page: 'test.com'}}}).global;
109
+ let validated = syncProcessFpd({}, {global: {device: {w: 1200, h: 700}, site: {ref: 'https://someUrl.com', page: 'test.com'}}}).global;
95
110
 
96
111
  expect(validated.site.ref).to.equal('https://someUrl.com');
97
112
  expect(validated.site.page).to.equal('test.com');
@@ -99,16 +114,44 @@ describe('the first party data enrichment module', function() {
99
114
  expect(validated.site.keywords).to.be.undefined;
100
115
  });
101
116
 
117
+ it('does not run enrichments again on the second call', () => {
118
+ width = 1;
119
+ height = 2;
120
+ const first = syncProcessFpd({}, {}).global;
121
+ width = 3;
122
+ const second = syncProcessFpd({}, {}).global;
123
+ expect(first).to.eql(second);
124
+ });
125
+
126
+ describe('device.sua', () => {
127
+ it('does not set device.sua if resolved sua is null', () => {
128
+ const sua = syncProcessFpd({}, {}).global.device?.sua;
129
+ expect(sua).to.not.exist;
130
+ });
131
+ it('uses low entropy values if uaHints is []', () => {
132
+ lowEntropySuaStub.callsFake(() => ({mock: 'sua'}));
133
+ const sua = syncProcessFpd({uaHints: []}, {}).global.device.sua;
134
+ expect(sua).to.eql({mock: 'sua'});
135
+ });
136
+ it('uses high entropy values otherwise', () => {
137
+ highEntropySuaStub.callsFake((hints) => GreedyPromise.resolve({hints}));
138
+ const sua = syncProcessFpd({uaHints: ['h1', 'h2']}, {}).global.device.sua;
139
+ expect(sua).to.eql({hints: ['h1', 'h2']});
140
+ })
141
+ })
142
+
102
143
  it('should store a reference to gpc witin ortb2.regs.ext if it has been enabled', function() {
103
144
  let validated;
104
145
  width = 800;
105
146
  height = 500;
106
147
 
107
- validated = processFpd({}, {}).global;
148
+ validated = syncProcessFpd({}, {}).global;
108
149
  expect(validated.regs).to.equal(undefined);
109
150
 
151
+ resetEnrichments();
152
+
110
153
  const globalPrivacyControlStub = sinon.stub(window, 'navigator').value({globalPrivacyControl: true});
111
- validated = processFpd({}, {}).global;
154
+ validated = syncProcessFpd({}, {}).global;
112
155
  expect(validated.regs.ext.gpc).to.equal(1);
113
156
  globalPrivacyControlStub.restore();
114
157
  });
@@ -7,6 +7,7 @@ import * as utils from 'src/utils.js';
7
7
  import {hook} from '../../../src/hook.js';
8
8
  import {getGlobal} from '../../../src/prebidGlobal.js';
9
9
  import { makeSlot } from '../integration/faker/googletag.js';
10
+ import {BANNER, VIDEO} from '../../../src/mediaTypes.js';
10
11
 
11
12
  describe('E-Planning Adapter', function () {
12
13
  const adapter = newBidder('spec');
@@ -19,6 +20,7 @@ describe('E-Planning Adapter', function () {
19
20
  const CLEAN_ADUNIT_CODE2 = '300x250_1';
20
21
  const CLEAN_ADUNIT_CODE = '300x250_0';
21
22
  const CLEAN_ADUNIT_CODE_ML = 'adunitco_de';
23
+ const CLEAN_ADUNIT_CODE_VAST = 'VIDEO_300x250_0';
22
24
  const BID_ID = '123456789';
23
25
  const BID_ID2 = '987654321';
24
26
  const BID_ID3 = '998877665';
@@ -30,6 +32,9 @@ describe('E-Planning Adapter', function () {
30
32
  const CRID = '1234567890';
31
33
  const TEST_ISV = 'leles.e-planning.net';
32
34
  const ADOMAIN = 'adomain.com';
35
+ const ADM_VAST = '<VAST version=\"2.0\">\n<Ad id=\"602833\">\n<Wrapper>\n<AdSystem>Acudeo Compatible</AdSystem>\n<VASTAdTagURI>\nhttp://demo.tremormedia.com/proddev/vast/vast_inline_linear.xml\n</VASTAdTagURI>\n<Impression><![CDATA[https://cndigrazia34.devel.e-planning.net:444/eli/4/19911d/6584303d5d0da8bc?i=0123456789012345&fi=0123456789abcdef&pb=<% EXCHANGE_EPBID_49 %>&nfc=1&S=<% SERVER_ID %>&rnd=733663791&bk=0123456789abcdef]]></Impression><Impression>http://myTrackingURL/wrapper/impression</Impression>\n<Creatives>\n<Creative AdID=\"602833\">\n<Linear>\n<TrackingEvents></TrackingEvents>\n</Linear>\n</Creative>\n<Creative AdID=\"602833-Companion\">\n<CompanionAds>\n<Companion width=\"300\" height=\"250\">\n<StaticResource creativeType=\"image/jpeg\">\nhttp://demo.tremormedia.com/proddev/vast/300x250_banner1.jpg\n</StaticResource>\n<TrackingEvents>\n<Tracking event=\"creativeView\">\nhttp://myTrackingURL/wrapper/firstCompanionCreativeView\n</Tracking>\n</TrackingEvents>\n<CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>\n</Companion>\n<Companion width=\"728\" height=\"90\">\n<StaticResource creativeType=\"image/jpeg\">\nhttp://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg\n</StaticResource>\n<CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>\n</Companion>\n</CompanionAds>\n</Creative>\n</Creatives>\n</Wrapper>\n</Ad>\n</VAST>\n';
36
+ const ADM_VAST_VV_1 = '<VideoAdServingTemplate xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"vast_loose.xsd\">test</VideoAdServingTemplate>';
37
+ const DEFAULT_SIZE_VAST = '640x480';
33
38
  const validBid = {
34
39
  'bidder': 'eplanning',
35
40
  'bidId': BID_ID,
@@ -69,6 +74,110 @@ describe('E-Planning Adapter', function () {
69
74
  },
70
75
  'sizes': [[300, 250], [300, 600]],
71
76
  };
77
+ const validBidSpaceOutstream = {
78
+ 'bidder': 'eplanning',
79
+ 'bidId': BID_ID,
80
+ 'params': {
81
+ 'ci': CI,
82
+ 'sn': SN,
83
+ },
84
+ 'mediaTypes': {
85
+ 'video': {
86
+ 'context': 'outstream',
87
+ 'playerSize': [300, 600],
88
+ 'mimes': ['video/mp4'],
89
+ 'protocols': [1, 2, 3, 4, 5, 6],
90
+ 'playbackmethod': [2],
91
+ 'skip': 1
92
+ }
93
+ },
94
+ };
95
+ const validBidOutstreamNoSize = {
96
+ 'bidder': 'eplanning',
97
+ 'bidId': BID_ID,
98
+ 'params': {
99
+ 'ci': CI,
100
+ 'sn': SN,
101
+ },
102
+ 'mediaTypes': {
103
+ 'video': {
104
+ 'context': 'outstream',
105
+ 'mimes': ['video/mp4'],
106
+ 'protocols': [1, 2, 3, 4, 5, 6],
107
+ 'playbackmethod': [2],
108
+ 'skip': 1
109
+ }
110
+ },
111
+ };
112
+ const validBidOutstreamNSizes = {
113
+ 'bidder': 'eplanning',
114
+ 'bidId': BID_ID,
115
+ 'params': {
116
+ 'ci': CI,
117
+ 'sn': SN,
118
+ },
119
+ 'mediaTypes': {
120
+ 'video': {
121
+ 'context': 'outstream',
122
+ 'playerSize': [[300, 600], [400, 500], [500, 500]],
123
+ 'mimes': ['video/mp4'],
124
+ 'protocols': [1, 2, 3, 4, 5, 6],
125
+ 'playbackmethod': [2],
126
+ 'skip': 1
127
+ }
128
+ },
129
+ };
130
+ const bidOutstreamInvalidSizes = {
131
+ 'bidder': 'eplanning',
132
+ 'bidId': BID_ID,
133
+ 'params': {
134
+ 'ci': CI,
135
+ 'sn': SN,
136
+ },
137
+ 'mediaTypes': {
138
+ 'video': {
139
+ 'context': 'outstream',
140
+ 'playerSize': 'invalidSize',
141
+ 'mimes': ['video/mp4'],
142
+ 'protocols': [1, 2, 3, 4, 5, 6],
143
+ 'playbackmethod': [2],
144
+ 'skip': 1
145
+ }
146
+ },
147
+ };
148
+ const validBidSpaceInstream = {
149
+ 'bidder': 'eplanning',
150
+ 'bidId': BID_ID,
151
+ 'params': {
152
+ 'ci': CI,
153
+ 'sn': SN,
154
+ },
155
+ 'mediaTypes': {
156
+ 'video': {
157
+ 'context': 'instream',
158
+ 'mimes': ['video/mp4'],
159
+ 'protocols': [1, 2, 3, 4, 5, 6],
160
+ 'playbackmethod': [2],
161
+ 'skip': 1
162
+ }
163
+ },
164
+ };
165
+ const validBidSpaceVastNoContext = {
166
+ 'bidder': 'eplanning',
167
+ 'bidId': BID_ID,
168
+ 'params': {
169
+ 'ci': CI,
170
+ 'sn': SN,
171
+ },
172
+ 'mediaTypes': {
173
+ 'video': {
174
+ 'mimes': ['video/mp4'],
175
+ 'protocols': [1, 2, 3, 4, 5, 6],
176
+ 'playbackmethod': [2],
177
+ 'skip': 1
178
+ }
179
+ },
180
+ };
72
181
  const validBidView = {
73
182
  'bidder': 'eplanning',
74
183
  'bidId': BID_ID,
@@ -145,6 +254,14 @@ describe('E-Planning Adapter', function () {
145
254
  }
146
255
  }
147
256
  };
257
+ const validBidNoSize = {
258
+ 'bidder': 'eplanning',
259
+ 'bidId': BID_ID,
260
+ 'params': {
261
+ 'ci': CI,
262
+ 'sn': SN,
263
+ }
264
+ };
148
265
  const response = {
149
266
  body: {
150
267
  'sI': {
@@ -176,6 +293,68 @@ describe('E-Planning Adapter', function () {
176
293
  ]
177
294
  }
178
295
  };
296
+ const responseVast = {
297
+ body: {
298
+ 'sI': {
299
+ 'k': '12345'
300
+ },
301
+ 'sec': {
302
+ 'k': 'ROS'
303
+ },
304
+ 'sp': [{
305
+ 'k': CLEAN_ADUNIT_CODE_VAST,
306
+ 'a': [{
307
+ 'adm': ADM_VAST,
308
+ 'id': '7854abc56248f874',
309
+ 'i': I_ID,
310
+ 'fi': '7854abc56248f872',
311
+ 'ip': '45621afd87462104',
312
+ 'w': W,
313
+ 'h': H,
314
+ 'crid': CRID,
315
+ 'pr': CPM
316
+ }],
317
+ }],
318
+ 'cs': [
319
+ 'http://a-sync-url.com/',
320
+ {
321
+ 'u': 'http://another-sync-url.com/test.php?&partner=123456&endpoint=us-east',
322
+ 'ifr': true
323
+ }
324
+ ]
325
+ }
326
+ };
327
+ const responseVastVV1 = {
328
+ body: {
329
+ 'sI': {
330
+ 'k': '12345'
331
+ },
332
+ 'sec': {
333
+ 'k': 'ROS'
334
+ },
335
+ 'sp': [{
336
+ 'k': CLEAN_ADUNIT_CODE_VAST,
337
+ 'a': [{
338
+ 'adm': ADM_VAST_VV_1,
339
+ 'id': '7854abc56248f874',
340
+ 'i': I_ID,
341
+ 'fi': '7854abc56248f872',
342
+ 'ip': '45621afd87462104',
343
+ 'w': W,
344
+ 'h': H,
345
+ 'crid': CRID,
346
+ 'pr': CPM
347
+ }],
348
+ }],
349
+ 'cs': [
350
+ 'http://a-sync-url.com/',
351
+ {
352
+ 'u': 'http://another-sync-url.com/test.php?&partner=123456&endpoint=us-east',
353
+ 'ifr': true
354
+ }
355
+ ]
356
+ }
357
+ };
179
358
  const responseWithTwoAdunits = {
180
359
  body: {
181
360
  'sI': {
@@ -411,6 +590,77 @@ describe('E-Planning Adapter', function () {
411
590
  expect(e).to.equal('300x250_0:300x250,300x600+100x100_0:100x100');
412
591
  });
413
592
 
593
+ it('should return correct e parameter with support vast with one space with size outstream', function () {
594
+ let bidRequests = [validBidSpaceOutstream];
595
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
596
+ expect(data.e).to.equal('video_300x600_0:300x600;1');
597
+ expect(data.vctx).to.equal(2);
598
+ expect(data.vv).to.equal(3);
599
+ });
600
+
601
+ it('should correctly return the e parameter with n sizes in playerSize', function () {
602
+ let bidRequests = [validBidOutstreamNSizes];
603
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
604
+ expect(data.e).to.equal('video_300x600_0:300x600;1');
605
+ expect(data.vctx).to.equal(2);
606
+ expect(data.vv).to.equal(3);
607
+ });
608
+
609
+ it('should correctly return the e parameter with invalid sizes in playerSize', function () {
610
+ let bidRequests = [bidOutstreamInvalidSizes];
611
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
612
+ expect(data.e).to.equal('video_' + DEFAULT_SIZE_VAST + '_0:' + DEFAULT_SIZE_VAST + ';1');
613
+ expect(data.vctx).to.equal(2);
614
+ expect(data.vv).to.equal(3);
615
+ });
616
+
617
+ it('should return correct e parameter with support vast with one space with size default outstream', function () {
618
+ let bidRequests = [validBidOutstreamNoSize];
619
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
620
+ expect(data.e).to.equal('video_640x480_0:640x480;1');
621
+ expect(data.vctx).to.equal(2);
622
+ expect(data.vv).to.equal(3);
623
+ });
624
+
625
+ it('should return correct e parameter with support vast with one space with size instream', function () {
626
+ let bidRequests = [validBidSpaceInstream];
627
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
628
+ expect(data.e).to.equal('video_640x480_0:640x480;1');
629
+ expect(data.vctx).to.equal(1);
630
+ expect(data.vv).to.equal(3);
631
+ });
632
+
633
+ it('should return correct e parameter with support vast with one space with size default and vctx default', function () {
634
+ let bidRequests = [validBidSpaceVastNoContext];
635
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
636
+ expect(data.e).to.equal('video_640x480_0:640x480;1');
637
+ expect(data.vctx).to.equal(1);
638
+ expect(data.vv).to.equal(3);
639
+ });
640
+
641
+ it('if 2 bids arrive, one outstream and the other instream, instream has more priority', function () {
642
+ let bidRequests = [validBidSpaceOutstream, validBidSpaceInstream];
643
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
644
+ expect(data.e).to.equal('video_640x480_0:640x480;1');
645
+ expect(data.vctx).to.equal(1);
646
+ expect(data.vv).to.equal(3);
647
+ });
648
+ it('if 2 bids arrive, one outstream and another banner, outstream has more priority', function () {
649
+ let bidRequests = [validBidSpaceOutstream, validBidSpaceName];
650
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
651
+ expect(data.e).to.equal('video_300x600_0:300x600;1');
652
+ expect(data.vctx).to.equal(2);
653
+ expect(data.vv).to.equal(3);
654
+ });
655
+
656
+ it('should return correct e parameter with support vast with one space outstream', function () {
657
+ let bidRequests = [validBidSpaceOutstream, validBidOutstreamNoSize];
658
+ const data = spec.buildRequests(bidRequests, bidderRequest).data;
659
+ expect(data.e).to.equal('video_300x600_0:300x600;1+video_640x480_1:640x480;1');
660
+ expect(data.vctx).to.equal(2);
661
+ expect(data.vv).to.equal(3);
662
+ });
663
+
414
664
  it('should return correct e parameter with linear mapping attribute with more than one adunit', function () {
415
665
  let bidRequestsML = [validBidMappingLinear];
416
666
  const NEW_CODE = ADUNIT_CODE + '2';
@@ -588,6 +838,40 @@ describe('E-Planning Adapter', function () {
588
838
  };
589
839
  expect(bidResponse).to.deep.equal(expectedResponse);
590
840
  });
841
+
842
+ it('should correctly map the parameters in the response vast', function () {
843
+ const bidResponse = spec.interpretResponse(responseVast, { adUnitToBidId: { [CLEAN_ADUNIT_CODE_VAST]: BID_ID } })[0];
844
+ const expectedResponse = {
845
+ requestId: BID_ID,
846
+ cpm: CPM,
847
+ width: W,
848
+ height: H,
849
+ ttl: 120,
850
+ creativeId: CRID,
851
+ netRevenue: true,
852
+ currency: 'USD',
853
+ vastXml: ADM_VAST,
854
+ mediaTypes: VIDEO
855
+ };
856
+ expect(bidResponse).to.deep.equal(expectedResponse);
857
+ });
858
+
859
+ it('should correctly map the parameters in the response vast vv 1', function () {
860
+ const bidResponse = spec.interpretResponse(responseVastVV1, { adUnitToBidId: { [CLEAN_ADUNIT_CODE_VAST]: BID_ID } })[0];
861
+ const expectedResponse = {
862
+ requestId: BID_ID,
863
+ cpm: CPM,
864
+ width: W,
865
+ height: H,
866
+ ttl: 120,
867
+ creativeId: CRID,
868
+ netRevenue: true,
869
+ currency: 'USD',
870
+ vastXml: ADM_VAST_VV_1,
871
+ mediaTypes: VIDEO
872
+ };
873
+ expect(bidResponse).to.deep.equal(expectedResponse);
874
+ });
591
875
  });
592
876
 
593
877
  describe('getUserSyncs', function () {
@@ -1029,7 +1313,7 @@ describe('E-Planning Adapter', function () {
1029
1313
  sandbox.restore();
1030
1314
  })
1031
1315
 
1032
- it('should add eids to the request ', function() {
1316
+ it('should add eids to the request', function() {
1033
1317
  let bidRequests = [validBidView];
1034
1318
  const expected_id5id = encodeURIComponent(JSON.stringify({ uid: 'ID5-ZHMOL_IfFSt7_lVYX8rBZc6GH3XMWyPQOBUfr4bm0g!', ext: { linkType: 1 } }));
1035
1319
  const request = spec.buildRequests(bidRequests, bidderRequest);