prebid.js 8.7.0 → 8.9.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 (350) hide show
  1. package/dist/1plusXRtdProvider.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/a1MediaRtdProvider.js +1 -1
  5. package/dist/adWMGAnalyticsAdapter.js +1 -1
  6. package/dist/adagioBidAdapter.js +1 -1
  7. package/dist/adbookpspBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  10. package/dist/adlooxAdServerVideo.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/admaticBidAdapter.js +1 -1
  13. package/dist/admixerIdSystem.js +1 -1
  14. package/dist/adnuntiusRtdProvider.js +1 -1
  15. package/dist/adpartnerBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adqueryIdSystem.js +1 -1
  18. package/dist/adrelevantisBidAdapter.js +1 -1
  19. package/dist/adriverIdSystem.js +1 -1
  20. package/dist/adtelligentIdSystem.js +1 -1
  21. package/dist/adtrgtmeBidAdapter.js +1 -1
  22. package/dist/adxcgAnalyticsAdapter.js +1 -1
  23. package/dist/adxcgBidAdapter.js +1 -1
  24. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  25. package/dist/adyoulikeBidAdapter.js +1 -1
  26. package/dist/aidemBidAdapter.js +1 -1
  27. package/dist/ajaBidAdapter.js +1 -1
  28. package/dist/akamaiDapRtdProvider.js +1 -1
  29. package/dist/alkimiBidAdapter.js +1 -1
  30. package/dist/amxBidAdapter.js +1 -1
  31. package/dist/amxIdSystem.js +1 -1
  32. package/dist/analyticsAdapter.js +1 -1
  33. package/dist/appierAnalyticsAdapter.js +1 -1
  34. package/dist/appnexusBidAdapter.js +1 -1
  35. package/dist/asoBidAdapter.js +1 -1
  36. package/dist/atsAnalyticsAdapter.js +1 -1
  37. package/dist/automatadBidAdapter.js +1 -1
  38. package/dist/axonixBidAdapter.js +1 -1
  39. package/dist/bidViewability.js +1 -1
  40. package/dist/bidglassBidAdapter.js +1 -1
  41. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  42. package/dist/big-richmediaBidAdapter.js +1 -1
  43. package/dist/brandmetricsRtdProvider.js +1 -1
  44. package/dist/bridBidAdapter.js +1 -1
  45. package/dist/bridgewellBidAdapter.js +1 -1
  46. package/dist/brightMountainMediaBidAdapter.js +1 -1
  47. package/dist/brightcomSSPBidAdapter.js +1 -1
  48. package/dist/britepoolIdSystem.js +1 -1
  49. package/dist/browsiRtdProvider.js +1 -1
  50. package/dist/byDataAnalyticsAdapter.js +1 -1
  51. package/dist/carodaBidAdapter.js +1 -1
  52. package/dist/categoryTranslation.js +1 -1
  53. package/dist/chtnwBidAdapter.js +1 -1
  54. package/dist/colossussspBidAdapter.js +1 -1
  55. package/dist/concertAnalyticsAdapter.js +1 -1
  56. package/dist/concertBidAdapter.js +1 -1
  57. package/dist/connectIdSystem.js +1 -1
  58. package/dist/connectadBidAdapter.js +1 -1
  59. package/dist/consumableBidAdapter.js +1 -1
  60. package/dist/conversantAnalyticsAdapter.js +1 -1
  61. package/dist/conversantBidAdapter.js +1 -1
  62. package/dist/craftBidAdapter.js +1 -1
  63. package/dist/criteoBidAdapter.js +1 -1
  64. package/dist/criteoIdSystem.js +1 -1
  65. package/dist/currency.js +1 -1
  66. package/dist/cwireBidAdapter.js +1 -1
  67. package/dist/dacIdSystem.js +1 -1
  68. package/dist/dailyhuntBidAdapter.js +1 -1
  69. package/dist/datablocksBidAdapter.js +1 -1
  70. package/dist/dependencies.json +4 -1
  71. package/dist/dgkeywordRtdProvider.js +1 -1
  72. package/dist/dmdIdSystem.js +1 -1
  73. package/dist/dspxBidAdapter.js +1 -1
  74. package/dist/eplanningAnalyticsAdapter.js +1 -1
  75. package/dist/eplanningBidAdapter.js +1 -1
  76. package/dist/euidIdSystem.js +1 -1
  77. package/dist/fabrickIdSystem.js +1 -1
  78. package/dist/feedadBidAdapter.js +1 -1
  79. package/dist/finativeBidAdapter.js +1 -1
  80. package/dist/fintezaAnalyticsAdapter.js +1 -1
  81. package/dist/fledgeForGpt.js +1 -1
  82. package/dist/freewheel-sspBidAdapter.js +1 -1
  83. package/dist/genericAnalyticsAdapter.js +1 -1
  84. package/dist/geoedgeRtdProvider.js +1 -1
  85. package/dist/gmosspBidAdapter.js +1 -1
  86. package/dist/gnetBidAdapter.js +1 -1
  87. package/dist/goldbachBidAdapter.js +1 -1
  88. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  89. package/dist/greenbidsRtdProvider.js +1 -1
  90. package/dist/gridBidAdapter.js +1 -1
  91. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  92. package/dist/growthCodeIdSystem.js +1 -1
  93. package/dist/growthCodeRtdProvider.js +1 -1
  94. package/dist/gumgumBidAdapter.js +1 -1
  95. package/dist/h12mediaBidAdapter.js +1 -1
  96. package/dist/hadronAnalyticsAdapter.js +1 -1
  97. package/dist/hadronIdSystem.js +1 -1
  98. package/dist/hadronRtdProvider.js +1 -1
  99. package/dist/hypelabBidAdapter.js +1 -1
  100. package/dist/iasRtdProvider.js +1 -1
  101. package/dist/id5AnalyticsAdapter.js +1 -1
  102. package/dist/id5IdSystem.js +1 -1
  103. package/dist/idImportLibrary.js +1 -1
  104. package/dist/identityLinkIdSystem.js +1 -1
  105. package/dist/imRtdProvider.js +1 -1
  106. package/dist/imdsBidAdapter.js +1 -1
  107. package/dist/impactifyBidAdapter.js +1 -1
  108. package/dist/improvedigitalBidAdapter.js +1 -1
  109. package/dist/imuIdSystem.js +1 -1
  110. package/dist/insticatorBidAdapter.js +1 -1
  111. package/dist/intentIqIdSystem.js +1 -1
  112. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  113. package/dist/ixBidAdapter.js +1 -1
  114. package/dist/jixieBidAdapter.js +1 -1
  115. package/dist/justpremiumBidAdapter.js +1 -1
  116. package/dist/jwplayerRtdProvider.js +1 -1
  117. package/dist/kargoAnalyticsAdapter.js +1 -1
  118. package/dist/kargoBidAdapter.js +1 -1
  119. package/dist/kinessoIdSystem.js +1 -1
  120. package/dist/konduitAnalyticsAdapter.js +1 -1
  121. package/dist/konduitWrapper.js +1 -1
  122. package/dist/kueezBidAdapter.js +1 -1
  123. package/dist/kueezRtbBidAdapter.js +1 -1
  124. package/dist/kulturemediaBidAdapter.js +1 -1
  125. package/dist/lassoBidAdapter.js +1 -1
  126. package/dist/lifestreetBidAdapter.js +1 -1
  127. package/dist/limelightDigitalBidAdapter.js +1 -1
  128. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  129. package/dist/liveIntentIdSystem.js +1 -1
  130. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  131. package/dist/logicadBidAdapter.js +1 -1
  132. package/dist/loglyliftBidAdapter.js +1 -1
  133. package/dist/lotamePanoramaIdSystem.js +1 -1
  134. package/dist/luponmediaBidAdapter.js +1 -1
  135. package/dist/magniteAnalyticsAdapter.js +1 -1
  136. package/dist/malltvAnalyticsAdapter.js +1 -1
  137. package/dist/mantisBidAdapter.js +1 -1
  138. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  139. package/dist/marsmediaBidAdapter.js +1 -1
  140. package/dist/mediafuseBidAdapter.js +1 -1
  141. package/dist/medianetAnalyticsAdapter.js +1 -1
  142. package/dist/mediasquareBidAdapter.js +1 -1
  143. package/dist/merkleIdSystem.js +1 -1
  144. package/dist/mgidBidAdapter.js +1 -1
  145. package/dist/mgidRtdProvider.js +1 -1
  146. package/dist/minutemediaBidAdapter.js +1 -1
  147. package/dist/minutemediaplusBidAdapter.js +1 -1
  148. package/dist/mspa.js +1 -1
  149. package/dist/mwOpenLinkIdSystem.js +1 -1
  150. package/dist/nativoBidAdapter.js +1 -1
  151. package/dist/naveggIdSystem.js +1 -1
  152. package/dist/neuwoRtdProvider.js +1 -1
  153. package/dist/nexx360BidAdapter.js +1 -1
  154. package/dist/not-for-prod/prebid.js +248 -247
  155. package/dist/novatiqIdSystem.js +1 -1
  156. package/dist/oguryBidAdapter.js +1 -1
  157. package/dist/onetagBidAdapter.js +1 -1
  158. package/dist/ooloAnalyticsAdapter.js +1 -1
  159. package/dist/open8BidAdapter.js +1 -1
  160. package/dist/operaadsBidAdapter.js +1 -1
  161. package/dist/operaadsIdSystem.js +1 -0
  162. package/dist/optidigitalBidAdapter.js +1 -1
  163. package/dist/optimeraRtdProvider.js +1 -1
  164. package/dist/outbrainBidAdapter.js +1 -1
  165. package/dist/oxxionAnalyticsAdapter.js +1 -1
  166. package/dist/oxxionRtdProvider.js +1 -1
  167. package/dist/parrableIdSystem.js +1 -1
  168. package/dist/pixfutureBidAdapter.js +1 -1
  169. package/dist/prebid-core.js +2 -2
  170. package/dist/prebidServerBidAdapter.js +1 -1
  171. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  172. package/dist/priceFloors.js +1 -1
  173. package/dist/prismaBidAdapter.js +1 -1
  174. package/dist/pubgeniusBidAdapter.js +1 -1
  175. package/dist/publinkIdSystem.js +1 -1
  176. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  177. package/dist/pubmaticBidAdapter.js +1 -1
  178. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  179. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  180. package/dist/pxyzBidAdapter.js +1 -1
  181. package/dist/quantcastBidAdapter.js +1 -1
  182. package/dist/qwarryBidAdapter.js +1 -1
  183. package/dist/readpeakBidAdapter.js +1 -1
  184. package/dist/reconciliationRtdProvider.js +1 -1
  185. package/dist/relaidoBidAdapter.js +1 -1
  186. package/dist/relevadRtdProvider.js +1 -1
  187. package/dist/retailspotBidAdapter.js +1 -1
  188. package/dist/rhythmoneBidAdapter.js +1 -1
  189. package/dist/riseBidAdapter.js +1 -1
  190. package/dist/rivrAnalyticsAdapter.js +1 -1
  191. package/dist/roxotAnalyticsAdapter.js +1 -1
  192. package/dist/rubiconBidAdapter.js +1 -1
  193. package/dist/scaleableAnalyticsAdapter.js +1 -1
  194. package/dist/seedingAllianceBidAdapter.js +1 -1
  195. package/dist/seedtagBidAdapter.js +1 -1
  196. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  197. package/dist/sharethroughBidAdapter.js +1 -1
  198. package/dist/shinezBidAdapter.js +1 -1
  199. package/dist/silverpushBidAdapter.js +1 -1
  200. package/dist/sirdataRtdProvider.js +1 -1
  201. package/dist/slimcutBidAdapter.js +1 -1
  202. package/dist/smaatoBidAdapter.js +1 -1
  203. package/dist/smartadserverBidAdapter.js +1 -1
  204. package/dist/smartxBidAdapter.js +1 -1
  205. package/dist/smartyadsBidAdapter.js +1 -1
  206. package/dist/smilewantedBidAdapter.js +1 -1
  207. package/dist/snigelBidAdapter.js +1 -1
  208. package/dist/sonobiAnalyticsAdapter.js +1 -1
  209. package/dist/sonobiBidAdapter.js +1 -1
  210. package/dist/sovrnAnalyticsAdapter.js +1 -1
  211. package/dist/sovrnBidAdapter.js +1 -1
  212. package/dist/sspBCBidAdapter.js +1 -1
  213. package/dist/staqAnalyticsAdapter.js +1 -1
  214. package/dist/stvBidAdapter.js +1 -1
  215. package/dist/sublimeBidAdapter.js +1 -1
  216. package/dist/taboolaBidAdapter.js +1 -1
  217. package/dist/talkadsBidAdapter.js +1 -1
  218. package/dist/tapadIdSystem.js +1 -1
  219. package/dist/targetVideoBidAdapter.js +1 -1
  220. package/dist/teadsBidAdapter.js +1 -1
  221. package/dist/teadsIdSystem.js +1 -1
  222. package/dist/terceptAnalyticsAdapter.js +1 -1
  223. package/dist/timeoutRtdProvider.js +1 -1
  224. package/dist/topicsFpdModule.js +1 -1
  225. package/dist/trionBidAdapter.js +1 -1
  226. package/dist/tripleliftBidAdapter.js +1 -1
  227. package/dist/ttdBidAdapter.js +1 -1
  228. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  229. package/dist/uid2IdSystem.js +1 -1
  230. package/dist/underdogmediaBidAdapter.js +1 -1
  231. package/dist/undertoneBidAdapter.js +1 -1
  232. package/dist/unifiedIdSystem.js +1 -1
  233. package/dist/verizonMediaIdSystem.js +1 -1
  234. package/dist/vidazooBidAdapter.js +1 -1
  235. package/dist/videobyteBidAdapter.js +1 -1
  236. package/dist/visxBidAdapter.js +1 -1
  237. package/dist/vrtcalBidAdapter.js +1 -1
  238. package/dist/vuukleBidAdapter.js +1 -1
  239. package/dist/weboramaRtdProvider.js +1 -1
  240. package/dist/widespaceBidAdapter.js +1 -1
  241. package/dist/winrBidAdapter.js +1 -1
  242. package/dist/yahoosspBidAdapter.js +1 -1
  243. package/dist/yieldmoBidAdapter.js +1 -1
  244. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  245. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  246. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  247. package/dist/zeta_global_sspBidAdapter.js +1 -1
  248. package/integrationExamples/gpt/growthcode.html +3 -12
  249. package/integrationExamples/topics/topics-server.js +72 -0
  250. package/libraries/mspa/activityControls.js +3 -1
  251. package/modules/.submodules.json +2 -1
  252. package/modules/a1MediaRtdProvider.js +1 -1
  253. package/modules/adagioBidAdapter.js +11 -3
  254. package/modules/admaticBidAdapter.js +5 -0
  255. package/modules/adqueryBidAdapter.js +23 -21
  256. package/modules/adqueryIdSystem.js +45 -30
  257. package/modules/adrelevantisBidAdapter.js +2 -0
  258. package/modules/bidViewability.js +7 -0
  259. package/modules/bidViewability.md +9 -8
  260. package/modules/brandmetricsRtdProvider.js +30 -27
  261. package/modules/concertBidAdapter.js +1 -0
  262. package/modules/criteoBidAdapter.js +66 -43
  263. package/modules/fledgeForGpt.js +17 -4
  264. package/modules/fledgeForGpt.md +17 -10
  265. package/modules/geoedgeRtdProvider.js +44 -18
  266. package/modules/geoedgeRtdProvider.md +2 -1
  267. package/modules/growthCodeAnalyticsAdapter.js +7 -4
  268. package/modules/growthCodeAnalyticsAdapter.md +1 -7
  269. package/modules/liveIntentIdSystem.js +16 -1
  270. package/modules/nativoBidAdapter.js +21 -3
  271. package/modules/nexx360BidAdapter.js +7 -1
  272. package/modules/onetagBidAdapter.js +3 -0
  273. package/modules/operaadsBidAdapter.js +5 -0
  274. package/modules/operaadsBidAdapter.md +5 -5
  275. package/modules/operaadsIdSystem.js +106 -0
  276. package/modules/operaadsIdSystem.md +52 -0
  277. package/modules/oxxionAnalyticsAdapter.js +22 -5
  278. package/modules/prebidServerBidAdapter/index.js +8 -2
  279. package/modules/pubmaticAnalyticsAdapter.js +16 -3
  280. package/modules/rubiconBidAdapter.js +2 -2
  281. package/modules/smartyadsBidAdapter.js +18 -1
  282. package/modules/snigelBidAdapter.js +69 -16
  283. package/modules/snigelBidAdapter.md +9 -3
  284. package/modules/topicsFpdModule.js +35 -9
  285. package/modules/visxBidAdapter.js +51 -1
  286. package/package.json +2 -2
  287. package/src/adapters/bidderFactory.js +14 -5
  288. package/src/adloader.js +1 -0
  289. package/src/ajax.js +126 -87
  290. package/src/constants.json +8 -2
  291. package/src/native.js +14 -3
  292. package/test/mocks/xhr.js +256 -9
  293. package/test/spec/libraries/mspa/activityControls_spec.js +6 -0
  294. package/test/spec/modules/adagioBidAdapter_spec.js +15 -0
  295. package/test/spec/modules/adlooxAdServerVideo_spec.js +1 -5
  296. package/test/spec/modules/adlooxRtdProvider_spec.js +1 -5
  297. package/test/spec/modules/admaticBidAdapter_spec.js +5 -0
  298. package/test/spec/modules/adqueryIdSystem_spec.js +13 -24
  299. package/test/spec/modules/bidViewability_spec.js +32 -1
  300. package/test/spec/modules/brandmetricsRtdProvider_spec.js +6 -0
  301. package/test/spec/modules/categoryTranslation_spec.js +7 -9
  302. package/test/spec/modules/concertBidAdapter_spec.js +1 -1
  303. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +3 -5
  304. package/test/spec/modules/criteoBidAdapter_spec.js +228 -0
  305. package/test/spec/modules/currency_spec.js +2 -2
  306. package/test/spec/modules/dmdIdSystem_spec.js +2 -2
  307. package/test/spec/modules/eids_spec.js +48 -0
  308. package/test/spec/modules/euidIdSystem_spec.js +10 -9
  309. package/test/spec/modules/feedadBidAdapter_spec.js +1 -1
  310. package/test/spec/modules/fledge_spec.js +117 -43
  311. package/test/spec/modules/geoedgeRtdProvider_spec.js +52 -39
  312. package/test/spec/modules/greenbidsRtdProvider_spec.js +3 -12
  313. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +0 -1
  314. package/test/spec/modules/hadronIdSystem_spec.js +1 -1
  315. package/test/spec/modules/id5AnalyticsAdapter_spec.js +1 -7
  316. package/test/spec/modules/id5IdSystem_spec.js +25 -25
  317. package/test/spec/modules/identityLinkIdSystem_spec.js +0 -2
  318. package/test/spec/modules/intentIqIdSystem_spec.js +0 -2
  319. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +2 -6
  320. package/test/spec/modules/jwplayerRtdProvider_spec.js +26 -28
  321. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
  322. package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
  323. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +2 -2
  324. package/test/spec/modules/mgidRtdProvider_spec.js +1 -5
  325. package/test/spec/modules/nativoBidAdapter_spec.js +6 -1
  326. package/test/spec/modules/nexx360BidAdapter_spec.js +48 -1
  327. package/test/spec/modules/oguryBidAdapter_spec.js +5 -19
  328. package/test/spec/modules/onetagBidAdapter_spec.js +69 -0
  329. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
  330. package/test/spec/modules/operaadsIdSystem_spec.js +53 -0
  331. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +6 -1
  332. package/test/spec/modules/prebidServerBidAdapter_spec.js +33 -2
  333. package/test/spec/modules/priceFloors_spec.js +33 -37
  334. package/test/spec/modules/publinkIdSystem_spec.js +1 -1
  335. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +102 -18
  336. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +2 -8
  337. package/test/spec/modules/rubiconBidAdapter_spec.js +24 -0
  338. package/test/spec/modules/smartyadsBidAdapter_spec.js +49 -0
  339. package/test/spec/modules/snigelBidAdapter_spec.js +57 -6
  340. package/test/spec/modules/teadsIdSystem_spec.js +1 -1
  341. package/test/spec/modules/topicsFpdModule_spec.js +102 -1
  342. package/test/spec/modules/uid2IdSystem_helpers.js +5 -5
  343. package/test/spec/modules/uid2IdSystem_spec.js +24 -24
  344. package/test/spec/modules/userId_spec.js +1 -1
  345. package/test/spec/modules/visxBidAdapter_spec.js +151 -1
  346. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +2 -5
  347. package/test/spec/native_spec.js +20 -5
  348. package/test/spec/unit/core/ajax_spec.js +403 -0
  349. package/test/spec/unit/core/bidderFactory_spec.js +80 -8
  350. package/test/spec/videoCache_spec.js +4 -4
