prebid.js 9.4.0 → 9.5.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 (363) hide show
  1. package/.eslintrc.js +31 -5
  2. package/.github/workflows/jscpd.yml +2 -2
  3. package/.github/workflows/linter.yml +107 -0
  4. package/creative/crossDomain.js +6 -3
  5. package/dist/33acrossAnalyticsAdapter.js +1 -1
  6. package/dist/33acrossBidAdapter.js +1 -1
  7. package/dist/33acrossIdSystem.js +1 -1
  8. package/dist/BTBidAdapter.js +1 -1
  9. package/dist/adagioAnalyticsAdapter.js +1 -1
  10. package/dist/adagioBidAdapter.js +1 -1
  11. package/dist/adagioRtdProvider.js +1 -1
  12. package/dist/adagioUtils.js +1 -1
  13. package/dist/addefendBidAdapter.js +1 -1
  14. package/dist/adgenerationBidAdapter.js +1 -1
  15. package/dist/adkernelAdnBidAdapter.js +1 -1
  16. package/dist/adkernelBidAdapter.js +1 -1
  17. package/dist/adkernelUtils.js +1 -0
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/admixerBidAdapter.js +1 -1
  20. package/dist/adqueryBidAdapter.js +1 -1
  21. package/dist/adrelevantisBidAdapter.js +1 -1
  22. package/dist/adstirBidAdapter.js +1 -1
  23. package/dist/adtrgtmeBidAdapter.js +1 -1
  24. package/dist/advRedAnalyticsAdapter.js +1 -0
  25. package/dist/adxcgAnalyticsAdapter.js +1 -1
  26. package/dist/adxcgBidAdapter.js +1 -1
  27. package/dist/adyoulikeBidAdapter.js +1 -1
  28. package/dist/agmaAnalyticsAdapter.js +1 -1
  29. package/dist/ajaBidAdapter.js +1 -1
  30. package/dist/akamaiDapRtdProvider.js +1 -1
  31. package/dist/amxBidAdapter.js +1 -1
  32. package/dist/amxIdSystem.js +1 -1
  33. package/dist/anonymisedRtdProvider.js +1 -1
  34. package/dist/apacdexBidAdapter.js +1 -1
  35. package/dist/appierAnalyticsAdapter.js +1 -1
  36. package/dist/appnexusBidAdapter.js +1 -1
  37. package/dist/asoBidAdapter.js +1 -1
  38. package/dist/axonixBidAdapter.js +1 -1
  39. package/dist/azerionedgeRtdProvider.js +1 -1
  40. package/dist/bidglassBidAdapter.js +1 -1
  41. package/dist/big-richmediaBidAdapter.js +1 -1
  42. package/dist/bridBidAdapter.js +1 -1
  43. package/dist/bridgewellBidAdapter.js +1 -1
  44. package/dist/brightMountainMediaBidAdapter.js +1 -1
  45. package/dist/carodaBidAdapter.js +1 -1
  46. package/dist/chtnwBidAdapter.js +1 -1
  47. package/dist/chunk-core.js +1 -1
  48. package/dist/concertBidAdapter.js +1 -1
  49. package/dist/connatixBidAdapter.js +1 -1
  50. package/dist/connectadBidAdapter.js +1 -1
  51. package/dist/consumableBidAdapter.js +1 -1
  52. package/dist/contxtfulRtdProvider.js +1 -1
  53. package/dist/conversantAnalyticsAdapter.js +1 -1
  54. package/dist/conversantBidAdapter.js +1 -1
  55. package/dist/craftBidAdapter.js +1 -1
  56. package/dist/criteoBidAdapter.js +1 -1
  57. package/dist/currencyUtils.js +1 -1
  58. package/dist/cwireBidAdapter.js +1 -1
  59. package/dist/dailymotionBidAdapter.js +1 -1
  60. package/dist/debugging-standalone.js +1 -1
  61. package/dist/dependencies.json +43 -7
  62. package/dist/dfpAdServerVideo.js +1 -1
  63. package/dist/dfpAdpod.js +1 -1
  64. package/dist/dfpUtils.js +1 -1
  65. package/dist/discoveryBidAdapter.js +1 -1
  66. package/dist/dspxBidAdapter.js +1 -1
  67. package/dist/dxkultureBidAdapter.js +1 -1
  68. package/dist/eightPodAnalyticsAdapter.js +1 -1
  69. package/dist/eightPodBidAdapter.js +1 -1
  70. package/dist/eplanningBidAdapter.js +1 -1
  71. package/dist/euidIdSystem.js +1 -1
  72. package/dist/exadsBidAdapter.js +1 -1
  73. package/dist/feedadBidAdapter.js +1 -1
  74. package/dist/finativeBidAdapter.js +1 -1
  75. package/dist/fintezaAnalyticsAdapter.js +1 -1
  76. package/dist/fpdUtils.js +1 -0
  77. package/dist/freewheel-sspBidAdapter.js +1 -1
  78. package/dist/gmosspBidAdapter.js +1 -1
  79. package/dist/goldbachBidAdapter.js +1 -1
  80. package/dist/gptPreAuction.js +1 -1
  81. package/dist/gptUtils.js +1 -1
  82. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  83. package/dist/greenbidsRtdProvider.js +1 -1
  84. package/dist/gridBidAdapter.js +1 -1
  85. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  86. package/dist/growthCodeRtdProvider.js +1 -1
  87. package/dist/gumgumBidAdapter.js +1 -1
  88. package/dist/h12mediaBidAdapter.js +1 -1
  89. package/dist/hypelabBidAdapter.js +1 -1
  90. package/dist/id5AnalyticsAdapter.js +1 -1
  91. package/dist/id5IdSystem.js +1 -1
  92. package/dist/imdsBidAdapter.js +1 -1
  93. package/dist/improvedigitalBidAdapter.js +1 -1
  94. package/dist/insticatorBidAdapter.js +1 -1
  95. package/dist/intentIqAnalyticsAdapter.js +1 -0
  96. package/dist/ixBidAdapter.js +1 -1
  97. package/dist/jixieBidAdapter.js +1 -1
  98. package/dist/justpremiumBidAdapter.js +1 -1
  99. package/dist/jwplayerBidAdapter.js +1 -1
  100. package/dist/jwplayerRtdProvider.js +1 -1
  101. package/dist/kargoBidAdapter.js +1 -1
  102. package/dist/kimberliteBidAdapter.js +1 -1
  103. package/dist/konduitAnalyticsAdapter.js +1 -1
  104. package/dist/kueezBidAdapter.js +1 -1
  105. package/dist/lassoBidAdapter.js +1 -1
  106. package/dist/lifestreetBidAdapter.js +1 -1
  107. package/dist/liveIntentIdSystem.js +1 -1
  108. package/dist/logicadBidAdapter.js +1 -1
  109. package/dist/loglyliftBidAdapter.js +1 -1
  110. package/dist/luceadBidAdapter.js +1 -1
  111. package/dist/mabidderBidAdapter.js +1 -1
  112. package/dist/magniteAnalyticsAdapter.js +1 -1
  113. package/dist/malltvAnalyticsAdapter.js +1 -1
  114. package/dist/marsmediaBidAdapter.js +1 -1
  115. package/dist/mediafuseBidAdapter.js +1 -1
  116. package/dist/mediagoBidAdapter.js +1 -1
  117. package/dist/medianetAnalyticsAdapter.js +1 -1
  118. package/dist/medianetBidAdapter.js +1 -1
  119. package/dist/mediasquareBidAdapter.js +1 -1
  120. package/dist/mgidBidAdapter.js +1 -1
  121. package/dist/minutemediaBidAdapter.js +1 -1
  122. package/dist/missenaBidAdapter.js +1 -1
  123. package/dist/mobianRtdProvider.js +1 -1
  124. package/dist/nextMillenniumBidAdapter.js +1 -1
  125. package/dist/nexx360BidAdapter.js +1 -1
  126. package/dist/nobidAnalyticsAdapter.js +1 -1
  127. package/dist/nobidBidAdapter.js +1 -1
  128. package/dist/not-for-prod/prebid.js +201 -193
  129. package/dist/oguryBidAdapter.js +1 -1
  130. package/dist/onetagBidAdapter.js +1 -1
  131. package/dist/ooloAnalyticsAdapter.js +1 -1
  132. package/dist/openwebBidAdapter.js +1 -1
  133. package/dist/openxBidAdapter.js +1 -1
  134. package/dist/optidigitalBidAdapter.js +1 -1
  135. package/dist/optoutBidAdapter.js +1 -1
  136. package/dist/orbidderBidAdapter.js +1 -1
  137. package/dist/outbrainBidAdapter.js +1 -1
  138. package/dist/paapi.js +1 -1
  139. package/dist/permutiveRtdProvider.js +1 -1
  140. package/dist/pixfutureBidAdapter.js +1 -1
  141. package/dist/playdigoBidAdapter.js +1 -1
  142. package/dist/prebidServerBidAdapter.js +1 -1
  143. package/dist/programmaticaBidAdapter.js +1 -1
  144. package/dist/publinkIdSystem.js +1 -1
  145. package/dist/publirBidAdapter.js +1 -1
  146. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  147. package/dist/pubmaticBidAdapter.js +1 -1
  148. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  149. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  150. package/dist/pxyzBidAdapter.js +1 -1
  151. package/dist/quantcastBidAdapter.js +1 -1
  152. package/dist/readpeakBidAdapter.js +1 -1
  153. package/dist/relaidoBidAdapter.js +1 -1
  154. package/dist/relevatehealthBidAdapter.js +1 -1
  155. package/dist/retailspotBidAdapter.js +1 -1
  156. package/dist/rhythmoneBidAdapter.js +1 -1
  157. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  158. package/dist/riseBidAdapter.js +1 -1
  159. package/dist/rubiconBidAdapter.js +1 -1
  160. package/dist/schainSerializer.js +1 -0
  161. package/dist/seedingAllianceBidAdapter.js +1 -1
  162. package/dist/seedtagBidAdapter.js +1 -1
  163. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  164. package/dist/sharethroughBidAdapter.js +1 -1
  165. package/dist/shinezBidAdapter.js +1 -1
  166. package/dist/sizeMapping.js +1 -1
  167. package/dist/sizeUtils.js +1 -1
  168. package/dist/smaatoBidAdapter.js +1 -1
  169. package/dist/smartadserverBidAdapter.js +1 -1
  170. package/dist/smartxBidAdapter.js +1 -1
  171. package/dist/smilewantedBidAdapter.js +1 -1
  172. package/dist/snigelBidAdapter.js +1 -1
  173. package/dist/sonobiBidAdapter.js +1 -1
  174. package/dist/sovrnBidAdapter.js +1 -1
  175. package/dist/sspBCBidAdapter.js +1 -1
  176. package/dist/stnBidAdapter.js +1 -1
  177. package/dist/stvBidAdapter.js +1 -1
  178. package/dist/sublimeBidAdapter.js +1 -1
  179. package/dist/symitriDapRtdProvider.js +1 -0
  180. package/dist/taboolaBidAdapter.js +1 -1
  181. package/dist/tappxBidAdapter.js +1 -1
  182. package/dist/targetVideoBidAdapter.js +1 -1
  183. package/dist/targetVideoUtils.js +1 -0
  184. package/dist/teadsBidAdapter.js +1 -1
  185. package/dist/terceptAnalyticsAdapter.js +1 -1
  186. package/dist/themoneytizerBidAdapter.js +1 -1
  187. package/dist/trionBidAdapter.js +1 -1
  188. package/dist/tripleliftBidAdapter.js +1 -1
  189. package/dist/ttdBidAdapter.js +1 -1
  190. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  191. package/dist/uid2IdSystem.js +1 -1
  192. package/dist/underdogmediaBidAdapter.js +1 -1
  193. package/dist/undertoneBidAdapter.js +1 -1
  194. package/dist/unrulyBidAdapter.js +1 -1
  195. package/dist/userAgentUtils.js +1 -0
  196. package/dist/utiqIdSystem.js +1 -1
  197. package/dist/vidazooUtils.js +1 -1
  198. package/dist/videobyteBidAdapter.js +1 -1
  199. package/dist/visxBidAdapter.js +1 -1
  200. package/dist/vuukleBidAdapter.js +1 -1
  201. package/dist/widespaceBidAdapter.js +1 -1
  202. package/dist/winrBidAdapter.js +1 -1
  203. package/dist/yahooAdsBidAdapter.js +1 -1
  204. package/dist/yandexIdSystem.js +1 -1
  205. package/dist/yieldmoBidAdapter.js +1 -1
  206. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  207. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  208. package/libraries/adkernelUtils/adkernelUtils.js +11 -0
  209. package/libraries/currencyUtils/floor.js +23 -0
  210. package/libraries/dfpUtils/dfpUtils.js +7 -0
  211. package/libraries/fpdUtils/deviceInfo.js +58 -0
  212. package/libraries/fpdUtils/pageInfo.js +73 -0
  213. package/libraries/gptUtils/gptUtils.js +23 -1
  214. package/libraries/schainSerializer/schainSerializer.js +24 -0
  215. package/libraries/sizeUtils/tranformSize.js +43 -0
  216. package/libraries/targetVideoUtils/bidderUtils.js +178 -0
  217. package/libraries/targetVideoUtils/constants.js +23 -0
  218. package/libraries/userAgentUtils/index.js +58 -0
  219. package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
  220. package/modules/.submodules.json +1 -0
  221. package/modules/33acrossAnalyticsAdapter.js +2 -0
  222. package/modules/adagioBidAdapter.js +1 -1
  223. package/modules/adagioRtdProvider.js +18 -4
  224. package/modules/adkernelAdnBidAdapter.js +1 -12
  225. package/modules/adkernelBidAdapter.js +4 -13
  226. package/modules/adlooxAnalyticsAdapter.js +1 -0
  227. package/modules/admixerBidAdapter.js +10 -6
  228. package/modules/admixerBidAdapter.md +7 -10
  229. package/modules/adtrgtmeBidAdapter.js +1 -1
  230. package/modules/advRedAnalyticsAdapter.js +198 -0
  231. package/modules/advRedAnalyticsAdapter.md +30 -0
  232. package/modules/akamaiDapRtdProvider.js +19 -798
  233. package/modules/anonymisedRtdProvider.js +5 -1
  234. package/modules/anonymisedRtdProvider.md +1 -1
  235. package/modules/apacdexBidAdapter.js +1 -1
  236. package/modules/appnexusBidAdapter.js +56 -2
  237. package/modules/automatadAnalyticsAdapter.js +2 -0
  238. package/modules/azerionedgeRtdProvider.js +13 -3
  239. package/modules/azerionedgeRtdProvider.md +0 -17
  240. package/modules/bridBidAdapter.js +47 -47
  241. package/modules/cleanioRtdProvider.js +1 -0
  242. package/modules/concertBidAdapter.js +1 -1
  243. package/modules/connatixBidAdapter.js +36 -8
  244. package/modules/connectIdSystem.js +3 -1
  245. package/modules/contxtfulRtdProvider.js +20 -2
  246. package/modules/contxtfulRtdProvider.md +1 -0
  247. package/modules/craftBidAdapter.js +1 -1
  248. package/modules/criteoBidAdapter.js +1 -1
  249. package/modules/cwireBidAdapter.js +5 -1
  250. package/modules/dailymotionBidAdapter.js +85 -65
  251. package/modules/debugging/debugging.js +3 -0
  252. package/modules/dfpAdServerVideo.js +15 -33
  253. package/modules/dfpAdpod.js +2 -6
  254. package/modules/dgkeywordRtdProvider.js +2 -0
  255. package/modules/discoveryBidAdapter.js +26 -210
  256. package/modules/dspxBidAdapter.js +176 -54
  257. package/modules/eightPodAnalyticsAdapter.js +28 -34
  258. package/modules/eightPodBidAdapter.js +113 -57
  259. package/modules/fintezaAnalyticsAdapter.js +9 -4
  260. package/modules/goldbachBidAdapter.js +1 -1
  261. package/modules/gptPreAuction.js +63 -4
  262. package/modules/growthCodeAnalyticsAdapter.js +1 -1
  263. package/modules/growthCodeRtdProvider.js +1 -1
  264. package/modules/gumgumBidAdapter.js +14 -10
  265. package/modules/improvedigitalBidAdapter.js +1 -1
  266. package/modules/intentIqAnalyticsAdapter.js +234 -0
  267. package/modules/intentIqAnalyticsAdapter.md +27 -0
  268. package/modules/intentIqIdSystem.md +0 -0
  269. package/modules/jwplayerBidAdapter.js +1 -1
  270. package/modules/jwplayerRtdProvider.js +26 -6
  271. package/modules/jwplayerVideoProvider.js +6 -0
  272. package/modules/mediafuseBidAdapter.js +1 -1
  273. package/modules/mediagoBidAdapter.js +7 -176
  274. package/modules/medianetBidAdapter.js +101 -40
  275. package/modules/mgidBidAdapter.js +3 -1
  276. package/modules/mobianRtdProvider.js +16 -2
  277. package/modules/nextMillenniumBidAdapter.js +1 -27
  278. package/modules/nobidBidAdapter.js +1 -1
  279. package/modules/optoutBidAdapter.js +1 -1
  280. package/modules/paapi.js +48 -35
  281. package/modules/permutiveRtdProvider.js +72 -22
  282. package/modules/playdigoBidAdapter.js +4 -2
  283. package/modules/prebidServerBidAdapter/index.js +4 -2
  284. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
  285. package/modules/programmaticaBidAdapter.js +1 -1
  286. package/modules/pubmaticBidAdapter.js +12 -0
  287. package/modules/pubxaiAnalyticsAdapter.js +306 -164
  288. package/modules/relevatehealthBidAdapter.js +2 -1
  289. package/modules/richaudienceBidAdapter.js +1 -1
  290. package/modules/rtdModule/index.js +5 -3
  291. package/modules/sirdataRtdProvider.js +2 -0
  292. package/modules/sizeMapping.js +2 -5
  293. package/modules/smaatoBidAdapter.js +18 -1
  294. package/modules/smilewantedBidAdapter.js +26 -22
  295. package/modules/snigelBidAdapter.js +1 -1
  296. package/modules/sonobiBidAdapter.js +5 -10
  297. package/modules/symitriDapRtdProvider.js +812 -0
  298. package/modules/symitriDapRtdProvider.md +49 -0
  299. package/modules/targetVideoBidAdapter.js +120 -152
  300. package/modules/targetVideoBidAdapter.md +20 -3
  301. package/modules/userId/eids.js +3 -0
  302. package/modules/utiqIdSystem.js +12 -10
  303. package/modules/validationFpdModule/index.js +22 -17
  304. package/modules/videojsVideoProvider.js +3 -0
  305. package/modules/visxBidAdapter.js +1 -1
  306. package/modules/winrBidAdapter.js +2 -27
  307. package/modules/yahooAdsBidAdapter.js +1 -1
  308. package/modules/yandexIdSystem.js +1 -1
  309. package/package.json +4 -4
  310. package/plugins/eslint/index.js +73 -45
  311. package/src/adRendering.js +7 -3
  312. package/src/adloader.js +1 -0
  313. package/src/ajax.js +15 -0
  314. package/src/config.js +0 -4
  315. package/src/debugging.js +1 -0
  316. package/src/secureCreatives.js +1 -1
  317. package/src/storageManager.js +62 -73
  318. package/src/targeting.js +26 -20
  319. package/src/utils.js +9 -0
  320. package/test/pages/banner_sync.html +97 -0
  321. package/test/pages/consent_mgt_gdpr.html +1 -1
  322. package/test/spec/ajax_spec.js +11 -0
  323. package/test/spec/creative/crossDomainCreative_spec.js +26 -9
  324. package/test/spec/e2e/banner/basic_banner_ad.spec.js +20 -14
  325. package/test/spec/fpd/gdpr_spec.js +1 -1
  326. package/test/spec/libraries/userAgentUtils_spec.js +109 -0
  327. package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
  328. package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
  329. package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
  330. package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
  331. package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
  332. package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
  333. package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
  334. package/test/spec/modules/consentManagement_spec.js +1 -1
  335. package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
  336. package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
  337. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
  338. package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
  339. package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
  340. package/test/spec/modules/gptPreAuction_spec.js +143 -1
  341. package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
  342. package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
  343. package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
  344. package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
  345. package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
  346. package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
  347. package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
  348. package/test/spec/modules/paapi_spec.js +177 -111
  349. package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
  350. package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
  351. package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
  352. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  353. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
  354. package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
  355. package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
  356. package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
  357. package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
  358. package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
  359. package/test/spec/modules/yandexIdSystem_spec.js +6 -1
  360. package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
  361. package/test/spec/unit/core/storageManager_spec.js +68 -51
  362. package/test/spec/utils_spec.js +19 -0
  363. /package/src/utils/{gpdr.js → gdpr.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  import { expect } from 'chai';
2
+ import { config } from 'src/config.js';
2
3
  import { spec } from 'modules/dspxBidAdapter.js';
3
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
4
5
  import { deepClone } from '../../../src/utils';
6
+ import {BANNER} from '../../../src/mediaTypes';
5
7
 
6
8
  const ENDPOINT_URL = 'https://buyer.dspx.tv/request/';
7
9
  const ENDPOINT_URL_DEV = 'https://dcbuyer.dspx.tv/request/';
@@ -33,11 +35,18 @@ describe('dspxAdapter', function () {
33
35
  });
34
36
 
35
37
  it('should return false when required params are not passed', function () {
36
- let invalidBid = Object.assign({}, bid);
37
- delete invalidBid.params;
38
- invalidBid.params = {
39
- 'someIncorrectParam': 0
40
- };
38
+ const invalidBid = {
39
+ bidId: '30b31c1838de1e',
40
+ bidder: 'dspx',
41
+ mediaTypes: {
42
+ [BANNER]: {
43
+ sizes: [[300, 250]]
44
+ }
45
+ },
46
+ params: {
47
+ someIncorrectParam: 0
48
+ }
49
+ }
41
50
  expect(spec.isBidRequestValid(invalidBid)).to.equal(false);
42
51
  });
43
52
  });
