prebid.js 8.26.0 → 8.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 (228) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adqueryBidAdapter.js +1 -1
  10. package/dist/adrelevantisBidAdapter.js +1 -1
  11. package/dist/adstirBidAdapter.js +1 -1
  12. package/dist/adtrgtmeBidAdapter.js +1 -1
  13. package/dist/adxcgBidAdapter.js +1 -1
  14. package/dist/adyoulikeBidAdapter.js +1 -1
  15. package/dist/agmaAnalyticsAdapter.js +1 -1
  16. package/dist/ajaBidAdapter.js +1 -1
  17. package/dist/amxBidAdapter.js +1 -1
  18. package/dist/amxIdSystem.js +1 -1
  19. package/dist/appierAnalyticsAdapter.js +1 -1
  20. package/dist/appnexusBidAdapter.js +1 -1
  21. package/dist/asoBidAdapter.js +1 -1
  22. package/dist/axonixBidAdapter.js +1 -1
  23. package/dist/bidglassBidAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/bizzclickBidAdapter.js +1 -1
  26. package/dist/bridBidAdapter.js +1 -1
  27. package/dist/bridgewellBidAdapter.js +1 -1
  28. package/dist/brightMountainMediaBidAdapter.js +1 -1
  29. package/dist/browsiRtdProvider.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/concertBidAdapter.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consumableBidAdapter.js +1 -1
  35. package/dist/conversantAnalyticsAdapter.js +1 -1
  36. package/dist/conversantBidAdapter.js +1 -1
  37. package/dist/craftBidAdapter.js +1 -1
  38. package/dist/criteoBidAdapter.js +1 -1
  39. package/dist/cwireBidAdapter.js +1 -1
  40. package/dist/deepintentBidAdapter.js +1 -1
  41. package/dist/dependencies.json +3 -0
  42. package/dist/dspxBidAdapter.js +1 -1
  43. package/dist/dxkultureBidAdapter.js +1 -1
  44. package/dist/eplanningBidAdapter.js +1 -1
  45. package/dist/euidIdSystem.js +1 -1
  46. package/dist/feedadBidAdapter.js +1 -1
  47. package/dist/finativeBidAdapter.js +1 -1
  48. package/dist/flippBidAdapter.js +1 -1
  49. package/dist/freewheel-sspBidAdapter.js +1 -1
  50. package/dist/geoedgeRtdProvider.js +1 -1
  51. package/dist/gmosspBidAdapter.js +1 -1
  52. package/dist/goldbachBidAdapter.js +1 -1
  53. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  54. package/dist/greenbidsRtdProvider.js +1 -1
  55. package/dist/gridBidAdapter.js +1 -1
  56. package/dist/growthCodeRtdProvider.js +1 -1
  57. package/dist/gumgumBidAdapter.js +1 -1
  58. package/dist/h12mediaBidAdapter.js +1 -1
  59. package/dist/hypelabBidAdapter.js +1 -1
  60. package/dist/id5IdSystem.js +1 -1
  61. package/dist/identityLinkIdSystem.js +1 -1
  62. package/dist/illuminBidAdapter.js +1 -1
  63. package/dist/imdsBidAdapter.js +1 -1
  64. package/dist/improvedigitalBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/invibesBidAdapter.js +1 -1
  67. package/dist/ixBidAdapter.js +1 -1
  68. package/dist/jixieBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/kargoBidAdapter.js +1 -1
  71. package/dist/konduitAnalyticsAdapter.js +1 -1
  72. package/dist/kueezBidAdapter.js +1 -1
  73. package/dist/kueezRtbBidAdapter.js +1 -1
  74. package/dist/lassoBidAdapter.js +1 -1
  75. package/dist/lifestreetBidAdapter.js +1 -1
  76. package/dist/liveIntentIdSystem.js +1 -1
  77. package/dist/logicadBidAdapter.js +1 -1
  78. package/dist/loglyliftBidAdapter.js +1 -1
  79. package/dist/magniteAnalyticsAdapter.js +1 -1
  80. package/dist/malltvAnalyticsAdapter.js +1 -1
  81. package/dist/marsmediaBidAdapter.js +1 -1
  82. package/dist/mediafuseBidAdapter.js +1 -1
  83. package/dist/mediagoBidAdapter.js +1 -1
  84. package/dist/mediasquareBidAdapter.js +1 -1
  85. package/dist/mgidBidAdapter.js +1 -1
  86. package/dist/mgidXBidAdapter.js +1 -1
  87. package/dist/minutemediaBidAdapter.js +1 -1
  88. package/dist/minutemediaplusBidAdapter.js +1 -1
  89. package/dist/nextMillenniumBidAdapter.js +1 -1
  90. package/dist/nexx360BidAdapter.js +1 -1
  91. package/dist/not-for-prod/prebid.js +156 -156
  92. package/dist/oguryBidAdapter.js +1 -1
  93. package/dist/onetagBidAdapter.js +1 -1
  94. package/dist/ooloAnalyticsAdapter.js +1 -1
  95. package/dist/openxBidAdapter.js +1 -1
  96. package/dist/optidigitalBidAdapter.js +1 -1
  97. package/dist/outbrainBidAdapter.js +1 -1
  98. package/dist/parrableIdSystem.js +1 -1
  99. package/dist/pgamsspBidAdapter.js +1 -1
  100. package/dist/pixfutureBidAdapter.js +1 -1
  101. package/dist/prebid-core.js +2 -2
  102. package/dist/publinkIdSystem.js +1 -1
  103. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  104. package/dist/pubmaticBidAdapter.js +1 -1
  105. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  106. package/dist/pxyzBidAdapter.js +1 -1
  107. package/dist/quantcastBidAdapter.js +1 -1
  108. package/dist/readpeakBidAdapter.js +1 -1
  109. package/dist/relaidoBidAdapter.js +1 -1
  110. package/dist/retailspotBidAdapter.js +1 -1
  111. package/dist/rhythmoneBidAdapter.js +1 -1
  112. package/dist/riseBidAdapter.js +1 -1
  113. package/dist/rtdModule.js +1 -1
  114. package/dist/rubiconBidAdapter.js +1 -1
  115. package/dist/seedingAllianceBidAdapter.js +1 -1
  116. package/dist/seedtagBidAdapter.js +1 -1
  117. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  118. package/dist/sharethroughBidAdapter.js +1 -1
  119. package/dist/shinezBidAdapter.js +1 -1
  120. package/dist/shinezRtbBidAdapter.js +1 -1
  121. package/dist/smaatoBidAdapter.js +1 -1
  122. package/dist/smartadserverBidAdapter.js +1 -1
  123. package/dist/smartxBidAdapter.js +1 -1
  124. package/dist/smilewantedBidAdapter.js +1 -1
  125. package/dist/sonobiBidAdapter.js +1 -1
  126. package/dist/sovrnAnalyticsAdapter.js +1 -1
  127. package/dist/sovrnBidAdapter.js +1 -1
  128. package/dist/sparteoBidAdapter.js +1 -1
  129. package/dist/sspBCBidAdapter.js +1 -1
  130. package/dist/stvBidAdapter.js +1 -1
  131. package/dist/sublimeBidAdapter.js +1 -1
  132. package/dist/taboolaBidAdapter.js +1 -1
  133. package/dist/targetVideoBidAdapter.js +1 -1
  134. package/dist/teadsBidAdapter.js +1 -1
  135. package/dist/theAdxBidAdapter.js +1 -1
  136. package/dist/trionBidAdapter.js +1 -1
  137. package/dist/tripleliftBidAdapter.js +1 -1
  138. package/dist/ttdBidAdapter.js +1 -1
  139. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  140. package/dist/uid2IdSystem.js +1 -1
  141. package/dist/underdogmediaBidAdapter.js +1 -1
  142. package/dist/undertoneBidAdapter.js +1 -1
  143. package/dist/unrulyBidAdapter.js +1 -1
  144. package/dist/userId.js +1 -1
  145. package/dist/viantOrtbBidAdapter.js +1 -1
  146. package/dist/vidazooBidAdapter.js +1 -1
  147. package/dist/videobyteBidAdapter.js +1 -1
  148. package/dist/visxBidAdapter.js +1 -1
  149. package/dist/voxBidAdapter.js +1 -1
  150. package/dist/vuukleBidAdapter.js +1 -1
  151. package/dist/widespaceBidAdapter.js +1 -1
  152. package/dist/winrBidAdapter.js +1 -1
  153. package/dist/yahoosspBidAdapter.js +1 -1
  154. package/dist/yieldmoBidAdapter.js +1 -1
  155. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  156. package/modules/adagioAnalyticsAdapter.js +52 -6
  157. package/modules/adagioBidAdapter.js +25 -16
  158. package/modules/adnuntiusBidAdapter.js +25 -21
  159. package/modules/bizzclickBidAdapter.js +55 -300
  160. package/modules/bizzclickBidAdapter.md +94 -89
  161. package/modules/browsiRtdProvider.js +2 -2
  162. package/modules/criteoBidAdapter.js +1 -0
  163. package/modules/deepintentBidAdapter.js +2 -0
  164. package/modules/flippBidAdapter.js +1 -1
  165. package/modules/geoedgeRtdProvider.js +4 -2
  166. package/modules/growthCodeRtdProvider.js +2 -2
  167. package/modules/gumgumBidAdapter.js +3 -3
  168. package/modules/identityLinkIdSystem.js +1 -2
  169. package/modules/invibesBidAdapter.js +50 -6
  170. package/modules/liveIntentIdSystem.js +17 -1
  171. package/modules/mediagoBidAdapter.js +106 -34
  172. package/modules/mgidXBidAdapter.js +6 -1
  173. package/modules/minutemediaBidAdapter.js +9 -7
  174. package/modules/minutemediaBidAdapter.md +1 -0
  175. package/modules/nextMillenniumBidAdapter.js +170 -113
  176. package/modules/pgamsspBidAdapter.js +18 -1
  177. package/modules/pubmaticAnalyticsAdapter.js +30 -9
  178. package/modules/pubmaticBidAdapter.js +3 -1
  179. package/modules/riseBidAdapter.js +11 -8
  180. package/modules/riseBidAdapter.md +1 -0
  181. package/modules/rtdModule/index.js +2 -1
  182. package/modules/sovrnBidAdapter.js +5 -0
  183. package/modules/sparteoBidAdapter.js +10 -5
  184. package/modules/taboolaBidAdapter.js +8 -0
  185. package/modules/teadsBidAdapter.js +7 -0
  186. package/modules/theAdxBidAdapter.js +10 -2
  187. package/modules/theAdxBidAdapter.md +10 -9
  188. package/modules/unrulyBidAdapter.js +8 -1
  189. package/modules/userId/eids.js +2 -2
  190. package/modules/viantOrtbBidAdapter.js +1 -1
  191. package/modules/visxBidAdapter.js +23 -0
  192. package/modules/voxBidAdapter.js +2 -0
  193. package/package.json +1 -1
  194. package/src/auction.js +1 -1
  195. package/src/constants.json +5 -2
  196. package/src/events.js +1 -1
  197. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +83 -26
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -11
  199. package/test/spec/modules/adnuntiusBidAdapter_spec.js +1 -1
  200. package/test/spec/modules/bizzclickBidAdapter_spec.js +229 -340
  201. package/test/spec/modules/browsiRtdProvider_spec.js +0 -6
  202. package/test/spec/modules/criteoBidAdapter_spec.js +24 -0
  203. package/test/spec/modules/eids_spec.js +35 -2
  204. package/test/spec/modules/geoedgeRtdProvider_spec.js +10 -0
  205. package/test/spec/modules/gumgumBidAdapter_spec.js +8 -0
  206. package/test/spec/modules/identityLinkIdSystem_spec.js +0 -18
  207. package/test/spec/modules/invibesBidAdapter_spec.js +99 -0
  208. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
  209. package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
  210. package/test/spec/modules/mediagoBidAdapter_spec.js +107 -23
  211. package/test/spec/modules/mgidXBidAdapter_spec.js +9 -4
  212. package/test/spec/modules/minutemediaBidAdapter_spec.js +10 -0
  213. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +503 -80
  214. package/test/spec/modules/pgamsspBidAdapter_spec.js +1 -0
  215. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +51 -0
  216. package/test/spec/modules/pubmaticBidAdapter_spec.js +8 -0
  217. package/test/spec/modules/riseBidAdapter_spec.js +11 -1
  218. package/test/spec/modules/sovrnBidAdapter_spec.js +35 -0
  219. package/test/spec/modules/sparteoBidAdapter_spec.js +8 -2
  220. package/test/spec/modules/taboolaBidAdapter_spec.js +45 -1
  221. package/test/spec/modules/teadsBidAdapter_spec.js +58 -0
  222. package/test/spec/modules/theAdxBidAdapter_spec.js +72 -0
  223. package/test/spec/modules/unrulyBidAdapter_spec.js +7 -4
  224. package/test/spec/modules/userId_spec.js +19 -1
  225. package/test/spec/modules/viantOrtbBidAdapter_spec.js +1 -1
  226. package/test/spec/modules/visxBidAdapter_spec.js +39 -1
  227. package/test/spec/unit/core/events_spec.js +17 -2
  228. package/test/spec/unit/pbjs_api_spec.js +7 -0
