prebid.js 8.3.0 → 8.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 (354) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/a1MediaRtdProvider.js +1 -0
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adfBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnBidAdapter.js +1 -1
  9. package/dist/adkernelBidAdapter.js +1 -1
  10. package/dist/admanBidAdapter.js +1 -1
  11. package/dist/admixerIdSystem.js +1 -1
  12. package/dist/adnuntiusBidAdapter.js +1 -1
  13. package/dist/adqueryBidAdapter.js +1 -1
  14. package/dist/adqueryIdSystem.js +1 -1
  15. package/dist/adrelevantisBidAdapter.js +1 -1
  16. package/dist/adtelligentIdSystem.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/amxBidAdapter.js +1 -1
  22. package/dist/amxIdSystem.js +1 -1
  23. package/dist/appierAnalyticsAdapter.js +1 -1
  24. package/dist/appnexusBidAdapter.js +1 -1
  25. package/dist/asoBidAdapter.js +1 -1
  26. package/dist/axonixBidAdapter.js +1 -1
  27. package/dist/beachfrontBidAdapter.js +1 -1
  28. package/dist/bidglassBidAdapter.js +1 -1
  29. package/dist/big-richmediaBidAdapter.js +1 -1
  30. package/dist/brandmetricsRtdProvider.js +1 -1
  31. package/dist/bridBidAdapter.js +1 -1
  32. package/dist/bridgewellBidAdapter.js +1 -1
  33. package/dist/brightMountainMediaBidAdapter.js +1 -1
  34. package/dist/britepoolIdSystem.js +1 -1
  35. package/dist/carodaBidAdapter.js +1 -1
  36. package/dist/chtnwBidAdapter.js +1 -1
  37. package/dist/concertBidAdapter.js +1 -1
  38. package/dist/connectIdSystem.js +1 -1
  39. package/dist/connectadBidAdapter.js +1 -1
  40. package/dist/consentManagementGpp.js +1 -1
  41. package/dist/consumableBidAdapter.js +1 -1
  42. package/dist/conversantAnalyticsAdapter.js +1 -1
  43. package/dist/conversantBidAdapter.js +1 -1
  44. package/dist/craftBidAdapter.js +1 -1
  45. package/dist/criteoBidAdapter.js +1 -1
  46. package/dist/criteoIdSystem.js +1 -1
  47. package/dist/cwireBidAdapter.js +1 -1
  48. package/dist/czechAdIdSystem.js +1 -1
  49. package/dist/dacIdSystem.js +1 -1
  50. package/dist/deepintentDpesIdSystem.js +1 -1
  51. package/dist/dependencies.json +6 -0
  52. package/dist/dmdIdSystem.js +1 -1
  53. package/dist/dspxBidAdapter.js +1 -1
  54. package/dist/eplanningBidAdapter.js +1 -1
  55. package/dist/euidIdSystem.js +1 -1
  56. package/dist/fabrickIdSystem.js +1 -1
  57. package/dist/feedadBidAdapter.js +1 -1
  58. package/dist/finativeBidAdapter.js +1 -1
  59. package/dist/freewheel-sspBidAdapter.js +1 -1
  60. package/dist/ftrackIdSystem.js +1 -1
  61. package/dist/gdprEnforcement.js +1 -1
  62. package/dist/geolocationRtdProvider.js +1 -0
  63. package/dist/gmosspBidAdapter.js +1 -1
  64. package/dist/goldbachBidAdapter.js +1 -1
  65. package/dist/gravitoIdSystem.js +1 -1
  66. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  67. package/dist/greenbidsRtdProvider.js +1 -1
  68. package/dist/gridBidAdapter.js +1 -1
  69. package/dist/growthCodeIdSystem.js +1 -1
  70. package/dist/gumgumBidAdapter.js +1 -1
  71. package/dist/h12mediaBidAdapter.js +1 -1
  72. package/dist/hadronIdSystem.js +1 -1
  73. package/dist/hypelabBidAdapter.js +1 -1
  74. package/dist/id5IdSystem.js +1 -1
  75. package/dist/identityLinkIdSystem.js +1 -1
  76. package/dist/idxIdSystem.js +1 -1
  77. package/dist/imdsBidAdapter.js +1 -1
  78. package/dist/improvedigitalBidAdapter.js +1 -1
  79. package/dist/imuIdSystem.js +1 -1
  80. package/dist/insticatorBidAdapter.js +1 -1
  81. package/dist/intentIqIdSystem.js +1 -1
  82. package/dist/invibesBidAdapter.js +1 -1
  83. package/dist/ixBidAdapter.js +1 -1
  84. package/dist/justIdSystem.js +1 -1
  85. package/dist/justpremiumBidAdapter.js +1 -1
  86. package/dist/kargoBidAdapter.js +1 -1
  87. package/dist/kinessoIdSystem.js +1 -1
  88. package/dist/konduitAnalyticsAdapter.js +1 -1
  89. package/dist/kueezBidAdapter.js +1 -1
  90. package/dist/kueezRtbBidAdapter.js +1 -1
  91. package/dist/kulturemediaBidAdapter.js +1 -1
  92. package/dist/lassoBidAdapter.js +1 -1
  93. package/dist/lifestreetBidAdapter.js +1 -1
  94. package/dist/liveIntentIdSystem.js +1 -1
  95. package/dist/logicadBidAdapter.js +1 -1
  96. package/dist/loglyliftBidAdapter.js +1 -1
  97. package/dist/lotamePanoramaIdSystem.js +1 -1
  98. package/dist/magniteAnalyticsAdapter.js +1 -1
  99. package/dist/malltvAnalyticsAdapter.js +1 -1
  100. package/dist/marsmediaBidAdapter.js +1 -1
  101. package/dist/mediafuseBidAdapter.js +1 -1
  102. package/dist/mediasquareBidAdapter.js +1 -1
  103. package/dist/merkleIdSystem.js +1 -1
  104. package/dist/mgidBidAdapter.js +1 -1
  105. package/dist/minutemediaBidAdapter.js +1 -1
  106. package/dist/minutemediaplusBidAdapter.js +1 -1
  107. package/dist/mwOpenLinkIdSystem.js +1 -1
  108. package/dist/naveggIdSystem.js +1 -1
  109. package/dist/netIdSystem.js +1 -1
  110. package/dist/nexx360BidAdapter.js +1 -1
  111. package/dist/not-for-prod/prebid.js +185 -182
  112. package/dist/novatiqIdSystem.js +1 -1
  113. package/dist/oguryBidAdapter.js +1 -1
  114. package/dist/oneKeyIdSystem.js +1 -1
  115. package/dist/onetagBidAdapter.js +1 -1
  116. package/dist/ooloAnalyticsAdapter.js +1 -1
  117. package/dist/optidigitalBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/ozoneBidAdapter.js +1 -1
  120. package/dist/pairIdSystem.js +1 -1
  121. package/dist/parrableIdSystem.js +1 -1
  122. package/dist/pixfutureBidAdapter.js +1 -1
  123. package/dist/prebid-core.js +2 -2
  124. package/dist/publinkIdSystem.js +1 -1
  125. package/dist/pubmaticBidAdapter.js +1 -1
  126. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  127. package/dist/pulsepointBidAdapter.js +1 -1
  128. package/dist/pxyzBidAdapter.js +1 -1
  129. package/dist/quantcastBidAdapter.js +1 -1
  130. package/dist/quantcastIdSystem.js +1 -1
  131. package/dist/readpeakBidAdapter.js +1 -1
  132. package/dist/relaidoBidAdapter.js +1 -1
  133. package/dist/retailspotBidAdapter.js +1 -1
  134. package/dist/rhythmoneBidAdapter.js +1 -1
  135. package/dist/riseBidAdapter.js +1 -1
  136. package/dist/rubiconBidAdapter.js +1 -1
  137. package/dist/seedingAllianceBidAdapter.js +1 -1
  138. package/dist/seedtagBidAdapter.js +1 -1
  139. package/dist/sharedIdSystem.js +1 -1
  140. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  141. package/dist/sharethroughBidAdapter.js +1 -1
  142. package/dist/shinezBidAdapter.js +1 -1
  143. package/dist/silverpushBidAdapter.js +1 -1
  144. package/dist/smaatoBidAdapter.js +1 -1
  145. package/dist/smartadserverBidAdapter.js +1 -1
  146. package/dist/smartxBidAdapter.js +1 -1
  147. package/dist/smilewantedBidAdapter.js +1 -1
  148. package/dist/sonobiBidAdapter.js +1 -1
  149. package/dist/sovrnAnalyticsAdapter.js +1 -1
  150. package/dist/sovrnBidAdapter.js +1 -1
  151. package/dist/ssmasBidAdapter.js +1 -0
  152. package/dist/sspBCBidAdapter.js +1 -1
  153. package/dist/stroeerCoreBidAdapter.js +1 -1
  154. package/dist/stvBidAdapter.js +1 -1
  155. package/dist/sublimeBidAdapter.js +1 -1
  156. package/dist/tapadIdSystem.js +1 -1
  157. package/dist/targetVideoBidAdapter.js +1 -1
  158. package/dist/teadsBidAdapter.js +1 -1
  159. package/dist/tncIdSystem.js +1 -1
  160. package/dist/topicsFpdModule.js +1 -1
  161. package/dist/trionBidAdapter.js +1 -1
  162. package/dist/tripleliftBidAdapter.js +1 -1
  163. package/dist/ttdBidAdapter.js +1 -1
  164. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  165. package/dist/uid2IdSystem.js +1 -1
  166. package/dist/underdogmediaBidAdapter.js +1 -1
  167. package/dist/undertoneBidAdapter.js +1 -1
  168. package/dist/unifiedIdSystem.js +1 -1
  169. package/dist/userId.js +1 -1
  170. package/dist/utiqSystem.js +1 -1
  171. package/dist/verizonMediaIdSystem.js +1 -1
  172. package/dist/vidazooBidAdapter.js +1 -1
  173. package/dist/videobyteBidAdapter.js +1 -1
  174. package/dist/visxBidAdapter.js +1 -1
  175. package/dist/voxBidAdapter.js +1 -1
  176. package/dist/vrtcalBidAdapter.js +1 -1
  177. package/dist/vuukleBidAdapter.js +1 -1
  178. package/dist/widespaceBidAdapter.js +1 -1
  179. package/dist/winrBidAdapter.js +1 -1
  180. package/dist/yahoosspBidAdapter.js +1 -1
  181. package/dist/yandexBidAdapter.js +1 -1
  182. package/dist/yieldmoBidAdapter.js +1 -1
  183. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  184. package/dist/zeotapIdPlusIdSystem.js +1 -1
  185. package/integrationExamples/gpt/adUnitFloors.html +0 -1
  186. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  187. package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -2
  188. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  189. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  190. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  191. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  192. package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +1 -1
  193. package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +1 -1
  194. package/integrationExamples/videoModule/videojs/eventListeners.html +1 -1
  195. package/integrationExamples/videoModule/videojs/eventsUI.html +1 -1
  196. package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +1 -1
  197. package/integrationExamples/videoModule/videojs/mediaMetadata.html +1 -1
  198. package/integrationExamples/videoModule/videojs/playlist.html +1 -1
  199. package/modules/.submodules.json +1 -0
  200. package/modules/33acrossBidAdapter.js +24 -14
  201. package/modules/33acrossIdSystem.js +24 -4
  202. package/modules/a1MediaRtdProvider.js +92 -0
  203. package/modules/a1MediaRtdProvider.md +46 -0
  204. package/modules/adagioBidAdapter.js +0 -1
  205. package/modules/adfBidAdapter.js +4 -1
  206. package/modules/adkernelAdnBidAdapter.js +1 -1
  207. package/modules/adkernelBidAdapter.js +10 -3
  208. package/modules/admanBidAdapter.js +4 -0
  209. package/modules/admixerIdSystem.js +6 -0
  210. package/modules/adnuntiusBidAdapter.js +5 -13
  211. package/modules/adqueryIdSystem.js +6 -0
  212. package/modules/adtelligentIdSystem.js +6 -0
  213. package/modules/adyoulikeBidAdapter.js +6 -3
  214. package/modules/amxIdSystem.js +6 -0
  215. package/modules/beachfrontBidAdapter.js +32 -6
  216. package/modules/brandmetricsRtdProvider.js +36 -2
  217. package/modules/brandmetricsRtdProvider.md +17 -2
  218. package/modules/britepoolIdSystem.js +6 -0
  219. package/modules/connectIdSystem.js +6 -0
  220. package/modules/consentManagementGpp.js +10 -1
  221. package/modules/consumableBidAdapter.js +9 -1
  222. package/modules/criteoIdSystem.js +6 -0
  223. package/modules/czechAdIdSystem.js +6 -0
  224. package/modules/dacIdSystem.js +6 -0
  225. package/modules/deepintentDpesIdSystem.js +7 -2
  226. package/modules/dmdIdSystem.js +6 -0
  227. package/modules/euidIdSystem.js +9 -0
  228. package/modules/fabrickIdSystem.js +6 -0
  229. package/modules/ftrackIdSystem.js +16 -0
  230. package/modules/gdprEnforcement.js +27 -22
  231. package/modules/geolocationRtdProvider.js +65 -0
  232. package/modules/gravitoIdSystem.js +6 -0
  233. package/modules/greenbidsRtdProvider.js +1 -1
  234. package/modules/gridBidAdapter.js +19 -0
  235. package/modules/growthCodeIdSystem.js +20 -1
  236. package/modules/hadronIdSystem.js +6 -0
  237. package/modules/id5IdSystem.js +34 -8
  238. package/modules/identityLinkIdSystem.js +6 -0
  239. package/modules/idxIdSystem.js +6 -0
  240. package/modules/imdsBidAdapter.js +38 -14
  241. package/modules/imuIdSystem.js +10 -0
  242. package/modules/intentIqIdSystem.js +6 -0
  243. package/modules/invibesBidAdapter.js +5 -5
  244. package/modules/ixBidAdapter.js +56 -2
  245. package/modules/justIdSystem.js +6 -0
  246. package/modules/kargoBidAdapter.js +4 -0
  247. package/modules/kinessoIdSystem.js +7 -2
  248. package/modules/liveIntentIdSystem.js +53 -0
  249. package/modules/lotamePanoramaIdSystem.js +6 -0
  250. package/modules/merkleIdSystem.js +24 -0
  251. package/modules/minutemediaBidAdapter.js +17 -2
  252. package/modules/mwOpenLinkIdSystem.js +6 -0
  253. package/modules/naveggIdSystem.js +6 -0
  254. package/modules/netIdSystem.js +6 -0
  255. package/modules/novatiqIdSystem.js +12 -0
  256. package/modules/oguryBidAdapter.js +29 -16
  257. package/modules/oneKeyIdSystem.js +26 -0
  258. package/modules/ozoneBidAdapter.js +65 -18
  259. package/modules/ozoneBidAdapter.md +3 -1
  260. package/modules/pairIdSystem.js +6 -0
  261. package/modules/parrableIdSystem.js +38 -2
  262. package/modules/publinkIdSystem.js +7 -1
  263. package/modules/pubmaticBidAdapter.js +16 -1
  264. package/modules/pulsepointBidAdapter.js +63 -424
  265. package/modules/pulsepointBidAdapter.md +39 -45
  266. package/modules/quantcastIdSystem.js +6 -0
  267. package/modules/rubiconBidAdapter.js +9 -0
  268. package/modules/sharedIdSystem.js +7 -1
  269. package/modules/silverpushBidAdapter.js +2 -2
  270. package/modules/sovrnBidAdapter.js +5 -1
  271. package/modules/ssmasBidAdapter.js +126 -0
  272. package/modules/ssmasBidAdapter.md +35 -0
  273. package/modules/sspBCBidAdapter.js +36 -13
  274. package/modules/stroeerCoreBidAdapter.js +2 -3
  275. package/modules/tapadIdSystem.js +6 -0
  276. package/modules/teadsBidAdapter.js +2 -0
  277. package/modules/tncIdSystem.js +6 -0
  278. package/modules/topicsFpdModule.js +4 -1
  279. package/modules/topicsFpdModule.md +4 -0
  280. package/modules/tripleliftBidAdapter.js +5 -0
  281. package/modules/uid2IdSystem.js +14 -0
  282. package/modules/unifiedIdSystem.js +11 -0
  283. package/modules/userId/eids.js +6 -445
  284. package/modules/userId/index.js +38 -26
  285. package/modules/utiqSystem.js +9 -0
  286. package/modules/verizonMediaIdSystem.js +6 -0
  287. package/modules/vidazooBidAdapter.js +5 -7
  288. package/modules/voxBidAdapter.js +16 -5
  289. package/modules/vrtcalBidAdapter.js +10 -6
  290. package/modules/yahoosspBidAdapter.js +38 -33
  291. package/modules/yahoosspBidAdapter.md +96 -95
  292. package/modules/yandexBidAdapter.js +12 -15
  293. package/modules/zeotapIdPlusIdSystem.js +6 -0
  294. package/package.json +1 -1
  295. package/src/activities/redactor.js +1 -1
  296. package/src/adapters/bidderFactory.js +15 -6
  297. package/src/adloader.js +2 -1
  298. package/src/auction.js +24 -2
  299. package/src/constants.json +3 -1
  300. package/src/fpd/sua.js +8 -2
  301. package/test/spec/auctionmanager_spec.js +29 -1
  302. package/test/spec/fpd/enrichment_spec.js +7 -1
  303. package/test/spec/fpd/sua_spec.js +12 -0
  304. package/test/spec/modules/33acrossBidAdapter_spec.js +188 -35
  305. package/test/spec/modules/33acrossIdSystem_spec.js +122 -27
  306. package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
  307. package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
  308. package/test/spec/modules/adfBidAdapter_spec.js +47 -0
  309. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
  310. package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
  311. package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
  312. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
  313. package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
  314. package/test/spec/modules/brandmetricsRtdProvider_spec.js +69 -7
  315. package/test/spec/modules/consentManagementGpp_spec.js +16 -0
  316. package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
  317. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
  318. package/test/spec/modules/gdprEnforcement_spec.js +43 -2
  319. package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
  320. package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
  321. package/test/spec/modules/gridBidAdapter_spec.js +42 -0
  322. package/test/spec/modules/id5IdSystem_spec.js +18 -0
  323. package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
  324. package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
  325. package/test/spec/modules/ixBidAdapter_spec.js +95 -5
  326. package/test/spec/modules/kargoBidAdapter_spec.js +121 -106
  327. package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
  328. package/test/spec/modules/minutemediaBidAdapter_spec.js +36 -5
  329. package/test/spec/modules/oguryBidAdapter_spec.js +208 -108
  330. package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
  331. package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
  332. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
  333. package/test/spec/modules/priceFloors_spec.js +14 -0
  334. package/test/spec/modules/pubmaticBidAdapter_spec.js +125 -373
  335. package/test/spec/modules/pulsepointBidAdapter_spec.js +225 -486
  336. package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
  337. package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
  338. package/test/spec/modules/sovrnBidAdapter_spec.js +24 -4
  339. package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
  340. package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
  341. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +8 -5
  342. package/test/spec/modules/teadsBidAdapter_spec.js +70 -21
  343. package/test/spec/modules/topicsFpdModule_spec.js +10 -4
  344. package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
  345. package/test/spec/modules/userId_spec.js +116 -7
  346. package/test/spec/modules/vidazooBidAdapter_spec.js +0 -5
  347. package/test/spec/modules/voxBidAdapter_spec.js +93 -0
  348. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
  349. package/test/spec/modules/xeBidAdapter_spec.js +366 -368
  350. package/test/spec/modules/yahoosspBidAdapter_spec.js +405 -330
  351. package/test/spec/modules/yandexBidAdapter_spec.js +21 -3
  352. package/test/spec/unit/core/bidderFactory_spec.js +61 -14
  353. package/integrationExamples/gpt/inskin_example.html +0 -100
  354. package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
