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
@@ -808,8 +808,8 @@ describe('mediakeysBidAdapter', function () {
808
808
  ]
809
809
  },
810
810
  eventtrackers: [
811
- { event: 1, method: 1, url: 'https://click.me' },
812
- { event: 1, method: 2, url: 'https://click-script.me' }
811
+ { event: 1, method: 1, url: 'https://eventrack.me/impression' },
812
+ { event: 1, method: 2, url: 'https://eventrack-js.me/impression-1' }
813
813
  ]
814
814
  };
815
815
 
@@ -845,9 +845,11 @@ describe('mediakeysBidAdapter', function () {
845
845
  expect(response[0].native.clickUrl).to.exist;
846
846
  expect(response[0].native.clickTrackers).to.exist;
847
847
  expect(response[0].native.clickTrackers.length).to.equal(1);
848
- expect(response[0].native.javascriptTrackers).to.equal('<script src="https://click-script.me"></script>');
849
848
  expect(response[0].native.impressionTrackers).to.exist;
850
849
  expect(response[0].native.impressionTrackers.length).to.equal(1);
850
+ expect(response[0].native.impressionTrackers[0]).to.equal('https://eventrack.me/impression');
851
+ expect(response[0].native.javascriptTrackers).to.exist;
852
+ expect(response[0].native.javascriptTrackers).to.equal('<script async src="https://eventrack-js.me/impression-1"></script>');
851
853
  });
852
854
 
853
855
  it('should ignore eventtrackers with a unsupported type', function() {
@@ -859,6 +861,21 @@ describe('mediakeysBidAdapter', function () {
859
861
  expect(response[0].native.impressionTrackers).to.exist;
860
862
  expect(response[0].native.impressionTrackers.length).to.equal(0);
861
863
  })
864
+
865
+ it('Should handle multiple javascriptTrackers in one single string', () => {
866
+ const rawServerResponseNativeCopy = utils.deepClone(rawServerResponseNative);
867
+ const nativeObjectCopy = utils.deepClone(nativeObject);
868
+ nativeObjectCopy.eventtrackers.push(
869
+ {
870
+ event: 1,
871
+ method: 2,
872
+ url: 'https://eventrack-js.me/impression-2'
873
+ },)
874
+ rawServerResponseNativeCopy.body.seatbid[0].bid[0].adm = JSON.stringify(nativeObjectCopy);
875
+ const response = spec.interpretResponse(rawServerResponseNativeCopy, request);
876
+ const expected = '<script async src=\"https://eventrack-js.me/impression-1\"></script>\n<script async src=\"https://eventrack-js.me/impression-2\"></script>';
877
+ expect(response[0].native.javascriptTrackers).to.equal(expected);
878
+ });
862
879
  });
863
880
  });
864
881
 
@@ -125,12 +125,23 @@ describe('nativoBidAdapterTests', function () {
125
125
  expect(request.url).to.include('ntv_pas')
126
126
  })
127
127
 
