prebid.js 7.25.0 → 7.27.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 (353) 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/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  9. package/dist/adlooxAdServerVideo.js +1 -1
  10. package/dist/adlooxAnalyticsAdapter.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/admaticBidAdapter.js +1 -1
  13. package/dist/admixerBidAdapter.js +1 -1
  14. package/dist/adomikAnalyticsAdapter.js +1 -1
  15. package/dist/adrelevantisBidAdapter.js +1 -1
  16. package/dist/adtrgtmeBidAdapter.js +1 -1
  17. package/dist/adxcgAnalyticsAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  20. package/dist/aidemBidAdapter.js +1 -0
  21. package/dist/ajaBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/analyticsAdapter.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/beopBidAdapter.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/browsiRtdProvider.js +1 -1
  38. package/dist/bucksenseBidAdapter.js +1 -1
  39. package/dist/byDataAnalyticsAdapter.js +1 -1
  40. package/dist/captifyRtdProvider.js +1 -0
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/concertAnalyticsAdapter.js +1 -1
  44. package/dist/concertBidAdapter.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 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/datablocksAnalyticsAdapter.js +1 -1
  54. package/dist/dependencies.json +6 -0
  55. package/dist/dfpAdServerVideo.js +1 -1
  56. package/dist/discoveryBidAdapter.js +1 -1
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/eplanningAnalyticsAdapter.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/fintezaAnalyticsAdapter.js +1 -1
  62. package/dist/fluctBidAdapter.js +1 -1
  63. package/dist/ftrackIdSystem.js +1 -1
  64. package/dist/gdprEnforcement.js +1 -1
  65. package/dist/genericAnalyticsAdapter.js +1 -0
  66. package/dist/geoedgeRtdProvider.js +1 -1
  67. package/dist/glimpseBidAdapter.js +1 -1
  68. package/dist/glomexBidAdapter.js +1 -1
  69. package/dist/gmosspBidAdapter.js +1 -1
  70. package/dist/goldbachBidAdapter.js +1 -1
  71. package/dist/googleAnalyticsAdapter.js +1 -1
  72. package/dist/gravitoIdSystem.js +1 -1
  73. package/dist/gridBidAdapter.js +1 -1
  74. package/dist/gridNMBidAdapter.js +1 -1
  75. package/dist/growthCodeAnalyticsAdapter.js +1 -0
  76. package/dist/gumgumBidAdapter.js +1 -1
  77. package/dist/h12mediaBidAdapter.js +1 -1
  78. package/dist/hadronAnalyticsAdapter.js +1 -1
  79. package/dist/id5AnalyticsAdapter.js +1 -1
  80. package/dist/id5IdSystem.js +1 -1
  81. package/dist/impactifyBidAdapter.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/jwplayerRtdProvider.js +1 -1
  89. package/dist/kargoAnalyticsAdapter.js +1 -1
  90. package/dist/kinessoIdSystem.js +1 -1
  91. package/dist/konduitAnalyticsAdapter.js +1 -1
  92. package/dist/kueezBidAdapter.js +1 -1
  93. package/dist/kueezRtbBidAdapter.js +1 -1
  94. package/dist/lassoBidAdapter.js +1 -1
  95. package/dist/lifestreetBidAdapter.js +1 -1
  96. package/dist/limelightDigitalBidAdapter.js +1 -1
  97. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  98. package/dist/liveIntentIdSystem.js +1 -1
  99. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  100. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  101. package/dist/logicadBidAdapter.js +1 -1
  102. package/dist/loglyliftBidAdapter.js +1 -1
  103. package/dist/lotamePanoramaIdSystem.js +1 -1
  104. package/dist/magniteAnalyticsAdapter.js +1 -1
  105. package/dist/malltvAnalyticsAdapter.js +1 -1
  106. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  107. package/dist/marsmediaBidAdapter.js +1 -1
  108. package/dist/mediafuseBidAdapter.js +1 -1
  109. package/dist/medianetAnalyticsAdapter.js +1 -1
  110. package/dist/mediasquareBidAdapter.js +1 -1
  111. package/dist/mgidBidAdapter.js +1 -1
  112. package/dist/minutemediaBidAdapter.js +1 -1
  113. package/dist/nextMillenniumBidAdapter.js +1 -1
  114. package/dist/nexx360BidAdapter.js +1 -1
  115. package/dist/not-for-prod/prebid.js +240 -202
  116. package/dist/oguryBidAdapter.js +1 -1
  117. package/dist/onetagBidAdapter.js +1 -1
  118. package/dist/ooloAnalyticsAdapter.js +1 -1
  119. package/dist/openxAnalyticsAdapter.js +1 -1
  120. package/dist/optimonAnalyticsAdapter.js +1 -1
  121. package/dist/outbrainBidAdapter.js +1 -1
  122. package/dist/parrableIdSystem.js +1 -1
  123. package/dist/pbsExtensions.js +1 -1
  124. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  125. package/dist/pixfutureBidAdapter.js +1 -1
  126. package/dist/prebid-core.js +1 -1
  127. package/dist/prebidServerBidAdapter.js +1 -1
  128. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  129. package/dist/pubCommonId.js +1 -1
  130. package/dist/pubProvidedIdSystem.js +1 -1
  131. package/dist/publinkIdSystem.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubperfAnalyticsAdapter.js +1 -1
  135. package/dist/pubstackAnalyticsAdapter.js +1 -1
  136. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  137. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  138. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  139. package/dist/pxyzBidAdapter.js +1 -1
  140. package/dist/quantcastBidAdapter.js +1 -1
  141. package/dist/quantcastIdSystem.js +1 -1
  142. package/dist/rasBidAdapter.js +1 -1
  143. package/dist/readpeakBidAdapter.js +1 -1
  144. package/dist/realvuAnalyticsAdapter.js +1 -1
  145. package/dist/redtramBidAdapter.js +1 -0
  146. package/dist/relaidoBidAdapter.js +1 -1
  147. package/dist/relevantAnalyticsAdapter.js +1 -1
  148. package/dist/rhythmoneBidAdapter.js +1 -1
  149. package/dist/riseBidAdapter.js +1 -1
  150. package/dist/rivrAnalyticsAdapter.js +1 -1
  151. package/dist/roxotAnalyticsAdapter.js +1 -1
  152. package/dist/rtbhouseBidAdapter.js +1 -1
  153. package/dist/rtdModule.js +1 -1
  154. package/dist/rubiconAnalyticsAdapter.js +1 -1
  155. package/dist/rubiconBidAdapter.js +1 -1
  156. package/dist/s2sTesting.js +1 -1
  157. package/dist/scaleableAnalyticsAdapter.js +1 -1
  158. package/dist/schain.js +1 -1
  159. package/dist/seedingAllianceBidAdapter.js +1 -1
  160. package/dist/seedtagBidAdapter.js +1 -1
  161. package/dist/sharedIdSystem.js +1 -1
  162. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  163. package/dist/sharethroughBidAdapter.js +1 -1
  164. package/dist/shinezBidAdapter.js +1 -1
  165. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  166. package/dist/smaatoBidAdapter.js +1 -1
  167. package/dist/smartadserverBidAdapter.js +1 -1
  168. package/dist/smartxBidAdapter.js +1 -1
  169. package/dist/smartytechBidAdapter.js +1 -0
  170. package/dist/smilewantedBidAdapter.js +1 -1
  171. package/dist/sonobiAnalyticsAdapter.js +1 -1
  172. package/dist/sonobiBidAdapter.js +1 -1
  173. package/dist/sovrnAnalyticsAdapter.js +1 -1
  174. package/dist/sovrnBidAdapter.js +1 -1
  175. package/dist/sspBCBidAdapter.js +1 -1
  176. package/dist/staqAnalyticsAdapter.js +1 -1
  177. package/dist/sublimeBidAdapter.js +1 -1
  178. package/dist/synacormediaBidAdapter.js +1 -1
  179. package/dist/taboolaBidAdapter.js +1 -1
  180. package/dist/tapadIdSystem.js +1 -1
  181. package/dist/tappxBidAdapter.js +1 -1
  182. package/dist/targetVideoBidAdapter.js +1 -1
  183. package/dist/teadsBidAdapter.js +1 -1
  184. package/dist/teadsIdSystem.js +1 -1
  185. package/dist/terceptAnalyticsAdapter.js +1 -1
  186. package/dist/trionBidAdapter.js +1 -1
  187. package/dist/tripleliftBidAdapter.js +1 -1
  188. package/dist/ttdBidAdapter.js +1 -1
  189. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  190. package/dist/underdogmediaBidAdapter.js +1 -1
  191. package/dist/undertoneBidAdapter.js +1 -1
  192. package/dist/userId.js +1 -1
  193. package/dist/vidazooBidAdapter.js +1 -1
  194. package/dist/videobyteBidAdapter.js +1 -1
  195. package/dist/viqeoBidAdapter.js +1 -0
  196. package/dist/visxBidAdapter.js +1 -1
  197. package/dist/vuukleBidAdapter.js +1 -1
  198. package/dist/weboramaRtdProvider.js +1 -1
  199. package/dist/widespaceBidAdapter.js +1 -1
  200. package/dist/winrBidAdapter.js +1 -1
  201. package/dist/yahoosspBidAdapter.js +1 -1
  202. package/dist/yandexBidAdapter.js +1 -1
  203. package/dist/yieldlabBidAdapter.js +1 -1
  204. package/dist/yieldliftBidAdapter.js +1 -1
  205. package/dist/yieldmoBidAdapter.js +1 -1
  206. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  207. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  208. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  209. package/dist/zeta_global_sspBidAdapter.js +1 -1
  210. package/dist/zeusPrimeRtdProvider.js +31 -0
  211. package/integrationExamples/gpt/captifyRtdProvider_example.html +167 -0
  212. package/integrationExamples/gpt/growthcode.html +134 -0
  213. package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
  214. package/modules/.submodules.json +3 -1
  215. package/modules/admaticBidAdapter.js +116 -58
  216. package/modules/admaticBidAdapter.md +2 -2
  217. package/modules/admixerBidAdapter.js +1 -1
  218. package/modules/aidemBidAdapter.js +492 -0
  219. package/modules/aidemBidAdapter.md +187 -0
  220. package/modules/beopBidAdapter.js +17 -2
  221. package/modules/browsiRtdProvider.js +6 -4
  222. package/modules/bucksenseBidAdapter.js +1 -1
  223. package/modules/captifyRtdProvider.js +146 -0
  224. package/modules/captifyRtdProvider.md +68 -0
  225. package/modules/criteoBidAdapter.js +3 -3
  226. package/modules/discoveryBidAdapter.js +38 -17
  227. package/modules/discoveryBidAdapter.md +7 -6
  228. package/modules/eplanningBidAdapter.js +2 -6
  229. package/modules/fluctBidAdapter.js +5 -0
  230. package/modules/gdprEnforcement.js +26 -24
  231. package/modules/genericAnalyticsAdapter.js +157 -0
  232. package/modules/geoedgeRtdProvider.js +22 -0
  233. package/modules/glomexBidAdapter.js +2 -0
  234. package/modules/gravitoIdSystem.js +3 -4
  235. package/modules/gridBidAdapter.js +441 -23
  236. package/modules/gridNMBidAdapter.js +1 -1
  237. package/modules/growthCodeAnalyticsAdapter.js +176 -0
  238. package/modules/growthCodeAnalyticsAdapter.md +41 -0
  239. package/modules/impactifyBidAdapter.js +19 -1
  240. package/modules/jwplayerRtdProvider.js +1 -2
  241. package/modules/limelightDigitalBidAdapter.js +1 -1
  242. package/modules/minutemediaBidAdapter.md +3 -3
  243. package/modules/nextMillenniumBidAdapter.js +19 -23
  244. package/modules/nexx360BidAdapter.js +264 -138
  245. package/modules/pubCommonId.js +2 -1
  246. package/modules/pubProvidedIdSystem.js +2 -0
  247. package/modules/rasBidAdapter.js +8 -3
  248. package/modules/rasBidAdapter.md +16 -15
  249. package/modules/redtramBidAdapter.js +155 -0
  250. package/modules/redtramBidAdapter.md +33 -0
  251. package/modules/riseBidAdapter.js +15 -0
  252. package/modules/riseBidAdapter.md +3 -3
  253. package/modules/rtbhouseBidAdapter.js +90 -29
  254. package/modules/rubiconBidAdapter.js +2 -1
  255. package/modules/seedtagBidAdapter.js +67 -56
  256. package/modules/seedtagBidAdapter.md +60 -0
  257. package/modules/sharedIdSystem.js +3 -1
  258. package/modules/smartadserverBidAdapter.js +6 -2
  259. package/modules/smartxBidAdapter.js +11 -8
  260. package/modules/smartytechBidAdapter.js +78 -0
  261. package/modules/smartytechBidAdapter.md +44 -0
  262. package/modules/smnBidAdapter.md +52 -0
  263. package/modules/taboolaBidAdapter.js +3 -3
  264. package/modules/taboolaBidAdapter.md +0 -2
  265. package/modules/tappxBidAdapter.js +21 -6
  266. package/modules/tripleliftBidAdapter.js +1 -1
  267. package/modules/ttdBidAdapter.js +8 -3
  268. package/modules/userId/index.js +1 -1
  269. package/modules/vidazooBidAdapter.js +26 -3
  270. package/modules/viqeoBidAdapter.js +180 -0
  271. package/modules/viqeoBidAdapter.md +56 -0
  272. package/modules/yandexBidAdapter.js +85 -19
  273. package/modules/yandexBidAdapter.md +7 -7
  274. package/modules/yieldlabBidAdapter.js +29 -12
  275. package/modules/yieldliftBidAdapter.js +3 -3
  276. package/modules/yieldoneBidAdapter.js +60 -8
  277. package/modules/yieldoneBidAdapter.md +109 -9
  278. package/modules/zeta_global_sspBidAdapter.js +4 -0
  279. package/modules/zeusPrimeRtdProvider.js +357 -0
  280. package/modules/zeusPrimeRtdProvider.md +60 -0
  281. package/package.json +1 -1
  282. package/src/adloader.js +0 -1
  283. package/src/auction.js +19 -3
  284. package/src/consentHandler.js +8 -0
  285. package/src/events.js +4 -0
  286. package/src/native.js +31 -20
  287. package/src/refererDetection.js +6 -1
  288. package/src/storageManager.js +6 -3
  289. package/test/helpers/analytics.js +34 -0
  290. package/test/mocks/analyticsStub.js +3 -1
  291. package/test/spec/AnalyticsAdapter_spec.js +119 -116
  292. package/test/spec/auctionmanager_spec.js +86 -0
  293. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
  294. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
  295. package/test/spec/modules/admaticBidAdapter_spec.js +262 -3
  296. package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
  297. package/test/spec/modules/beopBidAdapter_spec.js +52 -0
  298. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
  299. package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
  300. package/test/spec/modules/captifyRtdProvider_spec.js +253 -0
  301. package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
  302. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -8
  303. package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
  304. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
  305. package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
  306. package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
  307. package/test/spec/modules/fpdModule_spec.js +1 -1
  308. package/test/spec/modules/gdprEnforcement_spec.js +115 -68
  309. package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
  310. package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
  311. package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
  312. package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
  313. package/test/spec/modules/gridBidAdapter_spec.js +289 -1
  314. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
  315. package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
  316. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
  317. package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
  318. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
  319. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
  320. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
  321. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +4 -3
  322. package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
  323. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
  324. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
  325. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
  326. package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
  327. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
  328. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
  329. package/test/spec/modules/rasBidAdapter_spec.js +5 -1
  330. package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
  331. package/test/spec/modules/riseBidAdapter_spec.js +24 -0
  332. package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
  333. package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
  334. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
  335. package/test/spec/modules/smartadserverBidAdapter_spec.js +80 -0
  336. package/test/spec/modules/smartxBidAdapter_spec.js +32 -0
  337. package/test/spec/modules/smartytechBidAdapter_spec.js +162 -0
  338. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
  339. package/test/spec/modules/taboolaBidAdapter_spec.js +0 -77
  340. package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
  341. package/test/spec/modules/ttdBidAdapter_spec.js +27 -0
  342. package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
  343. package/test/spec/modules/viqeoBidAdapter_spec.js +124 -0
  344. package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
  345. package/test/spec/modules/yieldlabBidAdapter_spec.js +174 -20
  346. package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
  347. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
  348. package/test/spec/modules/yieldoneBidAdapter_spec.js +30 -6
  349. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +16 -1
  350. package/test/spec/modules/zeusPrimeRtdProvider_spec.js +410 -0
  351. package/test/spec/native_spec.js +68 -56
  352. package/test/spec/refererDetection_spec.js +45 -7
  353. package/test/spec/unit/core/storageManager_spec.js +2 -1