@@ -3,7 +3,6 @@ import { config } from 'src/config.js';
3
3
  import { BANNER, VIDEO } from 'src/mediaTypes.js';
4
4
  import { spec } from 'modules/yahoosspBidAdapter.js';
5
5
  import {createEidsArray} from '../../../modules/userId/eids';
6
- import {deepClone} from '../../../src/utils';
7
6
 
8
7
  const DEFAULT_BID_ID = '84ab500420319d';
9
8
  const DEFAULT_BID_DCN = '2093845709823475';
@@ -13,18 +12,20 @@ const DEFAULT_AD_UNIT_CODE = '/19968336/header-bid-tag-1';
13
12
  const DEFAULT_AD_UNIT_TYPE = 'banner';
14
13
  const DEFAULT_PARAMS_BID_OVERRIDE = {};
15
14
  const DEFAULT_VIDEO_CONTEXT = 'instream';
16
- const ADAPTER_VERSION = '1.0.2';
15
+ const ADAPTER_VERSION = '1.1.0';
16
+ const DEFAULT_BIDDER_CODE = 'yahooAds';
17
+ const VALID_BIDDER_CODES = [DEFAULT_BIDDER_CODE, 'yahoossp', 'yahooAdvertising'];
17
18
  const PREBID_VERSION = '$prebid.version$';