@@ -77,7 +86,26 @@ describe('dspxAdapter', function () {
77
86
  'sharedid': {
78
87
  'id': '01EXPPGZ9C8NKG1MTXVHV98505',
79
88
  'third': '01EXPPGZ9C8NKG1MTXVHV98505'
80
- }
89
+ },
90
+ 'pubProvidedId': [{
91
+ 'source': 'puburl2.com',
92
+ 'uids': [{
93
+ 'id': 'pubid2'
94
+ }, {
95
+ 'id': 'pubid2-123'
96
+ }]
97
+ }, {
98
+ 'source': 'puburl.com',
99
+ 'uids': [{
100
+ 'id': 'pubid1',
101
+ 'atype': 1,
102
+ 'ext': {
103
+ 'stype': 'ppuid'
104
+ }
105
+ }]
106
+ }],
107
+ 'euid': {},
108
+ 'tdid': 'tdid_ID',
81
109
  },
82
110
  'crumbs': {
83
111
  'pubcid': 'e09ab6a3-ae74-4f01-b2e8-81b141d6dc61'
@@ -228,12 +256,54 @@ describe('dspxAdapter', function () {
228
256
  }
229
257
  };
230
258
 
259
+ // With ortb2
260
+ var bidderRequestWithORTB = {
261
+ refererInfo: {
262
+ referer: 'some_referrer.net'
263
+ },
264
+ gdprConsent: {
265
+ consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==',
266
+ vendorData: {someData: 'value'},
267
+ gdprApplies: true
268
+ },
269
+ ortb2: {
270
+ source: {},
271
+ site: {
272
+ domain: 'buyer',
273
+ publisher: {
274
+ domain: 'buyer'
275
+ },
276
+ page: 'http://buyer/schain.php?ver=8.5.0-pre:latest-dev-build&pbjs_debug=true',
277
+ ref: 'http://buyer/pbjsv/',
278
+ content: {
279
+ id: 'contentID',
280
+ episode: 1,
281
+ title: 'contentTitle',
282
+ series: 'contentSeries',
283
+ season: 'contentSeason 3',
284
+ artist: 'contentArtist',
285
+ genre: 'rock',
286
+ isrc: 'contentIsrc',
287
+ url: 'https://content-url.com/',
288
+ context: 1,
289
+ keywords: 'kw1,kw2,keqword 3',
290
+ livestream: 0,
291
+ cat: [
292
+ 'IAB1-1',
293
+ 'IAB1-2',
294
+ 'IAB2-10'
295
+ ]
296
+ }
297
+ },
298
+ }
299
+ };
300
+
231
301
  var request1 = spec.buildRequests([bidRequests[0]], bidderRequest)[0];
232
302
  it('sends bid request to our endpoint via GET', function () {
233
303
  expect(request1.method).to.equal('GET');
234
304
  expect(request1.url).to.equal(ENDPOINT_URL);
235
305
  let data = request1.data.replace(/rnd=\d+\&/g, '').replace(/ref=.*\&bid/g, 'bid').replace(/pbver=.*?&/g, 'pbver=test&');
236
- expect(data).to.equal('_f=auto&alternative=prebid_js&inventory_item_id=6682&srw=300&srh=250&idt=100&bid_id=30b31c1838de1e1&pbver=test&pfilter%5Bfloorprice%5D=1000000&pfilter%5Bprivate_auction%5D=0&pfilter%5Bgeo%5D%5Bcountry%5D=DE&pfilter%5Bgdpr_consent%5D=BOJ%2FP2HOJ%2FP2HABABMAAAAAZ%2BA%3D%3D&pfilter%5Bgdpr%5D=true&bcat=IAB2%2CIAB4&dvt=desktop&did_netid=123&did_id5=ID5-ZHMOcvSShIBZiIth_yYh9odjNFxVEmMQ_i5TArPfWw!ID5*dtrjfV5mPLasyya5TW2IE9oVzQZwx7xRPGyAYS4hcWkAAOoxoFef4bIoREpQys8x&did_id5_linktype=2&did_uid2=456&did_sharedid=01EXPPGZ9C8NKG1MTXVHV98505&did_pubcid=e09ab6a3-ae74-4f01-b2e8-81b141d6dc61&did_cpubcid=e09ab6a3-ae74-4f01-b2e8-81b141d6dc61&schain%5Bver%5D=1.0&schain%5Bcomplete%5D=1&schain%5Bnodes%5D%5B0%5D%5Basi%5D=example.com&schain%5Bnodes%5D%5B0%5D%5Bsid%5D=0&schain%5Bnodes%5D%5B0%5D%5Bhp%5D=1&schain%5Bnodes%5D%5B0%5D%5Brid%5D=bidrequestid&schain%5Bnodes%5D%5B0%5D%5Bdomain%5D=example.com&auctionId=1d1a030790a475&pbcode=testDiv1&media_types%5Bbanner%5D=300x250');
306
+ expect(data).to.equal('_f=auto&alternative=prebid_js&inventory_item_id=6682&srw=300&srh=250&idt=100&bid_id=30b31c1838de1e1&pbver=test&pfilter%5Bfloorprice%5D=1000000&pfilter%5Bprivate_auction%5D=0&pfilter%5Bgeo%5D%5Bcountry%5D=DE&pfilter%5Bgdpr_consent%5D=BOJ%2FP2HOJ%2FP2HABABMAAAAAZ%2BA%3D%3D&pfilter%5Bgdpr%5D=true&bcat=IAB2%2CIAB4&dvt=desktop&auctionId=1d1a030790a475&pbcode=testDiv1&media_types%5Bbanner%5D=300x250&schain%5Bver%5D=1.0&schain%5Bcomplete%5D=1&schain%5Bnodes%5D%5B0%5D%5Basi%5D=example.com&schain%5Bnodes%5D%5B0%5D%5Bsid%5D=0&schain%5Bnodes%5D%5B0%5D%5Bhp%5D=1&schain%5Bnodes%5D%5B0%5D%5Brid%5D=bidrequestid&schain%5Bnodes%5D%5B0%5D%5Bdomain%5D=example.com&did_netid=123&did_id5=ID5-ZHMOcvSShIBZiIth_yYh9odjNFxVEmMQ_i5TArPfWw!ID5*dtrjfV5mPLasyya5TW2IE9oVzQZwx7xRPGyAYS4hcWkAAOoxoFef4bIoREpQys8x&did_id5_linktype=2&did_uid2=456&did_sharedid=01EXPPGZ9C8NKG1MTXVHV98505&did_pubcid=e09ab6a3-ae74-4f01-b2e8-81b141d6dc61&did_tdid=tdid_ID&did_ppuid=1%3Apuburl.com%3Apubid1&did_cpubcid=e09ab6a3-ae74-4f01-b2e8-81b141d6dc61');
237
307
  });
238
308
 
239
309
  var request2 = spec.buildRequests([bidRequests[1]], bidderRequest)[0];
@@ -281,6 +351,14 @@ describe('dspxAdapter', function () {
281
351
  expect(data).to.equal('_f=auto&alternative=prebid_js&inventory_item_id=107&srw=300&srh=250&idt=100&bid_id=30b31c1838de1e4&pbver=test&pfilter%5Btest%5D=1&prebidDevMode=1&auctionId=1d1a030790a478&pbcode=testDiv3&media_types%5Bvideo%5D=640x480&media_types%5Bbanner%5D=300x250&vctx=instream&vpl%5Bmimes%5D%5B0%5D=video%2Fmp4&vpl%5Bprotocols%5D%5B0%5D=1&vpl%5Bprotocols%5D%5B1%5D=2&vpl%5Bplaybackmethod%5D%5B0%5D=2&vpl%5Bskip%5D=1');
282
352
  });
283
353
 
354
+ var request7 = spec.buildRequests([bidRequests[5]], bidderRequestWithORTB)[0];
355
+ it('ortb2 iab_content test', function () {
356
+ expect(request7.method).to.equal('GET');
357
+ expect(request7.url).to.equal('http://localhost');
358
+ let data = request7.data.replace(/rnd=\d+\&/g, '').replace(/ref=.*\&bid/g, 'bid').replace(/pbver=.*?&/g, 'pbver=test&');
359
+ expect(data).to.equal('_f=auto&alternative=prebid_js&inventory_item_id=107&srw=300&srh=250&idt=100&bid_id=30b31c1838de1e4&pbver=test&pfilter%5Btest%5D=1&pfilter%5Bgdpr_consent%5D=BOJ%2FP2HOJ%2FP2HABABMAAAAAZ%2BA%3D%3D&pfilter%5Bgdpr%5D=true&pfilter%5Biab_content%5D=cat%3AIAB1-1%7CIAB1-2%7CIAB2-10%2Cepisode%3A1%2Ccontext%3A1%2Cid%3AcontentID%2Ctitle%3AcontentTitle%2Cseries%3AcontentSeries%2Cseason%3AcontentSeason%25203%2Cartist%3AcontentArtist%2Cgenre%3Arock%2Cisrc%3AcontentIsrc%2Curl%3Ahttps%253A%252F%252Fcontent-url.com%252F%2Ckeywords%3Akw1%252Ckw2%252Ckeqword%25203&prebidDevMode=1&auctionId=1d1a030790a478&pbcode=testDiv3&media_types%5Bvideo%5D=640x480&media_types%5Bbanner%5D=300x250&vctx=instream&vpl%5Bmimes%5D%5B0%5D=video%2Fmp4&vpl%5Bprotocols%5D%5B0%5D=1&vpl%5Bprotocols%5D%5B1%5D=2&vpl%5Bplaybackmethod%5D%5B0%5D=2&vpl%5Bskip%5D=1');
360
+ });
361
+
284
362
  // bidfloor tests
285
363
  const getFloorResponse = {currency: 'EUR', floor: 5};
286
364
  let testBidRequest = deepClone(bidRequests[1]);
@@ -321,6 +399,109 @@ describe('dspxAdapter', function () {
321
399
  });
322
400
  });