@@ -4,6 +4,7 @@ import optimonAnalyticsAdapter from '../../../modules/optimonAnalyticsAdapter.js
4
4
  import adapterManager from 'src/adapterManager';
5
5
  import * as events from 'src/events';
6
6
  import constants from 'src/constants.json'
7
+ import {expectEvents} from '../../helpers/analytics.js';
7
8
 
8
9
  const AD_UNIT_CODE = 'demo-adunit-1';
9
10
  const PUBLISHER_CONFIG = {
@@ -14,14 +15,12 @@ const PUBLISHER_CONFIG = {
14
15
 
15
16
  describe('Optimon Analytics Adapter', () => {
16
17
  const optmn_currentWindow = utils.getWindowSelf();
17
- let optmn_queue = [];
18
18
 
19
19
  beforeEach(() => {
20
- optmn_currentWindow.OptimonAnalyticsAdapter = (...optmn_args) => optmn_queue.push(optmn_args);
20
+ optmn_currentWindow.OptimonAnalyticsAdapter = sinon.stub()
21
21
  adapterManager.enableAnalytics({
22
22
  provider: 'optimon'
23
23
  });
24
- optmn_queue = []
25
24
  });
26
25
 
27
26
  afterEach(() => {
@@ -29,13 +28,6 @@ describe('Optimon Analytics Adapter', () => {
29
28
  });
30
29
 
31
30
  it('should forward all events to the queue', () => {
32
- const optmn_arguments = [AD_UNIT_CODE, PUBLISHER_CONFIG];
33
-
34
- events.emit(constants.EVENTS.AUCTION_END, optmn_arguments)
35
- events.emit(constants.EVENTS.BID_TIMEOUT, optmn_arguments)
36
- events.emit(constants.EVENTS.BID_WON, optmn_arguments)
37
-
38
- // 3 Optimon events + 1 Clean.io event
39
- expect(optmn_queue.length).to.eql(4);
31
+ expectEvents().to.beBundledTo(optmn_currentWindow.OptimonAnalyticsAdapter);
40
32
  });
41
33
  });
@@ -52,19 +52,12 @@ describe('Piano DMP Analytics Adapter', () => {
52
52
 
53
53
  // Then
54
54
  const callQueue = (window.cX || {}).callQueue;
55
- const billableEventIndex = callQueue.findIndex(([, params]) => params.eventType === constants.EVENTS.BILLABLE_EVENT);
56
- if (billableEventIndex > -1) {
57
- callQueue.splice(billableEventIndex, 1);
58
- }
59
55
 
60
- expect(callQueue).to.be.an('array');
61
- expect(callQueue.length).to.equal(testEvents.length);
62
-
63
- callQueue.forEach(([method, params], index) => {
56
+ testEvents.forEach(({event, args}) => {
57
+ const [method, params] = callQueue.filter(item => item[1].eventType === event)[0];
64
58
  expect(method).to.equal('prebid');
65
- expect(params.eventType).to.equal(testEvents[index].event);
66
- expect(params.params).to.deep.equal(testEvents[index].args);
67
- });
59
+ expect(params.params).to.deep.equal(args);
60
+ })
68
61
  });
69
62
  });
70
63
  });
