prebid.js 7.20.0 → 7.22.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 (189) hide show
  1. package/dist/1plusXRtdProvider.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/adrelevantisBidAdapter.js +1 -1
  7. package/dist/adtrgtmeBidAdapter.js +1 -1
  8. package/dist/adxcgBidAdapter.js +1 -1
  9. package/dist/adyoulikeBidAdapter.js +1 -1
  10. package/dist/ajaBidAdapter.js +1 -1
  11. package/dist/amxBidAdapter.js +1 -1
  12. package/dist/amxIdSystem.js +1 -1
  13. package/dist/appierAnalyticsAdapter.js +1 -1
  14. package/dist/appnexusBidAdapter.js +1 -1
  15. package/dist/asoBidAdapter.js +1 -1
  16. package/dist/audiencerunBidAdapter.js +1 -1
  17. package/dist/axonixBidAdapter.js +1 -1
  18. package/dist/bidglassBidAdapter.js +1 -1
  19. package/dist/big-richmediaBidAdapter.js +1 -1
  20. package/dist/bluebillywigBidAdapter.js +1 -1
  21. package/dist/bridgewellBidAdapter.js +1 -1
  22. package/dist/brightMountainMediaBidAdapter.js +1 -1
  23. package/dist/brightcomBidAdapter.js +1 -1
  24. package/dist/carodaBidAdapter.js +1 -1
  25. package/dist/concertBidAdapter.js +1 -1
  26. package/dist/connectadBidAdapter.js +1 -1
  27. package/dist/consumableBidAdapter.js +1 -1
  28. package/dist/conversantBidAdapter.js +1 -1
  29. package/dist/craftBidAdapter.js +1 -1
  30. package/dist/criteoBidAdapter.js +1 -1
  31. package/dist/dacIdSystem.js +1 -1
  32. package/dist/dspxBidAdapter.js +1 -1
  33. package/dist/eplanningBidAdapter.js +1 -1
  34. package/dist/finativeBidAdapter.js +1 -1
  35. package/dist/freewheel-sspBidAdapter.js +1 -1
  36. package/dist/ftrackIdSystem.js +1 -1
  37. package/dist/glimpseBidAdapter.js +1 -1
  38. package/dist/gmosspBidAdapter.js +1 -1
  39. package/dist/goldbachBidAdapter.js +1 -1
  40. package/dist/gridBidAdapter.js +1 -1
  41. package/dist/gridNMBidAdapter.js +1 -1
  42. package/dist/gumgumBidAdapter.js +1 -1
  43. package/dist/h12mediaBidAdapter.js +1 -1
  44. package/dist/iasRtdProvider.js +1 -1
  45. package/dist/id5IdSystem.js +1 -1
  46. package/dist/impactifyBidAdapter.js +1 -1
  47. package/dist/improvedigitalBidAdapter.js +1 -1
  48. package/dist/inmarBidAdapter.js +1 -1
  49. package/dist/insticatorBidAdapter.js +1 -1
  50. package/dist/ixBidAdapter.js +1 -1
  51. package/dist/jixieBidAdapter.js +1 -1
  52. package/dist/justpremiumBidAdapter.js +1 -1
  53. package/dist/konduitAnalyticsAdapter.js +1 -1
  54. package/dist/kueezBidAdapter.js +1 -1
  55. package/dist/lassoBidAdapter.js +1 -1
  56. package/dist/lifestreetBidAdapter.js +1 -1
  57. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  58. package/dist/logicadBidAdapter.js +1 -1
  59. package/dist/loglyliftBidAdapter.js +1 -1
  60. package/dist/magniteAnalyticsAdapter.js +1 -1
  61. package/dist/malltvAnalyticsAdapter.js +1 -1
  62. package/dist/marsmediaBidAdapter.js +1 -1
  63. package/dist/mediafuseBidAdapter.js +1 -1
  64. package/dist/mediakeysBidAdapter.js +1 -1
  65. package/dist/medianetAnalyticsAdapter.js +1 -1
  66. package/dist/medianetBidAdapter.js +1 -1
  67. package/dist/mediasquareBidAdapter.js +1 -1
  68. package/dist/mgidBidAdapter.js +1 -1
  69. package/dist/minutemediaBidAdapter.js +1 -1
  70. package/dist/not-for-prod/prebid.js +127 -127
  71. package/dist/oguryBidAdapter.js +1 -1
  72. package/dist/onetagBidAdapter.js +1 -1
  73. package/dist/ooloAnalyticsAdapter.js +1 -1
  74. package/dist/outbrainBidAdapter.js +1 -1
  75. package/dist/parrableIdSystem.js +1 -1
  76. package/dist/pixfutureBidAdapter.js +1 -1
  77. package/dist/prebid-core.js +1 -1
  78. package/dist/prebidServerBidAdapter.js +1 -1
  79. package/dist/publinkIdSystem.js +1 -1
  80. package/dist/pubmaticBidAdapter.js +1 -1
  81. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  82. package/dist/pubwiseBidAdapter.js +1 -1
  83. package/dist/pulsepointBidAdapter.js +1 -1
  84. package/dist/pxyzBidAdapter.js +1 -1
  85. package/dist/quantcastBidAdapter.js +1 -1
  86. package/dist/readpeakBidAdapter.js +1 -1
  87. package/dist/relaidoBidAdapter.js +1 -1
  88. package/dist/rhythmoneBidAdapter.js +1 -1
  89. package/dist/riseBidAdapter.js +1 -1
  90. package/dist/rubiconAnalyticsAdapter.js +1 -1
  91. package/dist/rubiconBidAdapter.js +1 -1
  92. package/dist/seedingAllianceBidAdapter.js +1 -1
  93. package/dist/seedtagBidAdapter.js +1 -1
  94. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  95. package/dist/sharethroughBidAdapter.js +1 -1
  96. package/dist/shinezBidAdapter.js +1 -1
  97. package/dist/smaatoBidAdapter.js +1 -1
  98. package/dist/smartadserverBidAdapter.js +1 -1
  99. package/dist/smartxBidAdapter.js +1 -1
  100. package/dist/smilewantedBidAdapter.js +1 -1
  101. package/dist/sonobiBidAdapter.js +1 -1
  102. package/dist/sovrnAnalyticsAdapter.js +1 -1
  103. package/dist/sovrnBidAdapter.js +1 -1
  104. package/dist/sspBCBidAdapter.js +1 -1
  105. package/dist/sublimeBidAdapter.js +1 -1
  106. package/dist/synacormediaBidAdapter.js +1 -1
  107. package/dist/targetVideoBidAdapter.js +1 -1
  108. package/dist/teadsBidAdapter.js +1 -1
  109. package/dist/trionBidAdapter.js +1 -1
  110. package/dist/tripleliftBidAdapter.js +1 -1
  111. package/dist/ttdBidAdapter.js +1 -1
  112. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  113. package/dist/underdogmediaBidAdapter.js +1 -1
  114. package/dist/undertoneBidAdapter.js +1 -1
  115. package/dist/userId.js +1 -1
  116. package/dist/vidazooBidAdapter.js +1 -1
  117. package/dist/videobyteBidAdapter.js +1 -1
  118. package/dist/visxBidAdapter.js +1 -1
  119. package/dist/vuukleBidAdapter.js +1 -1
  120. package/dist/weboramaRtdProvider.js +1 -1
  121. package/dist/widespaceBidAdapter.js +1 -1
  122. package/dist/winrBidAdapter.js +1 -1
  123. package/dist/yahoosspBidAdapter.js +1 -1
  124. package/dist/yieldmoBidAdapter.js +1 -1
  125. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  126. package/dist/yieldoneBidAdapter.js +1 -1
  127. package/integrationExamples/gpt/weboramaRtdProvider_example.html +10 -51
  128. package/modules/1plusXRtdProvider.js +32 -5
  129. package/modules/33acrossBidAdapter.js +18 -11
  130. package/modules/adyoulikeBidAdapter.js +12 -6
  131. package/modules/asoBidAdapter.js +11 -6
  132. package/modules/asoBidAdapter.md +5 -6
  133. package/modules/brightcomBidAdapter.js +30 -10
  134. package/modules/dacIdSystem.js +145 -27
  135. package/modules/dacIdSystem.md +7 -2
  136. package/modules/fledgeForGpt.md +101 -23
  137. package/modules/freewheel-sspBidAdapter.js +48 -7
  138. package/modules/freewheel-sspBidAdapter.md +1 -1
  139. package/modules/ftrackIdSystem.js +28 -9
  140. package/modules/gridBidAdapter.js +1 -0
  141. package/modules/iasRtdProvider.js +21 -6
  142. package/modules/iasRtdProvider.md +1 -1
  143. package/modules/ixBidAdapter.js +9 -4
  144. package/modules/medianetAnalyticsAdapter.js +26 -22
  145. package/modules/medianetBidAdapter.js +5 -1
  146. package/modules/mediasquareBidAdapter.js +42 -3
  147. package/modules/mgidBidAdapter.js +8 -1
  148. package/modules/oguryBidAdapter.js +6 -2
  149. package/modules/prebidServerBidAdapter/index.js +1 -1
  150. package/modules/pubmaticBidAdapter.js +27 -3
  151. package/modules/pubwiseBidAdapter.js +14 -12
  152. package/modules/pulsepointBidAdapter.js +11 -6
  153. package/modules/smaatoBidAdapter.js +54 -5
  154. package/modules/smaatoBidAdapter.md +78 -0
  155. package/modules/teadsBidAdapter.js +26 -8
  156. package/modules/ttdBidAdapter.js +8 -0
  157. package/modules/userId/eids.js +7 -11
  158. package/modules/weboramaRtdProvider.js +800 -643
  159. package/modules/weboramaRtdProvider.md +32 -0
  160. package/modules/yieldoneBidAdapter.js +7 -4
  161. package/package.json +3 -3
  162. package/src/adapters/bidderFactory.js +11 -9
  163. package/src/auction.js +3 -3
  164. package/test/spec/auctionmanager_spec.js +29 -20
  165. package/test/spec/modules/1plusXRtdProvider_spec.js +30 -14
  166. package/test/spec/modules/33acrossBidAdapter_spec.js +44 -1
  167. package/test/spec/modules/adyoulikeBidAdapter_spec.js +1 -1
  168. package/test/spec/modules/asoBidAdapter_spec.js +2 -2
  169. package/test/spec/modules/brightcomBidAdapter_spec.js +94 -1
  170. package/test/spec/modules/dacIdSystem_spec.js +93 -11
  171. package/test/spec/modules/eids_spec.js +11 -7
  172. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +25 -4
  173. package/test/spec/modules/ftrackIdSystem_spec.js +200 -90
  174. package/test/spec/modules/iasRtdProvider_spec.js +57 -1
  175. package/test/spec/modules/ixBidAdapter_spec.js +12 -0
  176. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +50 -8
  177. package/test/spec/modules/medianetBidAdapter_spec.js +76 -0
  178. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -2
  179. package/test/spec/modules/mgidBidAdapter_spec.js +50 -0
  180. package/test/spec/modules/oguryBidAdapter_spec.js +33 -17
  181. package/test/spec/modules/prebidServerBidAdapter_spec.js +24 -0
  182. package/test/spec/modules/pubmaticBidAdapter_spec.js +60 -5
  183. package/test/spec/modules/pubwiseBidAdapter_spec.js +6 -4
  184. package/test/spec/modules/pulsepointBidAdapter_spec.js +123 -0
  185. package/test/spec/modules/smaatoBidAdapter_spec.js +307 -36
  186. package/test/spec/modules/teadsBidAdapter_spec.js +119 -6
  187. package/test/spec/modules/weboramaRtdProvider_spec.js +382 -0
  188. package/test/spec/modules/yieldoneBidAdapter_spec.js +2 -3
  189. package/test/spec/unit/core/bidderFactory_spec.js +0 -4