@@ -374,6 +374,10 @@ describe('pubmatic analytics adapter', function () {
374
374
  // slot 1
375
375
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
376
376
  expect(data.s[0].fskp).to.equal(0);
377
+ expect(data.s[0].sid).not.to.be.undefined;
378
+ expect(data.s[0].ffs).to.equal(1);
379
+ expect(data.s[0].fsrc).to.equal(2);
380
+ expect(data.s[0].fp).to.equal('pubmatic');
377
381
  expect(data.s[0].sz).to.deep.equal(['640x480']);
378
382
  expect(data.s[0].ps).to.be.an('array');
379
383
  expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
@@ -403,6 +407,10 @@ describe('pubmatic analytics adapter', function () {
403
407
  // slot 2
404
408
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
405
409
  expect(data.s[1].fskp).to.equal(0);
410
+ expect(data.s[1].sid).not.to.be.undefined;
411
+ expect(data.s[1].ffs).to.equal(1);
412
+ expect(data.s[1].fsrc).to.equal(2);
413
+ expect(data.s[1].fp).to.equal('pubmatic');
406
414
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
407
415
  expect(data.s[1].ps).to.be.an('array');
408
416
  expect(data.s[1].ps.length).to.equal(1);
@@ -583,6 +591,10 @@ describe('pubmatic analytics adapter', function () {
583
591
  // slot 1
584
592
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
585
593
  expect(data.s[0].fskp).to.equal(0);
594
+ expect(data.s[0].sid).not.to.be.undefined;
595
+ expect(data.s[0].ffs).to.equal(1);
596
+ expect(data.s[0].fsrc).to.equal(2);
597
+ expect(data.s[0].fp).to.equal('pubmatic');
586
598
  expect(data.s[0].sz).to.deep.equal(['640x480']);
587
599
  expect(data.s[0].ps).to.be.an('array');
588
600
  expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
@@ -702,6 +714,13 @@ describe('pubmatic analytics adapter', function () {
702
714
  expect(data.tgid).to.equal(0);// test group id should be an INT between 0-15 else set to 0
703
715
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
704
716
  expect(data.s[1].fskp).to.equal(0);
717
+
718
+ expect(data.s[1].sid).not.to.be.undefined;
719
+
720
+ expect(data.s[1].ffs).to.equal(1);
721
+ expect(data.s[1].fsrc).to.equal(2);
722
+ expect(data.s[1].fp).to.equal('pubmatic');
723
+
705
724
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
706
725
  expect(data.s[1].ps).to.be.an('array');
707
726
  expect(data.s[1].ps.length).to.equal(1);
@@ -784,6 +803,10 @@ describe('pubmatic analytics adapter', function () {
784
803
  let data = getLoggerJsonFromRequest(request.requestBody);
785
804
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
786
805
  expect(data.s[1].fskp).to.equal(0);
806
+ expect(data.s[1].sid).not.to.be.undefined;
807
+ expect(data.s[1].ffs).to.equal(1);
808
+ expect(data.s[1].fsrc).to.equal(2);
809
+ expect(data.s[1].fp).to.equal('pubmatic');
787
810
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
788
811
  expect(data.s[1].ps).to.be.an('array');
789
812
  expect(data.s[1].ps.length).to.equal(1);
@@ -846,6 +869,7 @@ describe('pubmatic analytics adapter', function () {
846
869
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
847
870
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
848
871
  expect(data.s[1].ps).to.be.an('array');
872
+ expect(data.s[1].sid).not.to.be.undefined;
849
873
  expect(data.s[1].ps.length).to.equal(1);
850
874
  expect(data.s[1].ps[0].pn).to.equal('pubmatic');
851
875
  expect(data.s[1].ps[0].bc).to.equal('pubmatic');
@@ -893,6 +917,10 @@ describe('pubmatic analytics adapter', function () {
893
917
  let data = getLoggerJsonFromRequest(request.requestBody);
894
918
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
895
919
  expect(data.s[1].fskp).to.equal(0);
920
+ expect(data.s[1].sid).not.to.be.undefined;
921
+ expect(data.s[1].ffs).to.equal(1);
922
+ expect(data.s[1].fsrc).to.equal(2);
923
+ expect(data.s[1].fp).to.equal('pubmatic');
896
924
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
897
925
  expect(data.s[1].ps).to.be.an('array');
898
926
  expect(data.s[1].ps.length).to.equal(1);
@@ -952,6 +980,7 @@ describe('pubmatic analytics adapter', function () {
952
980
  let data = getLoggerJsonFromRequest(request.requestBody);
953
981
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
954
982
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
983
+ expect(data.s[1].sid).not.to.be.undefined;
955
984
  expect(data.s[1].ps).to.be.an('array');
956
985
  expect(data.s[1].ps.length).to.equal(1);
957
986
  expect(data.s[1].ps[0].pn).to.equal('pubmatic');
@@ -1006,6 +1035,10 @@ describe('pubmatic analytics adapter', function () {
1006
1035
  let data = getLoggerJsonFromRequest(request.requestBody);
1007
1036
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1008
1037
  expect(data.s[1].fskp).to.equal(0);
1038
+ expect(data.s[1].sid).not.to.be.undefined;
1039
+ expect(data.s[1].ffs).to.equal(1);
1040
+ expect(data.s[1].fsrc).to.equal(2);
1041
+ expect(data.s[1].fp).to.equal('pubmatic');
1009
1042
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1010
1043
  expect(data.s[1].ps).to.be.an('array');
1011
1044
  expect(data.s[1].ps.length).to.equal(1);
@@ -1063,6 +1096,7 @@ describe('pubmatic analytics adapter', function () {
1063
1096
  let data = getLoggerJsonFromRequest(request.requestBody);
1064
1097
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1065
1098
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1099
+ expect(data.s[1].sid).not.to.be.undefined;
1066
1100
  expect(data.s[1].ps).to.be.an('array');
1067
1101
  expect(data.s[1].ps.length).to.equal(1);
1068
1102
  expect(data.s[1].ps[0].pn).to.equal('pubmatic');
@@ -1121,7 +1155,11 @@ describe('pubmatic analytics adapter', function () {
1121
1155
  // Testing only for rejected bid as other scenarios will be covered under other TCs
1122
1156
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1123
1157
  expect(data.s[1].fskp).to.equal(0);
1158
+ expect(data.s[1].ffs).to.equal(1);
1159
+ expect(data.s[1].fsrc).to.equal(2);
1160
+ expect(data.s[1].fp).to.equal('pubmatic');
1124
1161
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1162
+ expect(data.s[1].sid).not.to.be.undefined;
1125
1163
  expect(data.s[1].ps).to.be.an('array');
1126
1164
  expect(data.s[1].ps.length).to.equal(1);
1127
1165
  expect(data.s[1].ps[0].pn).to.equal('pubmatic');
@@ -1196,7 +1234,11 @@ describe('pubmatic analytics adapter', function () {
1196
1234
  // slot 1
1197
1235
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
1198
1236
  expect(data.s[0].fskp).to.equal(0);
1237
+ expect(data.s[0].ffs).to.equal(1);
1238
+ expect(data.s[0].fsrc).to.equal(2);
1239
+ expect(data.s[0].fp).to.equal('pubmatic');
1199
1240
  expect(data.s[0].sz).to.deep.equal(['640x480']);
1241
+ expect(data.s[0].sid).not.to.be.undefined;
1200
1242
  expect(data.s[0].ps).to.be.an('array');
1201
1243
  expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
1202
1244
  expect(data.s[0].ps.length).to.equal(1);
@@ -1226,7 +1268,11 @@ describe('pubmatic analytics adapter', function () {
1226
1268
  // slot 2
1227
1269
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1228
1270
  expect(data.s[1].fskp).to.equal(0);
1271
+ expect(data.s[1].ffs).to.equal(1);
1272
+ expect(data.s[1].fsrc).to.equal(2);
1273
+ expect(data.s[1].fp).to.equal('pubmatic');
1229
1274
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1275
+ expect(data.s[1].sid).not.to.be.undefined;
1230
1276
  expect(data.s[1].ps).to.be.an('array');
1231
1277
  expect(data.s[1].ps.length).to.equal(1);
1232
1278
  expect(data.s[1].ps[0].pn).to.equal('pubmatic');
@@ -1318,7 +1364,11 @@ describe('pubmatic analytics adapter', function () {
1318
1364
  // slot 1
1319
1365
  expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
1320
1366
  expect(data.s[0].fskp).to.equal(0);
1367
+ expect(data.s[0].ffs).to.equal(1);
1368
+ expect(data.s[0].fsrc).to.equal(2);
1369
+ expect(data.s[0].fp).to.equal('pubmatic');
1321
1370
  expect(data.s[0].sz).to.deep.equal(['640x480']);
1371
+ expect(data.s[0].sid).not.to.be.undefined;
1322
1372
  expect(data.s[0].ps).to.be.an('array');
1323
1373
  expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
1324
1374
  expect(data.s[0].ps.length).to.equal(1);
@@ -1348,6 +1398,7 @@ describe('pubmatic analytics adapter', function () {
1348
1398
  // slot 2
1349
1399
  expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
1350
1400
  expect(data.s[1].sz).to.deep.equal(['1000x300', '970x250', '728x90']);
1401
+ expect(data.s[1].sid).not.to.be.undefined;
1351
1402
  expect(data.s[1].ps).to.be.an('array');
1352
1403
  expect(data.s[1].ps.length).to.equal(1);
1353
1404
  expect(data.s[1].ps[0].pn).to.equal('pubmatic');
@@ -104,6 +104,7 @@ describe('PubMatic adapter', function () {
104
104
  params: {
105
105
  publisherId: '5890',
106
106
  adSlot: 'Div1@0x0', // ad_id or tagid
107
+ wiid: 'new-unique-wiid',
107
108
  video: {
108
109
  mimes: ['video/mp4', 'video/x-flv'],
109
110
  skippable: true,
@@ -154,6 +155,7 @@ describe('PubMatic adapter', function () {
154
155
  params: {
155
156
  publisherId: '5890',
156
157
  adSlot: 'Div1@640x480', // ad_id or tagid
158
+ wiid: '1234567890',
157
159
  video: {
158
160
  mimes: ['video/mp4', 'video/x-flv'],
159
161
  skippable: true,
@@ -213,6 +215,7 @@ describe('PubMatic adapter', function () {
213
215
  params: {
214
216
  publisherId: '5670',
215
217
  adSlot: '/43743431/NativeAutomationPrebid@1x1',
218
+ wiid: 'new-unique-wiid'
216
219
  },
217
220
  bidId: '2a5571261281d4',
218
221
  requestId: 'B68287E1-DC39-4B38-9790-FE4F179739D6',
@@ -278,6 +281,7 @@ describe('PubMatic adapter', function () {
278
281
  params: {
279
282
  publisherId: '5670',
280
283
  adSlot: '/43743431/NativeAutomationPrebid@1x1',
284
+ wiid: 'new-unique-wiid'
281
285
  },
282
286
  bidId: '2a5571261281d4',
283
287
  requestId: 'B68287E1-DC39-4B38-9790-FE4F179739D6',
@@ -304,6 +308,7 @@ describe('PubMatic adapter', function () {
304
308
  params: {
305
309
  publisherId: '5670',
306
310
  adSlot: '/43743431/NativeAutomationPrebid@1x1',
311
+ wiid: 'new-unique-wiid'
307
312
  }
308
313
  }];
309
314
 
@@ -344,6 +349,7 @@ describe('PubMatic adapter', function () {
344
349
  params: {
345
350
  publisherId: '5670',
346
351
  adSlot: '/43743431/NativeAutomationPrebid@1x1',
352
+ wiid: 'new-unique-wiid'
347
353
  }
348
354
  }];
349
355
 
@@ -502,6 +508,7 @@ describe('PubMatic adapter', function () {
502
508
  params: {
503
509
  publisherId: '301',
504
510
  adSlot: '/15671365/DMDemo@300x250:0',
511
+ wiid: 'new-unique-wiid',
505
512
  video: {
506
513
  mimes: ['video/mp4', 'video/x-flv'],
507
514
  skippable: true,
@@ -572,6 +579,7 @@ describe('PubMatic adapter', function () {
572
579
  params: {
573
580
  publisherId: '301',
574
581
  adSlot: '/15671365/DMDemo@300x250:0',
582
+ wiid: 'new-unique-wiid',
575
583
  video: {
576
584
  mimes: ['video/mp4', 'video/x-flv'],
577
585
  skippable: true,
@@ -53,7 +53,7 @@ describe('riseAdapter', function () {
53
53
  'adUnitCode': 'adunit-code',
54
54
  'sizes': [[640, 480]],
55
55
  'params': {
56
- 'org': 'jdye8weeyirk00000001'
56
+ 'org': 'jdye8weeyirk00000001',
57
57
  },
58
58
  'bidId': '299ffc8cca0b87',
59
59
  'loop': 1,
@@ -195,6 +195,16 @@ describe('riseAdapter', function () {
195
195
  expect(request.data.bids[1].mediaType).to.equal(BANNER)
196
196
  });
197
197
 
198
+ it('should send the correct currency in bid request', function () {
199
+ const bid = utils.deepClone(bidRequests[0]);
200
+ bid.params = {
201
+ 'currency': 'EUR'
202
+ };
203
+ const expectedCurrency = bid.params.currency;
204
+ const request = spec.buildRequests([bid], bidderRequest);
205
+ expect(request.data.bids[0].currency).to.equal(expectedCurrency);
206
+ });
207
+
198
208
  it('should respect syncEnabled option', function() {
199
209
  config.setConfig({
200
210
  userSync: {
@@ -318,6 +318,41 @@ describe('sovrnBidAdapter', function() {
318
318
  expect(data.regs.ext['us_privacy']).to.equal(bidderRequest.uspConsent)
319
319
  })
320
320
 
321
+ it('should not set coppa when coppa is undefined', function () {
322
+ const bidderRequest = {
323
+ ...baseBidderRequest,
324
+ bidderCode: 'sovrn',
325
+ auctionId: '1d1a030790a475',
326
+ bidderRequestId: '22edbae2733bf6',
327
+ timeout: 3000,
328
+ bids: [baseBidRequest],
329
+ gdprConsent: {
330
+ consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==',
331
+ gdprApplies: true
332
+ },
333
+ }
334
+ const {regs} = JSON.parse(spec.buildRequests([baseBidRequest], bidderRequest).data)
335
+ expect(regs.coppa).to.be.undefined
336
+ })
337
+
338
+ it('should set coppa to 1 when coppa is provided with value true', function () {
339
+ const bidderRequest = {
340
+ ...baseBidderRequest,
341
+ ortb2: {
342
+ regs: {
343
+ coppa: true
344
+ }
345
+ },
346
+ bidderCode: 'sovrn',
347
+ auctionId: '1d1a030790a475',
348
+ bidderRequestId: '22edbae2733bf6',
349
+ timeout: 3000,
350
+ bids: [baseBidRequest]
351
+ }
352
+ const {regs} = JSON.parse(spec.buildRequests([baseBidRequest], bidderRequest).data)
353
+ expect(regs.coppa).to.equal(1)
354
+ })
355
+
321
356
  it('should send gpp info in OpenRTB 2.6 location when gppConsent defined', function () {
322
357
  const bidderRequest = {
323
358
  ...baseBidderRequest,
@@ -323,7 +323,12 @@ describe('SparteoAdapter', function () {
323
323
  'price': 5,
324
324
  'ext': {
325
325
  'prebid': {
326
- 'type': 'video'
326
+ 'type': 'video',
327
+ 'cache': {
328
+ 'vastXml': {
329
+ 'url': 'https://pbs.tet.com/cache?uuid=1234'
330
+ }
331
+ }
327
332
  }
328
333
  },
329
334
  'adm': 'tag',
@@ -368,7 +373,8 @@ describe('SparteoAdapter', function () {
368
373
  ttl: TTL,
369
374
  mediaType: 'video',
370
375
  meta: {},
371
- vastUrl: 'https://t.bidder.sparteo.com/img',
376
+ nurl: 'https://t.bidder.sparteo.com/img',
377
+ vastUrl: 'https://pbs.tet.com/cache?uuid=1234',
372
378
  vastXml: 'tag'
373
379
  });
374
380
  }
@@ -1,5 +1,5 @@
1
1
  import {expect} from 'chai';
2
- import {spec, internal, END_POINT_URL, userData} from 'modules/taboolaBidAdapter.js';
2
+ import {spec, internal, END_POINT_URL, userData, EVENT_ENDPOINT} from 'modules/taboolaBidAdapter.js';
3
3
  import {config} from '../../../src/config'
4
4
  import * as utils from '../../../src/utils'
5
5
  import {server} from '../../mocks/xhr'
@@ -113,6 +113,50 @@ describe('Taboola Adapter', function () {
113
113
  });
114
114
  });
115
115
 
116
+ describe('onTimeout', function () {
117
+ it('onTimeout exist as a function', () => {
118
+ expect(spec.onTimeout).to.exist.and.to.be.a('function');
119
+ });
120
+ it('should send timeout', function () {
121
+ const timeoutData = [{
122
+ bidder: 'taboola',
123
+ bidId: 'da43860a-4644-442a-b5e0-93f268cf8d19',
124
+ params: [{
125
+ publisherId: 'publisherId'
126
+ }],
127
+ adUnitCode: 'adUnit-code',
128
+ timeout: 3000,
129
+ auctionId: '12a34b56c'
130
+ }]
131
+ spec.onTimeout(timeoutData);
132
+ expect(server.requests[0].method).to.equal('POST');
133
+ expect(server.requests[0].url).to.equal(EVENT_ENDPOINT + '/timeout');
134
+ expect(JSON.parse(server.requests[0].requestBody)).to.deep.equal(timeoutData);
135
+ });
136
+ });
137
+
138
+ describe('onBidderError', function () {
139
+ it('onBidderError exist as a function', () => {
140
+ expect(spec.onBidderError).to.exist.and.to.be.a('function');
141
+ });
142
+ it('should send bidder error', function () {
143
+ const error = {
144
+ status: 204,
145
+ statusText: 'No Content'
146
+ };
147
+ const bidderRequest = {
148
+ bidder: 'taboola',
149
+ params: {
150
+ publisherId: 'publisherId'
151
+ }
152
+ }
153
+ spec.onBidderError({error, bidderRequest});
154
+ expect(server.requests[0].method).to.equal('POST');
155
+ expect(server.requests[0].url).to.equal(EVENT_ENDPOINT + '/bidError');
156
+ expect(JSON.parse(server.requests[0].requestBody)).to.deep.equal(error, bidderRequest);
157
+ });
158
+ });
159
+
116
160
  describe('buildRequests', function () {
117
161
  const defaultBidRequest = {
118
162
  ...createBidRequest(),
@@ -1,6 +1,7 @@
1
1
  import {expect} from 'chai';
2
2
  import {spec, storage} from 'modules/teadsBidAdapter.js';
3
3
  import {newBidder} from 'src/adapters/bidderFactory.js';
4
+ import { off } from '../../../src/events';
4
5
 
5
6
  const ENDPOINT = 'https://a.teads.tv/hb/bid-request';
6
7
  const AD_SCRIPT = '<script type="text/javascript" class="teads" async="true" src="https://a.teads.tv/hb/getAdSettings"></script>"';
@@ -254,6 +255,63 @@ describe('teadsBidAdapter', () => {
254
255
  expect(payload.pageReferrer).to.deep.equal(document.referrer);
255
256
  });
256
257
 
258
+ it('should add screenOrientation info to payload', function () {
259
+ const request = spec.buildRequests(bidRequests, bidderRequestDefault);
260
+ const payload = JSON.parse(request.data);
261
+ const screenOrientation = window.top.screen.orientation?.type
262
+
263
+ if (screenOrientation) {
264
+ expect(payload.screenOrientation).to.exist;
265
+ expect(payload.screenOrientation).to.deep.equal(screenOrientation);
266
+ } else expect(payload.screenOrientation).to.not.exist;
267
+ });
268
+
269
+ it('should add historyLength info to payload', function () {
270
+ const request = spec.buildRequests(bidRequests, bidderRequestDefault);
271
+ const payload = JSON.parse(request.data);
272
+
273
+ expect(payload.historyLength).to.exist;
274
+ expect(payload.historyLength).to.deep.equal(window.top.history.length);
275
+ });
276
+
277
+ it('should add viewportHeight info to payload', function () {
278
+ const request = spec.buildRequests(bidRequests, bidderRequestDefault);
279
+ const payload = JSON.parse(request.data);
280
+
281
+ expect(payload.viewportHeight).to.exist;
282
+ expect(payload.viewportHeight).to.deep.equal(window.top.visualViewport.height);
283
+ });
284
+
285
+ it('should add viewportWidth info to payload', function () {
286
+ const request = spec.buildRequests(bidRequests, bidderRequestDefault);
287
+ const payload = JSON.parse(request.data);
288
+
289
+ expect(payload.viewportWidth).to.exist;
290
+ expect(payload.viewportWidth).to.deep.equal(window.top.visualViewport.width);
291
+ });
292
+
293
+ it('should add hardwareConcurrency info to payload', function () {
294
+ const request = spec.buildRequests(bidRequests, bidderRequestDefault);
295
+ const payload = JSON.parse(request.data);
296
+ const hardwareConcurrency = window.top.navigator?.hardwareConcurrency
297
+
298
+ if (hardwareConcurrency) {
299
+ expect(payload.hardwareConcurrency).to.exist;
300
+ expect(payload.hardwareConcurrency).to.deep.equal(hardwareConcurrency);
301
+ } else expect(payload.hardwareConcurrency).to.not.exist
302
+ });
303
+
304
+ it('should add deviceMemory info to payload', function () {
305
+ const request = spec.buildRequests(bidRequests, bidderRequestDefault);
306
+ const payload = JSON.parse(request.data);
307
+ const deviceMemory = window.top.navigator.deviceMemory
308
+
309
+ if (deviceMemory) {
310
+ expect(payload.deviceMemory).to.exist;
311
+ expect(payload.deviceMemory).to.deep.equal(deviceMemory);
312
+ } else expect(payload.deviceMemory).to.not.exist;
313
+ });
314
+
257
315
  describe('pageTitle', function () {
258
316
  it('should add pageTitle info to payload based on document title', function () {
259
317
  const testText = 'This is a title';
@@ -446,6 +446,78 @@ describe('TheAdxAdapter', function () {
446
446
  expect(processedBid.currency).to.equal(responseCurrency);
447
447
  });
448
448
 
449
+ it('returns a valid deal bid response on sucessful banner request with deal', function () {
450
+ let incomingRequestId = 'XXtestingXX';
451
+ let responsePrice = 3.14
452
+
453
+ let responseCreative = 'sample_creative&{FOR_COVARAGE}';
454
+
455
+ let responseCreativeId = '274';
456
+ let responseCurrency = 'TRY';
457
+
458
+ let responseWidth = 300;
459
+ let responseHeight = 250;
460
+ let responseTtl = 213;
461
+ let dealId = 'theadx_deal_id';
462
+
463
+ let sampleResponse = {
464
+ id: '66043f5ca44ecd8f8769093b1615b2d9',
465
+ seatbid: [{
466
+ bid: [{
467
+ id: 'c21bab0e-7668-4d8f-908a-63e094c09197',
468
+ dealid: 'theadx_deal_id',
469
+ impid: '1',
470
+ price: responsePrice,
471
+ adid: responseCreativeId,
472
+ crid: responseCreativeId,
473
+ adm: responseCreative,
474
+ adomain: [
475
+ 'www.domain.com'
476
+ ],
477
+ cid: '274',
478
+ attr: [],
479
+ w: responseWidth,
480
+ h: responseHeight,
481
+ ext: {
482
+ ttl: responseTtl
483
+ }
484
+ }],
485
+ seat: '201',
486
+ group: 0
487
+ }],
488
+ bidid: 'c21bab0e-7668-4d8f-908a-63e094c09197',
489
+ cur: responseCurrency
490
+ };
491
+
492
+ let sampleRequest = {
493
+ bidId: incomingRequestId,
494
+ mediaTypes: {
495
+ banner: {}
496
+ },
497
+ requestId: incomingRequestId,
498
+ deals: [{id: dealId}]
499
+ };
500
+ let serverResponse = {
501
+ body: sampleResponse
502
+ }
503
+ let result = spec.interpretResponse(serverResponse, sampleRequest);
504
+
505
+ expect(result.length).to.equal(1);
506
+
507
+ let processedBid = result[0];
508
+
509
+ // expect(processedBid.requestId).to.equal(incomingRequestId);
510
+ expect(processedBid.cpm).to.equal(responsePrice);
511
+ expect(processedBid.width).to.equal(responseWidth);
512
+ expect(processedBid.height).to.equal(responseHeight);
513
+ expect(processedBid.ad).to.equal(responseCreative);
514
+ expect(processedBid.ttl).to.equal(responseTtl);
515
+ expect(processedBid.creativeId).to.equal(responseCreativeId);
516
+ expect(processedBid.netRevenue).to.equal(true);
517
+ expect(processedBid.currency).to.equal(responseCurrency);
518
+ expect(processedBid.dealId).to.equal(dealId);
519
+ });
520
+
449
521
  it('returns an valid bid response on sucessful video request', function () {
450
522
  let incomingRequestId = 'XXtesting-275XX';
451
523
  let responsePrice = 6
@@ -517,7 +517,8 @@ describe('UnrulyAdapter', function () {
517
517
  'bidderRequestId': '12e00d17dff07b'
518
518
  }
519
519
  ],
520
- 'invalidBidsCount': 0
520
+ 'invalidBidsCount': 0,
521
+ 'prebidVersion': '$prebid.version$'
521
522
  }
522
523
  };
523
524
 
@@ -591,7 +592,8 @@ describe('UnrulyAdapter', function () {
591
592
  'bidderRequestId': '12e00d17dff07b',
592
593
  }
593
594
  ],
594
- 'invalidBidsCount': 0
595
+ 'invalidBidsCount': 0,
596
+ 'prebidVersion': '$prebid.version$'
595
597
  }
596
598
  };
597
599
 
@@ -682,7 +684,8 @@ describe('UnrulyAdapter', function () {
682
684
  'bidderRequestId': '12e00d17dff07b',
683
685
  }
684
686
  ],
685
- 'invalidBidsCount': 0
687
+ 'invalidBidsCount': 0,
688
+ 'prebidVersion': '$prebid.version$'
686
689
  }
687
690
  };
688
691
 
@@ -1095,7 +1098,7 @@ describe('UnrulyAdapter', function () {
1095
1098
  'adUnitCode': 'video2',
1096
1099
  'transactionId': 'a89619e3-137d-4cc5-9ed4-58a0b2a0bbc2',
1097
1100
  'bidId': bidId,
1098
- 'bidderRequestId': '12e00d17dff07b',
1101
+ 'bidderRequestId': '12e00d17dff07b'
1099
1102
  }
1100
1103
  ]
1101
1104
  }
@@ -448,7 +448,25 @@ describe('User ID', function () {
448
448
  ]
449
449
  }
450
450
  ])
451
- })
451
+ });
452
+
453
+ it('when merging with pubCommonId, should not alter its eids', () => {
454
+ const uid = {
455
+ pubProvidedId: [
456
+ {
457
+ source: 'mock1Source',
458
+ uids: [
459
+ {id: 'uid2'}
460
+ ]
461
+ }
462
+ ],
463
+ mockId1: 'uid1',
464
+ };
465
+ const eids = createEidsArray(uid);
466
+ expect(eids).to.have.length(1);
467
+ expect(eids[0].uids.map(u => u.id)).to.have.members(['uid1', 'uid2']);
468
+ expect(uid.pubProvidedId[0].uids).to.eql([{id: 'uid2'}]);
469
+ });
452
470
  })
453
471
 
454
472
  it('pbjs.getUserIds', function (done) {
@@ -172,7 +172,7 @@ describe('viantOrtbBidAdapter', function () {
172
172
  });
173
173
  it('sends bid requests to the correct endpoint', function () {
174
174
  const url = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0].url;
175
- expect(url).to.equal('https://bidders-us-east-1.adelphic.net/d/rtb/v25/prebid/bidder_test');
175
+ expect(url).to.equal('https://bidders-us-east-1.adelphic.net/d/rtb/v25/prebid/bidder');
176
176
  });
177
177
 
178
178
  it('sends site', function () {
@@ -1257,6 +1257,7 @@ describe('VisxAdapter', function () {
1257
1257
  const request = spec.buildRequests(bidRequests);
1258
1258
  const pendingUrl = 'https://t.visx.net/track/pending/123123123';
1259
1259
  const winUrl = 'https://t.visx.net/track/win/53245341';
1260
+ const runtimeUrl = 'https://t.visx.net/track/status/12345678';
1260
1261
  const expectedResponse = [
1261
1262
  {
1262
1263
  'requestId': '300bfeb0d71a5b',
@@ -1281,7 +1282,8 @@ describe('VisxAdapter', function () {
1281
1282
  'ext': {
1282
1283
  'events': {
1283
1284
  'pending': pendingUrl,
1284
- 'win': winUrl
1285
+ 'win': winUrl,
1286
+ 'runtime': runtimeUrl
1285
1287
  },
1286
1288
  'targeting': {
1287
1289
  'hb_visx_product': 'understitial',
@@ -1298,6 +1300,9 @@ describe('VisxAdapter', function () {
1298
1300
  pending: pendingUrl,
1299
1301
  win: winUrl,
1300
1302
  });
1303
+ utils.deepSetValue(serverResponse.bid[0], 'ext.visx.events', {
1304
+ runtime: runtimeUrl
1305
+ });
1301
1306
  const result = spec.interpretResponse({'body': {'seatbid': [serverResponse]}}, request);
1302
1307
  expect(result).to.deep.equal(expectedResponse);
1303
1308
  });
@@ -1325,6 +1330,39 @@ describe('VisxAdapter', function () {
1325
1330
  expect(utils.triggerPixel.calledOnceWith(trackUrl)).to.equal(true);
1326
1331
  });
1327
1332
 
1333
+ it('onBidWon with runtime tracker (0 < timeToRespond <= 5000 )', function () {
1334
+ const trackUrl = 'https://t.visx.net/track/win/123123123';
1335
+ const runtimeUrl = 'https://t.visx.net/track/status/12345678/{STATUS_CODE}';
1336
+ const bid = { auctionId: '1', ext: { events: { win: trackUrl, runtime: runtimeUrl } }, timeToRespond: 100 };
1337
+ spec.onBidWon(bid);
1338
+ expect(utils.triggerPixel.calledTwice).to.equal(true);
1339
+ expect(utils.triggerPixel.calledWith(trackUrl)).to.equal(true);
1340
+ expect(utils.triggerPixel.calledWith(runtimeUrl.replace('{STATUS_CODE}', 999002))).to.equal(true);
1341
+ });
1342
+
1343
+ it('onBidWon with runtime tracker (timeToRespond <= 0 )', function () {
1344
+ const runtimeUrl = 'https://t.visx.net/track/status/12345678/{STATUS_CODE}';
1345
+ const bid = { auctionId: '2', ext: { events: { runtime: runtimeUrl } }, timeToRespond: 0 };
1346
+ spec.onBidWon(bid);
1347
+ expect(utils.triggerPixel.calledOnceWith(runtimeUrl.replace('{STATUS_CODE}', 999000))).to.equal(true);
1348
+ });
1349
+
1350
+ it('onBidWon with runtime tracker (timeToRespond > 5000 )', function () {
1351
+ const runtimeUrl = 'https://t.visx.net/track/status/12345678/{STATUS_CODE}';
1352
+ const bid = { auctionId: '3', ext: { events: { runtime: runtimeUrl } }, timeToRespond: 5001 };
1353
+ spec.onBidWon(bid);
1354
+ expect(utils.triggerPixel.calledOnceWith(runtimeUrl.replace('{STATUS_CODE}', 999100))).to.equal(true);
1355
+ });
1356
+
1357
+ it('onBidWon runtime tracker should be called once per auction', function () {
1358
+ const runtimeUrl = 'https://t.visx.net/track/status/12345678/{STATUS_CODE}';
1359
+ const bid1 = { auctionId: '4', ext: { events: { runtime: runtimeUrl } }, timeToRespond: 100 };
1360
+ spec.onBidWon(bid1);
1361
+ const bid2 = { auctionId: '4', ext: { events: { runtime: runtimeUrl } }, timeToRespond: 200 };
1362
+ spec.onBidWon(bid2);
1363
+ expect(utils.triggerPixel.calledOnceWith(runtimeUrl.replace('{STATUS_CODE}', 999002))).to.equal(true);
1364
+ });
1365
+
1328
1366
  it('onTimeout', function () {
1329
1367
  const data = [{ timeout: 3000, adUnitCode: 'adunit-code-1', auctionId: '1cbd2feafe5e8b', bidder: 'visx', bidId: '23423', params: [{ uid: '1' }] }];
1330
1368
  const expectedData = [{ timeout: 3000, params: [{ uid: 1 }] }];