@@ -1,9 +1,8 @@
1
- import prebidmanagerAnalytics, {
2
- storage
3
- } from 'modules/prebidmanagerAnalyticsAdapter.js';
1
+ import prebidmanagerAnalytics, {storage} from 'modules/prebidmanagerAnalyticsAdapter.js';
4
2
  import {expect} from 'chai';
5
3
  import {server} from 'test/mocks/xhr.js';
6
4
  import * as utils from 'src/utils.js';
5
+ import {expectEvents} from '../../helpers/analytics.js';
7
6
 
8
7
  let events = require('src/events');
9
8
  let constants = require('src/constants.json');
@@ -95,15 +94,7 @@ describe('Prebid Manager Analytics Adapter', function () {
95
94
  }
96
95
  });
97
96
 
98
- events.emit(constants.EVENTS.AUCTION_INIT, {});
99
- events.emit(constants.EVENTS.BID_REQUESTED, {});
100
- events.emit(constants.EVENTS.BID_RESPONSE, {});
101
- events.emit(constants.EVENTS.BID_WON, {});
102
- events.emit(constants.EVENTS.AUCTION_END, {});
103
- events.emit(constants.EVENTS.BID_TIMEOUT, {});
104
-
105
- // 6 Prebid Manager events + 1 Clean.io event
106
- sinon.assert.callCount(prebidmanagerAnalytics.track, 7);
97
+ expectEvents().to.beTrackedBy(prebidmanagerAnalytics.track);
107
98
  });