@@ -8,6 +8,8 @@ const {
8
8
  EVENTS: { AUCTION_INIT, BID_REQUESTED, BID_RESPONSE, NO_BID, BID_TIMEOUT, AUCTION_END, SET_TARGETING, BID_WON }
9
9
  } = CONSTANTS;
10
10
 
11
+ const ERROR_WINNING_BID_ABSENT = 'winning_bid_absent';
12
+
11
13
  const MOCK = {
12
14
  Ad_Units: [{'code': 'div-gpt-ad-1460505748561-0', 'mediaTypes': {'banner': {'sizes': [[300, 250]]}}, 'bids': [], 'ext': {'prop1': 'value1'}}],
13
15
  MULTI_FORMAT_TWIN_AD_UNITS: [{'code': 'div-gpt-ad-1460505748561-0', 'mediaTypes': {'banner': {'sizes': [[300, 250]]}, 'native': {'image': {'required': true, 'sizes': [150, 50]}}}, 'bids': [], 'ext': {'prop1': 'value1'}}, {'code': 'div-gpt-ad-1460505748561-0', 'mediaTypes': {'video': {'playerSize': [640, 480], 'context': 'instream'}}, 'bids': [], 'ext': {'prop1': 'value1'}}],
@@ -22,11 +24,15 @@ const MOCK = {
22
24
  SET_TARGETING: {'div-gpt-ad-1460505748561-0': {'prebid_test': '1', 'hb_format': 'banner', 'hb_source': 'client', 'hb_size': '300x250', 'hb_pb': '2.00', 'hb_adid': '3e6e4bce5c8fb3', 'hb_bidder': 'medianet', 'hb_format_medianet': 'banner', 'hb_source_medianet': 'client', 'hb_size_medianet': '300x250', 'hb_pb_medianet': '2.00', 'hb_adid_medianet': '3e6e4bce5c8fb3', 'hb_bidder_medianet': 'medianet'}},
23
25
  NO_BID_SET_TARGETING: {'div-gpt-ad-1460505748561-0': {}},
24
26
  BID_WON: {'bidderCode': 'medianet', 'width': 300, 'height': 250, 'statusMessage': 'Bid available', 'adId': '3e6e4bce5c8fb3', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]},
27
+ BID_WON_2: {'bidderCode': 'appnexus', 'width': 300, 'height': 250, 'statusMessage': 'Bid available', 'adId': '3e6e4bce5c8fb4', 'requestId': '28248b0e6aecd5', 'mediaType': 'banner', 'source': 'client', 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'appnexus', 'hb_adid': '3e6e4bce5c8fb4', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'publisherId': 'test123', 'placementId': '451466393'}]},
28
+ BID_WON_UNKNOWN: {'bidderCode': 'appnexus', 'width': 300, 'height': 250, 'statusMessage': 'Bid available', 'adId': '3e6e4bce5c8fkk', 'requestId': '28248b0e6aecd5', 'mediaType': 'banner', 'source': 'client', 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'appnexus', 'hb_adid': '3e6e4bce5c8fb4', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'publisherId': 'test123', 'placementId': '451466393'}]},
25
29
  NO_BID: {'bidder': 'medianet', 'params': {'cid': 'test123', 'crid': '451466393', 'site': {}}, 'mediaTypes': {'banner': {'sizes': [[300, 250]], 'ext': ['asdads']}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '303fa0c6-682f-4aea-8e4a-dc68f0d5c7d5', 'sizes': [[300, 250], [300, 600]], 'bidId': '28248b0e6aece2', 'bidderRequestId': '13fccf3809fe43', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'src': 'client'},
26
30
  BID_TIMEOUT: [{'bidId': '28248b0e6aece2', 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'params': [{'cid': 'test123', 'crid': '451466393', 'site': {}}, {'cid': '8CUX0H51P', 'crid': '451466393', 'site': {}}], 'timeout': 6}],
27
- BIDS_SAME_REQ_DIFF_CPM: [{'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fgg', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.10, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}, {'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb4', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 1.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.10, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 278, 'pbLg': '1.00', 'pbMg': '1.20', 'pbHg': '1.29', 'pbAg': '1.25', 'pbDg': '1.29', 'pbCg': '1.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '1.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}],
28
- BIDS_SAME_REQ_EQUAL_CPM: [{'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fgg', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.1, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}, {'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb4', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.1, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 286, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}]
29
- }
31
+ BIDS_SAME_REQ_DIFF_CPM: [{'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb3', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.10, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}, {'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb4', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 1.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.10, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 278, 'pbLg': '1.00', 'pbMg': '1.20', 'pbHg': '1.29', 'pbAg': '1.25', 'pbDg': '1.29', 'pbCg': '1.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '1.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}],
32
+ BIDS_SAME_REQ_EQUAL_CPM: [{'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb3', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.1, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}, {'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb4', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.1, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 286, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'status': 'rendered', 'params': [{'cid': 'test123', 'crid': '451466393'}]}],
33
+ BID_RESPONSES: [{'bidderCode': 'medianet', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb3', 'requestId': '28248b0e6aece2', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 2.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.1, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 266, 'pbLg': '2.00', 'pbMg': '2.20', 'pbHg': '2.29', 'pbAg': '2.25', 'pbDg': '2.29', 'pbCg': '2.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'medianet', 'hb_adid': '3e6e4bce5c8fb3', 'hb_pb': '2.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'params': [{'cid': 'test123', 'crid': '451466393'}]}, {'bidderCode': 'appnexus', 'width': 300, 'height': 250, 'adId': '3e6e4bce5c8fb4', 'requestId': '28248b0e6aecd5', 'mediaType': 'banner', 'source': 'client', 'ext': {'pvid': 123, 'crid': '321'}, 'no_bid': false, 'cpm': 1.299, 'ad': 'AD_CODE', 'ttl': 180, 'creativeId': 'Test1', 'netRevenue': true, 'currency': 'USD', 'dfp_id': 'div-gpt-ad-1460505748561-0', 'originalCpm': 1.1495, 'originalCurrency': 'USD', 'floorData': {'floorValue': 1.1, 'floorRule': 'banner'}, 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'responseTimestamp': 1584563606009, 'requestTimestamp': 1584563605743, 'bidder': 'medianet', 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'timeToRespond': 278, 'pbLg': '1.00', 'pbMg': '1.20', 'pbHg': '1.29', 'pbAg': '1.25', 'pbDg': '1.29', 'pbCg': '1.00', 'size': '300x250', 'adserverTargeting': {'hb_bidder': 'appnexus', 'hb_adid': '3e6e4bce5c8fb4', 'hb_pb': '1.00', 'hb_size': '300x250', 'hb_source': 'client', 'hb_format': 'banner', 'prebid_test': 1}, 'params': [{'publisherId': 'test123', 'placementId': '451466393'}]}],
34
+ BID_REQUESTS: [{'bidderCode': 'medianet', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'bids': [{'bidder': 'medianet', 'params': {'cid': 'TEST_CID', 'crid': '451466393'}, 'mediaTypes': {'banner': {'sizes': [[300, 250]], 'ext': ['asdads']}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'sizes': [[300, 250]], 'bidId': '28248b0e6aece2', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'src': 'client'}], 'auctionStart': 1584563605739, 'timeout': 6000, 'uspConsent': '1YY', 'start': 1584563605743}, {'bidderCode': 'appnexus', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'bids': [{'bidder': 'appnexus', 'params': {'publisherId': 'TEST_CID', 'placementId': '451466393'}, 'mediaTypes': {'banner': {'sizes': [[300, 250]], 'ext': ['asdads']}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'sizes': [[300, 250]], 'bidId': '28248b0e6aecd5', 'auctionId': '8e0d5245-deb3-406c-96ca-9b609e077ff7', 'src': 'client'}], 'auctionStart': 1584563605739, 'timeout': 6000, 'uspConsent': '1YY', 'start': 1584563605743}]
35
+ };
30
36
 
31
37
  function performAuctionWithFloorConfig() {
32
38
  events.emit(AUCTION_INIT, Object.assign({}, MOCK.AUCTION_INIT_WITH_FLOOR, {adUnits: MOCK.Ad_Units}));
@@ -87,6 +93,14 @@ function performStandardAuctionMultiBidWithSameRequestId(bidRespArray) {
87
93
  events.emit(BID_WON, MOCK.BID_WON);
88
94
  }
89
95
 
96
+ function performStandardAuctionMultiBidResponseNoWin() {
97
+ events.emit(AUCTION_INIT, Object.assign({}, MOCK.AUCTION_INIT, {adUnits: MOCK.Ad_Units}));
98
+ MOCK.BID_REQUESTS.forEach(bidReq => events.emit(BID_REQUESTED, bidReq));
99
+ MOCK.BID_RESPONSES.forEach(bidResp => events.emit(BID_RESPONSE, bidResp));
100
+ events.emit(AUCTION_END, MOCK.AUCTION_END);
101
+ events.emit(SET_TARGETING, MOCK.SET_TARGETING);
102
+ }
103
+
90
104
  function getQueryData(url, decode = false) {
91
105
  const queryArgs = url.split('?')[1].split('&');
92
106
  return queryArgs.reduce((data, arg) => {
@@ -113,7 +127,7 @@ describe('Media.net Analytics Adapter', function() {
113
127
  options: {
114
128
  cid: CUSTOMER_ID
115
129
  }
116
- }
130
+ };
117
131
  beforeEach(function () {
118
132
  sandbox = sinon.sandbox.create();
119
133
  });
@@ -280,25 +294,53 @@ describe('Media.net Analytics Adapter', function() {
280
294
  it('should pick winning bid if multibids with same request id', function() {
281
295
  performStandardAuctionMultiBidWithSameRequestId(MOCK.BIDS_SAME_REQ_DIFF_CPM);
282
296
  let winningBid = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log)).filter(log => log.winner)[0];
283
- expect(winningBid.adid).equals('3e6e4bce5c8fgg');
297
+ expect(winningBid.adid).equals('3e6e4bce5c8fb3');
284
298
  medianetAnalytics.clearlogsQueue();
285
299
 
286
300
  const reversedResponseArray = [].concat(MOCK.BIDS_SAME_REQ_DIFF_CPM).reverse();
287
301
  performStandardAuctionMultiBidWithSameRequestId(reversedResponseArray);
288
302
  winningBid = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log)).filter(log => log.winner)[0];
289
- expect(winningBid.adid).equals('3e6e4bce5c8fgg');
303
+ expect(winningBid.adid).equals('3e6e4bce5c8fb3');
290
304
  });
291
305
 
292
306
  it('should pick winning bid if multibids with same request id and equal cpm', function() {
293
307
  performStandardAuctionMultiBidWithSameRequestId(MOCK.BIDS_SAME_REQ_EQUAL_CPM);
294
308
  let winningBid = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log)).filter(log => log.winner)[0];
295
- expect(winningBid.adid).equals('3e6e4bce5c8fgg');
309
+ expect(winningBid.adid).equals('3e6e4bce5c8fb3');
296
310
  medianetAnalytics.clearlogsQueue();
297
311
 
298
312
  const reversedResponseArray = [].concat(MOCK.BIDS_SAME_REQ_EQUAL_CPM).reverse();
299
313
  performStandardAuctionMultiBidWithSameRequestId(reversedResponseArray);
300
314
  winningBid = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log)).filter(log => log.winner)[0];
301
- expect(winningBid.adid).equals('3e6e4bce5c8fgg');
315
+ expect(winningBid.adid).equals('3e6e4bce5c8fb3');
316
+ });
317
+
318
+ it('should pick single winning bid per bid won', function() {
319
+ performStandardAuctionMultiBidResponseNoWin();
320
+ const queue = medianetAnalytics.getlogsQueue();
321
+ queue.length = 0;
322
+
323
+ events.emit(BID_WON, MOCK.BID_WON);
324
+ let winningBids = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log));
325
+ expect(winningBids[0].adid).equals(MOCK.BID_WON.adId);
326
+ expect(winningBids.length).equals(1);
327
+ events.emit(BID_WON, MOCK.BID_WON_2);
328
+ winningBids = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log));
329
+ expect(winningBids[1].adid).equals(MOCK.BID_WON_2.adId);
330
+ expect(winningBids.length).equals(2);
331
+ });
332
+
333
+ it('should ignore unknown winning bid and log error', function() {
334
+ performStandardAuctionMultiBidResponseNoWin();
335
+ const queue = medianetAnalytics.getlogsQueue();
336
+ queue.length = 0;
337
+
338
+ events.emit(BID_WON, MOCK.BID_WON_UNKNOWN);
339
+ let winningBids = medianetAnalytics.getlogsQueue().map((log) => getQueryData(log));
340
+ let errors = medianetAnalytics.getErrorQueue().map((log) => getQueryData(log));
341
+ expect(winningBids.length).equals(0);
342
+ expect(errors.length).equals(1);
343
+ expect(errors[0].event).equals(ERROR_WINNING_BID_ABSENT);
302
344
  });