@@ -22,6 +22,7 @@ import {auctionManager} from '../../../src/auctionManager.js';
22
22
  import {stubAuctionIndex} from '../../helpers/indexStub.js';
23
23
  import {guardTids} from '../../../src/adapters/bidderFactory.js';
24
24
  import * as activities from '../../../src/activities/rules.js';
25
+ import {server} from '../../mocks/xhr.js';
25
26
 
26
27
  describe('the price floors module', function () {
27
28
  let logErrorSpy;
@@ -593,16 +594,11 @@ describe('the price floors module', function () {
593
594
  adUnits,
594
595
  });
595
596
  };
596
- let fakeFloorProvider;
597
597
  let actualAllowedFields = allowedFields;
598
598
  let actualFieldMatchingFunctions = fieldMatchingFunctions;
599
599
  const defaultAllowedFields = [...allowedFields];
600
600
  const defaultMatchingFunctions = {...fieldMatchingFunctions};
601
- beforeEach(function() {
602
- fakeFloorProvider = sinon.fakeServer.create();
603
- });
604
601
  afterEach(function() {
605
- fakeFloorProvider.restore();
606
602
  exposedAdUnits = undefined;
607
603
  actualAllowedFields = [...defaultAllowedFields];
608
604
  actualFieldMatchingFunctions = {...defaultMatchingFunctions};
@@ -986,7 +982,7 @@ describe('the price floors module', function () {
986
982
  });
987
983
  });
988
984
  it('Should continue auction of delay is hit without a response from floor provider', function () {
989
- handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
985
+ handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json//'}});
990
986
 
991
987
  // start the auction it should delay and not immediately call `continueAuction`
992
988
  runStandardAuction();
@@ -1013,7 +1009,7 @@ describe('the price floors module', function () {
1013
1009
  fetchStatus: 'timeout',
1014
1010
  floorProvider: undefined
1015
1011
  });
1016
- fakeFloorProvider.respond();
1012
+ server.respond();
1017
1013
  });
1018
1014
  it('It should fetch if config has url and bidRequests have fetch level flooring meta data', function () {
1019
1015
  // init the fake server with response stuff
@@ -1021,14 +1017,14 @@ describe('the price floors module', function () {
1021
1017
  ...basicFloorData,
1022
1018
  modelVersion: 'fetch model name', // change the model name
1023
1019
  };
1024
- fakeFloorProvider.respondWith(JSON.stringify(fetchFloorData));
1020
+ server.respondWith(JSON.stringify(fetchFloorData));
1025
1021
 
1026
1022
  // run setConfig indicating fetch
1027
- handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1023
+ handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1028
1024
 
1029
1025
  // floor provider should be called
1030
- expect(fakeFloorProvider.requests.length).to.equal(1);
1031
- expect(fakeFloorProvider.requests[0].url).to.equal('http://www.fakeFloorProvider.json');
1026
+ expect(server.requests.length).to.equal(1);
1027
+ expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
1032
1028
 
1033
1029
  // start the auction it should delay and not immediately call `continueAuction`
1034
1030
  runStandardAuction();
@@ -1037,7 +1033,7 @@ describe('the price floors module', function () {
1037
1033
  expect(exposedAdUnits).to.be.undefined;
1038
1034
 
1039
1035
  // make the fetch respond
1040
- fakeFloorProvider.respond();
1036
+ server.respond();
1041
1037
  expect(exposedAdUnits).to.not.be.undefined;
1042
1038
 
1043
1039
  // the exposedAdUnits should be from the fetch not setConfig level data
@@ -1061,14 +1057,14 @@ describe('the price floors module', function () {
1061
1057
  floorProvider: 'floorProviderD', // change the floor provider
1062
1058
  modelVersion: 'fetch model name', // change the model name
1063
1059
  };
1064
- fakeFloorProvider.respondWith(JSON.stringify(fetchFloorData));
1060
+ server.respondWith(JSON.stringify(fetchFloorData));
1065
1061
 
1066
1062
  // run setConfig indicating fetch
1067
- handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorproviderC', auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1063
+ handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorproviderC', auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1068
1064
 
1069
1065
  // floor provider should be called
1070
- expect(fakeFloorProvider.requests.length).to.equal(1);
1071
- expect(fakeFloorProvider.requests[0].url).to.equal('http://www.fakeFloorProvider.json');
1066
+ expect(server.requests.length).to.equal(1);
1067
+ expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
1072
1068
 
1073
1069
  // start the auction it should delay and not immediately call `continueAuction`
1074
1070
  runStandardAuction();
@@ -1077,7 +1073,7 @@ describe('the price floors module', function () {
1077
1073
  expect(exposedAdUnits).to.be.undefined;
1078
1074
 
1079
1075
  // make the fetch respond
1080
- fakeFloorProvider.respond();
1076
+ server.respond();
1081
1077
 
1082
1078
  // the exposedAdUnits should be from the fetch not setConfig level data
1083
1079
  // and fetchStatus is success since fetch worked
@@ -1102,14 +1098,14 @@ describe('the price floors module', function () {
1102
1098
  modelVersion: 'fetch model name', // change the model name
1103
1099
  };
1104
1100
  fetchFloorData.skipRate = 95;
1105
- fakeFloorProvider.respondWith(JSON.stringify(fetchFloorData));
1101
+ server.respondWith(JSON.stringify(fetchFloorData));
1106
1102
 
1107
1103
  // run setConfig indicating fetch
1108
- handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1104
+ handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1109
1105
 
1110
1106
  // floor provider should be called
1111
- expect(fakeFloorProvider.requests.length).to.equal(1);
1112
- expect(fakeFloorProvider.requests[0].url).to.equal('http://www.fakeFloorProvider.json');
1107
+ expect(server.requests.length).to.equal(1);
1108
+ expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
1113
1109
 
1114
1110
  // start the auction it should delay and not immediately call `continueAuction`
1115
1111
  runStandardAuction();
@@ -1118,7 +1114,7 @@ describe('the price floors module', function () {
1118
1114
  expect(exposedAdUnits).to.be.undefined;
1119
1115
 
1120
1116
  // make the fetch respond
1121
- fakeFloorProvider.respond();
1117
+ server.respond();
1122
1118
  expect(exposedAdUnits).to.not.be.undefined;
1123
1119
 
1124
1120
  // the exposedAdUnits should be from the fetch not setConfig level data
@@ -1137,10 +1133,10 @@ describe('the price floors module', function () {
1137
1133
  });
1138
1134
  it('Should not break if floor provider returns 404', function () {
1139
1135
  // run setConfig indicating fetch
1140
- handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1136
+ handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1141
1137
 
1142
1138
  // run the auction and make server respond with 404
1143
- fakeFloorProvider.respond();
1139
+ server.respond();
1144
1140
  runStandardAuction();
1145
1141
 
1146
1142
  // error should have been called for fetch error
@@ -1160,13 +1156,13 @@ describe('the price floors module', function () {
1160
1156
  });
1161
1157
  });
1162
1158
  it('Should not break if floor provider returns non json', function () {
1163
- fakeFloorProvider.respondWith('Not valid response');
1159
+ server.respondWith('Not valid response');
1164
1160
 
1165
1161
  // run setConfig indicating fetch
1166
- handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1162
+ handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1167
1163
 
1168
1164
  // run the auction and make server respond
1169
- fakeFloorProvider.respond();
1165
+ server.respond();
1170
1166
  runStandardAuction();
1171
1167
 
1172
1168
  // error should have been called for response floor data not being valid
@@ -1187,27 +1183,27 @@ describe('the price floors module', function () {
1187
1183
  });
1188
1184
  it('should handle not using fetch correctly', function () {
1189
1185
  // run setConfig twice indicating fetch
1190
- fakeFloorProvider.respondWith(JSON.stringify(basicFloorData));
1191
- handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1192
- handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1186
+ server.respondWith(JSON.stringify(basicFloorData));
1187
+ handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1188
+ handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1193
1189
 
1194
1190
  // log warn should be called and server only should have one request
1195
1191
  expect(logWarnSpy.calledOnce).to.equal(true);
1196
- expect(fakeFloorProvider.requests.length).to.equal(1);
1197
- expect(fakeFloorProvider.requests[0].url).to.equal('http://www.fakeFloorProvider.json');
1192
+ expect(server.requests.length).to.equal(1);
1193
+ expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
1198
1194
 
1199
1195
  // now we respond and then run again it should work and make another request
1200
- fakeFloorProvider.respond();
1201
- handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakeFloorProvider.json'}});
1202
- fakeFloorProvider.respond();
1196
+ server.respond();
1197
+ handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
1198
+ server.respond();
1203
1199
 
1204
1200
  // now warn still only called once and server called twice
1205
1201
  expect(logWarnSpy.calledOnce).to.equal(true);
1206
- expect(fakeFloorProvider.requests.length).to.equal(2);
1202
+ expect(server.requests.length).to.equal(2);
1207
1203
 
1208
1204
  // should log error if method is not GET for now
1209
1205
  expect(logErrorSpy.calledOnce).to.equal(false);
1210
- handleSetFloorsConfig({...basicFloorConfig, endpoint: {url: 'http://www.fakeFloorProvider.json', method: 'POST'}});
1206
+ handleSetFloorsConfig({...basicFloorConfig, endpoint: {url: 'http://www.fakefloorprovider.json/', method: 'POST'}});
1211
1207
  expect(logErrorSpy.calledOnce).to.equal(true);
1212
1208
  });
1213
1209
  describe('isFloorsDataValid', function () {
@@ -120,7 +120,7 @@ describe('PublinkIdSystem', () => {
120
120
  expect(parsed.search.mpn).to.equal('Prebid.js');
121
121
  expect(parsed.search.mpv).to.equal('$prebid.version$');
122
122
 
123
- request.respond(204, {}, JSON.stringify(serverResponse));
123
+ request.respond(204);
124
124
  expect(callbackSpy.called).to.be.false;
125
125
  });
126
126
 
@@ -1,11 +1,10 @@
1
- import pubmaticAnalyticsAdapter, { getMetadata } from 'modules/pubmaticAnalyticsAdapter.js';
1
+ import pubmaticAnalyticsAdapter, {getMetadata} from 'modules/pubmaticAnalyticsAdapter.js';
2
2
  import adapterManager from 'src/adapterManager.js';
3
3
  import CONSTANTS from 'src/constants.json';
4
- import { config } from 'src/config.js';
5
- import {
6
- setConfig,
7
- addBidResponseHook,
8
- } from 'modules/currency.js';
4
+ import {config} from 'src/config.js';
5
+ import {setConfig} from 'modules/currency.js';
6
+ import {server} from '../../mocks/xhr.js';
7
+ import 'src/prebid.js';
9
8
 
10
9
  let events = require('src/events');
11
10
  let ajax = require('src/ajax');
@@ -273,7 +272,6 @@ function getLoggerJsonFromRequest(requestBody) {
273
272
 
274
273
  describe('pubmatic analytics adapter', function () {
275
274
  let sandbox;
276
- let xhr;
277
275
  let requests;
278
276
  let oldScreen;
279
277
  let clock;
@@ -282,9 +280,7 @@ describe('pubmatic analytics adapter', function () {
282
280
  setUADefault();
283
281
  sandbox = sinon.sandbox.create();
284
282
 
285
- xhr = sandbox.useFakeXMLHttpRequest();
286
- requests = [];
287
- xhr.onCreate = request => requests.push(request);
283
+ requests = server.requests;
288
284
 
289
285
  sandbox.stub(events, 'getEvents').returns([]);
290
286
 
@@ -393,7 +389,7 @@ describe('pubmatic analytics adapter', function () {
393
389
  expect(data.s[0].ps[0].af).to.equal('video');
394
390
  expect(data.s[0].ps[0].ocpm).to.equal(1.23);
395
391
  expect(data.s[0].ps[0].ocry).to.equal('USD');
396
- expect(data.s[0].ps[0].frv).to.equal(undefined);
392
+ expect(data.s[0].ps[0].frv).to.equal(1.1);
397
393
  // slot 2
398
394
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
399
395
  expect(data.s[1].fskp).to.equal(0);
@@ -422,7 +418,7 @@ describe('pubmatic analytics adapter', function () {
422
418
  expect(data.s[1].ps[0].af).to.equal('banner');
423
419
  expect(data.s[1].ps[0].ocpm).to.equal(1.52);
424
420
  expect(data.s[1].ps[0].ocry).to.equal('USD');
425
- expect(data.s[1].ps[0].frv).to.equal(undefined);
421
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
426
422
 
427
423
  // tracker slot1
428
424
  let firstTracker = requests[0].url;
@@ -452,6 +448,94 @@ describe('pubmatic analytics adapter', function () {
452
448
  expect(data.af).to.equal('video');
453
449
  });
454
450
 
451
+ it('Logger: do not log floor fields when prebids floor shows noData in location property', function() {
452
+ const BID_REQUESTED_COPY = utils.deepClone(MOCK.BID_REQUESTED);
453
+ BID_REQUESTED_COPY['bids'][1]['floorData']['location'] = 'noData';
454
+
455
+ this.timeout(5000)
456
+
457
+ sandbox.stub($$PREBID_GLOBAL$$, 'getHighestCpmBids').callsFake((key) => {
458
+ return [MOCK.BID_RESPONSE[0], MOCK.BID_RESPONSE[1]]
459
+ });
460
+
461
+ config.setConfig({
462
+ testGroupId: 15
463
+ });
464
+
465
+ events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
466
+ events.emit(BID_REQUESTED, BID_REQUESTED_COPY);
467
+ events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
468
+ events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[1]);
469
+ events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
470
+ events.emit(AUCTION_END, MOCK.AUCTION_END);
471
+ events.emit(SET_TARGETING, MOCK.SET_TARGETING);
472
+ events.emit(BID_WON, MOCK.BID_WON[0]);
473
+ events.emit(BID_WON, MOCK.BID_WON[1]);
474
+
475
+ clock.tick(2000 + 1000);
476
+ expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
477
+ let request = requests[2]; // logger is executed late, trackers execute first
478
+ expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
479
+
480
+ let data = getLoggerJsonFromRequest(request.requestBody);
481
+
482
+ expect(data.pubid).to.equal('9999');
483
+ expect(data.fmv).to.equal(undefined);
484
+
485
+ // slot 1
486
+ expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
487
+ expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
488
+
489
+ // slot 2
490
+ expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
491
+ expect(data.s[1].au).to.equal('/19968336/header-bid-tag-1');
492
+ expect(data.s[1].fskp).to.equal(undefined);
493
+ });
494
+
495
+ it('Logger: log floor fields when prebids floor shows setConfig in location property', function() {
496
+ const BID_REQUESTED_COPY = utils.deepClone(MOCK.BID_REQUESTED);
497
+ BID_REQUESTED_COPY['bids'][1]['floorData']['location'] = 'setConfig';
498
+
499
+ this.timeout(5000)
500
+
501
+ sandbox.stub($$PREBID_GLOBAL$$, 'getHighestCpmBids').callsFake((key) => {
502
+ return [MOCK.BID_RESPONSE[0], MOCK.BID_RESPONSE[1]]
503
+ });
504
+
505
+ config.setConfig({
506
+ testGroupId: 15
507
+ });
508
+
509
+ events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
510
+ events.emit(BID_REQUESTED, BID_REQUESTED_COPY);
511
+ events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
512
+ events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[1]);
513
+ events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
514
+ events.emit(AUCTION_END, MOCK.AUCTION_END);
515
+ events.emit(SET_TARGETING, MOCK.SET_TARGETING);
516
+ events.emit(BID_WON, MOCK.BID_WON[0]);
517
+ events.emit(BID_WON, MOCK.BID_WON[1]);
518
+
519
+ clock.tick(2000 + 1000);
520
+ expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
521
+ let request = requests[2]; // logger is executed late, trackers execute first
522
+ expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
523
+
524
+ let data = getLoggerJsonFromRequest(request.requestBody);
525
+
526
+ expect(data.pubid).to.equal('9999');
527
+ expect(data.fmv).to.equal('floorModelTest');
528
+
529
+ // slot 1
530
+ expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
531
+ expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
532
+
533
+ // slot 2
534
+ expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
535
+ expect(data.s[1].au).to.equal('/19968336/header-bid-tag-1');
536
+ expect(data.s[1].fskp).to.equal(0);
537
+ });
538
+
455
539
  it('bidCpmAdjustment: USD: Logger: best case + win tracker', function() {
456
540
  const bidCopy = utils.deepClone(BID);
457
541
  bidCopy.cpm = bidCopy.originalCpm * 2; // bidCpmAdjustment => bidCpm * 2
@@ -501,7 +585,7 @@ describe('pubmatic analytics adapter', function () {
501
585
  expect(data.s[0].ps[0].af).to.equal('video');
502
586
  expect(data.s[0].ps[0].ocpm).to.equal(1.23);
503
587
  expect(data.s[0].ps[0].ocry).to.equal('USD');
504
- expect(data.s[1].ps[0].frv).to.equal(undefined);
588
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
505
589
  // tracker slot1
506
590
  let firstTracker = requests[0].url;
507
591
  expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
@@ -711,7 +795,7 @@ describe('pubmatic analytics adapter', function () {
711
795
  expect(data.s[1].ps[0].af).to.equal('banner');
712
796
  expect(data.s[1].ps[0].ocpm).to.equal(1.52);
713
797
  expect(data.s[1].ps[0].ocry).to.equal('USD');
714
- expect(data.s[1].ps[0].frv).to.equal(undefined);
798
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
715
799
  });
716
800
 
717
801
  it('Logger: currency conversion check', function() {
@@ -818,7 +902,7 @@ describe('pubmatic analytics adapter', function () {
818
902
  expect(data.s[1].ps[0].af).to.equal('banner');
819
903
  expect(data.s[1].ps[0].ocpm).to.equal(1.52);
820
904
  expect(data.s[1].ps[0].ocry).to.equal('USD');
821
- expect(data.s[1].ps[0].frv).to.equal(undefined);
905
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
822
906
  expect(data.dvc).to.deep.equal({'plt': 2});
823
907
  // respective tracker slot
824
908
  let firstTracker = requests[1].url;
@@ -876,7 +960,7 @@ describe('pubmatic analytics adapter', function () {
876
960
  expect(data.s[1].ps[0].ocpm).to.equal(1.52);
877
961
  expect(data.s[1].ps[0].ocry).to.equal('USD');
878
962
  expect(data.dvc).to.deep.equal({'plt': 1});
879
- expect(data.s[1].ps[0].frv).to.equal(undefined);
963
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
880
964
  // respective tracker slot
881
965
  let firstTracker = requests[1].url;
882
966
  expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
@@ -929,7 +1013,7 @@ describe('pubmatic analytics adapter', function () {
929
1013
  expect(data.s[1].ps[0].af).to.equal('banner');
930
1014
  expect(data.s[1].ps[0].ocpm).to.equal(1.52);
931
1015
  expect(data.s[1].ps[0].ocry).to.equal('USD');
932
- expect(data.s[1].ps[0].frv).to.equal(undefined);
1016
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
933
1017
  // respective tracker slot
934
1018
  let firstTracker = requests[1].url;
935
1019
  expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
@@ -1091,7 +1175,7 @@ describe('pubmatic analytics adapter', function () {
1091
1175
  expect(data.s[1].ps[0].af).to.equal('banner');
1092
1176
  expect(data.s[1].ps[0].ocpm).to.equal(1.52);
1093
1177
  expect(data.s[1].ps[0].ocry).to.equal('USD');
1094
- expect(data.s[1].ps[0].frv).to.equal(undefined);
1178
+ expect(data.s[1].ps[0].frv).to.equal(1.1);
1095
1179
 
1096
1180
  // tracker slot1
1097
1181
  let firstTracker = requests[0].url;
@@ -1,6 +1,7 @@
1
1
  import {expect} from 'chai';
2
2
  import pubwiseAnalytics from 'modules/pubwiseAnalyticsAdapter.js';
3
3
  import {expectEvents} from '../../helpers/analytics.js';
4
+ import {server} from '../../mocks/xhr.js';
4
5
 
5
6
  let events = require('src/events');
6
7
  let adapterManager = require('src/adapterManager').default;
@@ -9,7 +10,6 @@ let constants = require('src/constants.json');
9
10
  describe('PubWise Prebid Analytics', function () {
10
11
  let requests;
11
12
  let sandbox;
12
- let xhr;
13
13
  let clock;
14
14
  let mock = {};
15
15
 
@@ -38,9 +38,7 @@ describe('PubWise Prebid Analytics', function () {
38
38
  clock = sandbox.useFakeTimers();
39
39
  sandbox.stub(events, 'getEvents').returns([]);
40
40
 
41
- xhr = sandbox.useFakeXMLHttpRequest();
42
- requests = [];
43
- xhr.onCreate = request => requests.push(request);
41
+ requests = server.requests;
44
42
  });
45
43
 
46
44
  afterEach(function () {
@@ -50,10 +48,6 @@ describe('PubWise Prebid Analytics', function () {
50
48
  });
51
49
 
52
50
  describe('enableAnalytics', function () {
53
- beforeEach(function () {
54
- requests = [];
55
- });
56
-
57
51
  it('should catch all events', function () {
58
52
  pubwiseAnalytics.enableAnalytics(mock.DEFAULT_PW_CONFIG);
59
53
 
@@ -1229,6 +1229,30 @@ describe('the rubicon adapter', function () {
1229
1229
  });
1230
1230
  });
1231
1231
 
1232
+ it('should still use single request if other rubicon configs are set after', function () {
1233
+ // set single request to true
1234
+ config.setConfig({ rubicon: { singleRequest: true } });
1235
+
1236
+ // execute some other rubicon setConfig
1237
+ config.setConfig({ rubicon: { netRevenue: true } });
1238
+
1239
+ const bidCopy = utils.deepClone(bidderRequest.bids[0]);
1240
+ bidderRequest.bids.push(bidCopy);
1241
+ bidderRequest.bids.push(bidCopy);
1242
+ bidderRequest.bids.push(bidCopy);
1243
+
1244
+ let serverRequests = spec.buildRequests(bidderRequest.bids, bidderRequest);
1245
+
1246
+ // should have 1 request only
1247
+ expect(serverRequests).that.is.an('array').of.length(1);
1248
+
1249
+ // get the built query
1250
+ let data = parseQuery(serverRequests[0].data);
1251
+
1252
+ // num slots should be 4
1253
+ expect(data.slots).to.equal('4');
1254
+ });
1255
+
1232
1256
  it('should not group bid requests if singleRequest does not equal true', function () {
1233
1257
  config.setConfig({rubicon: {singleRequest: false}});
1234
1258
 
@@ -1,6 +1,7 @@
1
1
  import {expect} from 'chai';
2
2
  import {spec} from '../../../modules/smartyadsBidAdapter.js';
3
3
  import { config } from '../../../src/config.js';
4
+ import {server} from '../../mocks/xhr';
4
5
 
5
6
  describe('SmartyadsAdapter', function () {
6
7
  let bid = {
@@ -14,6 +15,21 @@ describe('SmartyadsAdapter', function () {
14
15
  }
15
16
  };
16
17
 
18
+ let bidResponse = {
19
+ width: 300,
20
+ height: 250,
21
+ mediaType: 'banner',
22
+ ad: `<img src='https://dummyimage.com/300x250&text=Test+Mode' width=300 height=250 alt='test mode'>`,
23
+ requestId: '23fhj33i987f',
24
+ cpm: 0.1,
25
+ ttl: 120,
26
+ creativeId: '123',
27
+ netRevenue: true,
28
+ currency: 'USD',
29
+ dealId: 'HASH',
30
+ sid: 1234
31
+ };
32
+
17
33
  describe('isBidRequestValid', function () {
18
34
  it('Should return true if there are bidId, params and sourceid parameters present', function () {
19
35
  expect(spec.isBidRequestValid(bid)).to.be.true;
@@ -257,4 +273,37 @@ describe('SmartyadsAdapter', function () {
257
273
  ]);
258
274
  });
259
275
  });
276
+
277
+ describe('onBidWon', function () {
278
+ it('should exists', function () {
279
+ expect(spec.onBidWon).to.exist.and.to.be.a('function');
280
+ });
281
+
282
+ it('should send a valid bid won notice', function () {
283
+ spec.onBidWon(bidResponse);
284
+ expect(server.requests.length).to.equal(1);
285
+ });
286
+ });
287
+
288
+ describe('onTimeout', function () {
289
+ it('should exists', function () {
290
+ expect(spec.onTimeout).to.exist.and.to.be.a('function');
291
+ });
292
+
293
+ it('should send a valid bid timeout notice', function () {
294
+ spec.onTimeout({});
295
+ expect(server.requests.length).to.equal(1);
296
+ });
297
+ });
298
+
299
+ describe('onBidderError', function () {
300
+ it('should exists', function () {
301
+ expect(spec.onBidderError).to.exist.and.to.be.a('function');
302
+ });
303
+
304
+ it('should send a valid bidder error notice', function () {
305
+ spec.onBidderError({});
306
+ expect(server.requests.length).to.equal(1);
307
+ });
308
+ });
260
309
  });
@@ -20,6 +20,7 @@ const makeBidRequest = function (overrides) {
20
20
  };
21
21
 
22
22
  const BASE_BIDDER_REQUEST = {
23
+ auctionId: 'test',
23
24
  bidderRequestId: 'test',
24
25
  refererInfo: {
25
26
  canonicalUrl: 'https://localhost',
@@ -53,8 +54,8 @@ describe('snigelBidAdapter', function () {
53
54
  it('should build a single request for every impression and its placement', function () {
54
55
  const bidderRequest = Object.assign({}, BASE_BIDDER_REQUEST);
55
56
  const bidRequests = [
56
- makeBidRequest({bidId: 'a', params: {placement: 'top_leaderboard'}}),
57
- makeBidRequest({bidId: 'b', params: {placement: 'bottom_leaderboard'}}),
57
+ makeBidRequest({bidId: 'a', adUnitCode: 'au_a', params: {placement: 'top_leaderboard'}}),
58
+ makeBidRequest({bidId: 'b', adUnitCode: 'au_b', params: {placement: 'bottom_leaderboard'}}),
58
59
  ];
59
60
 
60
61
  const request = spec.buildRequests(bidRequests, bidderRequest);
@@ -70,9 +71,9 @@ describe('snigelBidAdapter', function () {
70
71
  expect(data).to.have.property('page').and.to.equal('https://localhost');
71
72
  expect(data).to.have.property('placements');
72
73
  expect(data.placements.length).to.equal(2);
73
- expect(data.placements[0].uuid).to.equal('a');
74
+ expect(data.placements[0].id).to.equal('au_a');
74
75
  expect(data.placements[0].name).to.equal('top_leaderboard');
75
- expect(data.placements[1].uuid).to.equal('b');
76
+ expect(data.placements[1].id).to.equal('au_b');
76
77
  expect(data.placements[1].name).to.equal('bottom_leaderboard');
77
78
  });
78
79
 
@@ -127,6 +128,56 @@ describe('snigelBidAdapter', function () {
127
128
  const data = JSON.parse(request.data);
128
129
  expect(data).to.have.property('coppa').and.to.equal(true);
129
130
  });
131
+
132
+ it('should forward refresh information', function () {
133
+ const bidderRequest = Object.assign({}, BASE_BIDDER_REQUEST);
134
+ const topLeaderboard = makeBidRequest({adUnitCode: 'top_leaderboard'});
135
+ const bottomLeaderboard = makeBidRequest({adUnitCode: 'bottom_leaderboard'});
136
+ const sidebar = makeBidRequest({adUnitCode: 'sidebar'});
137
+
138
+ // first auction, no refresh
139
+ let request = spec.buildRequests([topLeaderboard, bottomLeaderboard], bidderRequest);
140
+ expect(request).to.have.property('data');
141
+ let data = JSON.parse(request.data);
142
+ expect(data).to.have.property('placements');
143
+ expect(data.placements.length).to.equal(2);
144
+ expect(data.placements[0].id).to.equal('top_leaderboard');
145
+ expect(data.placements[0].refresh).to.be.undefined;
146
+ expect(data.placements[1].id).to.equal('bottom_leaderboard');
147
+ expect(data.placements[1].refresh).to.be.undefined;
148
+
149
+ // second auction for top leaderboard, was refreshed
150
+ request = spec.buildRequests([topLeaderboard, sidebar], bidderRequest);
151
+ expect(request).to.have.property('data');
152
+ data = JSON.parse(request.data);
153
+ expect(data).to.have.property('placements');
154
+ expect(data.placements.length).to.equal(2);
155
+ expect(data.placements[0].id).to.equal('top_leaderboard');
156
+ expect(data.placements[0].refresh).to.not.be.undefined;
157
+ expect(data.placements[0].refresh.count).to.equal(1);
158
+ expect(data.placements[0].refresh.time).to.be.greaterThanOrEqual(0);
159
+ expect(data.placements[1].id).to.equal('sidebar');
160
+ expect(data.placements[1].refresh).to.be.undefined;
161
+
162
+ // third auction, all units refreshed at some point
163
+ request = spec.buildRequests([topLeaderboard, bottomLeaderboard, sidebar], bidderRequest);
164
+ expect(request).to.have.property('data');
165
+ data = JSON.parse(request.data);
166
+ expect(data).to.have.property('placements');
167
+ expect(data.placements.length).to.equal(3);
168
+ expect(data.placements[0].id).to.equal('top_leaderboard');
169
+ expect(data.placements[0].refresh).to.not.be.undefined;
170
+ expect(data.placements[0].refresh.count).to.equal(2);
171
+ expect(data.placements[0].refresh.time).to.be.greaterThanOrEqual(0);
172
+ expect(data.placements[1].id).to.equal('bottom_leaderboard');
173
+ expect(data.placements[1].refresh).to.not.be.undefined;
174
+ expect(data.placements[1].refresh.count).to.equal(1);
175
+ expect(data.placements[1].refresh.time).to.be.greaterThanOrEqual(0);
176
+ expect(data.placements[2].id).to.equal('sidebar');
177
+ expect(data.placements[2].refresh).to.not.be.undefined;
178
+ expect(data.placements[2].refresh.count).to.equal(1);
179
+ expect(data.placements[2].refresh.time).to.be.greaterThanOrEqual(0);
180
+ });
130
181
  });
131
182
 
132
183
  describe('interpretResponse', function () {
@@ -146,7 +197,7 @@ describe('snigelBidAdapter', function () {
146
197
  cur: 'USD',
147
198
  bids: [
148
199
  {
149
- uuid: BASE_BID_REQUEST.bidId,
200
+ id: BASE_BID_REQUEST.adUnitCode,
150
201
  price: 0.0575,
151
202
  ad: '<html><body><h1>Test Ad</h1></body></html>',
152
203
  width: 728,
@@ -160,7 +211,7 @@ describe('snigelBidAdapter', function () {
160
211
  },
161
212
  };
162
213
 
163
- const bids = spec.interpretResponse(serverResponse, {});
214
+ const bids = spec.interpretResponse(serverResponse, {bidderRequest: {bids: [BASE_BID_REQUEST]}});
164
215
  expect(bids.length).to.equal(1);
165
216
  const bid = bids[0];
166
217
  expect(isValid(BASE_BID_REQUEST.adUnitCode, bid)).to.be.true;
@@ -218,7 +218,7 @@ describe('TeadsIdSystem', function () {
218
218
  callback(callbackSpy);
219
219
  const request = server.requests[0];
220
220
  expect(request.url).to.include(teadsUrl);
221
- request.respond(204, null, 'Unavailable');
221
+ request.respond(204);
222
222
  expect(logInfoStub.calledOnce).to.be.true;
223
223
  });
224
224