323
401
 
402
+ describe('google topics handling', () => {
403
+ afterEach(() => {
404
+ config.resetConfig();
405
+ });
406
+
407
+ const REQPARAMS = {
408
+ refererInfo: {
409
+ referer: 'some_referrer.net'
410
+ },
411
+ gdprConsent: {
412
+ consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==',
413
+ vendorData: {someData: 'value'},
414
+ gdprApplies: true
415
+ }
416
+ };
417
+
418
+ const defaultRequest = {
419
+ 'bidder': 'dspx',
420
+ 'params': {
421
+ 'placement': '6682',
422
+ 'pfilter': {
423
+ 'floorprice': 1000000,
424
+ 'private_auction': 0,
425
+ 'geo': {
426
+ 'country': 'DE'
427
+ }
428
+ },
429
+ 'bcat': 'IAB2,IAB4',
430
+ 'dvt': 'desktop'
431
+ },
432
+ 'sizes': [
433
+ [300, 250]
434
+ ],
435
+ 'bidId': '30b31c1838de1e1',
436
+ 'bidderRequestId': '22edbae2733bf61',
437
+ 'auctionId': '1d1a030790a475',
438
+ 'adUnitCode': 'testDiv1',
439
+ };
440
+
441
+ it('does pass segtax, segclass, segments for google topics data', () => {
442
+ const GOOGLE_TOPICS_DATA = {
443
+ ortb2: {
444
+ user: {
445
+ data: [
446
+ {
447
+ ext: {
448
+ segtax: 600,
449
+ segclass: 'v1',
450
+ },
451
+ segment: [
452
+ {id: '717'}, {id: '808'},
453
+ ]
454
+ }
455
+ ]
456
+ },
457
+ },
458
+ }
459
+ config.setConfig(GOOGLE_TOPICS_DATA);
460
+ const request = spec.buildRequests([defaultRequest], { ...REQPARAMS, ...GOOGLE_TOPICS_DATA })[0];
461
+ expect(request.data).to.contain('segtx=600&segcl=v1&segs=717%2C808');
462
+ });
463
+
464
+ it('does not pass topics params for invalid topics data', () => {
465
+ const INVALID_TOPICS_DATA = {
466
+ ortb2: {
467
+ user: {
468
+ data: [
469
+ {
470
+ segment: []
471
+ },
472
+ {
473
+ segment: [{id: ''}]
474
+ },
475
+ {
476
+ segment: [{id: null}]
477
+ },
478
+ {
479
+ segment: [{id: 'dummy'}, {id: '123'}]
480
+ },
481
+ {
482
+ ext: {
483
+ segtax: 600,
484
+ segclass: 'v1',
485
+ },
486
+ segment: [
487
+ {
488
+ name: 'dummy'
489
+ }
490
+ ]
491
+ },
492
+ ]
493
+ }
494
+ }
495
+ };
496
+
497
+ config.setConfig(INVALID_TOPICS_DATA);
498
+ let request = spec.buildRequests([defaultRequest], { ...REQPARAMS, ...INVALID_TOPICS_DATA })[0];
499
+ expect(request.data).to.not.contain('segtax');
500
+ expect(request.data).to.not.contain('segclass');
501
+ expect(request.data).to.not.contain('segments');
502
+ });
503
+ });
504
+
324
505
  describe('interpretResponse', function () {
325
506
  let serverResponse = {
326
507
  'body': {
@@ -1,4 +1,4 @@
1
- import analyticsAdapter, { storage, queue, context, trackEvent } from 'modules/eightPodAnalyticsAdapter.js';
1
+ import analyticsAdapter, { storage, queue, trackEvent } from 'modules/eightPodAnalyticsAdapter.js';
2
2
  import { expect } from 'chai';
3
3
  import adapterManager from 'src/adapterManager.js';
4
4
  import eightPodAnalytics from 'modules/eightPodAnalyticsAdapter.js';
@@ -45,11 +45,12 @@ describe('eightPodAnalyticAdapter', function() {
45
45
  it('should subscribe on messageEvents', function() {
46
46
  getDataFromLocalStorageStub.returns(JSON.stringify([]));
47
47
  sandbox.spy(eightPodAnalytics, 'eventSubscribe');
48
+ sandbox.spy(eightPodAnalytics, 'getEventFromLocalStorage');
48
49
 
49
50
  analyticsAdapter.setupPage();
50
51
 
51
- sandbox.assert.callCount(analyticsAdapter.eventSubscribe, 1);
52
- sandbox.assert.callCount(addEventListenerSpy, 1);
52
+ sandbox.assert.callCount(analyticsAdapter.eventSubscribe, 0);
53
+ sandbox.assert.callCount(analyticsAdapter.getEventFromLocalStorage, 1);
53
54
  });
54
55
 
55
56
  it('should receive saved events list', function() {
@@ -67,6 +68,7 @@ describe('eightPodAnalyticAdapter', function() {
67
68
 
68
69
  beforeEach(function() {
69
70
  setupPageStub = sandbox.stub(eightPodAnalytics, 'setupPage');
71
+ eightPodAnalytics.resetContext();
70
72
  });
71
73
 
72
74
  afterEach(function() {
@@ -79,16 +81,18 @@ describe('eightPodAnalyticAdapter', function() {
79
81
  })
80
82
 
81
83
  sandbox.assert.callCount(setupPageStub, 0);
82
- expect(context).to.deep.equal(undefined)
84
+ expect(analyticsAdapter.getContext()).to.deep.equal({})
83
85
  });
84
86
 
85
87
  it('should call setup page and get context', function() {
86
88
  eightPodAnalytics.track({
87
89
  eventType: BID_WON,
88
90
  args: {
91
+ adUnitCode: 'adUnitCode',
89
92
  bidder: 'eightPod',
90
93
  creativeId: 'creativeId',
91
94
  seatBidId: 'seatBidId',
95
+ cid: 'campaignId',
92
96
  params: [
93
97
  {
94
98
  publisherId: 'publisherId',
@@ -99,23 +103,27 @@ describe('eightPodAnalyticAdapter', function() {
99
103
  })
100
104
 
101
105
  sandbox.assert.callCount(setupPageStub, 1);
102
- expect(context).to.deep.equal({
103
- bidId: 'seatBidId',
104
- campaignId: 'campaignId',
105
- placementId: 'placementId',
106
- publisherId: 'publisherId',
107
- variantId: 'creativeId'
106
+ expect(analyticsAdapter.getContext()).to.deep.equal({
107
+ adUnitCode: {
108
+ bidId: 'seatBidId',
109
+ campaignId: 'campaignId',
110
+ placementId: 'placementId',
111
+ publisherId: 'publisherId',
112
+ variantId: 'creativeId'
113
+ }
108
114
  })
109
115
  });
110
116
  });
111
117
 
112
118
  describe('trackEvent', function() {
113
119
  let getContextStub, getTimeStub;
120
+ const adUnitCode = 'adUnitCode';
114
121
 
115
122
  beforeEach(function() {
116
123
  getContextStub = sandbox.stub(eightPodAnalytics, 'getContext');
117
124
  getTimeStub = sandbox.stub(Date.prototype, 'getTime').returns(1234);
118
125
  eightPodAnalytics.resetQueue();
126
+ eightPodAnalytics.resetContext();
119
127
  });
120
128
 
121
129
  afterEach(function() {
@@ -124,7 +132,7 @@ describe('eightPodAnalyticAdapter', function() {
124
132
  });
125
133
 
126
134
  it('should add event to the queue', function() {
127
- getContextStub.returns({});
135
+ getContextStub.returns({adUnitCode: {}});
128
136
 
129
137
  const event1 = {
130
138
  detail: {
@@ -169,9 +177,10 @@ describe('eightPodAnalyticAdapter', function() {
169
177
  value: 2
170
178
  }
171
179
  }
172
- trackEvent(event1)
180
+
181
+ trackEvent(event1, adUnitCode)
173
182
  expect(queue).to.deep.equal([result1]);
174
- trackEvent(event2);
183
+ trackEvent(event2, adUnitCode);
175
184
  expect(queue).to.deep.equal([result1, result2]);
176
185
  });
177
186
  });
@@ -2,10 +2,16 @@ import {
2
2
  appendGptSlots,
3
3
  appendPbAdSlot,
4
4
  _currentConfig,
5
- makeBidRequestsHook
5
+ makeBidRequestsHook,
6
+ getAuctionsIdsFromTargeting,
7
+ getSegments,
8
+ getSignals,
9
+ getSignalsArrayByAuctionsIds,
10
+ getSignalsIntersection
6
11
  } from 'modules/gptPreAuction.js';
7
12
  import { config } from 'src/config.js';
8
13
  import { makeSlot } from '../integration/faker/googletag.js';
14
+ import { taxonomies } from '../../../libraries/gptUtils/gptUtils.js';
9
15
 
10
16
  describe('GPT pre-auction module', () => {
11
17
  let sandbox;
@@ -25,6 +31,87 @@ describe('GPT pre-auction module', () => {
25
31
  makeSlot({ code: 'slotCode4', divId: 'div5' })
26
32
  ];
27
33
 
34
+ const mockTargeting = {'/123456/header-bid-tag-0': {'hb_deal_rubicon': '1234', 'hb_deal': '1234', 'hb_pb': '0.53', 'hb_adid': '148018fe5e', 'hb_bidder': 'rubicon', 'foobar': '300x250', 'hb_pb_rubicon': '0.53', 'hb_adid_rubicon': '148018fe5e', 'hb_bidder_rubicon': 'rubicon', 'hb_deal_appnexus': '4321', 'hb_pb_appnexus': '0.1', 'hb_adid_appnexus': '567891011', 'hb_bidder_appnexus': 'appnexus'}}
35
+
36
+ const mockAuctionManager = {
37
+ findBidByAdId(adId) {
38
+ const bidsMap = {
39
+ '148018fe5e': {
40
+ auctionId: mocksAuctions[0].auctionId
41
+ },
42
+ '567891011': {
43
+ auctionId: mocksAuctions[1].auctionId
44
+ },
45
+ };
46
+ return bidsMap[adId];
47
+ },
48
+ index: {
49
+ getAuction({ auctionId }) {
50
+ return mocksAuctions.find(auction => auction.auctionId === auctionId);
51
+ }
52
+ }
53
+ }
54
+
55
+ const mocksAuctions = [
56
+ {
57
+ auctionId: '1111',
58
+ getFPD: () => ({
59
+ global: {
60
+ user: {
61
+ data: [{
62
+ name: 'dataprovider.com',
63
+ ext: {
64
+ segtax: 4
65
+ },
66
+ segment: [{
67
+ id: '1'
68
+ }, {
69
+ id: '2'
70
+ }]
71
+ }],
72
+ }
73
+ }
74
+ })
75
+ },
76
+ {
77
+ auctionId: '234234',
78
+ getFPD: () => ({
79
+ global: {
80
+ user: {
81
+ data: [{
82
+ name: 'dataprovider.com',
83
+ ext: {
84
+ segtax: 4
85
+ },
86
+ segment: [{
87
+ id: '2'
88
+ }]
89
+ }]
90
+ }
91
+ }
92
+ }),
93
+ }, {
94
+ auctionId: '234324234',
95
+ getFPD: () => ({
96
+ global: {
97
+ user: {
98
+ data: [{
99
+ name: 'dataprovider.com',
100
+ ext: {
101
+ segtax: 4
102
+ },
103
+ segment: [{
104
+ id: '2'
105
+ }, {
106
+ id: '3'
107
+ }]
108
+ }]
109
+ }
110
+ }
111
+ })
112
+ },
113
+ ]
114
+
28
115
  describe('appendPbAdSlot', () => {
29
116
  // sets up our document body to test the pbAdSlot dom actions against
30
117
  document.body.innerHTML = '<div id="foo1" data-adslotid="bar1">test1</div>' +
@@ -454,4 +541,59 @@ describe('GPT pre-auction module', () => {
454
541
  expect(returnedAdUnits).to.deep.equal(expectedAdUnits);
455
542
  });
456
543
  });
544
+
545
+ describe('pps gpt config', () => {
546
+ it('should parse segments from fpd', () => {
547
+ const twoSegments = getSegments(mocksAuctions[0].getFPD().global, ['user.data'], 4);
548
+ expect(JSON.stringify(twoSegments)).to.equal(JSON.stringify(['1', '2']));
549
+ const zeroSegments = getSegments(mocksAuctions[0].getFPD().global, ['user.data'], 6);
550
+ expect(zeroSegments).to.length(0);
551
+ });
552
+
553
+ it('should return signals from fpd', () => {
554
+ const signals = getSignals(mocksAuctions[0].getFPD().global);
555
+ const expectedSignals = [{ taxonomy: taxonomies[0], values: ['1', '2'] }];
556
+ expect(signals).to.eql(expectedSignals);
557
+ });
558
+
559
+ it('should properly get auctions ids from targeting', () => {
560
+ const auctionsIds = getAuctionsIdsFromTargeting(mockTargeting, mockAuctionManager);
561
+ expect(auctionsIds).to.eql([mocksAuctions[0].auctionId, mocksAuctions[1].auctionId])
562
+ });
563
+
564
+ it('should filter out adIds that do not map to any auction', () => {
565
+ const auctionsIds = getAuctionsIdsFromTargeting({
566
+ ...mockTargeting,
567
+ 'au': {'hb_adid': 'missing'},
568
+ }, mockAuctionManager);
569
+ expect(auctionsIds).to.eql([mocksAuctions[0].auctionId, mocksAuctions[1].auctionId]);
570
+ })
571
+
572
+ it('should properly return empty array of auction ids for invalid targeting', () => {
573
+ let auctionsIds = getAuctionsIdsFromTargeting({}, mockAuctionManager);
574
+ expect(Array.isArray(auctionsIds)).to.equal(true);
575
+ expect(auctionsIds).to.length(0);
576
+ auctionsIds = getAuctionsIdsFromTargeting({'/123456/header-bid-tag-0/bg': {'invalidContent': '123'}}, mockAuctionManager);
577
+ expect(Array.isArray(auctionsIds)).to.equal(true);
578
+ expect(auctionsIds).to.length(0);
579
+ });
580
+
581
+ it('should properly get signals from auctions', () => {
582
+ const signals = getSignalsArrayByAuctionsIds(['1111', '234234', '234324234'], mockAuctionManager.index);
583
+ const intersection = getSignalsIntersection(signals);
584
+ const expectedResult = { IAB_AUDIENCE_1_1: { values: ['2'] }, IAB_CONTENT_2_2: { values: [] } };
585
+ expect(JSON.stringify(intersection)).to.be.equal(JSON.stringify(expectedResult));
586
+ });
587
+
588
+ it('should return empty signals array for empty auctions ids array', () => {
589
+ const signals = getSignalsArrayByAuctionsIds([], mockAuctionManager.index);
590
+ expect(Array.isArray(signals)).to.equal(true);
591
+ expect(signals).to.length(0);
592
+ });
593
+
594
+ it('should return properly formatted object for getSignalsIntersection invoked with empty array', () => {
595
+ const signals = getSignalsIntersection([]);
596
+ expect(Object.keys(signals)).to.contain.members(taxonomies);
597
+ });
598
+ });
457
599
  });
@@ -321,6 +321,23 @@ describe('gumgumAdapter', function () {
321
321
  expect(bidRequest.data).to.have.property('gpid');
322
322
  expect(bidRequest.data.gpid).to.equal('/17037559/jeusol/jeusol_D_1');
323
323
  });
324
+ it('should set ae value to 1 for PAAPI', function () {
325
+ const req = { ...bidRequests[0],
326
+ ortb2Imp: {
327
+ ext: {
328
+ ae: 1,
329
+ data: {
330
+ adserver: {
331
+ name: 'test',
332
+ adslot: 123456
333
+ }
334
+ }
335
+ }
336
+ } }
337
+ const bidRequest = spec.buildRequests([req])[0];
338
+ expect(bidRequest.data).to.have.property('ae');
339
+ expect(bidRequest.data.ae).to.equal(true);
340
+ });
324
341
 
325
342
  it('should set the global placement id (gpid) if in pbadslot property', function () {
326
343
  const pbadslot = 'abc123'