303
345
  });
304
346
  });
@@ -856,25 +856,50 @@ let VALID_BID_REQUEST = [{
856
856
  cid: '8CUV090'
857
857
  }
858
858
  },
859
+ VALID_PARAMS_AAX = {
860
+ bidder: 'aax',
861
+ params: {
862
+ cid: 'AAXG123'
863
+ }
864
+ },
859
865
  PARAMS_MISSING = {
860
866
  bidder: 'medianet',
861
867
  },
868
+ PARAMS_MISSING_AAX = {
869
+ bidder: 'aax',
870
+ },
862
871
  PARAMS_WITHOUT_CID = {
863
872
  bidder: 'medianet',
864
873
  params: {}
865
874
  },
875
+ PARAMS_WITHOUT_CID_AAX = {
876
+ bidder: 'aax',
877
+ params: {}
878
+ },
866
879
  PARAMS_WITH_INTEGER_CID = {
867
880
  bidder: 'medianet',
868
881
  params: {
869
882
  cid: 8867587
870
883
  }
871
884
  },
885
+ PARAMS_WITH_INTEGER_CID_AAX = {
886
+ bidder: 'aax',
887
+ params: {
888
+ cid: 8867587
889
+ }
890
+ },
872
891
  PARAMS_WITH_EMPTY_CID = {
873
892
  bidder: 'medianet',
874
893
  params: {
875
894
  cid: ''
876
895
  }
877
896
  },
