prebid.js 9.26.0 → 9.28.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 (305) hide show
  1. package/creative/renderers/native/renderer.js +29 -8
  2. package/dist/33acrossAnalyticsAdapter.js +1 -1
  3. package/dist/33acrossBidAdapter.js +1 -1
  4. package/dist/33acrossIdSystem.js +1 -1
  5. package/dist/BTBidAdapter.js +1 -1
  6. package/dist/acuityadsBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -1
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/adlooxAdServerVideo.js +1 -1
  14. package/dist/adlooxAnalyticsAdapter.js +1 -1
  15. package/dist/adlooxRtdProvider.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgAnalyticsAdapter.js +1 -1
  21. package/dist/adxcgBidAdapter.js +1 -1
  22. package/dist/adyoulikeBidAdapter.js +1 -1
  23. package/dist/agmaAnalyticsAdapter.js +1 -1
  24. package/dist/ajaBidAdapter.js +1 -1
  25. package/dist/akamaiDapRtdProvider.js +1 -1
  26. package/dist/amxBidAdapter.js +1 -1
  27. package/dist/amxIdSystem.js +1 -1
  28. package/dist/aniviewBidAdapter.js +1 -1
  29. package/dist/appierAnalyticsAdapter.js +1 -1
  30. package/dist/appnexusBidAdapter.js +1 -1
  31. package/dist/asoBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/bidglassBidAdapter.js +1 -1
  34. package/dist/big-richmediaBidAdapter.js +1 -1
  35. package/dist/bitmediaBidAdapter.js +1 -1
  36. package/dist/blueBidAdapter.js +1 -0
  37. package/dist/bridBidAdapter.js +1 -1
  38. package/dist/bridgeuppBidAdapter.js +1 -1
  39. package/dist/bridgewellBidAdapter.js +1 -1
  40. package/dist/brightMountainMediaBidAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/chunk-core.js +1 -1
  44. package/dist/conceptxBidAdapter.js +1 -1
  45. package/dist/concertBidAdapter.js +1 -1
  46. package/dist/connectadBidAdapter.js +1 -1
  47. package/dist/consumableBidAdapter.js +1 -1
  48. package/dist/contxtfulBidAdapter.js +1 -1
  49. package/dist/contxtfulRtdProvider.js +1 -1
  50. package/dist/conversantAnalyticsAdapter.js +1 -1
  51. package/dist/conversantBidAdapter.js +1 -1
  52. package/dist/craftBidAdapter.js +1 -1
  53. package/dist/creative-renderer-native.js +1 -1
  54. package/dist/criteoBidAdapter.js +1 -1
  55. package/dist/cwireBidAdapter.js +1 -1
  56. package/dist/dailymotionBidAdapter.js +1 -1
  57. package/dist/dependencies.json +7 -1
  58. package/dist/dspxBidAdapter.js +1 -1
  59. package/dist/dxkultureBidAdapter.js +1 -1
  60. package/dist/eplanningBidAdapter.js +1 -1
  61. package/dist/equativBidAdapter.js +1 -1
  62. package/dist/escalaxBidAdapter.js +1 -1
  63. package/dist/eskimiBidAdapter.js +1 -1
  64. package/dist/euidIdSystem.js +1 -1
  65. package/dist/exadsBidAdapter.js +1 -1
  66. package/dist/feedadBidAdapter.js +1 -1
  67. package/dist/finativeBidAdapter.js +1 -1
  68. package/dist/freewheel-sspBidAdapter.js +1 -1
  69. package/dist/gmosspBidAdapter.js +1 -1
  70. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  71. package/dist/greenbidsBidAdapter.js +1 -1
  72. package/dist/greenbidsRtdProvider.js +1 -1
  73. package/dist/gridBidAdapter.js +1 -1
  74. package/dist/gumgumBidAdapter.js +1 -1
  75. package/dist/h12mediaBidAdapter.js +1 -1
  76. package/dist/hypelabBidAdapter.js +1 -1
  77. package/dist/id5AnalyticsAdapter.js +1 -1
  78. package/dist/id5IdSystem.js +1 -1
  79. package/dist/imdsBidAdapter.js +1 -1
  80. package/dist/improvedigitalBidAdapter.js +1 -1
  81. package/dist/inmobiBidAdapter.js +1 -1
  82. package/dist/insticatorBidAdapter.js +1 -1
  83. package/dist/intentIqAnalyticsAdapter.js +1 -1
  84. package/dist/intentIqConstants.js +1 -1
  85. package/dist/ixBidAdapter.js +1 -1
  86. package/dist/jixieBidAdapter.js +1 -1
  87. package/dist/justpremiumBidAdapter.js +1 -1
  88. package/dist/jwplayerVideoProvider.js +1 -1
  89. package/dist/kargoBidAdapter.js +1 -1
  90. package/dist/kimberliteBidAdapter.js +1 -1
  91. package/dist/konduitAnalyticsAdapter.js +1 -1
  92. package/dist/kueezBidAdapter.js +1 -1
  93. package/dist/lassoBidAdapter.js +1 -1
  94. package/dist/lifestreetBidAdapter.js +1 -1
  95. package/dist/liveIntentId.js +1 -1
  96. package/dist/liveIntentIdSystem.js +1 -1
  97. package/dist/liveIntentRtdProvider.js +1 -0
  98. package/dist/logicadBidAdapter.js +1 -1
  99. package/dist/loglyliftBidAdapter.js +1 -1
  100. package/dist/luceadBidAdapter.js +1 -1
  101. package/dist/mabidderBidAdapter.js +1 -1
  102. package/dist/madsenseBidAdapter.js +1 -1
  103. package/dist/magniteAnalyticsAdapter.js +1 -1
  104. package/dist/malltvAnalyticsAdapter.js +1 -1
  105. package/dist/marsmediaBidAdapter.js +1 -1
  106. package/dist/mediafuseBidAdapter.js +1 -1
  107. package/dist/medianetAnalyticsAdapter.js +1 -1
  108. package/dist/medianetBidAdapter.js +1 -1
  109. package/dist/mediasquareBidAdapter.js +1 -1
  110. package/dist/mgidBidAdapter.js +1 -1
  111. package/dist/minutemediaBidAdapter.js +1 -1
  112. package/dist/missenaBidAdapter.js +1 -1
  113. package/dist/mspa.js +1 -1
  114. package/dist/nativeRendering.js +1 -1
  115. package/dist/nextMillenniumBidAdapter.js +1 -1
  116. package/dist/nexx360BidAdapter.js +1 -1
  117. package/dist/nobidAnalyticsAdapter.js +1 -1
  118. package/dist/nobidBidAdapter.js +1 -1
  119. package/dist/not-for-prod/prebid.js +193 -191
  120. package/dist/oguryBidAdapter.js +1 -1
  121. package/dist/omsBidAdapter.js +1 -1
  122. package/dist/onetagBidAdapter.js +1 -1
  123. package/dist/ooloAnalyticsAdapter.js +1 -1
  124. package/dist/openwebBidAdapter.js +1 -1
  125. package/dist/openxBidAdapter.js +1 -1
  126. package/dist/optidigitalBidAdapter.js +1 -1
  127. package/dist/orbidderBidAdapter.js +1 -1
  128. package/dist/orbitsoftBidAdapter.js +1 -1
  129. package/dist/outbrainBidAdapter.js +1 -1
  130. package/dist/pixfutureBidAdapter.js +1 -1
  131. package/dist/publinkIdSystem.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  135. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/quantcastBidAdapter.js +1 -1
  138. package/dist/readpeakBidAdapter.js +1 -1
  139. package/dist/relaidoBidAdapter.js +1 -1
  140. package/dist/retailspotBidAdapter.js +1 -1
  141. package/dist/rhythmoneBidAdapter.js +1 -1
  142. package/dist/riseBidAdapter.js +1 -1
  143. package/dist/riseUtils.js +1 -1
  144. package/dist/rubiconBidAdapter.js +1 -1
  145. package/dist/seedingAllianceBidAdapter.js +1 -1
  146. package/dist/seedtagBidAdapter.js +1 -1
  147. package/dist/sharedIdSystem.js +1 -1
  148. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  149. package/dist/sharethroughBidAdapter.js +1 -1
  150. package/dist/shinezBidAdapter.js +1 -1
  151. package/dist/showheroes-bsBidAdapter.js +1 -1
  152. package/dist/sizeUtils.js +1 -1
  153. package/dist/smaatoBidAdapter.js +1 -1
  154. package/dist/smartadserverBidAdapter.js +1 -1
  155. package/dist/smartxBidAdapter.js +1 -1
  156. package/dist/smilewantedBidAdapter.js +1 -1
  157. package/dist/snigelBidAdapter.js +1 -1
  158. package/dist/sonobiBidAdapter.js +1 -1
  159. package/dist/sovrnBidAdapter.js +1 -1
  160. package/dist/sparteoBidAdapter.js +1 -1
  161. package/dist/sspBCBidAdapter.js +1 -1
  162. package/dist/stnBidAdapter.js +1 -1
  163. package/dist/stvBidAdapter.js +1 -1
  164. package/dist/sublimeBidAdapter.js +1 -1
  165. package/dist/symitriDapRtdProvider.js +1 -1
  166. package/dist/taboolaBidAdapter.js +1 -1
  167. package/dist/tappxBidAdapter.js +1 -1
  168. package/dist/targetVideoBidAdapter.js +1 -1
  169. package/dist/teadsBidAdapter.js +1 -1
  170. package/dist/terceptAnalyticsAdapter.js +1 -1
  171. package/dist/themoneytizerBidAdapter.js +1 -1
  172. package/dist/trionBidAdapter.js +1 -1
  173. package/dist/tripleliftBidAdapter.js +1 -1
  174. package/dist/ttdBidAdapter.js +1 -1
  175. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  176. package/dist/uid2IdSystem.js +1 -1
  177. package/dist/underdogmediaBidAdapter.js +1 -1
  178. package/dist/undertoneBidAdapter.js +1 -1
  179. package/dist/unrulyBidAdapter.js +1 -1
  180. package/dist/userId.js +1 -1
  181. package/dist/vdoaiBidAdapter.js +1 -1
  182. package/dist/vidazooUtils.js +1 -1
  183. package/dist/videobyteBidAdapter.js +1 -1
  184. package/dist/visxBidAdapter.js +1 -1
  185. package/dist/vuukleBidAdapter.js +1 -1
  186. package/dist/widespaceBidAdapter.js +1 -1
  187. package/dist/winrBidAdapter.js +1 -1
  188. package/dist/wurflRtdProvider.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yieldlabBidAdapter.js +1 -1
  191. package/dist/yieldmoBidAdapter.js +1 -1
  192. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  193. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  194. package/integrationExamples/gpt/liveIntentRtdProviderExample.html +164 -0
  195. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +3 -1
  196. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +2 -0
  197. package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +2 -0
  198. package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -0
  199. package/integrationExamples/videoModule/jwplayer/eventsUI.html +2 -0
  200. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +2 -0
  201. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +3 -1
  202. package/integrationExamples/videoModule/jwplayer/playlist.html +3 -1
  203. package/libraries/creative-renderer-native/renderer.js +1 -1
  204. package/libraries/intentIqConstants/intentIqConstants.js +1 -1
  205. package/libraries/liveIntentId/shared.js +18 -5
  206. package/libraries/mspa/activityControls.js +26 -7
  207. package/libraries/riseUtils/constants.js +20 -0
  208. package/libraries/riseUtils/index.js +143 -38
  209. package/libraries/sizeUtils/sizeUtils.js +25 -0
  210. package/libraries/vidazooUtils/bidderUtils.js +2 -0
  211. package/modules/33acrossIdSystem.js +64 -23
  212. package/modules/33acrossIdSystem.md +2 -1
  213. package/modules/acuityadsBidAdapter.js +1 -1
  214. package/modules/adagioRtdProvider.js +15 -9
  215. package/modules/adlooxAnalyticsAdapter.js +12 -6
  216. package/modules/blueBidAdapter.js +122 -0
  217. package/modules/blueBidAdapter.md +28 -0
  218. package/modules/conceptxBidAdapter.js +2 -0
  219. package/modules/consumableBidAdapter.js +3 -1
  220. package/modules/contxtfulBidAdapter.js +25 -13
  221. package/modules/contxtfulRtdProvider.js +9 -12
  222. package/modules/eplanningBidAdapter.js +5 -1
  223. package/modules/equativBidAdapter.js +13 -18
  224. package/modules/escalaxBidAdapter.js +2 -2
  225. package/modules/eskimiBidAdapter.js +4 -1
  226. package/modules/improvedigitalBidAdapter.js +0 -67
  227. package/modules/intentIqAnalyticsAdapter.js +1 -1
  228. package/modules/ixBidAdapter.js +7 -1
  229. package/modules/jwplayerVideoProvider.js +99 -6
  230. package/modules/liveIntentRtdProvider.js +52 -0
  231. package/modules/liveIntentRtdProvider.md +45 -0
  232. package/modules/minutemediaBidAdapter.js +6 -80
  233. package/modules/minutemediaBidAdapter.md +1 -1
  234. package/modules/missenaBidAdapter.js +2 -0
  235. package/modules/nativeRendering.js +2 -1
  236. package/modules/omsBidAdapter.js +25 -11
  237. package/modules/omsBidAdapter.md +15 -0
  238. package/modules/openwebBidAdapter.js +6 -81
  239. package/modules/openwebBidAdapter.md +1 -1
  240. package/modules/openxBidAdapter.js +19 -6
  241. package/modules/openxBidAdapter.md +46 -1
  242. package/modules/orbitsoftBidAdapter.js +1 -1
  243. package/modules/permutiveRtdProvider.md +6 -5
  244. package/modules/pubmaticAnalyticsAdapter.js +61 -19
  245. package/modules/riseBidAdapter.js +11 -92
  246. package/modules/riseBidAdapter.md +1 -1
  247. package/modules/sharedIdSystem.js +9 -3
  248. package/modules/shinezBidAdapter.js +4 -80
  249. package/modules/shinezBidAdapter.md +2 -2
  250. package/modules/stnBidAdapter.js +7 -86
  251. package/modules/stnBidAdapter.md +1 -1
  252. package/modules/symitriDapRtdProvider.js +4 -4
  253. package/modules/symitriDapRtdProvider.md +2 -2
  254. package/modules/userId/eids.js +32 -5
  255. package/modules/wurflRtdProvider.js +7 -1
  256. package/modules/wurflRtdProvider.md +1 -1
  257. package/modules/yieldlabBidAdapter.js +2 -2
  258. package/modules/zeta_global_sspAnalyticsAdapter.js +5 -2
  259. package/package.json +2 -2
  260. package/src/adapters/bidderFactory.js +7 -6
  261. package/src/adloader.js +0 -1
  262. package/src/native.js +6 -3
  263. package/test/spec/creative/nativeRenderer_spec.js +45 -10
  264. package/test/spec/libraries/mspa/activityControls_spec.js +63 -9
  265. package/test/spec/modules/33acrossIdSystem_spec.js +288 -2
  266. package/test/spec/modules/acuityadsBidAdapter_spec.js +49 -0
  267. package/test/spec/modules/adagioRtdProvider_spec.js +119 -3
  268. package/test/spec/modules/adlooxAdServerVideo_spec.js +0 -1
  269. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +31 -0
  270. package/test/spec/modules/blueBidAdapter_spec.js +91 -0
  271. package/test/spec/modules/consumableBidAdapter_spec.js +42 -0
  272. package/test/spec/modules/contxtfulRtdProvider_spec.js +37 -2
  273. package/test/spec/modules/eplanningBidAdapter_spec.js +74 -1
  274. package/test/spec/modules/equativBidAdapter_spec.js +5 -6
  275. package/test/spec/modules/excoBidAdapter_spec.js +33 -18
  276. package/test/spec/modules/illuminBidAdapter_spec.js +33 -18
  277. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -3
  278. package/test/spec/modules/ixBidAdapter_spec.js +68 -2
  279. package/test/spec/modules/kueezRtbBidAdapter_spec.js +33 -18
  280. package/test/spec/modules/liveIntentExternalIdSystem_spec.js +16 -6
  281. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +16 -6
  282. package/test/spec/modules/liveIntentIdSystem_spec.js +49 -6
  283. package/test/spec/modules/liveIntentRtdProvider_spec.js +116 -0
  284. package/test/spec/modules/minutemediaBidAdapter_spec.js +126 -6
  285. package/test/spec/modules/missenaBidAdapter_spec.js +12 -3
  286. package/test/spec/modules/omsBidAdapter_spec.js +78 -0
  287. package/test/spec/modules/openwebBidAdapter_spec.js +126 -6
  288. package/test/spec/modules/openxBidAdapter_spec.js +236 -8
  289. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +29 -36
  290. package/test/spec/modules/riseBidAdapter_spec.js +126 -6
  291. package/test/spec/modules/sharedIdSystem_spec.js +25 -1
  292. package/test/spec/modules/shinezBidAdapter_spec.js +133 -9
  293. package/test/spec/modules/shinezRtbBidAdapter_spec.js +33 -18
  294. package/test/spec/modules/stnBidAdapter_spec.js +126 -5
  295. package/test/spec/modules/symitriDapRtdProvider_spec.js +36 -0
  296. package/test/spec/modules/tagorasBidAdapter_spec.js +33 -18
  297. package/test/spec/modules/twistDigitalBidAdapter_spec.js +34 -18
  298. package/test/spec/modules/userId_spec.js +103 -2
  299. package/test/spec/modules/vidazooBidAdapter_spec.js +34 -18
  300. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +81 -0
  301. package/test/spec/modules/wurflRtdProvider_spec.js +8 -3
  302. package/test/spec/modules/yieldlabBidAdapter_spec.js +5 -5
  303. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +3 -2
  304. package/test/spec/native_spec.js +4 -2
  305. package/test/spec/unit/core/bidderFactory_spec.js +120 -43