18
19
  const INTEGRATION_METHOD = 'prebid.js';
19
20
 
20
21
  // Utility functions
21
- const generateBidRequest = ({bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
22
+ const generateBidRequest = ({bidderCode, bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
22
23
  const bidRequest = {
23
24
  adUnitCode,
24
25
  auctionId: 'b06c5141-fe8f-4cdf-9d7d-54415490a917',
25
26
  bidId,
26
27
  bidderRequestsCount: 1,
27
- bidder: 'yahoossp',
28
+ bidder: bidderCode,
28
29
  bidderRequestId: '7101db09af0db2',
29
30
  bidderWinsCount: 0,
30
31
  mediaTypes: {},
@@ -79,7 +80,7 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
79
80
  adUnitCode: adUnitCode || 'default-adUnitCode',
80
81
  auctionId: 'd4c83a3b-18e4-4208-b98b-63848449c7aa',
81
82
  auctionStart: new Date().getTime(),
82
- bidderCode: 'yahoossp',
83
+ bidderCode: bidRequestArray[0].bidder,
83
84
  bidderRequestId: '112f1c7c5d399a',
84
85
  bids: bidRequestArray,
85
86
  refererInfo: {
@@ -107,8 +108,9 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
107
108
  return bidderRequest;
108
109
  };
109
110
 
110
- const generateBuildRequestMock = ({bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
111
+ const generateBuildRequestMock = ({bidderCode, bidId, pos, adUnitCode, adUnitType, bidOverrideObject, videoContext, pubIdMode, ortb2}) => {
111
112
  const bidRequestConfig = {
113
+ bidderCode: bidderCode || DEFAULT_BIDDER_CODE,
112
114
  bidId: bidId || DEFAULT_BID_ID,
113
115
  pos: pos || DEFAULT_BID_POS,
114
116
  adUnitCode: adUnitCode || DEFAULT_AD_UNIT_CODE,
@@ -174,21 +176,28 @@ const generateResponseMock = (admPayloadType, vastVersion, videoContext) => {
174
176
  seatbid: [{ bid: [ bidResponse ], seat: 13107 }]
175
177
  }
176
178
  };
177
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: admPayloadType, videoContext: videoContext});
179
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: admPayloadType, videoContext});
178
180
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
179
-
180
181
  return {serverResponse, data, bidderRequest};
181
182
  }
182
183
 
183
184
  // Unit tests
184
- describe('YahooSSP Bid Adapter:', () => {
185
+ describe('Yahoo Advertising Bid Adapter:', () => {
186
+ beforeEach(() => {
187
+ config.resetConfig();
188
+ });
189
+
185
190
  describe('Validate basic properties', () => {
186
191
  it('should define the correct bidder code', () => {
187
- expect(spec.code).to.equal('yahoossp')
192
+ expect(spec.code).to.equal('yahooAds');
193
+ });
194
+
195
+ it('should define the correct bidder aliases', () => {
196
+ expect(spec.aliases).to.deep.equal(['yahoossp', 'yahooAdvertising']);
188
197
  });
189
198
 
190
199
  it('should define the correct vendor ID', () => {
191
- expect(spec.gvlid).to.equal(25)
200
+ expect(spec.gvlid).to.equal(25);
192
201
  });
193
202
  });
194
203
 
@@ -271,33 +280,62 @@ describe('YahooSSP Bid Adapter:', () => {
271
280
  });
272
281
 
273
282
  describe('user consent parameters are updated', () => {
274
- let syncOptions = {
283
+ const syncOptions = {
275
284
  iframeEnabled: true,
276
285
  pixelEnabled: true
277
286
  };
278
- let pixelObjects = spec.getUserSyncs(
279
- syncOptions,
280
- SERVER_RESPONSES,
281
- bidderRequest.gdprConsent,
282
- bidderRequest.uspConsent,
283
- bidderRequest.gppConsent
284
- );
285
- pixelObjects.forEach(pixelObject => {
286
- let url = pixelObject.url;
287
- let urlParams = new URL(url).searchParams;
288
- const expectedParams = {
289
- 'baz': 'true',
290
- 'gdpr_consent': bidderRequest.gdprConsent.consentString,
291
- 'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
292
- 'us_privacy': bidderRequest.uspConsent,
293
- 'gpp': bidderRequest.gppConsent.gppString,
294
- 'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
295
- }
296
- for (const [key, value] of Object.entries(expectedParams)) {
297
- it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
298
- expect(urlParams.get(key)).to.equal(value);
299
- });
300
- };
287
+ describe('when all consent data is set', () => {
288
+ const pixelObjects = spec.getUserSyncs(
289
+ syncOptions,
290
+ SERVER_RESPONSES,
291
+ bidderRequest.gdprConsent,
292
+ bidderRequest.uspConsent,
293
+ bidderRequest.gppConsent
294
+ );
295
+ pixelObjects.forEach(pixelObject => {
296
+ let url = pixelObject.url;
297
+ let urlParams = new URL(url).searchParams;
298
+ const expectedParams = {
299
+ 'baz': 'true',
300
+ 'gdpr_consent': bidderRequest.gdprConsent.consentString,
301
+ 'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
302
+ 'us_privacy': bidderRequest.uspConsent,
303
+ 'gpp': bidderRequest.gppConsent.gppString,
304
+ 'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
305
+ }
306
+ for (const [key, value] of Object.entries(expectedParams)) {
307
+ it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
308
+ expect(urlParams.get(key)).to.equal(value);
309
+ });
310
+ };
311
+ });
312
+ });
313
+
314
+ describe('when no consent data is set', () => {
315
+ const pixelObjects = spec.getUserSyncs(
316
+ syncOptions,
317
+ SERVER_RESPONSES,
318
+ undefined,
319
+ undefined,
320
+ undefined
321
+ );
322
+ pixelObjects.forEach(pixelObject => {
323
+ let url = pixelObject.url;
324
+ let urlParams = new URL(url).searchParams;
325
+ const expectedParams = {
326
+ 'baz': 'true',
327
+ 'gdpr_consent': '',
328
+ 'gdpr': '0',
329
+ 'us_privacy': '',
330
+ 'gpp': '',
331
+ 'gpp_sid': ''
332
+ }
333
+ for (const [key, value] of Object.entries(expectedParams)) {
334
+ it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
335
+ expect(urlParams.get(key)).to.equal(value);
336
+ });
337
+ };
338
+ });
301
339
  });
302
340
  });
303
341
  });
@@ -647,9 +685,9 @@ describe('YahooSSP Bid Adapter:', () => {
647
685
  };
648
686
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
649
687
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
650
- expect(data.user[param]).to.be.a('object');
651
- expect(data.user[param]).to.be.deep.include({[param]: {a: '123', b: '456'}});
652
- config.setConfig({ortb2: {}});
688
+ const user = data.user;
689
+ expect(user[param]).to.be.a('object');
690
+ expect(user[param]).to.be.deep.include({[param]: {a: '123', b: '456'}});
653
691
  });
654
692
  });