897
+ PARAMS_WITH_EMPTY_CID_AAX = {
898
+ bidder: 'aax',
899
+ params: {
900
+ cid: ''
901
+ }
902
+ },
878
903
  SYNC_OPTIONS_BOTH_ENABLED = {
879
904
  iframeEnabled: true,
880
905
  pixelEnabled: true,
@@ -1571,4 +1596,55 @@ describe('Media.net bid adapter', function () {
1571
1596
  expect(requestObj.imp[0].hasOwnProperty('bidfloors')).to.equal(true);
1572
1597
  });
1573
1598
  });
1599
+
1600
+ describe('isBidRequestValid aax', function () {
1601
+ it('should accept valid bid params', function () {
1602
+ let isValid = spec.isBidRequestValid(VALID_PARAMS_AAX);
1603
+ expect(isValid).to.equal(true);
1604
+ });
1605
+
1606
+ it('should reject bid if cid is not present', function () {
1607
+ let isValid = spec.isBidRequestValid(PARAMS_WITHOUT_CID_AAX);
1608
+ expect(isValid).to.equal(false);
1609
+ });
1610
+
1611
+ it('should reject bid if cid is not a string', function () {
1612
+ let isValid = spec.isBidRequestValid(PARAMS_WITH_INTEGER_CID_AAX);
1613
+ expect(isValid).to.equal(false);
1614
+ });
1615
+
1616
+ it('should reject bid if cid is a empty string', function () {
1617
+ let isValid = spec.isBidRequestValid(PARAMS_WITH_EMPTY_CID_AAX);
1618
+ expect(isValid).to.equal(false);
1619
+ });
1620
+
1621
+ it('should have missing params', function () {
1622
+ let isValid = spec.isBidRequestValid(PARAMS_MISSING_AAX);
1623
+ expect(isValid).to.equal(false);
1624
+ });
1625
+ });
1626
+
1627
+ describe('interpretResponse aax', function () {
1628
+ it('should not push response if no-bid', function () {
1629
+ let validBids = [];
1630
+ let bids = spec.interpretResponse(SERVER_RESPONSE_NOBID, []);
1631
+ expect(bids).to.deep.equal(validBids);
1632
+ });
1633
+
1634
+ it('should have empty bid response', function() {
1635
+ let bids = spec.interpretResponse(SERVER_RESPONSE_NOBODY, []);
1636
+ expect(bids).to.deep.equal([]);
1637
+ });
1638
+
1639
+ it('should have valid bids', function () {
1640
+ let bids = spec.interpretResponse(SERVER_RESPONSE_VALID_BID, []);
1641
+ expect(bids).to.deep.equal(SERVER_VALID_BIDS);
1642
+ });
1643
+
1644
+ it('should have empty bid list', function() {
1645
+ let validBids = [];
1646
+ let bids = spec.interpretResponse(SERVER_RESPONSE_EMPTY_BIDLIST, []);
1647
+ expect(bids).to.deep.equal(validBids);
1648
+ });
1649
+ });
1574
1650
  });