@@ -249,12 +249,119 @@ describe('OpenxRtbAdapter', function () {
249
249
  });
250
250
  });
251
251
  });
252
+
253
+ describe('when request is for a native ad', function () {
254
+ const nativeOrtbRequest = {
255
+ assets: [{
256
+ id: 1,
257
+ required: 1,
258
+ title: {
259
+ len: 80
260
+ }
261
+ }]
262
+ }
263
+ describe('and request config uses mediaTypes', () => {
264
+ const nativeBidWithMediaTypes = {
265
+ bidder: 'openx',
266
+ params: {
267
+ unit: '12345678',
268
+ delDomain: 'test-del-domain'
269
+ },
270
+ adUnitCode: 'adunit-code',
271
+ mediaTypes: {
272
+ native: {
273
+ ortb: {
274
+ ...nativeOrtbRequest
275
+ }
276
+ }
277
+ },
278
+ nativeOrtbRequest,
279
+ bidId: '30b31c1838de1e',
280
+ bidderRequestId: '22edbae2733bf6',
281
+ auctionId: '1d1a030790a475',
282
+ transactionId: '4008d88a-8137-410b-aa35-fbfdabcb478e'
283
+ };
284
+
285
+ it('should return true when required params found', function () {
286
+ expect(spec.isBidRequestValid(nativeBidWithMediaTypes)).to.equal(true);
287
+ });
288
+
289
+ it('should return false when required params are not passed', function () {
290
+ let invalidNativeBidWithMediaTypes = Object.assign({}, nativeBidWithMediaTypes);
291
+ invalidNativeBidWithMediaTypes.params = {};
292
+ expect(spec.isBidRequestValid(invalidNativeBidWithMediaTypes)).to.equal(false);
293
+ });
294
+ });
295
+
296
+ describe('and request config uses both delDomain and platform', () => {
297
+ const nativeBidWithDelDomainAndPlatform = {
298
+ bidder: 'openx',
299
+ params: {
300
+ unit: '12345678',
301
+ delDomain: 'test-del-domain',
302
+ platform: '1cabba9e-cafe-3665-beef-f00f00f00f00'
303
+ },
304
+ adUnitCode: 'adunit-code',
305
+ mediaTypes: {
306
+ native: {
307
+ ortb: {
308
+ ...nativeOrtbRequest
309
+ }
310
+ }
311
+ },
312
+ nativeOrtbRequest,
313
+ bidId: '30b31c1838de1e',
314
+ bidderRequestId: '22edbae2733bf6',
315
+ auctionId: '1d1a030790a475',
316
+ transactionId: '4008d88a-8137-410b-aa35-fbfdabcb478e'
317
+ };
318
+
319
+ it('should return true when required params found', function () {
320
+ expect(spec.isBidRequestValid(nativeBidWithDelDomainAndPlatform)).to.equal(true);
321
+ });
322
+
323
+ it('should return false when required params are not passed', function () {
324
+ let invalidNativeBidWithMediaTypes = Object.assign({}, nativeBidWithDelDomainAndPlatform);
325
+ invalidNativeBidWithMediaTypes.params = {};
326
+ expect(spec.isBidRequestValid(invalidNativeBidWithMediaTypes)).to.equal(false);
327
+ });
328
+ });
329
+ });
252
330
  });