655
693
 
@@ -669,12 +707,14 @@ describe('YahooSSP Bid Adapter:', () => {
669
707
  };
670
708
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
671
709
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
672
- expect(data.user.data[0][param]).to.exist;
673
- expect(data.user.data[0][param]).to.be.a('string');
674
- expect(data.user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
675
- expect(data.site.content.data[0][param]).to.exist;
676
- expect(data.site.content.data[0][param]).to.be.a('string');
677
- expect(data.site.content.data[0][param]).to.be.equal(ortb2.site.content.data[0][param]);
710
+ const user = data.user;
711
+ const site = data.site;
712
+ expect(user.data[0][param]).to.exist;
713
+ expect(user.data[0][param]).to.be.a('string');
714
+ expect(user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
715
+ expect(site.content.data[0][param]).to.exist;
716
+ expect(site.content.data[0][param]).to.be.a('string');
717
+ expect(site.content.data[0][param]).to.be.equal(ortb2.site.content.data[0][param]);
678
718
  });
679
719
  });
680
720
 
@@ -688,9 +728,10 @@ describe('YahooSSP Bid Adapter:', () => {
688
728
  };
689
729
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
690
730
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
691
- expect(data.user.data[0][param]).to.exist;
692
- expect(data.user.data[0][param]).to.be.a('array');
693
- expect(data.user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
731
+ const user = data.user;
732
+ expect(user.data[0][param]).to.exist;
733
+ expect(user.data[0][param]).to.be.a('array');
734
+ expect(user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
694
735
  });
695
736
  });
696
737
 
@@ -704,10 +745,10 @@ describe('YahooSSP Bid Adapter:', () => {
704
745
  };
705
746
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
706
747
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
707
- expect(data.user.data[0][param]).to.exist;
708
- expect(data.user.data[0][param]).to.be.a('object');
709
- expect(data.user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
710
- config.setConfig({ortb2: {}});
748
+ const user = data.user;
749
+ expect(user.data[0][param]).to.exist;
750
+ expect(user.data[0][param]).to.be.a('object');
751
+ expect(user.data[0][param]).to.be.equal(ortb2.user.data[0][param]);
711
752
  });
712
753
  });
713
754
 
@@ -815,26 +856,33 @@ describe('YahooSSP Bid Adapter:', () => {
815
856
  });
816
857
 