@@ -78,7 +78,8 @@ describe('MediaSquare bid adapter tests', function () {
78
78
  owner: 'test',
79
79
  code: 'publishername_atf_desktop_rg_pave'
80
80
  },
81
- getFloor: function (a) { return { currency: 'EUR', floor: 1.0 }; },
81
+ sizes: [[300, 250]],
82
+ getFloor: function (a) { return { currency: 'USD', floor: 1.0 }; },
82
83
  }];
83
84
  var BID_RESPONSE = {'body': {
84
85
  'responses': [{
@@ -142,7 +143,7 @@ describe('MediaSquare bid adapter tests', function () {
142
143
  const requestfloor = spec.buildRequests(FLOORS_PARAMS, DEFAULT_OPTIONS);
143
144
  const responsefloor = JSON.parse(requestfloor.data);
144
145
  expect(responsefloor.codes[0]).to.have.property('floor').exist;
145
- expect(responsefloor.codes[0].floor).to.have.property('floor').and.to.equal(1.0);
146
+ expect(responsefloor.codes[0].floor).to.have.property('300x250').and.to.have.property('floor').and.to.equal(1);
146
147
  });
147
148
 
148
149
  it('Verify parse response', function () {
@@ -239,6 +240,7 @@ describe('MediaSquare bid adapter tests', function () {
239
240
  const bid = response[0];
240
241
  expect(bid).to.have.property('vastXml');
241
242
  expect(bid).to.have.property('vastUrl');
243
+ expect(bid).to.have.property('renderer');
242
244
  delete BID_RESPONSE.body.responses[0].video;
243
245
  });
244
246
  });
@@ -31,6 +31,10 @@ describe('Mgid bid adapter', function () {
31
31
  const mgid_ver = spec.VERSION;
32
32
  const utcOffset = (new Date()).getTimezoneOffset().toString();
33
33
 
34
+ it('should expose gvlid', function() {
35
+ expect(spec.gvlid).to.equal(358)
36
+ });
37
+
34
38
  describe('isBidRequestValid', function () {
35
39
  let bid = {
36
40
  'adUnitCode': 'div',
@@ -541,6 +545,52 @@ describe('Mgid bid adapter', function () {
541
545
  'data': '{"site":{"domain":"' + domain + '","page":"' + page + '"},"cur":["USD"],"geo":{"utcoffset":' + utcOffset + '},"device":{"ua":"' + ua + '","js":1,"dnt":' + dnt + ',"h":' + screenHeight + ',"w":' + screenWidth + ',"language":"' + lang + '"},"ext":{"mgid_ver":"' + mgid_ver + '","prebid_ver":"' + version + '"},"imp":[{"tagid":"2/div","secure":' + secure + ',"banner":{"w":300,"h":600,"format":[{"w":300,"h":600},{"w":300,"h":250}],"pos":1}}]}',
542
546
  });
543
547
  });
548
+ it('should proper handle ortb2 data', function () {
549
+ let bid = Object.assign({}, abid);
550
+ bid.mediaTypes = {
551
+ banner: {
552
+ sizes: [[300, 250]]
553
+ }
554
+ };
555
+ let bidRequests = [bid];
556
+
557
+ let bidderRequest = {
558
+ ortb2: {
559
+ site: {
560
+ content: {
561
+ data: [{
562
+ name: 'mgid.com',
563
+ ext: {
564
+ segtax: 1,
565
+ },
566
+ segment: [
567
+ {id: '123'},
568
+ {id: '456'},
569
+ ],
570
+ }]
571
+ }
572
+ },
573
+ user: {
574
+ data: [{
575
+ name: 'mgid.com',
576
+ ext: {
577
+ segtax: 2,
578
+ },
579
+ segment: [
580
+ {'id': '789'},
581
+ {'id': '987'},
582
+ ],
583
+ }]
584
+ }
585
+ }
586
+ };
587
+
588
+ const request = spec.buildRequests(bidRequests, bidderRequest);
589
+ expect(request.url).deep.equal('https://prebid.mgid.com/prebid/1');
590
+ expect(request.method).deep.equal('POST');
591
+ const data = JSON.parse(request.data);
592
+ expect(data.ext).deep.include(bidderRequest.ortb2);
593
+ });
544
594
  });
545
595
 
546
596
  describe('interpretResponse', function () {
@@ -119,26 +119,30 @@ describe('OguryBidAdapter', function () {
119
119
  };
120
120
  });
121
121
 
122
- it('should return syncs array with two elements of type image', () => {
122
+ it('should return syncs array with three elements of type image', () => {
123
123
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
124
124
 
125
- expect(userSyncs).to.have.lengthOf(2);
125
+ expect(userSyncs).to.have.lengthOf(3);
126
126
  expect(userSyncs[0].type).to.equal('image');
127
127
  expect(userSyncs[0].url).to.contain('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch');
128
128
  expect(userSyncs[1].type).to.equal('image');
129
129
  expect(userSyncs[1].url).to.contain('https://ms-cookie-sync.presage.io/ttd/init-sync');
130
+ expect(userSyncs[2].type).to.equal('image');
131
+ expect(userSyncs[2].url).to.contain('https://ms-cookie-sync.presage.io/xandr/init-sync');
130
132
  });
131
133
 
132
134
  it('should set the source as query param', () => {
133
135
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
134
136
  expect(userSyncs[0].url).to.contain('source=prebid');
135
137
  expect(userSyncs[1].url).to.contain('source=prebid');
138
+ expect(userSyncs[2].url).to.contain('source=prebid');
136
139
  });
137
140
 
138
141
  it('should set the tcString as query param', () => {
139
142
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
140
143
  expect(userSyncs[0].url).to.contain(`iab_string=${gdprConsent.consentString}`);
141
144
  expect(userSyncs[1].url).to.contain(`iab_string=${gdprConsent.consentString}`);
145
+ expect(userSyncs[2].url).to.contain(`iab_string=${gdprConsent.consentString}`);
142
146
  });
143
147
 
144
148
  it('should return an empty array when pixel is disable', () => {
@@ -146,82 +150,94 @@ describe('OguryBidAdapter', function () {
146
150
  expect(spec.getUserSyncs(syncOptions, [], gdprConsent)).to.have.lengthOf(0);
147
151
  });
148
152
 
149
- it('should return syncs array with two elements of type image when consentString is undefined', () => {
153
+ it('should return syncs array with three elements of type image when consentString is undefined', () => {
150
154
  gdprConsent = {
151
155
  gdprApplies: true,
152
156
  consentString: undefined
153
157
  };
154
158
 
155
159
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
156
- expect(userSyncs).to.have.lengthOf(2);
160
+ expect(userSyncs).to.have.lengthOf(3);
157
161
  expect(userSyncs[0].type).to.equal('image');
158
162
  expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
159
163
  expect(userSyncs[1].type).to.equal('image');
160
164
  expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
165
+ expect(userSyncs[2].type).to.equal('image');
166
+ expect(userSyncs[2].url).to.equal('https://ms-cookie-sync.presage.io/xandr/init-sync?iab_string=&source=prebid')
161
167
  });
162
168
 
163
- it('should return syncs array with two elements of type image when consentString is null', () => {
169
+ it('should return syncs array with three elements of type image when consentString is null', () => {
164
170
  gdprConsent = {
165
171
  gdprApplies: true,
166
172
  consentString: null
167
173
  };
168
174
 
169
175
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
170
- expect(userSyncs).to.have.lengthOf(2);
176
+ expect(userSyncs).to.have.lengthOf(3);
171
177
  expect(userSyncs[0].type).to.equal('image');
172
178
  expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
173
179
  expect(userSyncs[1].type).to.equal('image');
174
180
  expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
181
+ expect(userSyncs[2].type).to.equal('image');
182
+ expect(userSyncs[2].url).to.equal('https://ms-cookie-sync.presage.io/xandr/init-sync?iab_string=&source=prebid')
175
183
  });
176
184
 
177
- it('should return syncs array with two elements of type image when gdprConsent is undefined', () => {
185
+ it('should return syncs array with three elements of type image when gdprConsent is undefined', () => {
178
186
  gdprConsent = undefined;
179
187
 
180
188
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
181
- expect(userSyncs).to.have.lengthOf(2);
189
+ expect(userSyncs).to.have.lengthOf(3);
182
190
  expect(userSyncs[0].type).to.equal('image');
183
191
  expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
184
192
  expect(userSyncs[1].type).to.equal('image');
185
193
  expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
194
+ expect(userSyncs[2].type).to.equal('image');
195
+ expect(userSyncs[2].url).to.equal('https://ms-cookie-sync.presage.io/xandr/init-sync?iab_string=&source=prebid')
186
196
  });
187
197
 
188
- it('should return syncs array with two elements of type image when gdprConsent is null', () => {
198
+ it('should return syncs array with three elements of type image when gdprConsent is null', () => {
189
199
  gdprConsent = null;
190
200
 
191
201
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
192
- expect(userSyncs).to.have.lengthOf(2);
202
+ expect(userSyncs).to.have.lengthOf(3);
193
203
  expect(userSyncs[0].type).to.equal('image');
194
204
  expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
195
205
  expect(userSyncs[1].type).to.equal('image');
196
206
  expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
207
+ expect(userSyncs[2].type).to.equal('image');
208
+ expect(userSyncs[2].url).to.equal('https://ms-cookie-sync.presage.io/xandr/init-sync?iab_string=&source=prebid')
197
209
  });
198
210
 
199
- it('should return syncs array with two elements of type image when gdprConsent is null and gdprApplies is false', () => {
211
+ it('should return syncs array with three elements of type image when gdprConsent is null and gdprApplies is false', () => {
200
212
  gdprConsent = {
201
213
  gdprApplies: false,
202
214
  consentString: null
203
215
  };
204
216
 
205
217
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
206
- expect(userSyncs).to.have.lengthOf(2);
218
+ expect(userSyncs).to.have.lengthOf(3);
207
219
  expect(userSyncs[0].type).to.equal('image');
208
220
  expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
209
221
  expect(userSyncs[1].type).to.equal('image');
210
222
  expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
223
+ expect(userSyncs[2].type).to.equal('image');
224
+ expect(userSyncs[2].url).to.equal('https://ms-cookie-sync.presage.io/xandr/init-sync?iab_string=&source=prebid')
211
225
  });
212
226
 
213
- it('should return syncs array with two elements of type image when gdprConsent is empty string and gdprApplies is false', () => {
227
+ it('should return syncs array with three elements of type image when gdprConsent is empty string and gdprApplies is false', () => {
214
228
  gdprConsent = {
215
229
  gdprApplies: false,
216
230
  consentString: ''
217
231
  };
218
232
 
219
233
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
220
- expect(userSyncs).to.have.lengthOf(2);
234
+ expect(userSyncs).to.have.lengthOf(3);
221
235
  expect(userSyncs[0].type).to.equal('image');
222
236
  expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
223
237
  expect(userSyncs[1].type).to.equal('image');
224
238
  expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
239
+ expect(userSyncs[2].type).to.equal('image');
240
+ expect(userSyncs[2].url).to.equal('https://ms-cookie-sync.presage.io/xandr/init-sync?iab_string=&source=prebid')
225
241
  });
226
242
  });
227
243
 
@@ -279,7 +295,7 @@ describe('OguryBidAdapter', function () {
279
295
  },
280
296
  ext: {
281
297
  prebidversion: '$prebid.version$',
282
- adapterversion: '1.2.13'
298
+ adapterversion: '1.3.0'
283
299
  },
284
300
  device: {
285
301
  w: stubbedWidth,
@@ -659,7 +675,7 @@ describe('OguryBidAdapter', function () {
659
675
  advertiserDomains: openRtbBidResponse.body.seatbid[0].bid[0].adomain
660
676
  },
661
677
  nurl: openRtbBidResponse.body.seatbid[0].bid[0].nurl,
662
- adapterVersion: '1.2.13',
678
+ adapterVersion: '1.3.0',
663
679
  prebidVersion: '$prebid.version$'
664
680
  }, {
665
681
  requestId: openRtbBidResponse.body.seatbid[0].bid[1].impid,
@@ -676,7 +692,7 @@ describe('OguryBidAdapter', function () {
676
692
  advertiserDomains: openRtbBidResponse.body.seatbid[0].bid[1].adomain
677
693
  },
678
694
  nurl: openRtbBidResponse.body.seatbid[0].bid[1].nurl,
679
- adapterVersion: '1.2.13',
695
+ adapterVersion: '1.3.0',
680
696
  prebidVersion: '$prebid.version$'
681
697
  }]
682
698
 
@@ -1466,6 +1466,30 @@ describe('S2S Adapter', function () {
1466
1466
  });
1467
1467
  });
1468
1468
 
1469
+ it('unregistered bidder should alias', function () {
1470
+ const adjustedConfig = utils.deepClone(CONFIG);
1471
+ adjustedConfig.bidders = 'bidderD'
1472
+ config.setConfig({ s2sConfig: adjustedConfig });
1473
+
1474
+ const aliasBidder = {
1475
+ bidder: 'bidderD',
1476
+ params: {
1477
+ unit: '10433394',
1478
+ }
1479
+ };
1480
+
1481
+ $$PREBID_GLOBAL$$.aliasBidder('mockBidder', aliasBidder.bidder);
1482
+
1483
+ const request = utils.deepClone(REQUEST);
1484
+ request.ad_units[0].bids = [aliasBidder];
1485
+ request.s2sConfig = adjustedConfig;
1486
+
1487
+ adapter.callBids(request, BID_REQUESTS, addBidResponse, done, ajax);
1488
+
1489
+ const requestBid = JSON.parse(server.requests[0].requestBody);
1490
+ expect(requestBid.ext.prebid.aliases).to.deep.equal({ bidderD: 'mockBidder' });
1491
+ });
1492
+
1469
1493
  it('adds dynamic aliases to request', function () {
1470
1494
  config.setConfig({ s2sConfig: CONFIG });
1471
1495
 
@@ -1,7 +1,7 @@
1
- import {expect} from 'chai';
2
- import {spec, checkVideoPlacement, _getDomainFromURL} from 'modules/pubmaticBidAdapter.js';
1
+ import { expect } from 'chai';
2
+ import { spec, checkVideoPlacement, _getDomainFromURL, assignDealTier } from 'modules/pubmaticBidAdapter.js';
3
3
  import * as utils from 'src/utils.js';
4
- import {config} from 'src/config.js';
4
+ import { config } from 'src/config.js';
5
5
  import { createEidsArray } from 'modules/userId/eids.js';
6
6
  import { bidderSettings } from 'src/bidderSettings.js';
7
7
  const constants = require('src/constants.json');
@@ -4063,9 +4063,64 @@ describe('PubMatic adapter', function () {
4063
4063
  expect(data.imp[0]['video']['h']).to.equal(videoBidRequests[0].mediaTypes.video.playerSize[1]);
4064
4064
  expect(data.imp[0]['video']['battr']).to.equal(undefined);
4065
4065
  });
4066
+
4067
+ describe('Assign Deal Tier (i.e. prebidDealPriority)', function () {
4068
+ let videoSeatBid, request, newBid;
4069
+ // let data = JSON.parse(request.data);
4070
+ beforeEach(function () {
4071
+ videoSeatBid = videoBidResponse.body.seatbid[0].bid[0];
4072
+ // const adpodValidOutstreamBidRequest = validOutstreamBidRequest.bids[0].mediaTypes.video.context = 'adpod';
4073
+ request = spec.buildRequests(bidRequests, validOutstreamBidRequest);
4074
+ newBid = {
4075
+ requestId: '47acc48ad47af5'
4076
+ };
4077
+ videoSeatBid.ext = videoSeatBid.ext || {};
4078
+ videoSeatBid.ext.video = videoSeatBid.ext.video || {};
4079
+ // videoBidRequests[0].mediaTypes.video = videoBidRequests[0].mediaTypes.video || {};
4080
+ });
4081
+
4082
+ it('should not assign video object if deal priority is missing', function () {
4083
+ assignDealTier(newBid, videoSeatBid, request);
4084
+ expect(newBid.video).to.equal(undefined);
4085
+ expect(newBid.video).to.not.exist;
4086
+ });
4087
+
4088
+ it('should not assign video object if context is not a adpod', function () {
4089
+ videoSeatBid.ext.prebiddealpriority = 5;
4090
+ assignDealTier(newBid, videoSeatBid, request);
4091
+ expect(newBid.video).to.equal(undefined);
4092
+ expect(newBid.video).to.not.exist;
4093
+ });
4094
+
4095
+ describe('when video deal tier object is present', function () {
4096
+ beforeEach(function () {
4097
+ videoSeatBid.ext.prebiddealpriority = 5;
4098
+ request.bidderRequest.bids[0].mediaTypes.video = {
4099
+ ...request.bidderRequest.bids[0].mediaTypes.video,
4100
+ context: 'adpod',
4101
+ maxduration: 50
4102
+ };
4103
+ });
4104
+
4105
+ it('should set video deal tier object, when maxduration is present in ext', function () {
4106
+ assignDealTier(newBid, videoSeatBid, request);
4107
+ expect(newBid.video.durationSeconds).to.equal(50);
4108
+ expect(newBid.video.context).to.equal('adpod');
4109
+ expect(newBid.video.dealTier).to.equal(5);
4110
+ });
4111
+
4112
+ it('should set video deal tier object, when duration is present in ext', function () {
4113
+ videoSeatBid.ext.video.duration = 20;
4114
+ assignDealTier(newBid, videoSeatBid, request);
4115
+ expect(newBid.video.durationSeconds).to.equal(20);
4116
+ expect(newBid.video.context).to.equal('adpod');
4117
+ expect(newBid.video.dealTier).to.equal(5);
4118
+ });
4119
+ });
4120
+ });
4066
4121
  });
4067
4122
 
4068
- describe('Marketplace params', function() {
4123
+ describe('Marketplace params', function () {
4069
4124
  let sandbox, utilsMock, newBidRequests, newBidResponses;
4070
4125
  beforeEach(() => {
4071
4126
  utilsMock = sinon.mock(utils);
@@ -4082,7 +4137,7 @@ describe('PubMatic adapter', function () {
4082
4137
  sandbox.restore();
4083
4138
  })
4084
4139
 
4085
- it('Should add bidder code as groupm for marketplace groupm response', function () {
4140
+ it('Should add bidder code as groupm for marketplace groupm response ', function () {
4086
4141
  let request = spec.buildRequests(newBidRequests, {
4087
4142
  auctionId: 'new-auction-id'
4088
4143
  });