253
331
 
254
332
  describe('buildRequests()', function () {
255
333
  let bidRequestsWithMediaTypes;
256
- let bidRequestsWithPlatform;
257
334
  let mockBidderRequest;
335
+ const nativeOrtbRequest = {
336
+ assets: [{
337
+ id: 1,
338
+ required: 1,
339
+ title: {
340
+ len: 80
341
+ }
342
+ }]
343
+ };
344
+ const nativeBidRequest = {
345
+ bidder: 'openx',
346
+ params: {
347
+ unit: '33',
348
+ delDomain: 'test-del-domain',
349
+ platform: '1cabba9e-cafe-3665-beef-f00f00f00f00',
350
+ },
351
+ adUnitCode: 'adunit-code',
352
+ mediaTypes: {
353
+ native: {
354
+ ortb: {
355
+ ...nativeOrtbRequest
356
+ }
357
+ }
358
+ },
359
+ nativeOrtbRequest,
360
+ bidId: 'test-bid-id-3',
361
+ bidderRequestId: 'test-bid-request-3',
362
+ auctionId: 'test-auction-3',
363
+ transactionId: 'test-transactionId-3'
364
+ };
258
365
 
259
366
  beforeEach(function () {
260
367
  mockBidderRequest = {refererInfo: {}};
@@ -302,16 +409,64 @@ describe('OpenxRtbAdapter', function () {
302
409
  });
303
410
 
304
411
  context('common requests checks', function() {
305
- it('should be able to handle multiformat requests', () => {
412
+ it('should be able to handle multiformat request - banner + video', () => {
306
413
  const multiformat = utils.deepClone(bidRequestsWithMediaTypes[0]);
307
414
  multiformat.mediaTypes.video = {
308
415
  context: 'outstream',
309
416
  playerSize: [640, 480]
417
+ };
418
+ const requests = spec.buildRequests([multiformat], mockBidderRequest);
419
+ expect(requests).to.have.length(2);
420
+ expect(requests[0].data.imp).to.have.length(1);
421
+ expect(requests[0].data.imp[0].banner).to.exist;
422
+ expect(requests[0].data.imp[0].video).to.not.exist;
423
+ expect(requests[0].data.imp[0].native).to.not.exist;
424
+ expect(requests[1].data.imp).to.have.length(1);
425
+ expect(requests[1].data.imp[0].banner).to.not.exist;
426
+ expect(requests[1].data.imp[0].native).to.not.exist;
427
+ if (FEATURES.VIDEO) {
428
+ expect(requests[1].data.imp[0].video).to.exist;
429
+ }
430
+ })
431
+
432
+ it('should be able to handle multiformat request - banner + native', () => {
433
+ const multiformat = utils.deepClone(nativeBidRequest);
434
+ multiformat.mediaTypes.banner = {
435
+ sizes: [[300, 250], [300, 600]]
436
+ }
437
+ const requests = spec.buildRequests([multiformat], mockBidderRequest);
438
+ expect(requests).to.have.length(1);
439
+ expect(requests[0].data.imp).to.have.length(1);
440
+ expect(requests[0].data.imp[0].banner).to.exist;
441
+ expect(requests[0].data.imp[0].video).to.not.exist;
442
+ if (FEATURES.NATIVE) {
443
+ expect(requests[0].data.imp[0].native).to.exist;
444
+ }
445
+ })
446
+
447
+ it('should be able to handle multiformat request - banner + video + native', () => {
448
+ const multiformat = utils.deepClone(nativeBidRequest);
449
+ multiformat.mediaTypes.video = {
450
+ context: 'outstream',
451
+ playerSize: [640, 480]
452
+ };
453
+ multiformat.mediaTypes.banner = {
454
+ sizes: [[300, 250]]
310
455
  }
311
456
  const requests = spec.buildRequests([multiformat], mockBidderRequest);
312
- const outgoingFormats = requests.flatMap(rq => rq.data.imp.flatMap(imp => ['banner', 'video'].filter(k => imp[k] != null)));
313
- const expected = FEATURES.VIDEO ? ['banner', 'video'] : ['banner']
314
- expect(outgoingFormats).to.have.members(expected);
457
+ expect(requests).to.have.length(2);
458
+ expect(requests[0].data.imp).to.have.length(1);
459
+ expect(requests[0].data.imp[0].banner).to.exist;
460
+ expect(requests[0].data.imp[0].video).to.not.exist;
461
+ if (FEATURES.NATIVE) {
462
+ expect(requests[0].data.imp[0].native).to.exist;
463
+ }
464
+ expect(requests[1].data.imp).to.have.length(1);
465
+ expect(requests[1].data.imp[0].banner).to.not.exist;
466
+ expect(requests[1].data.imp[0].native).to.not.exist;
467
+ if (FEATURES.VIDEO) {
468
+ expect(requests[1].data.imp[0].video).to.exist;
469
+ }
315
470
  })
316
471
 
317
472
  it('should send bid request to openx url via POST', function () {
@@ -329,11 +484,11 @@ describe('OpenxRtbAdapter', function () {
329
484
 
330
485
  it('should send platform id, if available', function () {
331
486
  bidRequestsWithMediaTypes[0].params.platform = '1cabba9e-cafe-3665-beef-f00f00f00f00';
332
- bidRequestsWithMediaTypes[1].params.platform = '1cabba9e-cafe-3665-beef-f00f00f00f00';
487
+ bidRequestsWithMediaTypes[1].params.platform = '51ca3159-abc2-4035-8e00-fe26eaa09397';
333
488
 
334
489
  const request = spec.buildRequests(bidRequestsWithMediaTypes, mockBidderRequest);
335
490
  expect(request[0].data.ext.platform).to.equal(bidRequestsWithMediaTypes[0].params.platform);
336
- expect(request[1].data.ext.platform).to.equal(bidRequestsWithMediaTypes[0].params.platform);
491
+ expect(request[1].data.ext.platform).to.equal(bidRequestsWithMediaTypes[1].params.platform);
337
492
  });
338
493
 
339
494
  it('should send openx adunit codes', function () {
@@ -1226,6 +1381,7 @@ describe('OpenxRtbAdapter', function () {
1226
1381
  crid: 'test-creative-id',
1227
1382
  dealid: 'test-deal-id',
1228
1383
  adm: 'test-ad-markup',
1384
+ mtype: 1,
1229
1385
  adomain: ['brand.com'],
1230
1386
  ext: {
1231
1387
  dsp_id: '123',
@@ -1389,7 +1545,7 @@ describe('OpenxRtbAdapter', function () {
1389
1545
  expect(bid.mediaType).to.equal(Object.keys(bidRequestConfigs[0].mediaTypes)[0]);
1390
1546
  });
1391
1547
 
1392
- it('should return the proper mediaType', function () {
1548
+ it('should return the proper vastUrl', function () {
1393
1549
  const winUrl = 'https//my.win.url';
1394
1550
  bidResponse.seatbid[0].bid[0].nurl = winUrl
1395
1551
  bid = spec.interpretResponse({body: bidResponse}, bidRequest).bids[0];
@@ -1399,6 +1555,78 @@ describe('OpenxRtbAdapter', function () {
1399
1555
  });
1400
1556
  }
1401
1557
 
1558
+ if (FEATURES.NATIVE) {
1559
+ context('when the response is a native', function() {
1560
+ beforeEach(function () {
1561
+ const nativeOrtbRequest = {
1562
+ ver: '1.2',
1563
+ assets: [{
1564
+ id: 1,
1565
+ required: 1,
1566
+ title: {
1567
+ len: 80
1568
+ }
1569
+ }]
1570
+ };
1571
+ bidRequestConfigs = [{
1572
+ bidder: 'openx',
1573
+ params: {
1574
+ unit: '12345678',
1575
+ delDomain: 'test-del-domain'
1576
+ },
1577
+ adUnitCode: 'adunit-code',
1578
+ mediaTypes: {
1579
+ native: {
1580
+ ...nativeOrtbRequest
1581
+ },
1582
+ },
1583
+ nativeOrtbRequest,
1584
+ bidId: 'test-bid-id',
1585
+ bidderRequestId: 'test-bidder-request-id',
1586
+ auctionId: 'test-auction-id'
1587
+ }];
1588
+
1589
+ bidRequest = spec.buildRequests(bidRequestConfigs, {refererInfo: {}})[0];
1590
+
1591
+ bidResponse = {
1592
+ seatbid: [{
1593
+ bid: [{
1594
+ impid: 'test-bid-id',
1595
+ price: 2,
1596
+ mtype: 4,
1597
+ adm: '{"ver": "1.2", "assets": [{"id": 1, "required": 1,"title": {"text": "OpenX (Title)"}}], "link": {"url": "https://www.openx.com/"}, "eventtrackers":[{"event":1,"method":1,"url":"http://example.com/impression"}]}',
1598
+ }]
1599
+ }],
1600
+ cur: 'AUS'
1601
+ };
1602
+ });
1603
+
1604
+ it('should return the proper mediaType', function () {
1605
+ bid = spec.interpretResponse({body: bidResponse}, bidRequest).bids[0];
1606
+ expect(bid.mediaType).to.equal(Object.keys(bidRequestConfigs[0].mediaTypes)[0]);
1607
+ });
1608
+
1609
+ it('should return parsed adm JSON in native.ortb response field', function () {
1610
+ bid = spec.interpretResponse({body: bidResponse}, bidRequest).bids[0];
1611
+
1612
+ expect(bid.native.ortb).to.deep.equal({
1613
+ ver: '1.2',
1614
+ assets: [{
1615
+ id: 1,
1616
+ required: 1,
1617
+ title: {text: 'OpenX (Title)'}
1618
+ }],
1619
+ link: {url: 'https://www.openx.com/'},
1620
+ eventtrackers: [{
1621
+ event: 1,
1622
+ method: 1,
1623
+ url: 'http://example.com/impression'
1624
+ }]
1625
+ });
1626
+ });
1627
+ });
1628
+ }
1629
+
1402
1630
  context('when the response contains FLEDGE interest groups config', function() {
1403
1631
  let response;
1404
1632
 
@@ -571,13 +571,13 @@ describe('pubmatic analytics adapter', function () {
571
571
  expect(data.pbv).to.equal('$prebid.version$' || '-1');
572
572
  expect(data.s).to.be.an('array');
573
573
  expect(data.s.length).to.equal(2);
574
+ expect(data.ffs).to.equal(1);
575
+ expect(data.fsrc).to.equal(2);
576
+ expect(data.fp).to.equal('pubmatic');
574
577
  // slot 1
575
578
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
576
579
  expect(data.s[0].fskp).to.equal(0);
577
580
  expect(data.s[0].sid).not.to.be.undefined;
578
- expect(data.s[0].ffs).to.equal(1);
579
- expect(data.s[0].fsrc).to.equal(2);
580
- expect(data.s[0].fp).to.equal('pubmatic');
581
581
  expect(data.s[0].sz).to.deep.equal(['640x480']);
582
582
  expect(data.s[0].ps).to.be.an('array');
583
583
  expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
@@ -609,9 +609,6 @@ describe('pubmatic analytics adapter', function () {
609
609
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
610
610
  expect(data.s[1].fskp).to.equal(0);
611
611
  expect(data.s[1].sid).not.to.be.undefined;
612
- expect(data.s[1].ffs).to.equal(1);
613
- expect(data.s[1].fsrc).to.equal(2);
614
- expect(data.s[1].fp).to.equal('pubmatic');
615
612
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
616
613
  expect(data.s[1].ps).to.be.an('array');
617
614
  expect(data.s[1].ps.length).to.equal(1);
@@ -789,14 +786,14 @@ describe('pubmatic analytics adapter', function () {
789
786
  expect(data.pbv).to.equal('$prebid.version$' || '-1');
790
787
  expect(data.s).to.be.an('array');
791
788
  expect(data.s.length).to.equal(2);
789
+ expect(data.ffs).to.equal(1);
790
+ expect(data.fsrc).to.equal(2);
791
+ expect(data.fp).to.equal('pubmatic');
792
792
  expect(data.tgid).to.equal(0);
793
793
  // slot 1
794
794
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
795
795
  expect(data.s[0].fskp).to.equal(0);
796
796
  expect(data.s[0].sid).not.to.be.undefined;
797
- expect(data.s[0].ffs).to.equal(1);
798
- expect(data.s[0].fsrc).to.equal(2);
799
- expect(data.s[0].fp).to.equal('pubmatic');
800
797
  expect(data.s[0].sz).to.deep.equal(['640x480']);
801
798
  expect(data.s[0].ps).to.be.an('array');
802
799
  expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
@@ -915,15 +912,13 @@ describe('pubmatic analytics adapter', function () {
915
912
  let request = requests[1]; // logger is executed late, trackers execute first
916
913
  let data = getLoggerJsonFromRequest(request.requestBody);
917
914
  expect(data.tgid).to.equal(0);// test group id should be an INT between 0-15 else set to 0
915
+ expect(data.ffs).to.equal(1);
916
+ expect(data.fsrc).to.equal(2);
917
+ expect(data.fp).to.equal('pubmatic');
918
+
918
919
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
919
920
  expect(data.s[1].fskp).to.equal(0);
920
-
921
921
  expect(data.s[1].sid).not.to.be.undefined;
922
-
923
- expect(data.s[1].ffs).to.equal(1);
924
- expect(data.s[1].fsrc).to.equal(2);
925
- expect(data.s[1].fp).to.equal('pubmatic');
926
-
927
922
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
928
923
  expect(data.s[1].ps).to.be.an('array');
929
924
  expect(data.s[1].ps.length).to.equal(1);
@@ -1004,12 +999,13 @@ describe('pubmatic analytics adapter', function () {
1004
999
  expect(requests.length).to.equal(1); // 1 logger and 0 win-tracker
1005
1000
  let request = requests[0];
1006
1001
  let data = getLoggerJsonFromRequest(request.requestBody);
1002
+ expect(data.ffs).to.equal(1);
1003
+ expect(data.fsrc).to.equal(2);
1004
+ expect(data.fp).to.equal('pubmatic');
1005
+
1007
1006
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1008
1007
  expect(data.s[1].fskp).to.equal(0);
1009
1008
  expect(data.s[1].sid).not.to.be.undefined;
1010
- expect(data.s[1].ffs).to.equal(1);
1011
- expect(data.s[1].fsrc).to.equal(2);
1012
- expect(data.s[1].fp).to.equal('pubmatic');
1013
1009
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1014
1010
  expect(data.s[1].ps).to.be.an('array');
1015
1011
  expect(data.s[1].ps.length).to.equal(1);
@@ -1119,12 +1115,12 @@ describe('pubmatic analytics adapter', function () {
1119
1115
  let request = requests[2]; // logger is executed late, trackers execute first
1120
1116
  expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
1121
1117
  let data = getLoggerJsonFromRequest(request.requestBody);
1118
+ expect(data.ffs).to.equal(1);
1119
+ expect(data.fsrc).to.equal(2);
1120
+ expect(data.fp).to.equal('pubmatic');
1122
1121
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1123
1122
  expect(data.s[1].fskp).to.equal(0);
1124
1123
  expect(data.s[1].sid).not.to.be.undefined;
1125
- expect(data.s[1].ffs).to.equal(1);
1126
- expect(data.s[1].fsrc).to.equal(2);
1127
- expect(data.s[1].fp).to.equal('pubmatic');
1128
1124
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1129
1125
  expect(data.s[1].ps).to.be.an('array');
1130
1126
  expect(data.s[1].ps.length).to.equal(1);
@@ -1239,12 +1235,12 @@ describe('pubmatic analytics adapter', function () {
1239
1235
  let request = requests[2]; // logger is executed late, trackers execute first
1240
1236
  expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
1241
1237
  let data = getLoggerJsonFromRequest(request.requestBody);
1238
+ expect(data.ffs).to.equal(1);
1239
+ expect(data.fsrc).to.equal(2);
1240
+ expect(data.fp).to.equal('pubmatic');
1242
1241
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1243
1242
  expect(data.s[1].fskp).to.equal(0);
1244
1243
  expect(data.s[1].sid).not.to.be.undefined;
1245
- expect(data.s[1].ffs).to.equal(1);
1246
- expect(data.s[1].fsrc).to.equal(2);
1247
- expect(data.s[1].fp).to.equal('pubmatic');
1248
1244
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1249
1245
  expect(data.s[1].ps).to.be.an('array');
1250
1246
  expect(data.s[1].ps.length).to.equal(1);
@@ -1357,14 +1353,14 @@ describe('pubmatic analytics adapter', function () {
1357
1353
  let request = requests[1]; // logger is executed late, trackers execute first
1358
1354
  expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
1359
1355
  let data = getLoggerJsonFromRequest(request.requestBody);
1356
+ expect(data.ffs).to.equal(1);
1357
+ expect(data.fsrc).to.equal(2);
1358
+ expect(data.fp).to.equal('pubmatic');
1360
1359
 
1361
1360
  // slot 2
1362
1361
  // Testing only for rejected bid as other scenarios will be covered under other TCs
1363
1362
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1364
1363
  expect(data.s[1].fskp).to.equal(0);
1365
- expect(data.s[1].ffs).to.equal(1);
1366
- expect(data.s[1].fsrc).to.equal(2);
1367
- expect(data.s[1].fp).to.equal('pubmatic');
1368
1364
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1369
1365
  expect(data.s[1].sid).not.to.be.undefined;
1370
1366
  expect(data.s[1].ps).to.be.an('array');
@@ -1438,13 +1434,13 @@ describe('pubmatic analytics adapter', function () {
1438
1434
  expect(data.ft).to.equal(1);
1439
1435
  expect(data.s).to.be.an('array');
1440
1436
  expect(data.s.length).to.equal(2);
1437
+ expect(data.ffs).to.equal(1);
1438
+ expect(data.fsrc).to.equal(2);
1439
+ expect(data.fp).to.equal('pubmatic');
1441
1440
 
1442
1441
  // slot 1
1443
1442
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
1444
1443
  expect(data.s[0].fskp).to.equal(0);
1445
- expect(data.s[0].ffs).to.equal(1);
1446
- expect(data.s[0].fsrc).to.equal(2);
1447
- expect(data.s[0].fp).to.equal('pubmatic');
1448
1444
  expect(data.s[0].sz).to.deep.equal(['640x480']);
1449
1445
  expect(data.s[0].sid).not.to.be.undefined;
1450
1446
  expect(data.s[0].ps).to.be.an('array');
@@ -1477,9 +1473,6 @@ describe('pubmatic analytics adapter', function () {
1477
1473
  // slot 2
1478
1474
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1479
1475
  expect(data.s[1].fskp).to.equal(0);
1480
- expect(data.s[1].ffs).to.equal(1);
1481
- expect(data.s[1].fsrc).to.equal(2);
1482
- expect(data.s[1].fp).to.equal('pubmatic');
1483
1476
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1484
1477
  expect(data.s[1].sid).not.to.be.undefined;
1485
1478
  expect(data.s[1].ps).to.be.an('array');
@@ -1570,13 +1563,13 @@ describe('pubmatic analytics adapter', function () {
1570
1563
  expect(data.ft).to.equal(1);
1571
1564
  expect(data.s).to.be.an('array');
1572
1565
  expect(data.s.length).to.equal(2);
1566
+ expect(data.ffs).to.equal(1);
1567
+ expect(data.fsrc).to.equal(2);
1568
+ expect(data.fp).to.equal('pubmatic');
1573
1569
 
1574
1570
  // slot 1
1575
1571
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
1576
1572
  expect(data.s[0].fskp).to.equal(0);
1577
- expect(data.s[0].ffs).to.equal(1);
1578
- expect(data.s[0].fsrc).to.equal(2);
1579
- expect(data.s[0].fp).to.equal('pubmatic');
1580
1573
  expect(data.s[0].sz).to.deep.equal(['640x480']);
1581
1574
  expect(data.s[0].sid).not.to.be.undefined;
1582
1575
  expect(data.s[0].ps).to.be.an('array');
@@ -2,8 +2,9 @@ import { expect } from 'chai';
2
2
  import { spec } from 'modules/riseBidAdapter.js';
3
3
  import { newBidder } from 'src/adapters/bidderFactory.js';
4
4
  import { config } from 'src/config.js';
5
- import { BANNER, VIDEO } from '../../../src/mediaTypes.js';
5
+ import {BANNER, NATIVE, VIDEO} from '../../../src/mediaTypes.js';
6
6
  import * as utils from 'src/utils.js';
7
+ import {decorateAdUnitsWithNativeParams} from '../../../src/native';
7
8
 
8
9
  const ENDPOINT = 'https://hb.yellowblue.io/hb-multi';
9
10
  const TEST_ENDPOINT = 'https://hb.yellowblue.io/hb-multi-test';
@@ -72,7 +73,6 @@ describe('riseAdapter', function () {
72
73
  'plcmt': 1
73
74
  }
74
75
  },
75
- 'vastXml': '"<VAST version=\\\"2.0\\\">...</VAST>"'
76
76
  },
77
77
  {
78
78
  'bidder': spec.code,
@@ -89,7 +89,59 @@ describe('riseAdapter', function () {
89
89
  'banner': {
90
90
  }
91
91
  },
92
- 'ad': '"<img src=\"https://...\"/>"'
92
+ },
93
+ {
94
+ 'bidder': spec.code,
95
+ 'adUnitCode': 'adunit-code',
96
+ 'sizes': [[300, 250]],
97
+ 'params': {
98
+ 'org': 'jdye8weeyirk00000001'
99
+ },
100
+ 'bidId': '299ffc8cca0b87',
101
+ 'loop': 1,
102
+ 'bidderRequestId': '1144f487e563f9',
103
+ 'auctionId': 'bfc420c3-8577-4568-9766-a8a935fb620d',
104
+ 'mediaTypes': {
105
+ 'banner': {
106
+ 'sizes': [
107
+ [ 300, 250 ]
108
+ ]
109
+ },
110
+ 'video': {
111
+ 'playerSize': [[640, 480]],
112
+ 'context': 'instream',
113
+ 'plcmt': 1
114
+ },
115
+ 'native': {
116
+ 'ortb': {
117
+ 'assets': [
118
+ {
119
+ 'id': 1,
120
+ 'required': 1,
121
+ 'img': {
122
+ 'type': 3,
123
+ 'w': 300,
124
+ 'h': 200,
125
+ }
126
+ },
127
+ {
128
+ 'id': 2,
129
+ 'required': 1,
130
+ 'title': {
131
+ 'len': 80
132
+ }
133
+ },
134
+ {
135
+ 'id': 3,
136
+ 'required': 1,
137
+ 'data': {
138
+ 'type': 1
139
+ }
140
+ }
141
+ ]
142
+ }
143
+ },
144
+ },
93
145
  }
94
146
  ];
95
147
 
@@ -175,10 +227,10 @@ describe('riseAdapter', function () {
175
227
  });
176
228
 
177
229
  it('should send the correct mimes array', function () {
178
- bidRequests[1].mediaTypes.banner.mimes = mimes;
230
+ bidRequests[0].mediaTypes.video.mimes = mimes;
179
231
  const request = spec.buildRequests(bidRequests, bidderRequest);
180
- expect(request.data.bids[1].mimes).to.be.an('array');
181
- expect(request.data.bids[1].mimes).to.eql(['application/javascript', 'video/mp4', 'video/quicktime']);
232
+ expect(request.data.bids[0].mimes).to.be.an('array');
233
+ expect(request.data.bids[0].mimes).to.eql(['application/javascript', 'video/mp4', 'video/quicktime']);
182
234
  });
183
235
 
184
236
  it('should send the correct protocols array', function () {
@@ -194,12 +246,21 @@ describe('riseAdapter', function () {
194
246
  expect(request.data.bids[0].sizes).to.equal(bidRequests[0].sizes)
195
247
  expect(request.data.bids[1].sizes).to.be.an('array');
196
248
  expect(request.data.bids[1].sizes).to.equal(bidRequests[1].sizes)
249
+ expect(request.data.bids[2].sizes).to.be.an('array');
250
+ expect(request.data.bids[2].sizes).to.eql(bidRequests[2].sizes)
251
+ });
252
+
253
+ it('should send nativeOrtbRequest in native bid request', function () {
254
+ decorateAdUnitsWithNativeParams(bidRequests)
255
+ const request = spec.buildRequests(bidRequests, bidderRequest);
256
+ assert.deepEqual(request.data.bids[2].nativeOrtbRequest, bidRequests[2].mediaTypes.native.ortb)
197
257
  });
198
258
 
199
259
  it('should send the correct media type', function () {
200
260
  const request = spec.buildRequests(bidRequests, bidderRequest);
201
261
  expect(request.data.bids[0].mediaType).to.equal(VIDEO)
202
262
  expect(request.data.bids[1].mediaType).to.equal(BANNER)
263
+ expect(request.data.bids[2].mediaType.split(',')).to.include.members([VIDEO, NATIVE, BANNER])
203
264
  });
204
265
 
205
266
  it('should respect syncEnabled option', function() {
@@ -506,6 +567,28 @@ describe('riseAdapter', function () {
506
567
  creativeId: 'creative-id',
507
568
  nurl: 'http://example.com/win/1234',
508
569
  mediaType: BANNER
570
+ },
571
+ {
572
+ cpm: 12.5,
573
+ width: 300,
574
+ height: 200,
575
+ requestId: '21e12606d47ba7',
576
+ adomain: ['abc.com'],
577
+ creativeId: 'creative-id',
578
+ nurl: 'http://example.com/win/1234',
579
+ mediaType: NATIVE,
580
+ native: {
581
+ body: 'Advertise with Rise',
582
+ clickUrl: 'https://risecodes.com',
583
+ cta: 'Start now',
584
+ image: {
585
+ width: 300,
586
+ height: 200,
587
+ url: 'https://sdk.streamrail.com/media/rise-image.jpg'
588
+ },
589
+ sponsoredBy: 'Rise',
590
+ title: 'Rise Ad Tech Solutions'
591
+ }
509
592
  }]
510
593
  };
511
594
 
@@ -545,10 +628,42 @@ describe('riseAdapter', function () {
545
628
  ad: '"<img src=\"https://...\"/>"'
546
629
  };
547
630
 
631
+ const expectedNativeResponse = {
632
+ requestId: '21e12606d47ba7',
633
+ cpm: 12.5,
634
+ currency: 'USD',
635
+ width: 300,
636
+ height: 200,
637
+ ttl: TTL,
638
+ creativeId: 'creative-id',
639
+ netRevenue: true,
640
+ nurl: 'http://example.com/win/1234',
641
+ mediaType: NATIVE,
642
+ meta: {
643
+ mediaType: NATIVE,
644
+ advertiserDomains: ['abc.com']
645
+ },
646
+ native: {
647
+ ortb: {
648
+ body: 'Advertise with Rise',
649
+ clickUrl: 'https://risecodes.com',
650
+ cta: 'Start now',
651
+ image: {
652
+ width: 300,
653
+ height: 200,
654
+ url: 'https://sdk.streamrail.com/media/rise-image.jpg',
655
+ },
656
+ sponsoredBy: 'Rise',
657
+ title: 'Rise Ad Tech Solutions'
658
+ }
659
+ },
660
+ };
661
+
548
662
  it('should get correct bid response', function () {
549
663
  const result = spec.interpretResponse({ body: response });
550
664
  expect(result[0]).to.deep.equal(expectedVideoResponse);
551
665
  expect(result[1]).to.deep.equal(expectedBannerResponse);
666
+ expect(result[2]).to.deep.equal(expectedNativeResponse);
552
667
  });
553
668
 
554
669
  it('video type should have vastXml key', function () {
@@ -560,6 +675,11 @@ describe('riseAdapter', function () {
560
675
  const result = spec.interpretResponse({ body: response });
561
676
  expect(result[1].ad).to.equal(expectedBannerResponse.ad)
562
677
  });
678
+
679
+ it('native type should have native key', function () {
680
+ const result = spec.interpretResponse({ body: response });
681
+ expect(result[2].native).to.eql(expectedNativeResponse.native)
682
+ });
563
683
  })
564
684
 
565
685
  describe('getUserSyncs', function() {