817
858
  describe('Endpoint & Impression Request Mode:', () => {
818
- it('should route request to config override endpoint', () => {
819
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
820
- const testOverrideEndpoint = 'http://foo.bar.baz.com/bidderRequest';
859
+ afterEach(() => {
821
860
  config.setConfig({
822
- yahoossp: {
823
- endpoint: testOverrideEndpoint
861
+ yahooAds: {
862
+ singleRequestMode: undefined
824
863
  }
825
864
  });
826
- const response = spec.buildRequests(validBidRequests, bidderRequest)[0];
827
- expect(response).to.deep.include(
828
- {
829
- method: 'POST',
830
- url: testOverrideEndpoint
831
- });
832
865
  });
833
866
 
834
- it('should route request to /bidRequest endpoint when dcn & pos present', () => {
835
- config.setConfig({
836
- yahoossp: {}
867
+ VALID_BIDDER_CODES.forEach(bidderCode => {
868
+ it(`should route request to config override endpoint for ${bidderCode} override config`, () => {
869
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode});
870
+ const testOverrideEndpoint = 'http://foo.bar.baz.com/bidderRequest';
871
+ const cfg = {};
872
+ cfg[bidderCode] = {
873
+ endpoint: testOverrideEndpoint
874
+ };
875
+ config.setConfig(cfg);
876
+ const response = spec.buildRequests(validBidRequests, bidderRequest)[0];
877
+ expect(response).to.deep.include(
878
+ {
879
+ method: 'POST',
880
+ url: testOverrideEndpoint
881
+ });
837
882
  });
883
+ });
884
+
885
+ it('should route request to /bidRequest endpoint when dcn & pos present', () => {
838
886
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
839
887
  const response = spec.buildRequests(validBidRequests, bidderRequest);
840
888
  expect(response[0]).to.deep.include({
@@ -862,15 +910,15 @@ describe('YahooSSP Bid Adapter:', () => {
862
910
  bidderRequest.bids = validBidRequests;
863
911
 
864
912
  config.setConfig({
865
- yahoossp: {
913
+ yahooAds: {
866
914
  singleRequestMode: true
867
915
  }
868
916
  });
869
917
 
870
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
871
- expect(data.imp).to.be.an('array').with.lengthOf(2);
918
+ const responsePayload = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
919
+ expect(responsePayload.imp).to.be.an('array').with.lengthOf(2);
872
920
 
873
- expect(data.imp[0]).to.deep.include({
921
+ expect(responsePayload.imp[0]).to.deep.include({
874
922
  id: DEFAULT_BID_ID,
875
923
  ext: {
876
924
  pos: DEFAULT_BID_POS,
@@ -878,7 +926,7 @@ describe('YahooSSP Bid Adapter:', () => {
878
926
  }
879
927
  });
880
928
 
881
- expect(data.imp[1]).to.deep.include({
929
+ expect(responsePayload.imp[1]).to.deep.include({
882
930
  id: BID_ID_2,
883
931
  ext: {
884
932
  pos: BID_POS_2,
@@ -896,8 +944,9 @@ describe('YahooSSP Bid Adapter:', () => {
896
944
 
897
945
  it('buildRequests(): should return an array with the correct amount of request objects', () => {
898
946
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
899
- const response = spec.buildRequests(validBidRequests, bidderRequest).bidderRequest;
900
- expect(response.bids).to.be.an('array').to.have.lengthOf(1);
947
+ const reqs = spec.buildRequests(validBidRequests, bidderRequest);
948
+ expect(reqs).to.be.an('array').to.have.lengthOf(1);
949
+ expect(reqs[0]).to.be.an('object').that.has.keys('method', 'url', 'data', 'options', 'bidderRequest');
901
950
  });
902
951
  });
903
952
 
@@ -905,7 +954,7 @@ describe('YahooSSP Bid Adapter:', () => {
905
954
  it('should return request objects with the relevant custom headers and content type declaration', () => {
906
955
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
907
956
  bidderRequest.gdprConsent.gdprApplies = false;
908
- const options = spec.buildRequests(validBidRequests, bidderRequest).options;
957
+ const options = spec.buildRequests(validBidRequests, bidderRequest)[0].options;
909
958
  expect(options).to.deep.equal(
910
959
  {
911
960
  contentType: 'application/json',
@@ -920,22 +969,8 @@ describe('YahooSSP Bid Adapter:', () => {
920
969
  describe('User data', () => {
921
970
  it('should set the allowed sources user eids', () => {
922
971
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
923
- validBidRequests[0].userIdAsEids = createEidsArray({
924
- admixerId: 'admixerId_FROM_USER_ID_MODULE',
925
- adtelligentId: 'adtelligentId_FROM_USER_ID_MODULE',
926
- amxId: 'amxId_FROM_USER_ID_MODULE',
927
- britepoolid: 'britepoolid_FROM_USER_ID_MODULE',
928
- deepintentId: 'deepintentId_FROM_USER_ID_MODULE',
929
- publinkId: 'publinkId_FROM_USER_ID_MODULE',
930
- intentIqId: 'intentIqId_FROM_USER_ID_MODULE',
931
- idl_env: 'idl_env_FROM_USER_ID_MODULE',
932
- imuid: 'imuid_FROM_USER_ID_MODULE',
933
- criteoId: 'criteoId_FROM_USER_ID_MODULE',
934
- fabrickId: 'fabrickId_FROM_USER_ID_MODULE',
935
- });
936
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
937
-
938
- expect(data.user.ext.eids).to.deep.equal([
972
+ validBidRequests[0].userIdAsEids = [
973
+ {source: 'yahoo.com', uids: [{id: 'connectId_FROM_USER_ID_MODULE', atype: 3}]},
939
974
  {source: 'admixer.net', uids: [{id: 'admixerId_FROM_USER_ID_MODULE', atype: 3}]},
940
975
  {source: 'adtelligent.com', uids: [{id: 'adtelligentId_FROM_USER_ID_MODULE', atype: 3}]},
941
976
  {source: 'amxdt.net', uids: [{id: 'amxId_FROM_USER_ID_MODULE', atype: 1}]},
@@ -947,7 +982,10 @@ describe('YahooSSP Bid Adapter:', () => {
947
982
  {source: 'intimatemerger.com', uids: [{id: 'imuid_FROM_USER_ID_MODULE', atype: 1}]},
948
983
  {source: 'criteo.com', uids: [{id: 'criteoId_FROM_USER_ID_MODULE', atype: 1}]},
949
984
  {source: 'neustar.biz', uids: [{id: 'fabrickId_FROM_USER_ID_MODULE', atype: 1}]}
950
- ]);
985
+ ];
986
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
987
+
988
+ expect(data.user.ext.eids).to.deep.equal(validBidRequests[0].userIdAsEids);
951
989
  });
952
990
 
953
991
  it('should not set not allowed user eids sources', () => {
@@ -955,7 +993,7 @@ describe('YahooSSP Bid Adapter:', () => {
955
993
  validBidRequests[0].userIdAsEids = createEidsArray({
956
994
  justId: 'justId_FROM_USER_ID_MODULE'
957
995
  });
958
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
996
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
959
997
 
960
998
  expect(data.user.ext.eids).to.deep.equal([]);
961
999
  });
@@ -964,7 +1002,7 @@ describe('YahooSSP Bid Adapter:', () => {
964
1002
  describe('Request Payload oRTB bid validation:', () => {
965
1003
  it('should generate a valid openRTB bid-request object in the data field', () => {
966
1004
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
967
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
1005
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
968
1006
  expect(data.site).to.deep.equal({
969
1007
  id: bidderRequest.bids[0].params.dcn,
970
1008
  page: bidderRequest.refererInfo.page
@@ -1013,7 +1051,7 @@ describe('YahooSSP Bid Adapter:', () => {
1013
1051
  it('should generate a valid openRTB imp.ext object in the bid-request', () => {
1014
1052
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
1015
1053
  const bid = validBidRequests[0];
1016
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
1054
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1017
1055
  expect(data.imp[0].ext).to.deep.equal({
1018
1056
  pos: bid.params.pos,
1019
1057
  dfp_ad_unit_code: DEFAULT_AD_UNIT_CODE
@@ -1023,7 +1061,7 @@ describe('YahooSSP Bid Adapter:', () => {
1023
1061
  it('should use siteId value as site.id in the outbound bid-request when using "pubId" integration mode', () => {
1024
1062
  let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true});
1025
1063
  validBidRequests[0].params.siteId = '1234567';
1026
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
1064
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1027
1065
  expect(data.site.id).to.equal('1234567');
1028
1066
  });
1029
1067
 
@@ -1039,7 +1077,7 @@ describe('YahooSSP Bid Adapter:', () => {
1039
1077
  }
1040
1078
  }
1041
1079
  let { validBidRequests, bidderRequest } = generateBuildRequestMock({ortb2});
1042
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
1080
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1043
1081
  expect(data.site.publisher).to.deep.equal({
1044
1082
  ext: {
1045
1083
  publisherblob: 'pblob',
@@ -1060,7 +1098,7 @@ describe('YahooSSP Bid Adapter:', () => {
1060
1098
  }
1061
1099
  }
1062
1100
  let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true, ortb2});
1063
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
1101
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1064
1102
  expect(data.site.publisher).to.deep.equal({
1065
1103
  id: DEFAULT_PUBID,
1066
1104
  ext: {
@@ -1073,17 +1111,13 @@ describe('YahooSSP Bid Adapter:', () => {
1073
1111
  it('should use placementId value as imp.tagid in the outbound bid-request when using "pubId" integration mode', () => {
1074
1112
  let { validBidRequests, bidderRequest } = generateBuildRequestMock({pubIdMode: true});
1075
1113
  validBidRequests[0].params.placementId = 'header-300x250';
1076
- const data = spec.buildRequests(validBidRequests, bidderRequest).data;
1114
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1077
1115
  expect(data.imp[0].tagid).to.deep.equal('header-300x250');
1078
1116
  });
1079
1117
  });
1080
1118
 
1081
1119
  describe('Request Payload oRTB bid.imp validation:', () => {
1082
- // Validate Banner imp imp when yahoossp.mode=undefined
1083
- it('should generate a valid "Banner" imp object', () => {
1084
- config.setConfig({
1085
- yahoossp: {}
1086
- });
1120
+ it('should generate a valid "Banner" imp object when mode config override is undefined', () => {
1087
1121
  const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
1088
1122
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1089
1123
  expect(data.imp[0].video).to.not.exist;
@@ -1093,74 +1127,82 @@ describe('YahooSSP Bid Adapter:', () => {
1093
1127
  });
1094
1128
  });
1095
1129
 
1096
- // Validate Banner imp when yahoossp.mode="banner"
1097
- it('should generate a valid "Banner" imp object', () => {
1098
- config.setConfig({
1099
- yahoossp: { mode: 'banner' }
1100
- });
1101
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
1102
- const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1103
- expect(data.imp[0].video).to.not.exist;
1104
- expect(data.imp[0].banner).to.deep.equal({
1105
- mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
1106
- format: [{w: 300, h: 250}, {w: 300, h: 600}]
1130
+ // Validate Banner imp when config value for mode="banner"
1131
+ VALID_BIDDER_CODES.forEach(bidderCode => {
1132
+ it(`should generate a valid "Banner" imp object for ${bidderCode} config override`, () => {
1133
+ const cfg = {};
1134
+ cfg[bidderCode] = {
1135
+ mode: BANNER
1136
+ };
1137
+ config.setConfig(cfg);
1138
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode});
1139
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1140
+ expect(data.imp[0].video).to.not.exist;
1141
+ expect(data.imp[0].banner).to.deep.equal({
1142
+ mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
1143
+ format: [{w: 300, h: 250}, {w: 300, h: 600}]
1144
+ });
1107
1145
  });
1108
- });
1109
1146
 
1110
- // Validate Video imp
1111
- it('should generate a valid "Video" only imp object', () => {
1112
- config.setConfig({
1113
- yahoossp: { mode: 'video' }
1114
- });
1115
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: 'video'});
1116
- const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1117
- expect(data.imp[0].banner).to.not.exist;
1118
- expect(data.imp[0].video).to.deep.equal({
1119
- mimes: ['video/mp4', 'application/javascript'],
1120
- w: 300,
1121
- h: 250,
1122
- api: [2],
1123
- protocols: [2, 5],
1124
- startdelay: 0,
1125
- linearity: 1,
1126
- maxbitrate: undefined,
1127
- maxduration: undefined,
1128
- minduration: undefined,
1129
- delivery: undefined,
1130
- pos: undefined,
1131
- playbackmethod: undefined,
1132
- rewarded: undefined,
1133
- placement: undefined
1147
+ // Validate Video imp
1148
+ it(`should generate a valid "Video" only imp object for ${bidderCode} config override`, () => {
1149
+ const cfg = {};
1150
+ cfg[bidderCode] = {
1151
+ mode: VIDEO
1152
+ };
1153
+ config.setConfig(cfg);
1154
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video'});
1155
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1156
+ expect(data.imp[0].banner).to.not.exist;
1157
+ expect(data.imp[0].video).to.deep.equal({
1158
+ mimes: ['video/mp4', 'application/javascript'],
1159
+ w: 300,
1160
+ h: 250,
1161
+ api: [2],
1162
+ protocols: [2, 5],
1163
+ startdelay: 0,
1164
+ linearity: 1,
1165
+ maxbitrate: undefined,
1166
+ maxduration: undefined,
1167
+ minduration: undefined,
1168
+ delivery: undefined,
1169
+ pos: undefined,
1170
+ playbackmethod: undefined,
1171
+ rewarded: undefined,
1172
+ placement: undefined
1173
+ });
1134
1174
  });
1135
- });
1136
1175
 
1137
- // Validate multi-format Video+banner imp
1138
- it('should generate a valid multi-format "Video + Banner" imp object', () => {
1139
- config.setConfig({
1140
- yahoossp: { mode: 'all' }
1141
- });
1142
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: 'multi-format'});
1143
- const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1144
- expect(data.imp[0].banner).to.deep.equal({
1145
- mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
1146
- format: [{w: 300, h: 250}, {w: 300, h: 600}]
1147
- });
1148
- expect(data.imp[0].video).to.deep.equal({
1149
- mimes: ['video/mp4', 'application/javascript'],
1150
- w: 300,
1151
- h: 250,
1152
- api: [2],
1153
- protocols: [2, 5],
1154
- startdelay: 0,
1155
- linearity: 1,
1156
- maxbitrate: undefined,
1157
- maxduration: undefined,
1158
- minduration: undefined,
1159
- delivery: undefined,
1160
- pos: undefined,
1161
- playbackmethod: undefined,
1162
- rewarded: undefined,
1163
- placement: undefined
1176
+ // Validate multi-format Video+banner imp
1177
+ it(`should generate a valid multi-format "Video + Banner" imp object for ${bidderCode} config override`, () => {
1178
+ const cfg = {};
1179
+ cfg[bidderCode] = {
1180
+ mode: 'all'
1181
+ };
1182
+ config.setConfig(cfg);
1183
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'multi-format'});
1184
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1185
+ expect(data.imp[0].banner).to.deep.equal({
1186
+ mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
1187
+ format: [{w: 300, h: 250}, {w: 300, h: 600}]
1188
+ });
1189
+ expect(data.imp[0].video).to.deep.equal({
1190
+ mimes: ['video/mp4', 'application/javascript'],
1191
+ w: 300,
1192
+ h: 250,
1193
+ api: [2],
1194
+ protocols: [2, 5],
1195
+ startdelay: 0,
1196
+ linearity: 1,
1197
+ maxbitrate: undefined,
1198
+ maxduration: undefined,
1199
+ minduration: undefined,
1200
+ delivery: undefined,
1201
+ pos: undefined,
1202
+ playbackmethod: undefined,
1203
+ rewarded: undefined,
1204
+ placement: undefined
1205
+ });
1164
1206
  });
1165
1207
  });
1166
1208
 
@@ -1179,7 +1221,6 @@ describe('YahooSSP Bid Adapter:', () => {
1179
1221
  invalidKey5: undefined
1180
1222
  };
1181
1223
  const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1182
-
1183
1224
  expect(data.imp[0].ext.kvs).to.deep.equal({
1184
1225
  key1: 'String',
1185
1226
  key2: 123456,
@@ -1192,10 +1233,6 @@ describe('YahooSSP Bid Adapter:', () => {
1192
1233
  describe('Multiple adUnit validations:', () => {
1193
1234
  // Multiple banner adUnits
1194
1235
  it('should generate multiple bid-requests for each adUnit - 2 banner only', () => {
1195
- config.setConfig({
1196
- yahoossp: { mode: 'banner' }
1197
- });
1198
-
1199
1236
  const BID_ID_2 = '84ab50xxxxx';
1200
1237
  const BID_POS_2 = 'footer';
1201
1238
  const AD_UNIT_CODE_2 = 'test-ad-unit-code-123';
@@ -1209,12 +1246,12 @@ describe('YahooSSP Bid Adapter:', () => {
1209
1246
  validBidRequests = [bidRequest, bidRequest2, bidRequest3];
1210
1247
  bidderRequest.bids = validBidRequests;
1211
1248
 
1212
- const response = spec.buildRequests(validBidRequests, bidderRequest)
1213
- expect(response).to.be.a('array');
1214
- expect(response.length).to.equal(2);
1215
- response.forEach((obj) => {
1216
- expect(obj.data.imp[0].video).to.not.exist
1217
- expect(obj.data.imp[0].banner).to.deep.equal({
1249
+ const reqs = spec.buildRequests(validBidRequests, bidderRequest)
1250
+ expect(reqs).to.be.a('array');
1251
+ expect(reqs.length).to.equal(2);
1252
+ reqs.forEach(req => {
1253
+ expect(req.data.imp[0].video).to.not.exist
1254
+ expect(req.data.imp[0].banner).to.deep.equal({
1218
1255
  mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
1219
1256
  format: [{w: 300, h: 250}, {w: 300, h: 600}]
1220
1257
  });
@@ -1223,9 +1260,11 @@ describe('YahooSSP Bid Adapter:', () => {
1223
1260
 
1224
1261
  // Multiple video adUnits
1225
1262
  it('should generate multiple bid-requests for each adUnit - 2 video only', () => {
1226
- config.setConfig({
1227
- yahoossp: { mode: 'video' }
1228
- });
1263
+ const cfg = {};
1264
+ cfg[DEFAULT_BIDDER_CODE] = {
1265
+ mode: VIDEO
1266
+ };
1267
+ config.setConfig(cfg);
1229
1268
  const BID_ID_2 = '84ab50xxxxx';
1230
1269
  const BID_POS_2 = 'footer';
1231
1270
  const AD_UNIT_CODE_2 = 'test-ad-unit-code-123';
@@ -1233,18 +1272,18 @@ describe('YahooSSP Bid Adapter:', () => {
1233
1272
  const BID_POS_3 = 'hero';
1234
1273
  const AD_UNIT_CODE_3 = 'video-ad-unit';
1235
1274
 
1236
- let { bidRequest, validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: 'video'}); // video
1237
- const { bidRequest: bidRequest2 } = generateBuildRequestMock({bidId: BID_ID_2, pos: BID_POS_2, adUnitCode: AD_UNIT_CODE_2, adUnitType: 'video'}); // video
1238
- const { bidRequest: bidRequest3 } = generateBuildRequestMock({bidId: BID_ID_3, pos: BID_POS_3, adUnitCode: AD_UNIT_CODE_3}); // banner (should be filtered)
1275
+ let {bidRequest, validBidRequests, bidderRequest} = generateBuildRequestMock({adUnitType: 'video'}); // video
1276
+ const {bidRequest: bidRequest2} = generateBuildRequestMock({bidId: BID_ID_2, pos: BID_POS_2, adUnitCode: AD_UNIT_CODE_2, adUnitType: 'video'}); // video
1277
+ const {bidRequest: bidRequest3} = generateBuildRequestMock({bidId: BID_ID_3, pos: BID_POS_3, adUnitCode: AD_UNIT_CODE_3}); // banner (should be filtered)
1239
1278
  validBidRequests = [bidRequest, bidRequest2, bidRequest3];
1240
1279
  bidderRequest.bids = validBidRequests;
1241
1280
 
1242
- const response = spec.buildRequests(validBidRequests, bidderRequest)
1243
- expect(response).to.be.a('array');
1244
- expect(response.length).to.equal(2);
1245
- response.forEach((obj) => {
1246
- expect(obj.data.imp[0].banner).to.not.exist
1247
- expect(obj.data.imp[0].video).to.deep.equal({
1281
+ const reqs = spec.buildRequests(validBidRequests, bidderRequest)
1282
+ expect(reqs).to.be.a('array');
1283
+ expect(reqs.length).to.equal(2);
1284
+ reqs.forEach(req => {
1285
+ expect(req.data.imp[0].banner).to.not.exist
1286
+ expect(req.data.imp[0].video).to.deep.equal({
1248
1287
  mimes: ['video/mp4', 'application/javascript'],
1249
1288
  w: 300,
1250
1289
  h: 250,
@@ -1265,9 +1304,9 @@ describe('YahooSSP Bid Adapter:', () => {
1265
1304
  });
1266
1305
  // Mixed adUnits 1-banner, 1-video, 1-native (should filter out native)
1267
1306
  it('should generate multiple bid-requests for both "video & banner" adUnits', () => {
1268
- config.setConfig({
1269
- yahoossp: { mode: 'all' }
1270
- });
1307
+ const cfg = {};
1308
+ cfg[DEFAULT_BIDDER_CODE] = { mode: 'all' };
1309
+ config.setConfig(cfg);
1271
1310
  const BID_ID_2 = '84ab50xxxxx';
1272
1311
  const BID_POS_2 = 'footer';
1273
1312
  const AD_UNIT_CODE_2 = 'video-ad-unit';
@@ -1281,21 +1320,21 @@ describe('YahooSSP Bid Adapter:', () => {
1281
1320
  validBidRequests = [bidRequest, bidRequest2, bidRequest3];
1282
1321
  bidderRequest.bids = validBidRequests;
1283
1322
 
1284
- const response = spec.buildRequests(validBidRequests, bidderRequest);
1285
- expect(response).to.be.a('array');
1286
- expect(response.length).to.equal(2);
1287
- response.forEach((obj) => {
1288
- expect(obj.data.imp[0].native).to.not.exist;
1323
+ const reqs = spec.buildRequests(validBidRequests, bidderRequest);
1324
+ expect(reqs).to.be.a('array');
1325
+ expect(reqs.length).to.equal(2);
1326
+ reqs.forEach(req => {
1327
+ expect(req.data.imp[0].native).to.not.exist;
1289
1328
  });
1290
1329
 
1291
- const data1 = response[0].data;
1330
+ const data1 = reqs[0].data;
1292
1331
  expect(data1.imp[0].video).to.not.exist;
1293
1332
  expect(data1.imp[0].banner).to.deep.equal({
1294
1333
  mimes: ['text/html', 'text/javascript', 'application/javascript', 'image/jpg'],
1295
1334
  format: [{w: 300, h: 250}, {w: 300, h: 600}]
1296
1335
  });
1297
1336
 
1298
- const data2 = response[1].data;
1337
+ const data2 = reqs[1].data;
1299
1338
  expect(data2.imp[0].banner).to.not.exist;
1300
1339
  expect(data2.imp[0].video).to.deep.equal({
1301
1340
  mimes: ['video/mp4', 'application/javascript'],
@@ -1318,90 +1357,98 @@ describe('YahooSSP Bid Adapter:', () => {
1318
1357
  });
1319
1358
 
1320
1359
  describe('Video params firstlook & bidOverride validations:', () => {
1321
- it('should first look at params.bidOverride for video placement data', () => {
1322
- config.setConfig({
1323
- yahoossp: { mode: 'video' }
1324
- });
1325
- const bidOverride = {
1326
- imp: {
1327
- video: {
1328
- mimes: ['video/mp4'],
1329
- w: 400,
1330
- h: 350,
1331
- api: [1],
1332
- protocols: [1, 3],
1333
- startdelay: 0,
1334
- linearity: 1,
1335
- maxbitrate: 400000,
1336
- maxduration: 3600,
1337
- minduration: 1500,
1338
- delivery: 1,
1339
- pos: 123456,
1340
- playbackmethod: 1,
1341
- rewarded: 1,
1342
- placement: 1
1360
+ VALID_BIDDER_CODES.forEach(bidderCode => {
1361
+ it(`should first look at params.bidOverride for video placement data for ${bidderCode} config override`, () => {
1362
+ const cfg = {};
1363
+ cfg[bidderCode] = {
1364
+ mode: VIDEO
1365
+ };
1366
+ config.setConfig(cfg);
1367
+ const bidOverride = {
1368
+ imp: {
1369
+ video: {
1370
+ mimes: ['video/mp4'],
1371
+ w: 400,
1372
+ h: 350,
1373
+ api: [1],
1374
+ protocols: [1, 3],
1375
+ startdelay: 0,
1376
+ linearity: 1,
1377
+ maxbitrate: 400000,
1378
+ maxduration: 3600,
1379
+ minduration: 1500,
1380
+ delivery: 1,
1381
+ pos: 123456,
1382
+ playbackmethod: 1,
1383
+ rewarded: 1,
1384
+ placement: 1
1385
+ }
1343
1386
  }
1344
1387
  }
1345
- }
1346
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: 'video', bidOverrideObject: bidOverride});
1347
- const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1348
- expect(data.imp[0].video).to.deep.equal(bidOverride.imp.video);
1349
- });
1350
-
1351
- it('should second look at bid.mediaTypes.video for video placement data', () => {
1352
- config.setConfig({
1353
- yahoossp: { mode: 'video' }
1354
- });
1355
- let { bidRequest, bidderRequest } = generateBuildRequestMock({adUnitType: 'video'});
1356
- bidRequest.mediaTypes.video = {
1357
- mimes: ['video/mp4'],
1358
- playerSize: [400, 350],
1359
- api: [1],
1360
- protocols: [1, 3],
1361
- startdelay: 0,
1362
- linearity: 1,
1363
- maxbitrate: 400000,
1364
- maxduration: 3600,
1365
- minduration: 1500,
1366
- delivery: 1,
1367
- pos: 123456,
1368
- playbackmethod: 1,
1369
- placement: 1
1370
- }
1371
- const validBidRequests = [bidRequest];
1372
- bidderRequest.bids = validBidRequests;
1373
- const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1374
- expect(data.imp[0].video).to.deep.equal({
1375
- mimes: ['video/mp4'],
1376
- w: 400,
1377
- h: 350,
1378
- api: [1],
1379
- protocols: [1, 3],
1380
- startdelay: 0,
1381
- linearity: 1,
1382
- maxbitrate: 400000,
1383
- maxduration: 3600,
1384
- minduration: 1500,
1385
- delivery: 1,
1386
- pos: 123456,
1387
- playbackmethod: 1,
1388
- placement: 1,
1389
- rewarded: undefined
1388
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video', bidOverrideObject: bidOverride});
1389
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1390
+ expect(data.imp[0].video).to.deep.equal(bidOverride.imp.video);
1390
1391
  });
1391
- });
1392
1392
 
1393
- it('should use params.bidOverride.device.ip override', () => {
1394
- config.setConfig({
1395
- yahoossp: { mode: 'all' }
1393
+ it(`should second look at bid.mediaTypes.video for video placement data for ${bidderCode} config override`, () => {
1394
+ const cfg = {};
1395
+ cfg[bidderCode] = {
1396
+ mode: VIDEO
1397
+ };
1398
+ config.setConfig(cfg);
1399
+ let { bidRequest, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video'});
1400
+ bidRequest.mediaTypes.video = {
1401
+ mimes: ['video/mp4'],
1402
+ playerSize: [400, 350],
1403
+ api: [1],
1404
+ protocols: [1, 3],
1405
+ startdelay: 0,
1406
+ linearity: 1,
1407
+ maxbitrate: 400000,
1408
+ maxduration: 3600,
1409
+ minduration: 1500,
1410
+ delivery: 1,
1411
+ pos: 123456,
1412
+ playbackmethod: 1,
1413
+ placement: 1
1414
+ }
1415
+ const validBidRequests = [bidRequest];
1416
+ bidderRequest.bids = validBidRequests;
1417
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1418
+ expect(data.imp[0].video).to.deep.equal({
1419
+ mimes: ['video/mp4'],
1420
+ w: 400,
1421
+ h: 350,
1422
+ api: [1],
1423
+ protocols: [1, 3],
1424
+ startdelay: 0,
1425
+ linearity: 1,
1426
+ maxbitrate: 400000,
1427
+ maxduration: 3600,
1428
+ minduration: 1500,
1429
+ delivery: 1,
1430
+ pos: 123456,
1431
+ playbackmethod: 1,
1432
+ placement: 1,
1433
+ rewarded: undefined
1434
+ });
1396
1435
  });
1397
- const bidOverride = {
1398
- device: {
1399
- ip: '1.2.3.4'
1436
+
1437
+ it(`should use params.bidOverride.device.ip override for ${bidderCode} config override`, () => {
1438
+ const cfg = {};
1439
+ cfg[bidderCode] = {
1440
+ mode: 'all'
1441
+ };
1442
+ config.setConfig(cfg);
1443
+ const bidOverride = {
1444
+ device: {
1445
+ ip: '1.2.3.4'
1446
+ }
1400
1447
  }
1401
- }
1402
- const { validBidRequests, bidderRequest } = generateBuildRequestMock({adUnitType: 'video', bidOverrideObject: bidOverride});
1403
- const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1404
- expect(data.device.ip).to.deep.equal(bidOverride.device.ip);
1448
+ const { validBidRequests, bidderRequest } = generateBuildRequestMock({bidderCode, adUnitType: 'video', bidOverrideObject: bidOverride});
1449
+ const data = spec.buildRequests(validBidRequests, bidderRequest)[0].data;
1450
+ expect(data.device.ip).to.deep.equal(bidOverride.device.ip);
1451
+ });
1405
1452
  });
1406
1453
  });
1407
1454
  // #endregion buildRequests():
@@ -1417,6 +1464,22 @@ describe('YahooSSP Bid Adapter:', () => {
1417
1464
  });
1418
1465
 
1419
1466
  describe('for mediaTypes: "video"', () => {
1467
+ beforeEach(() => {
1468
+ config.setConfig({
1469
+ yahooAds: {
1470
+ mode: VIDEO
1471
+ }
1472
+ });
1473
+ });
1474
+
1475
+ afterEach(() => {
1476
+ config.setConfig({
1477
+ yahooAds: {
1478
+ mode: undefined
1479
+ }
1480
+ });
1481
+ });
1482
+
1420
1483
  it('should insert video VPAID payload into vastXml', () => {
1421
1484
  const { serverResponse, bidderRequest } = generateResponseMock('video');
1422
1485
  const response = spec.interpretResponse(serverResponse, {bidderRequest});
@@ -1434,28 +1497,38 @@ describe('YahooSSP Bid Adapter:', () => {
1434
1497
  expect(response[0].mediaType).to.equal('video');
1435
1498
  })
1436
1499
 
1437
- it('should insert video DAP O2 Player into ad', () => {
1438
- const { serverResponse, bidderRequest } = generateResponseMock('dap-o2', 'vpaid');
1439
- const response = spec.interpretResponse(serverResponse, {bidderRequest});
1440
- expect(response[0].ad).to.equal('<script>o2playerSettings</script>');
1441
- expect(response[0].vastUrl).to.be.undefined;
1442
- expect(response[0].vastXml).to.be.undefined;
1443
- expect(response[0].mediaType).to.equal('banner');
1444
- });
1500
+ describe('wrapped in video players for display inventory', () => {
1501
+ beforeEach(() => {
1502
+ config.setConfig({
1503
+ yahooAds: {
1504
+ mode: undefined
1505
+ }
1506
+ });
1507
+ });
1445
1508
 
1446
- it('should insert video DAP Unified Player into ad', () => {
1447
- const { serverResponse, bidderRequest } = generateResponseMock('dap-up', 'vpaid');
1448
- const response = spec.interpretResponse(serverResponse, {bidderRequest});
1449
- expect(response[0].ad).to.equal('<script>YAHOO.VideoPlatform.VideoPlayer</script>');
1450
- expect(response[0].vastUrl).to.be.undefined;
1451
- expect(response[0].vastXml).to.be.undefined;
1452
- expect(response[0].mediaType).to.equal('banner');
1453
- })
1509
+ it('should insert video DAP O2 Player into ad', () => {
1510
+ const { serverResponse, bidderRequest } = generateResponseMock('dap-o2', 'vpaid');
1511
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
1512
+ expect(response[0].ad).to.equal('<script>o2playerSettings</script>');
1513
+ expect(response[0].vastUrl).to.be.undefined;
1514
+ expect(response[0].vastXml).to.be.undefined;
1515
+ expect(response[0].mediaType).to.equal('banner');
1516
+ });
1517
+
1518
+ it('should insert video DAP Unified Player into ad', () => {
1519
+ const { serverResponse, bidderRequest } = generateResponseMock('dap-up', 'vpaid');
1520
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
1521
+ expect(response[0].ad).to.equal('<script>YAHOO.VideoPlatform.VideoPlayer</script>');
1522
+ expect(response[0].vastUrl).to.be.undefined;
1523
+ expect(response[0].vastXml).to.be.undefined;
1524
+ expect(response[0].mediaType).to.equal('banner');
1525
+ })
1526
+ });
1454
1527
  });
1455
1528
 
1456
1529
  describe('Support Advertiser domains', () => {
1457
1530
  it('should append bid-response adomain to meta.advertiserDomains', () => {
1458
- const { serverResponse, bidderRequest } = generateResponseMock('video', 'vpaid');
1531
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
1459
1532
  const response = spec.interpretResponse(serverResponse, {bidderRequest});
1460
1533
  expect(response[0].meta.advertiserDomains).to.be.a('array');
1461
1534
  expect(response[0].meta.advertiserDomains[0]).to.equal('advertiser-domain.com');
@@ -1490,53 +1563,55 @@ describe('YahooSSP Bid Adapter:', () => {
1490
1563
  });
1491
1564
 
1492
1565
  describe('Time To Live (ttl)', () => {
1493
- const UNSUPPORTED_TTL_FORMATS = ['string', [1, 2, 3], true, false, null, undefined];
1494
- UNSUPPORTED_TTL_FORMATS.forEach(param => {
1495
- it('should not allow unsupported global yahoossp.ttl formats and default to 300', () => {
1496
- const { serverResponse, bidderRequest } = generateResponseMock('banner');
1497
- config.setConfig({
1498
- yahoossp: { ttl: param }
1566
+ VALID_BIDDER_CODES.forEach(bidderCode => {
1567
+ const UNSUPPORTED_TTL_FORMATS = ['string', [1, 2, 3], true, false, null, undefined];
1568
+ UNSUPPORTED_TTL_FORMATS.forEach(param => {
1569
+ it(`should not allow unsupported global ${bidderCode}.ttl formats and default to 300`, () => {
1570
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
1571
+ const cfg = {};
1572
+ cfg['yahooAds'] = { ttl: param };
1573
+ config.setConfig(cfg);
1574
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
1575
+ expect(response[0].ttl).to.equal(300);
1499
1576
  });
1500
- const response = spec.interpretResponse(serverResponse, {bidderRequest});
1501
- expect(response[0].ttl).to.equal(300);
1502
- });
1503
1577
 
1504
- it('should not allow unsupported params.ttl formats and default to 300', () => {
1505
- const { serverResponse, bidderRequest } = generateResponseMock('banner');
1506
- bidderRequest.bids[0].params.ttl = param;
1507
- const response = spec.interpretResponse(serverResponse, {bidderRequest});
1508
- expect(response[0].ttl).to.equal(300);
1578
+ it('should not allow unsupported params.ttl formats and default to 300', () => {
1579
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
1580
+ bidderRequest.bids[0].params.ttl = param;
1581
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
1582
+ expect(response[0].ttl).to.equal(300);
1583
+ });
1509
1584
  });
1510
- });
1511
1585
 
1512
- const UNSUPPORTED_TTL_VALUES = [-1, 3601];
1513
- UNSUPPORTED_TTL_VALUES.forEach(param => {
1514
- it('should not allow invalid global yahoossp.ttl values 3600 < ttl < 0 and default to 300', () => {
1515
- const { serverResponse, bidderRequest } = generateResponseMock('banner');
1516
- config.setConfig({
1517
- yahoossp: { ttl: param }
1586
+ const UNSUPPORTED_TTL_VALUES = [-1, 3601];
1587
+ UNSUPPORTED_TTL_VALUES.forEach(param => {
1588
+ it('should not allow invalid global config ttl values 3600 < ttl < 0 and default to 300', () => {
1589
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
1590
+ config.setConfig({
1591
+ yahooAds: { ttl: param }
1592
+ });
1593
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
1594
+ expect(response[0].ttl).to.equal(300);
1595
+ });
1596
+
1597
+ it('should not allow invalid params.ttl values 3600 < ttl < 0 and default to 300', () => {
1598
+ const { serverResponse, bidderRequest } = generateResponseMock('banner');
1599
+ bidderRequest.bids[0].params.ttl = param;
1600
+ const response = spec.interpretResponse(serverResponse, {bidderRequest});
1601
+ expect(response[0].ttl).to.equal(300);
1518
1602
  });
1519
- const response = spec.interpretResponse(serverResponse, {bidderRequest});
1520
- expect(response[0].ttl).to.equal(300);
1521
1603
  });
1522
1604
 
1523
- it('should not allow invalid params.ttl values 3600 < ttl < 0 and default to 300', () => {
1605
+ it('should give presedence to Gloabl ttl over params.ttl ', () => {
1524
1606
  const { serverResponse, bidderRequest } = generateResponseMock('banner');
1525
- bidderRequest.bids[0].params.ttl = param;
1607
+ config.setConfig({
1608
+ yahooAds: { ttl: 500 }
1609
+ });
1610
+ bidderRequest.bids[0].params.ttl = 400;
1526
1611
  const response = spec.interpretResponse(serverResponse, {bidderRequest});
1527
- expect(response[0].ttl).to.equal(300);
1612
+ expect(response[0].ttl).to.equal(500);
1528
1613
  });
1529
1614
  });
1530
-
1531
- it('should give presedence to Gloabl ttl over params.ttl ', () => {
1532
- const { serverResponse, bidderRequest } = generateResponseMock('banner');
1533
- config.setConfig({
1534
- yahoossp: { ttl: 500 }
1535
- });
1536
- bidderRequest.bids[0].params.ttl = 400;
1537
- const response = spec.interpretResponse(serverResponse, {bidderRequest});
1538
- expect(response[0].ttl).to.equal(500);
1539
- });
1540
1615
  });
1541
1616
 
1542
1617
  describe('Aliasing support', () => {