108
99
  });
109
100
 
@@ -1,9 +1,10 @@
1
1
  import pubperfAnalytics from 'modules/pubperfAnalyticsAdapter.js';
2
- import { expect } from 'chai';
3
- import { server } from 'test/mocks/xhr.js';
2
+ import {expect} from 'chai';
3
+ import {server} from 'test/mocks/xhr.js';
4
+ import {expectEvents, fireEvents} from '../../helpers/analytics.js';
5
+
4
6
  let events = require('src/events');
5
7
  let utils = require('src/utils.js');
6
- let constants = require('src/constants.json');
7
8
 
8
9
  describe('Pubperf Analytics Adapter', function() {
9
10
  describe('Prebid Manager Analytic tests', function() {
@@ -22,13 +23,7 @@ describe('Pubperf Analytics Adapter', function() {
22
23
  provider: 'pubperf'
23
24
  });
24
25
 
25
- events.emit(constants.EVENTS.AUCTION_INIT, {});
26
- events.emit(constants.EVENTS.BID_REQUESTED, {});
27
- events.emit(constants.EVENTS.BID_RESPONSE, {});
28
- events.emit(constants.EVENTS.BID_WON, {});
29
- events.emit(constants.EVENTS.AUCTION_END, {});
30
- events.emit(constants.EVENTS.BID_TIMEOUT, {});
31
-
26
+ fireEvents();
32
27
  expect(server.requests.length).to.equal(0);
33
28
  expect(utils.logError.called).to.equal(true);
34
29
  });
@@ -42,15 +37,7 @@ describe('Pubperf Analytics Adapter', function() {
42
37
  provider: 'pubperf'
43
38
  });
44
39
 
45
- events.emit(constants.EVENTS.AUCTION_INIT, {});
46
- events.emit(constants.EVENTS.BID_REQUESTED, {});
47
- events.emit(constants.EVENTS.BID_RESPONSE, {});
48
- events.emit(constants.EVENTS.BID_WON, {});
49
- events.emit(constants.EVENTS.AUCTION_END, {});
50
- events.emit(constants.EVENTS.BID_TIMEOUT, {});
51
-
52
- // 6 Pubperf events + 1 Clean.io event
53
- sinon.assert.callCount(pubperfAnalytics.track, 7);
40
+ expectEvents().to.beTrackedBy(pubperfAnalytics.track);
54
41
  });