128
+ it('ntv_url should contain query params', function () {
129
+ const request = spec.buildRequests(bidRequests, {
130
+ bidderRequestId: 123456,
131
+ refererInfo: {
132
+ location: 'https://www.test.com?queryTest=true',
133
+ },
134
+ })
135
+ console.log(request.url) // eslint-disable-line no-console
136
+ expect(request.url).to.include(encodeURIComponent('?queryTest=true'))
137
+ })
138
+
128
139
  it('ntv_url parameter should NOT be empty even if the utl parameter was set as an empty value', function () {
129
140
  bidRequests[0].params.url = ''
130
141
  const request = spec.buildRequests(bidRequests, {
131
142
  bidderRequestId: 123456,
132
143
  refererInfo: {
133
- referer: 'https://www.test.com',
144
+ location: 'https://www.test.com',
134
145
  },
135
146
  })
136
147
 
@@ -144,7 +155,7 @@ describe('nativoBidAdapterTests', function () {
144
155
  const request = spec.buildRequests(bidRequests, {
145
156
  bidderRequestId: 123456,
146
157
  refererInfo: {
147
- referer: 'https://www.test.com',
158
+ location: 'https://www.test.com',
148
159
  },
149
160
  })
150
161
 
@@ -536,6 +536,8 @@ describe('S2S Adapter', function () {
536
536
  addBidResponse = sinon.spy(),
537
537
  done = sinon.spy();
538
538
 
539
+ addBidResponse.reject = sinon.spy();
540
+
539
541
  function prepRequest(req) {
540
542
  req.ad_units.forEach((adUnit) => {
541
543
  delete adUnit.nativeParams
@@ -595,6 +597,7 @@ describe('S2S Adapter', function () {
595
597
 
596
598
  afterEach(function () {
597
599
  addBidResponse.resetHistory();
600
+ addBidResponse.reject = sinon.spy();
598
601
  done.resetHistory();
599
602
  });
600
603
 
@@ -607,15 +610,14 @@ describe('S2S Adapter', function () {
607
610
  resetSyncedStatus();
608
611
  });
609
612
 
610
- it('should set id to auction ID and source.tid to tid', function () {
613
+ it('should set id and source.tid to auction ID', function () {
611
614
  config.setConfig({ s2sConfig: CONFIG });
612
615
 
613
616
  adapter.callBids(OUTSTREAM_VIDEO_REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
614
617
 
615
618
  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');
619
+ expect(requestBid.id).to.equal(BID_REQUESTS[0].auctionId);
620
+ expect(requestBid.source.tid).to.equal(BID_REQUESTS[0].auctionId);
619
621
  });
620
622
 
621
623
  it('should block request if config did not define p1Consent URL in endpoint object config', function () {
@@ -2904,6 +2906,16 @@ describe('S2S Adapter', function () {
2904
2906
  });
2905
2907
  }
2906
2908
 
2909
+ it('should reject invalid bids', () => {
2910
+ config.setConfig({ s2sConfig: CONFIG });
2911
+ adapter.callBids(REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
2912
+ const response = deepClone(RESPONSE_OPENRTB);
2913
+ Object.assign(response.seatbid[0].bid[0], {w: null, h: null});
2914
+ server.requests[0].respond(200, {}, JSON.stringify(response));
2915
+ expect(addBidResponse.reject.calledOnce).to.be.true;
2916
+ expect(addBidResponse.called).to.be.false;
2917
+ });
2918
+
2907
2919
  it('does not (by default) allow bids that were not requested', function () {
2908
2920
  config.setConfig({ s2sConfig: CONFIG });
2909
2921
  adapter.callBids(REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
@@ -2912,6 +2924,7 @@ describe('S2S Adapter', function () {
2912
2924
  server.requests[0].respond(200, {}, JSON.stringify(response));
2913
2925
 
2914
2926
  expect(addBidResponse.called).to.be.false;
2927
+ expect(addBidResponse.reject.calledOnce).to.be.true;
2915
2928
  });
2916
2929
 
2917
2930
  it('allows unrequested bids if config.allowUnknownBidderCodes', function () {
@@ -2925,17 +2938,35 @@ describe('S2S Adapter', function () {
2925
2938
  expect(addBidResponse.calledWith(sinon.match.any, sinon.match({ bidderCode: 'unknown' }))).to.be.true;
2926
2939
  });
2927
2940
 
2928
- it('uses "null" request\'s ID for all responses, when a null request is present', function () {
2929
- const cfg = {...CONFIG, allowUnknownBidderCodes: true};
2930
- config.setConfig({s2sConfig: cfg});
2931
- const req = {...REQUEST, s2sConfig: cfg, ad_units: [{...REQUEST.ad_units[0], bids: [{bidder: null, bid_id: 'testId'}]}]};
2932
- const bidReq = {...BID_REQUESTS[0], bidderCode: null, bids: [{...BID_REQUESTS[0].bids[0], bidder: null, bidId: 'testId'}]}
2933
- adapter.callBids(req, [bidReq], addBidResponse, done, ajax);
2934
- const response = deepClone(RESPONSE_OPENRTB);
2935
- response.seatbid[0].seat = 'storedImpression';
2936
- server.requests[0].respond(200, {}, JSON.stringify(response));
2937
- sinon.assert.calledWith(addBidResponse, sinon.match.any, sinon.match({bidderCode: 'storedImpression', requestId: 'testId'}))
2938
- });
2941
+ describe('stored impressions', () => {
2942
+ let bidReq, response;
2943
+
2944
+ function mks2sReq(s2sConfig = CONFIG) {
2945
+ return {...REQUEST, s2sConfig, ad_units: [{...REQUEST.ad_units[0], bids: [{bidder: null, bid_id: 'testId'}]}]};
2946
+ }
2947
+
2948
+ beforeEach(() => {
2949
+ bidReq = {...BID_REQUESTS[0], bidderCode: null, bids: [{...BID_REQUESTS[0].bids[0], bidder: null, bidId: 'testId'}]}
2950
+ response = deepClone(RESPONSE_OPENRTB);
2951
+ response.seatbid[0].seat = 'storedImpression';
2952
+ })
2953
+
2954
+ it('uses "null" request\'s ID for all responses, when a null request is present', function () {
2955
+ const cfg = {...CONFIG, allowUnknownBidderCodes: true};
2956
+ config.setConfig({s2sConfig: cfg});
2957
+ adapter.callBids(mks2sReq(cfg), [bidReq], addBidResponse, done, ajax);
2958
+ server.requests[0].respond(200, {}, JSON.stringify(response));
2959
+ sinon.assert.calledWith(addBidResponse, sinon.match.any, sinon.match({bidderCode: 'storedImpression', requestId: 'testId'}))
2960
+ });
2961
+
2962
+ it('does not allow null requests (= stored impressions) if allowUnknownBidderCodes is not set', () => {
2963
+ config.setConfig({s2sConfig: CONFIG});
2964
+ adapter.callBids(mks2sReq(), [bidReq], addBidResponse, done, ajax);
2965
+ server.requests[0].respond(200, {}, JSON.stringify(response));
2966
+ expect(addBidResponse.called).to.be.false;
2967
+ expect(addBidResponse.reject.calledOnce).to.be.true;
2968
+ });
2969
+ })
2939
2970
 
2940
2971
  it('copies ortb2Imp to response when there is only a null bid', () => {
2941
2972
  const cfg = {...CONFIG};
@@ -3481,5 +3512,161 @@ describe('S2S Adapter', function () {
3481
3512
  const parsedRequestBody = JSON.parse(server.requests[1].requestBody);
3482
3513
  expect(parsedRequestBody.cur).to.deep.equal(['JPY']);
3483
3514
  });
3515
+
3516
+ it('should correctly set the floorMin key when multiple bids with various bidfloors exist', function () {
3517
+ const s2sConfig = Object.assign({}, CONFIG, {
3518
+ extPrebid: {
3519
+ floors: {
3520
+ enabled: true
3521
+ }
3522
+ },
3523
+ bidders: ['b1', 'b2']
3524
+ });
3525
+
3526
+ const bidderRequests = [
3527
+ {
3528
+ ...BID_REQUESTS[0],
3529
+ bidderCode: 'b1',
3530
+ bids: [{
3531
+ bidder: 'b1',
3532
+ bidId: 1,
3533
+ getFloor: () => ({
3534
+ currency: 'US',
3535
+ floor: 1.23
3536
+ })
3537
+ }]
3538
+ },
3539
+ {
3540
+ ...BID_REQUESTS[0],
3541
+ bidderCode: 'b2',
3542
+ bids: [{
3543
+ bidder: 'b2',
3544
+ bidId: 2,
3545
+ getFloor: () => ({
3546
+ currency: 'EUR',
3547
+ floor: 3.21
3548
+ })
3549
+ }],
3550
+ }
3551
+ ];
3552
+
3553
+ const adUnits = [
3554
+ {
3555
+ code: 'au1',
3556
+ transactionId: 't1',
3557
+ mediaTypes: {
3558
+ banner: {sizes: [1, 1]}
3559
+ },
3560
+ bids: [{bidder: 'b1', bid_id: 1}]
3561
+ },
3562
+ {
3563
+ code: 'au2',
3564
+ transactionId: 't2',
3565
+ bids: [{bidder: 'b2', bid_id: 2}],
3566
+ mediaTypes: {
3567
+ banner: {sizes: [1, 1]}
3568
+ }
3569
+ }
3570
+ ];
3571
+
3572
+ const _config = {
3573
+ s2sConfig: s2sConfig,
3574
+ };
3575
+
3576
+ const s2sBidRequest = utils.deepClone(REQUEST);
3577
+ s2sBidRequest.s2sConfig = s2sConfig;
3578
+ s2sBidRequest.ad_units = adUnits;
3579
+ config.setConfig(_config);
3580
+
3581
+ adapter.callBids(s2sBidRequest, bidderRequests, addBidResponse, done, ajax);
3582
+ const requestBid = JSON.parse(server.requests[0].requestBody);
3583
+ expect(requestBid.imp[0].bidfloor).to.equal(1.23);
3584
+ expect(requestBid.imp[1].bidfloor).to.equal(3.21);
3585
+
3586
+ // first imp floorCur should be set
3587
+ expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: true, floorMin: 1.23, floorMinCur: 'US' });
3588
+ });
3589
+
3590
+ it('should correctly set the floorMin key when multiple bids with various bidfloors exist and ortb2Imp contains the lowest floorMin', function () {
3591
+ const s2sConfig = Object.assign({}, CONFIG, {
3592
+ extPrebid: {
3593
+ floors: {
3594
+ enabled: true
3595
+ }
3596
+ },
3597
+ bidders: ['b1', 'b2']
3598
+ });
3599
+
3600
+ const bidderRequests = [
3601
+ {
3602
+ ...BID_REQUESTS[0],
3603
+ bidderCode: 'b1',
3604
+ bids: [{
3605
+ bidder: 'b1',
3606
+ bidId: 1,
3607
+ getFloor: () => ({
3608
+ currency: 'CUR',
3609
+ floor: 1.23
3610
+ })
3611
+ }]
3612
+ },
3613
+ {
3614
+ ...BID_REQUESTS[0],
3615
+ bidderCode: 'b2',
3616
+ bids: [{
3617
+ bidder: 'b2',
3618
+ bidId: 2,
3619
+ getFloor: () => ({
3620
+ currency: 'CUR',
3621
+ floor: 3.21
3622
+ })
3623
+ }],
3624
+ }
3625
+ ];
3626
+
3627
+ const adUnits = [
3628
+ {
3629
+ code: 'au1',
3630
+ transactionId: 't1',
3631
+ mediaTypes: {
3632
+ banner: {sizes: [1, 1]}
3633
+ },
3634
+ bids: [{bidder: 'b1', bid_id: 1}]
3635
+ },
3636
+ {
3637
+ code: 'au2',
3638
+ transactionId: 't2',
3639
+ bids: [{bidder: 'b2', bid_id: 2}],
3640
+ mediaTypes: {
3641
+ banner: {sizes: [1, 1]}
3642
+ },
3643
+ ortb2Imp: {
3644
+ ext: {
3645
+ prebid: {
3646
+ floors: {
3647
+ floorMin: 1
3648
+ }
3649
+ }
3650
+ }
3651
+ }
3652
+ }
3653
+ ];
3654
+
3655
+ const _config = {
3656
+ s2sConfig: s2sConfig,
3657
+ };
3658
+
3659
+ const s2sBidRequest = utils.deepClone(REQUEST);
3660
+ s2sBidRequest.s2sConfig = s2sConfig;
3661
+ s2sBidRequest.ad_units = adUnits;
3662
+ config.setConfig(_config);
3663
+
3664
+ adapter.callBids(s2sBidRequest, bidderRequests, addBidResponse, done, ajax);
3665
+ const requestBid = JSON.parse(server.requests[0].requestBody);
3666
+ expect(requestBid.imp[0].bidfloor).to.equal(1.23);
3667
+ expect(requestBid.imp[1].bidfloor).to.equal(3.21);
3668
+
3669
+ expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: true, floorMin: 1, floorMinCur: 'CUR' });
3670
+ });
3484
3671
  });
3485
3672
  });
@@ -1665,7 +1665,7 @@ describe('the price floors module', function () {
1665
1665
  });
1666
1666
  describe('bidResponseHook tests', function () {
1667
1667
  const AUCTION_ID = '123456';
1668
- let returnedBidResponse, indexStub;
1668
+ let returnedBidResponse, indexStub, reject;
1669
1669
  let adUnit = {
1670
1670
  transactionId: 'au',
1671
1671
  code: 'test_div_1'
@@ -1681,6 +1681,7 @@ describe('the price floors module', function () {
1681
1681
  };
1682
1682
  beforeEach(function () {
1683
1683
  returnedBidResponse = {};
1684
+ reject = sinon.stub().returns({status: 'rejected'});
1684
1685
  indexStub = sinon.stub(auctionManager, 'index');
1685
1686
  indexStub.get(() => stubAuctionIndex({adUnits: [adUnit]}));
1686
1687
  });
@@ -1693,7 +1694,7 @@ describe('the price floors module', function () {
1693
1694
  let next = (adUnitCode, bid) => {
1694
1695
  returnedBidResponse = bid;
1695
1696
  };
1696
- addBidResponseHook(next, bidResp.adUnitCode, Object.assign(createBid(CONSTANTS.STATUS.GOOD, {auctionId: AUCTION_ID}), bidResp));
1697
+ addBidResponseHook(next, bidResp.adUnitCode, Object.assign(createBid(CONSTANTS.STATUS.GOOD, {auctionId: AUCTION_ID}), bidResp), reject);
1697
1698
  };
1698
1699
  it('continues with the auction if not floors data is present without any flooring', function () {
1699
1700
  runBidResponse();
@@ -1710,9 +1711,8 @@ describe('the price floors module', function () {
1710
1711
  _floorDataForAuction[AUCTION_ID] = utils.deepClone(basicFloorConfig);
1711
1712
  _floorDataForAuction[AUCTION_ID].data.values = { 'banner': 1.0 };
1712
1713
  runBidResponse();
1713
- expect(returnedBidResponse).to.haveOwnProperty('floorData');
1714
- expect(returnedBidResponse.status).to.equal(CONSTANTS.BID_STATUS.BID_REJECTED);
1715
- expect(returnedBidResponse.cpm).to.equal(0);
1714
+ expect(reject.calledOnce).to.be.true;
1715
+ expect(returnedBidResponse.status).to.equal('rejected');
1716
1716
  });
1717
1717
  it('if it finds a rule and does not floor should update the bid accordingly', function () {
1718
1718
  _floorDataForAuction[AUCTION_ID] = utils.deepClone(basicFloorConfig);
@@ -4,6 +4,7 @@ import rubiconAnalyticsAdapter, {
4
4
  getHostNameFromReferer,
5
5
  storage,
6
6
  rubiConf,
7
+ resetRubiConf
7
8
  } from 'modules/rubiconAnalyticsAdapter.js';
8
9
  import CONSTANTS from 'src/constants.json';
9
10
  import { config } from 'src/config.js';
@@ -667,6 +668,7 @@ describe('rubicon analytics adapter', function () {
667
668
  expect(utils.generateUUID.called).to.equal(true);
668
669
  });
669
670
  it('should merge in and preserve older set configs', function () {
671
+ resetRubiConf();
670
672
  config.setConfig({
671
673
  rubicon: {
672
674
  wrapperName: '1001_general',
@@ -689,7 +691,6 @@ describe('rubicon analytics adapter', function () {
689
691
  fpkvs: {
690
692
  source: 'fb'
691
693
  },
692
- updatePageView: true
693
694
  });
694
695
 
695
696
  // update it with stuff
@@ -714,7 +715,6 @@ describe('rubicon analytics adapter', function () {
714
715
  source: 'fb',
715
716
  link: 'email'
716
717
  },
717
- updatePageView: true
718
718
  });
719
719
 
720
720
  // overwriting specific edge keys should update them
@@ -740,7 +740,6 @@ describe('rubicon analytics adapter', function () {
740
740
  link: 'iMessage',
741
741
  source: 'twitter'
742
742
  },
743
- updatePageView: true
744
743
  });
745
744
  });
746
745
  });
@@ -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);
@@ -4,7 +4,7 @@ import {config} from '../../../src/config'
4
4
  import * as utils from '../../../src/utils'
5
5
 
6
6
  describe('Taboola Adapter', function () {
7
- let hasLocalStorage, cookiesAreEnabled, getDataFromLocalStorage, localStorageIsEnabled, getCookie;
7
+ let hasLocalStorage, cookiesAreEnabled, getDataFromLocalStorage, localStorageIsEnabled, getCookie, commonBidRequest;
8
8
 
9
9
  beforeEach(() => {
10
10
  hasLocalStorage = sinon.stub(userData.storageManager, 'hasLocalStorage');
@@ -12,7 +12,7 @@ describe('Taboola Adapter', function () {
12
12
  getCookie = sinon.stub(userData.storageManager, 'getCookie');
13
13
  getDataFromLocalStorage = sinon.stub(userData.storageManager, 'getDataFromLocalStorage');
14
14
  localStorageIsEnabled = sinon.stub(userData.storageManager, 'localStorageIsEnabled');
15
-
15
+ commonBidRequest = createBidRequest();
16
16
  $$PREBID_GLOBAL$$.bidderSettings = {
17
17
  taboola: {
18
18
  storageAllowed: true
@@ -30,19 +30,19 @@ describe('Taboola Adapter', function () {
30
30
  $$PREBID_GLOBAL$$.bidderSettings = {};
31
31
  })
32
32
 
33
- const commonBidRequest = {
33
+ const displayBidRequestParams = {
34
+ sizes: [[300, 250], [300, 600]]
35
+ }
36
+
37
+ const createBidRequest = () => ({
34
38
  bidder: 'taboola',
35
39
  params: {
36
40
  publisherId: 'publisherId',
37
41
  tagId: 'placement name'
38
42
  },
39
- bidId: 'aa43860a-4644-442a-b5e0-93f268cs4d19',
40
- auctionId: '65746dca-26f3-4186-be13-dfa63469b1b7',
41
- }
42
-
43
- const displayBidRequestParams = {
44
- sizes: [[300, 250], [300, 600]]
45
- }
43
+ bidId: utils.generateUUID(),
44
+ auctionId: utils.generateUUID(),
45
+ });
46
46
 
47
47
  describe('isBidRequestValid', function () {
48
48
  it('should fail when bid is invalid - tagId isn`t defined', function () {
@@ -132,7 +132,7 @@ describe('Taboola Adapter', function () {
132
132
 
133
133
  describe('buildRequests', function () {
134
134
  const defaultBidRequest = {
135
- ...commonBidRequest,
135
+ ...createBidRequest(),
136
136
  ...displayBidRequestParams,
137
137
  }
138
138
 
@@ -441,6 +441,105 @@ describe('Taboola Adapter', function () {
441
441
  overriddenServerResponse.body.seatbid[0].bid = bid;
442
442
  });
443
443
 
444
+ it('should interpret multi impression request', function () {
445
+ const multiRequest = {
446
+ bids: [
447
+ {
448
+ ...createBidRequest(),
449
+ ...displayBidRequestParams
450
+ },
451
+ {
452
+ ...createBidRequest(),
453
+ ...displayBidRequestParams
454
+ }
455
+ ]
456
+ }
457
+
458
+ const multiServerResponse = {
459
+ body: {
460
+ 'id': '49ffg4d58ef9a163a69fhgfghd4fad03621b9e036f24f7_15',
461
+ 'seatbid': [
462
+ {
463
+ 'bid': [
464
+ {
465
+ 'id': '0b3dd94348-134b-435f-8db5-6bf5afgfc39e86c',
466
+ 'impid': '2',
467
+ 'price': 0.342068,
468
+ 'adid': '2785119545551083381',
469
+ 'adm': 'ADM2',
470
+ 'adomain': [
471
+ 'example.xyz'
472
+ ],
473
+ 'cid': '15744349',
474
+ 'crid': '278195503434041083381',
475
+ 'w': 300,
476
+ 'h': 250,
477
+ 'exp': 60,
478
+ 'lurl': 'http://us-trc.taboola.com/sample'
479
+ },
480
+ {
481
+ 'id': '0b3dd94348-134b-435f-8db5-6bf5afgfc39e86c',
482
+ 'impid': '1',
483
+ 'price': 0.342068,
484
+ 'adid': '2785119545551083381',
485
+ 'adm': 'ADM1',
486
+ 'adomain': [
487
+ 'example.xyz'
488
+ ],
489
+ 'cid': '15744349',
490
+ 'crid': '278195503434041083381',
491
+ 'w': 300,
492
+ 'h': 250,
493
+ 'exp': 60,
494
+ 'lurl': 'http://us-trc.taboola.com/sample'
495
+ }
496
+ ],
497
+ 'seat': '14204545260'
498
+ }
499
+ ],
500
+ 'bidid': 'da43860a-4644-442a-b5e0-93f268cf8d19',
501
+ 'cur': 'USD'
502
+ }
503
+ };
504
+
505
+ const [bid] = multiServerResponse.body.seatbid[0].bid;
506
+ const expectedRes = [
507
+ {
508
+ requestId: multiRequest.bids[1].bidId,
509
+ cpm: bid.price,
510
+ creativeId: bid.crid,
511
+ ttl: 60,
512
+ netRevenue: true,
513
+ currency: multiServerResponse.body.cur,
514
+ mediaType: 'banner',
515
+ ad: multiServerResponse.body.seatbid[0].bid[0].adm,
516
+ width: bid.w,
517
+ height: bid.h,
518
+ meta: {
519
+ 'advertiserDomains': bid.adomain
520
+ },
521
+ },
522
+ {
523
+ requestId: multiRequest.bids[0].bidId,
524
+ cpm: bid.price,
525
+ creativeId: bid.crid,
526
+ ttl: 60,
527
+ netRevenue: true,
528
+ currency: multiServerResponse.body.cur,
529
+ mediaType: 'banner',
530
+ ad: multiServerResponse.body.seatbid[0].bid[1].adm,
531
+ width: bid.w,
532
+ height: bid.h,
533
+ meta: {
534
+ 'advertiserDomains': bid.adomain
535
+ },
536
+ }
537
+ ]
538
+
539
+ const res = spec.interpretResponse(multiServerResponse, multiRequest)
540
+ expect(res).to.deep.equal(expectedRes)
541
+ });
542
+
444
543
  it('should interpret display response', function () {
445
544
  const [bid] = serverResponse.body.seatbid[0].bid;
446
545
  const expectedRes = [
@@ -449,7 +548,7 @@ describe('Taboola Adapter', function () {
449
548
  cpm: bid.price,
450
549
  creativeId: bid.crid,
451
550
  ttl: 60,
452
- netRevenue: false,
551
+ netRevenue: true,
453
552
  currency: serverResponse.body.cur,
454
553
  mediaType: 'banner',
455
554
  ad: bid.adm,
@@ -475,7 +574,7 @@ describe('Taboola Adapter', function () {
475
574
  cpm: bid.price,
476
575
  creativeId: bid.crid,
477
576
  ttl: 125,
478
- netRevenue: false,
577
+ netRevenue: true,
479
578
  currency: serverResponse.body.cur,
480
579
  mediaType: 'banner',
481
580
  ad: bid.adm,