55
42
  });
56
43
  });
@@ -3,17 +3,16 @@ import pubstackAnalytics from '../../../modules/pubstackAnalyticsAdapter.js';
3
3
  import adapterManager from 'src/adapterManager';
4
4
  import * as events from 'src/events';
5
5
  import constants from 'src/constants.json'
6
+ import {expectEvents} from '../../helpers/analytics.js';
6
7
 
7
8
  describe('Pubstack Analytics Adapter', () => {
8
9
  const scope = utils.getWindowSelf();
9
- let queue = [];
10
10
 
11
11
  beforeEach(() => {
12
- scope.PubstackAnalytics = (...args) => queue.push(args);
12
+ scope.PubstackAnalytics = sinon.stub();
13
13
  adapterManager.enableAnalytics({
14
14
  provider: 'pubstack'
15
15
  });
16
- queue = []
17
16
  });
18
17
 
19
18
  afterEach(() => {
@@ -21,19 +20,6 @@ describe('Pubstack Analytics Adapter', () => {
21
20
  });
22
21
 
23
22
  it('should forward all events to the queue', () => {
24
- // Given
25
- const args = 'any-args'
26
-
27
- // When
28
- events.emit(constants.EVENTS.AUCTION_END, args)
29
- events.emit(constants.EVENTS.BID_REQUESTED, args)
30
- events.emit(constants.EVENTS.BID_ADJUSTMENT, args)
31
- events.emit(constants.EVENTS.BID_RESPONSE, args)
32
- events.emit(constants.EVENTS.BID_WON, args)
33
- events.emit(constants.EVENTS.NO_BID, args)
34
-
35
- // Then
36
- // 6 Pubstack events + 1 Clean.io event
37
- expect(queue.length).to.eql(7);
23
+ expectEvents().to.beBundledTo(scope.PubstackAnalytics);
38
24
  });
39
25
  });
@@ -1,6 +1,7 @@
1
- import { expect } from 'chai';
1
+ import {expect} from 'chai';
2
2
  import pubwiseAnalytics from 'modules/pubwiseAnalyticsAdapter.js';
3
- import {server} from 'test/mocks/xhr.js';
3
+ import {expectEvents} from '../../helpers/analytics.js';
4
+
4
5
  let events = require('src/events');
5
6
  let adapterManager = require('src/adapterManager').default;
6
7
  let constants = require('src/constants.json');
@@ -58,23 +59,16 @@ describe('PubWise Prebid Analytics', function () {
58
59
 
59
60
  sandbox.spy(pubwiseAnalytics, 'track');
60
61
 
61
- // sent
62
- events.emit(constants.EVENTS.AUCTION_INIT, mock.AUCTION_INIT);
63
- events.emit(constants.EVENTS.BID_REQUESTED, {});
64
- events.emit(constants.EVENTS.BID_RESPONSE, {});
65
- events.emit(constants.EVENTS.BID_WON, {});
66
- events.emit(constants.EVENTS.AD_RENDER_FAILED, {});
67
- events.emit(constants.EVENTS.TCF2_ENFORCEMENT, {});
68
- events.emit(constants.EVENTS.BID_TIMEOUT, {});
69
-
70
- // forces flush
71
- events.emit(constants.EVENTS.AUCTION_END, {});
72
-
73
- // eslint-disable-next-line
74
- //console.log(requests);
75
-
76
- /* testing for 6 calls, including the 2 we're not currently tracking */
77
- sandbox.assert.callCount(pubwiseAnalytics.track, 8);
62
+ expectEvents([
63
+ constants.EVENTS.AUCTION_INIT,
64
+ constants.EVENTS.BID_REQUESTED,
65
+ constants.EVENTS.BID_RESPONSE,
66
+ constants.EVENTS.BID_WON,
67
+ constants.EVENTS.AD_RENDER_FAILED,
68
+ constants.EVENTS.TCF2_ENFORCEMENT,
69
+ constants.EVENTS.BID_TIMEOUT,
70
+ constants.EVENTS.AUCTION_END,
71
+ ]).to.beTrackedBy(pubwiseAnalytics.track);
78
72
  });
79
73
 
80
74
  it('should initialize the auction properly', function () {
@@ -59,7 +59,10 @@ describe('rasBidAdapter', function () {
59
59
  area: 'areatest',
60
60
  site: 'test',
61
61
  slotSequence: '0',
62
- network: '4178463'
62
+ network: '4178463',
63
+ customParams: {
64
+ test: 'name=value'
65
+ }
63
66
  }
64
67
  };
65
68
  const bid2 = {
@@ -98,6 +101,7 @@ describe('rasBidAdapter', function () {
98
101
  expect(requests[0].url).to.have.string('euconsent=some-consent-string');
99
102
  expect(requests[0].url).to.have.string('du=https%3A%2F%2Fexample.com%2F');
100
103
  expect(requests[0].url).to.have.string('dr=https%3A%2F%2Fexample.org%2F');
104
+ expect(requests[0].url).to.have.string('test=name%3Dvalue');
101
105
  });
102
106
 
103
107
  it('should return empty consent string when undefined', function () {
@@ -0,0 +1,256 @@
1
+ import {expect} from 'chai';
2
+ import {spec} from '../../../modules/redtramBidAdapter.js';
3
+ import { BANNER } from '../../../src/mediaTypes.js';
4
+ import * as utils from '../../../src/utils.js';
5
+
6
+ describe('RedtramBidAdapter', function () {
7
+ const bid = {
8
+ bidId: '23dc19818e5293',
9
+ bidder: 'redtram',
10
+ mediaTypes: {
11
+ [BANNER]: {
12
+ sizes: [[300, 250]]
13
+ }
14
+ },
15
+ params: {
16
+ placementId: 23611,
17
+ }
18
+ };
19
+
20
+ const bidderRequest = {
21
+ refererInfo: {
22
+ referer: 'test.com'
23
+ }
24
+ };
25
+
26
+ describe('isBidRequestValid', function () {
27
+ it('Should return true if there are bidId, params and key parameters present', function () {
28
+ expect(spec.isBidRequestValid(bid)).to.be.true;
29
+ });
30
+ it('Should return false if at least one of parameters is not present', function () {
31
+ delete bid.params.placementId;
32
+ expect(spec.isBidRequestValid(bid)).to.be.false;
33
+ });
34
+ });
35
+
36
+ describe('buildRequests', function () {
37
+ let serverRequest = spec.buildRequests([bid], bidderRequest);
38
+ it('Creates a ServerRequest object with method, URL and data', function () {
39
+ expect(serverRequest).to.exist;
40
+ expect(serverRequest.method).to.exist;
41
+ expect(serverRequest.url).to.exist;
42
+ expect(serverRequest.data).to.exist;
43
+ });
44
+ it('Returns POST method', function () {
45
+ expect(serverRequest.method).to.equal('POST');
46
+ });
47
+ it('Returns valid URL', function () {
48
+ expect(serverRequest.url).to.equal('https://prebid.redtram.com/pbjs');
49
+ });
50
+ it('Returns valid data if array of bids is valid', function () {
51
+ let data = serverRequest.data;
52
+ expect(data).to.be.an('object');
53
+ expect(data).to.have.all.keys('deviceWidth', 'deviceHeight', 'language', 'host', 'page', 'placements');
54
+ expect(data.deviceWidth).to.be.a('number');
55
+ expect(data.deviceHeight).to.be.a('number');
56
+ expect(data.language).to.be.a('string');
57
+ expect(data.host).to.be.a('string');
58
+ expect(data.page).to.be.a('string');
59
+ expect(data.gdpr).to.not.exist;
60
+ expect(data.ccpa).to.not.exist;
61
+ let placement = data['placements'][0];
62
+ expect(placement).to.have.keys('placementId', 'bidId', 'adFormat', 'sizes', 'schain', 'bidfloor');
63
+ expect(placement.placementId).to.equal(23611);
64
+ expect(placement.bidId).to.equal('23dc19818e5293');
65
+ expect(placement.adFormat).to.equal(BANNER);
66
+ expect(placement.schain).to.be.an('object');
67
+ expect(placement.sizes).to.be.an('array');
68
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
69
+ });
70
+
71
+ it('Returns data with gdprConsent and without uspConsent', function () {
72
+ bidderRequest.gdprConsent = 'test';
73
+ serverRequest = spec.buildRequests([bid], bidderRequest);
74
+ let data = serverRequest.data;
75
+ expect(data.gdpr).to.exist;
76
+ expect(data.gdpr).to.be.a('string');
77
+ expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
78
+ expect(data.ccpa).to.not.exist;
79
+ delete bidderRequest.gdprConsent;
80
+ });
81
+
82
+ it('Returns data with uspConsent and without gdprConsent', function () {
83
+ bidderRequest.uspConsent = 'test';
84
+ serverRequest = spec.buildRequests([bid], bidderRequest);
85
+ let data = serverRequest.data;
86
+ expect(data.ccpa).to.exist;
87
+ expect(data.ccpa).to.be.a('string');
88
+ expect(data.ccpa).to.equal(bidderRequest.uspConsent);
89
+ expect(data.gdpr).to.not.exist;
90
+ });
91
+
92
+ it('Returns empty data if no valid requests are passed', function () {
93
+ serverRequest = spec.buildRequests([]);
94
+ let data = serverRequest.data;
95
+ expect(data.placements).to.be.an('array').that.is.empty;
96
+ });
97
+ });
98
+ describe('interpretResponse', function () {
99
+ it('Should interpret banner response', function () {
100
+ const banner = {
101
+ body: [{
102
+ mediaType: 'banner',
103
+ width: 300,
104
+ height: 250,
105
+ cpm: 0.4,
106
+ ad: 'Test',
107
+ requestId: '23dc19818e5293',
108
+ ttl: 120,
109
+ creativeId: '2',
110
+ netRevenue: true,
111
+ currency: 'USD',
112
+ dealId: '1',
113
+ meta: {}
114
+ }]
115
+ };
116
+ let bannerResponses = spec.interpretResponse(banner);
117
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
118
+ let dataItem = bannerResponses[0];
119
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
120
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
121
+ expect(dataItem.requestId).to.equal('23dc19818e5293');
122
+ expect(dataItem.cpm).to.equal(0.4);
123
+ expect(dataItem.width).to.equal(300);
124
+ expect(dataItem.height).to.equal(250);
125
+ expect(dataItem.ad).to.equal('Test');
126
+ expect(dataItem.ttl).to.equal(120);
127
+ expect(dataItem.creativeId).to.equal('2');
128
+ expect(dataItem.netRevenue).to.be.true;
129
+ expect(dataItem.currency).to.equal('USD');
130
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
131
+ });
132
+ it('Should return an empty array if invalid banner response is passed', function () {
133
+ const invBanner = {
134
+ body: [{
135
+ width: 300,
136
+ cpm: 0.4,
137
+ ad: 'Test',
138
+ requestId: '23dc19818e5293',
139
+ ttl: 120,
140
+ creativeId: '2',
141
+ netRevenue: true,
142
+ currency: 'USD',
143
+ dealId: '1'
144
+ }]
145
+ };
146
+
147
+ let serverResponses = spec.interpretResponse(invBanner);
148
+ expect(serverResponses).to.be.an('array').that.is.empty;
149
+ });
150
+ it('Should return an empty array if invalid response is passed', function () {
151
+ const invalid = {
152
+ body: [{
153
+ ttl: 120,
154
+ creativeId: '2',
155
+ netRevenue: true,
156
+ currency: 'USD',
157
+ dealId: '1'
158
+ }]
159
+ };
160
+ let serverResponses = spec.interpretResponse(invalid);
161
+ expect(serverResponses).to.be.an('array').that.is.empty;
162
+ });
163
+ });
164
+
165
+ describe('getUserSyncs', function () {
166
+ it('should do nothing on getUserSyncs', function () {
167
+ const syncData = spec.getUserSyncs({}, {}, {
168
+ consentString: 'ALL',
169
+ gdprApplies: true
170
+ }, {});
171
+ expect(syncData).to.be.an('array').which.is.not.empty;
172
+ expect(syncData[0]).to.be.an('object')
173
+ expect(syncData[0].type).to.be.a('string')
174
+ expect(syncData[0].type).to.equal('image')
175
+ expect(syncData[0].url).to.be.a('string')
176
+ expect(syncData[0].url).to.equal('https://prebid.redtram.com/sync/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
177
+ });
178
+ });
179
+
180
+ describe('on bidWon', function () {
181
+ beforeEach(function() {
182
+ sinon.stub(utils, 'triggerPixel');
183
+ });
184
+ afterEach(function() {
185
+ utils.triggerPixel.restore();
186
+ });
187
+ it('should replace nurl for banner', function () {
188
+ const nurl = 'nurl/?ap=${' + 'AUCTION_PRICE}';
189
+ const bid = {
190
+ 'bidderCode': 'redtram',
191
+ 'width': 300,
192
+ 'height': 250,
193
+ 'statusMessage': 'Bid available',
194
+ 'adId': '5691dd18ba6ab6',
195
+ 'requestId': '23dc19818e5293',
196
+ 'transactionId': '948c716b-bf64-4303-bcf4-395c2f6a9770',
197
+ 'auctionId': 'a6b7c61f-15a9-481b-8f64-e859787e9c07',
198
+ 'mediaType': 'banner',
199
+ 'source': 'client',
200
+ 'ad': "<div class=\"r23611\"></div>\n<script type=\"text/javascript\">\n(function() {\nvar tag = (function() {\nvar informers = document.getElementsByClassName('r23611'),\nlen = informers.length;\nreturn len ? informers[len - 1] : null;\n})(),\nidn = (function() {\nvar i, num, idn = '', chars = \"abcdefghiklmnopqrstuvwxyz\",\nlen = Math.floor((Math.random() * 2) + 4);\nfor (i = 0; i < len; i++) {\nnum = Math.floor(Math.random() * chars.length);\nidn += chars.substring(num, num + 1);\n}\nreturn idn;\n})();\nvar container = document.createElement('div');\ncontainer.id = idn;\ntag.appendChild(container);\nvar script = document.createElement('script');\nscript.className = 's23611';\nscript.src = 'https://goods.redtram.com/j/23611/?v=1';\nscript.charset = 'utf-8';\nscript.dataset.idn = idn;\ntag.parentNode.insertBefore(script, tag);\n})();\n</script>",
201
+ 'cpm': 0.68,
202
+ 'nurl': nurl,
203
+ 'creativeId': 'test',
204
+ 'currency': 'USD',
205
+ 'dealId': '',
206
+ 'meta': {
207
+ 'advertiserDomains': [],
208
+ 'dchain': {
209
+ 'ver': '1.0',
210
+ 'complete': 0,
211
+ 'nodes': [
212
+ {
213
+ 'name': 'redtram'
214
+ }
215
+ ]
216
+ }
217
+ },
218
+ 'netRevenue': true,
219
+ 'ttl': 120,
220
+ 'metrics': {},
221
+ 'adapterCode': 'redtram',
222
+ 'originalCpm': 0.68,
223
+ 'originalCurrency': 'USD',
224
+ 'responseTimestamp': 1668162732297,
225
+ 'requestTimestamp': 1668162732292,
226
+ 'bidder': 'redtram',
227
+ 'adUnitCode': 'div-prebid',
228
+ 'timeToRespond': 5,
229
+ 'pbLg': '0.50',
230
+ 'pbMg': '0.60',
231
+ 'pbHg': '0.68',
232
+ 'pbAg': '0.65',
233
+ 'pbDg': '0.68',
234
+ 'pbCg': '',
235
+ 'size': '300x250',
236
+ 'adserverTargeting': {
237
+ 'hb_bidder': 'redtram',
238
+ 'hb_adid': '5691dd18ba6ab6',
239
+ 'hb_pb': '0.68',
240
+ 'hb_size': '300x250',
241
+ 'hb_source': 'client',
242
+ 'hb_format': 'banner',
243
+ 'hb_adomain': ''
244
+ },
245
+ 'status': 'rendered',
246
+ 'params': [
247
+ {
248
+ 'placementId': 23611
249
+ }
250
+ ]
251
+ };
252
+ spec.onBidWon(bid);
253
+ expect(bid.nurl).to.deep.equal('nurl/?ap=0.68');
254
+ });
255
+ });
256
+ });
@@ -106,6 +106,9 @@ describe('riseAdapter', function () {
106
106
  bidderCode: 'rise',
107
107
  }
108
108
  const placementId = '12345678';
109
+ const api = [1, 2];
110
+ const mimes = ['application/javascript', 'video/mp4', 'video/quicktime'];
111
+ const protocols = [2, 3, 5, 6];
109
112
 
110
113
  it('sends the placementId to ENDPOINT via POST', function () {
111
114
  bidRequests[0].params.placementId = placementId;
@@ -144,6 +147,27 @@ describe('riseAdapter', function () {
144
147
  expect(request.data.bids[0].bidId).to.equal('299ffc8cca0b87');
145
148
  });
146
149
 
150
+ it('should send the correct supported api array', function () {
151
+ bidRequests[0].mediaTypes.video.api = api;
152
+ const request = spec.buildRequests(bidRequests, bidderRequest);
153
+ expect(request.data.bids[0].api).to.be.an('array');
154
+ expect(request.data.bids[0].api).to.eql([1, 2]);
155
+ });
156
+
157
+ it('should send the correct mimes array', function () {
158
+ bidRequests[1].mediaTypes.banner.mimes = mimes;
159
+ const request = spec.buildRequests(bidRequests, bidderRequest);
160
+ expect(request.data.bids[1].mimes).to.be.an('array');
161
+ expect(request.data.bids[1].mimes).to.eql(['application/javascript', 'video/mp4', 'video/quicktime']);
162
+ });
163
+
164
+ it('should send the correct protocols array', function () {
165
+ bidRequests[0].mediaTypes.video.protocols = protocols;
166
+ const request = spec.buildRequests(bidRequests, bidderRequest);
167
+ expect(request.data.bids[0].protocols).to.be.an('array');
168
+ expect(request.data.bids[0].protocols).to.eql([2, 3, 5, 6]);
169
+ });
170
+
147
171
  it('should send the correct sizes array', function () {
148
172
  const request = spec.buildRequests(bidRequests, bidderRequest);
149
173
  expect(request.data.bids[0].sizes).to.be.an('array');
@@ -1,6 +1,7 @@
1
1
  import { expect } from 'chai';
2
2
  import { OPENRTB, spec } from 'modules/rtbhouseBidAdapter.js';
3
3
  import { newBidder } from 'src/adapters/bidderFactory.js';
4
+ import { config } from 'src/config.js';
4
5
 
5
6
  describe('RTBHouseAdapter', () => {
6
7
  const adapter = newBidder(spec);
@@ -97,6 +98,10 @@ describe('RTBHouseAdapter', () => {
97
98
  ];
98
99
  });
99
100
 
101
+ afterEach(function () {
102
+ config.resetConfig();
103
+ });
104
+
100
105
  it('should build test param into the request', () => {
101
106
  let builtTestRequest = spec.buildRequests(bidRequests, bidderRequest).data;
102
107
  expect(JSON.parse(builtTestRequest).test).to.equal(1);
@@ -263,6 +268,45 @@ describe('RTBHouseAdapter', () => {
263
268
  expect(data.source).to.not.have.property('ext');
264
269
  });
265
270
 
271
+ context('FLEDGE', function() {
272
+ afterEach(function () {
273
+ config.resetConfig();
274
+ });
275
+
276
+ it('sends bid request to FLEDGE ENDPOINT via POST', function () {
277
+ let bidRequest = Object.assign([], bidRequests);
278
+ delete bidRequest[0].params.test;
279
+ config.setConfig({ fledgeConfig: true });
280
+ const request = spec.buildRequests(bidRequest, { ...bidderRequest, fledgeEnabled: true });
281
+ expect(request.url).to.equal('https://prebid-eu.creativecdn.com/bidder/prebidfledge/bids');
282
+ expect(request.method).to.equal('POST');
283
+ });
284
+
285
+ it('when FLEDGE is disabled, should not send imp.ext.ae', function () {
286
+ let bidRequest = Object.assign([], bidRequests);
287
+ delete bidRequest[0].params.test;
288
+ bidRequest[0].ortb2Imp = {
289
+ ext: { ae: 2 }
290
+ };
291
+ const request = spec.buildRequests(bidRequest, { ...bidderRequest, fledgeEnabled: false });
292
+ let data = JSON.parse(request.data);
293
+ if (data.imp[0].ext) {
294
+ expect(data.imp[0].ext).to.not.have.property('ae');
295
+ }
296
+ });
297
+
298
+ it('when FLEDGE is enabled, should send whatever is set in ortb2imp.ext.ae in all bid requests', function () {
299
+ let bidRequest = Object.assign([], bidRequests);
300
+ delete bidRequest[0].params.test;
301
+ bidRequest[0].ortb2Imp = {
302
+ ext: { ae: 2 }
303
+ };
304
+ const request = spec.buildRequests(bidRequest, { ...bidderRequest, fledgeEnabled: true });
305
+ let data = JSON.parse(request.data);
306
+ expect(data.imp[0].ext.ae).to.equal(2);
307
+ });
308
+ });
309
+
266
310
  describe('native imp', () => {
267
311
  function basicRequest(extension) {
268
312
  return Object.assign({
@@ -460,6 +504,29 @@ describe('RTBHouseAdapter', () => {
460
504
  'h': 250
461
505
  }];
462
506
 
507
+ let fledgeResponse = {
508
+ 'id': 'bid-identifier',
509
+ 'ext': {
510
+ 'igbid': [{
511
+ 'impid': 'test-bid-id',
512
+ 'igbuyer': [{
513
+ 'igdomain': 'https://buyer-domain.com',
514
+ 'buyersignal': {}
515
+ }]
516
+ }],
517
+ 'sellerTimeout': 500,
518
+ 'seller': 'https://seller-domain.com',
519
+ 'decisionLogicUrl': 'https://seller-domain.com/decision-logic.js'
520
+ },
521
+ 'bidid': 'bid-identifier',
522
+ 'seatbid': [{
523
+ 'bid': [{
524
+ 'id': 'bid-response-id',
525
+ 'impid': 'test-bid-id'
526
+ }]
527
+ }]
528
+ };
529
+
463
530
  it('should get correct bid response', function () {
464
531
  let expectedResponse = [
465
532
  {
@@ -488,6 +555,18 @@ describe('RTBHouseAdapter', () => {
488
555
  expect(result.length).to.equal(0);
489
556
  });
490
557
 
558
+ context('when the response contains FLEDGE interest groups config', function () {
559
+ let bidderRequest;
560
+ let response = spec.interpretResponse({body: fledgeResponse}, {bidderRequest});
561
+
562
+ it('should return FLEDGE auction_configs alongside bids', function () {
563
+ expect(response).to.have.property('bids');
564
+ expect(response).to.have.property('fledgeAuctionConfigs');
565
+ expect(response.fledgeAuctionConfigs.length).to.equal(1);
566
+ expect(response.fledgeAuctionConfigs[0].bidId).to.equal('test-bid-id');
567
+ });
568
+ });
569
+
491
570
  describe('native', () => {
492
571
  const adm = {
493
572
  native: {