prebid.js 6.0.0 → 6.4.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 (201) hide show
  1. package/.babelrc.js +1 -7
  2. package/.circleci/config.yml +1 -1
  3. package/README.md +1 -1
  4. package/browsers.json +13 -29
  5. package/gulpfile.js +88 -82
  6. package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
  7. package/karma.conf.maker.js +2 -2
  8. package/modules/33acrossBidAdapter.js +189 -102
  9. package/modules/adagioBidAdapter.js +1 -1
  10. package/modules/addefendBidAdapter.js +1 -0
  11. package/modules/adheseBidAdapter.js +7 -2
  12. package/modules/adkernelBidAdapter.js +147 -61
  13. package/modules/adlivetechBidAdapter.md +61 -0
  14. package/modules/adlooxAdServerVideo.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +4 -4
  16. package/modules/admanBidAdapter.js +1 -0
  17. package/modules/admixerBidAdapter.js +3 -2
  18. package/modules/adnuntiusBidAdapter.js +5 -2
  19. package/modules/adomikAnalyticsAdapter.js +16 -4
  20. package/modules/adplusBidAdapter.js +203 -0
  21. package/modules/adplusBidAdapter.md +39 -0
  22. package/modules/adxcgBidAdapter.js +311 -359
  23. package/modules/adxcgBidAdapter.md +22 -21
  24. package/modules/adyoulikeBidAdapter.js +7 -2
  25. package/modules/aniviewBidAdapter.js +1 -1
  26. package/modules/appnexusBidAdapter.js +23 -3
  27. package/modules/beachfrontBidAdapter.js +14 -17
  28. package/modules/beopBidAdapter.js +6 -4
  29. package/modules/bidViewability.js +3 -3
  30. package/modules/bidViewabilityIO.js +3 -3
  31. package/modules/codefuelBidAdapter.js +1 -3
  32. package/modules/codefuelBidAdapter.md +3 -3
  33. package/modules/colossussspBidAdapter.js +7 -0
  34. package/modules/compassBidAdapter.js +201 -0
  35. package/modules/compassBidAdapter.md +79 -0
  36. package/modules/craftBidAdapter.js +5 -3
  37. package/modules/criteoBidAdapter.js +1 -1
  38. package/modules/currency.js +2 -2
  39. package/modules/cwireBidAdapter.js +3 -0
  40. package/modules/dailyhuntBidAdapter.js +435 -0
  41. package/modules/dailyhuntBidAdapter.md +4 -0
  42. package/modules/datablocksBidAdapter.js +3 -3
  43. package/modules/dchain.js +149 -0
  44. package/modules/dchain.md +45 -0
  45. package/modules/deepintentBidAdapter.js +1 -1
  46. package/modules/dspxBidAdapter.js +1 -1
  47. package/modules/emx_digitalBidAdapter.js +9 -1
  48. package/modules/engageyaBidAdapter.js +68 -54
  49. package/modules/feedadBidAdapter.js +2 -2
  50. package/modules/feedadBidAdapter.md +4 -2
  51. package/modules/freewheel-sspBidAdapter.js +6 -0
  52. package/modules/futureads.md +48 -0
  53. package/modules/glimpseBidAdapter.js +44 -16
  54. package/modules/goldbachBidAdapter.js +1176 -0
  55. package/modules/goldbachBidAdapter.md +151 -0
  56. package/modules/gptPreAuction.js +11 -5
  57. package/modules/gridBidAdapter.js +5 -4
  58. package/modules/gumgumBidAdapter.js +7 -3
  59. package/modules/id5IdSystem.md +6 -6
  60. package/modules/imRtdProvider.js +31 -0
  61. package/modules/improvedigitalBidAdapter.js +19 -3
  62. package/modules/instreamTracking.js +4 -4
  63. package/modules/intersectionRtdProvider.js +114 -0
  64. package/modules/invibesBidAdapter.js +64 -14
  65. package/modules/invibesBidAdapter.md +2 -1
  66. package/modules/ipromBidAdapter.js +79 -0
  67. package/modules/ixBidAdapter.js +185 -22
  68. package/modules/kinessoIdSystem.js +1 -1
  69. package/modules/limelightDigitalBidAdapter.js +2 -1
  70. package/modules/livewrappedBidAdapter.js +8 -2
  71. package/modules/lotamePanoramaIdSystem.js +80 -8
  72. package/modules/luponmediaBidAdapter.js +570 -0
  73. package/modules/mediasquareBidAdapter.js +1 -9
  74. package/modules/merkleIdSystem.js +5 -0
  75. package/modules/missenaBidAdapter.js +89 -0
  76. package/modules/nativoBidAdapter.js +27 -1
  77. package/modules/nextMillenniumBidAdapter.js +37 -7
  78. package/modules/oguryBidAdapter.js +2 -1
  79. package/modules/openxBidAdapter.js +6 -1
  80. package/modules/prebidServerBidAdapter/index.js +19 -15
  81. package/modules/pubgeniusBidAdapter.js +1 -1
  82. package/modules/pubmaticBidAdapter.js +5 -3
  83. package/modules/pubxaiAnalyticsAdapter.js +17 -0
  84. package/modules/relaidoBidAdapter.js +86 -65
  85. package/modules/richaudienceBidAdapter.js +2 -3
  86. package/modules/rtdModule/index.js +48 -18
  87. package/modules/rubiconBidAdapter.js +31 -19
  88. package/modules/saambaaBidAdapter.js +420 -0
  89. package/modules/saambaaBidAdapter.md +65 -68
  90. package/modules/seedtagBidAdapter.js +6 -0
  91. package/modules/sharedIdSystem.js +27 -1
  92. package/modules/smaatoBidAdapter.js +9 -1
  93. package/modules/smartxBidAdapter.js +17 -1
  94. package/modules/sspBCBidAdapter.js +34 -3
  95. package/modules/tappxBidAdapter.js +3 -1
  96. package/modules/targetVideoBidAdapter.js +187 -0
  97. package/modules/targetVideoBidAdapter.md +34 -0
  98. package/modules/telariaBidAdapter.js +2 -2
  99. package/modules/trustxBidAdapter.js +18 -17
  100. package/modules/undertoneBidAdapter.js +8 -1
  101. package/modules/userId/index.js +27 -2
  102. package/modules/ventes.md +71 -0
  103. package/modules/ventesBidAdapter.js +104 -64
  104. package/modules/ventesBidAdapter.md +0 -1
  105. package/modules/vidoomyBidAdapter.js +65 -108
  106. package/modules/visxBidAdapter.js +20 -3
  107. package/modules/visxBidAdapter.md +4 -6
  108. package/modules/weboramaRtdProvider.js +288 -73
  109. package/modules/weboramaRtdProvider.md +27 -10
  110. package/modules/yahoosspBidAdapter.js +5 -1
  111. package/modules/yahoosspBidAdapter.md +1 -1
  112. package/modules/yieldlabBidAdapter.js +41 -10
  113. package/modules/yieldlabBidAdapter.md +91 -48
  114. package/modules/yieldoneBidAdapter.js +115 -11
  115. package/modules/zetaSspBidAdapter.md +33 -1
  116. package/modules/zeta_global_sspBidAdapter.js +22 -1
  117. package/package.json +6 -1
  118. package/plugins/pbjsGlobals.js +28 -1
  119. package/src/adapterManager.js +14 -8
  120. package/src/auction.js +5 -4
  121. package/src/prebid.js +1 -2
  122. package/src/targeting.js +24 -3
  123. package/src/utils.js +41 -7
  124. package/test/helpers/prebidGlobal.js +1 -0
  125. package/test/spec/integration/faker/googletag.js +6 -0
  126. package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
  127. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  128. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  129. package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
  130. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
  131. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  132. package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
  133. package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
  134. package/test/spec/modules/appnexusBidAdapter_spec.js +63 -1
  135. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  136. package/test/spec/modules/beopBidAdapter_spec.js +1 -1
  137. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  138. package/test/spec/modules/bidViewability_spec.js +4 -4
  139. package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
  140. package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
  141. package/test/spec/modules/compassBidAdapter_spec.js +397 -0
  142. package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
  143. package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
  144. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  145. package/test/spec/modules/dchain_spec.js +329 -0
  146. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  147. package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
  148. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  149. package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
  150. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  151. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  152. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  153. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  154. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  155. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  156. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
  157. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  158. package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
  159. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  160. package/test/spec/modules/ixBidAdapter_spec.js +293 -2
  161. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  162. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
  163. package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
  164. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
  165. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  166. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
  167. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  168. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  169. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  170. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
  171. package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
  172. package/test/spec/modules/openxBidAdapter_spec.js +5 -0
  173. package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
  174. package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
  175. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  176. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
  177. package/test/spec/modules/realTimeDataModule_spec.js +135 -49
  178. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  179. package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
  180. package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
  181. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  182. package/test/spec/modules/sharedIdSystem_spec.js +52 -6
  183. package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
  184. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  185. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  186. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  187. package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
  188. package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
  189. package/test/spec/modules/userId_spec.js +51 -0
  190. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  191. package/test/spec/modules/visxBidAdapter_spec.js +121 -5
  192. package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
  193. package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
  194. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  195. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  196. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
  197. package/test/spec/unit/core/adapterManager_spec.js +24 -6
  198. package/test/spec/unit/core/targeting_spec.js +116 -0
  199. package/test/spec/utils_spec.js +38 -0
  200. package/test/test_deps.js +3 -0
  201. package/test/test_index.js +1 -3
@@ -0,0 +1,412 @@
1
+ import { resetUserSync, spec, hasValidSupplyChainParams } from 'modules/luponmediaBidAdapter.js';
2
+ const ENDPOINT_URL = 'https://rtb.adxpremium.services/openrtb2/auction';
3
+
4
+ describe('luponmediaBidAdapter', function () {
5
+ describe('isBidRequestValid', function () {
6
+ let bid = {
7
+ 'bidder': 'luponmedia',
8
+ 'params': {
9
+ 'siteId': 12345,
10
+ 'keyId': '4o2c4'
11
+ },
12
+ 'adUnitCode': 'test-div',
13
+ 'sizes': [[300, 250]],
14
+ 'bidId': 'g1987234bjkads',
15
+ 'bidderRequestId': '290348ksdhkas89324',
16
+ 'auctionId': '20384rlek235',
17
+ };
18
+
19
+ it('should return true when required params are found', function () {
20
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
21
+ });
22
+
23
+ it('should return false when required params are not passed', function () {
24
+ let bid = Object.assign({}, bid);
25
+ delete bid.params;
26
+ bid.params = {
27
+ 'siteId': 12345
28
+ };
29
+ expect(spec.isBidRequestValid(bid)).to.equal(false);
30
+ });
31
+ });
32
+
33
+ describe('buildRequests', function () {
34
+ let bidRequests = [
35
+ {
36
+ 'bidder': 'luponmedia',
37
+ 'params': {
38
+ 'siteId': 303522,
39
+ 'keyId': '4o2c4'
40
+ },
41
+ 'crumbs': {
42
+ 'pubcid': '8d8b16cb-1383-4a0f-b4bb-0be28464d974'
43
+ },
44
+ 'mediaTypes': {
45
+ 'banner': {
46
+ 'sizes': [
47
+ [
48
+ 300,
49
+ 250
50
+ ]
51
+ ]
52
+ }
53
+ },
54
+ 'adUnitCode': 'div-gpt-ad-1533155193780-2',
55
+ 'transactionId': '585d96a5-bd93-4a89-b8ea-0f546f3aaa82',
56
+ 'sizes': [
57
+ [
58
+ 300,
59
+ 250
60
+ ]
61
+ ],
62
+ 'bidId': '268a30af10dd6f',
63
+ 'bidderRequestId': '140411b5010a2a',
64
+ 'auctionId': '7376c117-b7aa-49f5-a661-488543deeefd',
65
+ 'src': 'client',
66
+ 'bidRequestsCount': 1,
67
+ 'bidderRequestsCount': 1,
68
+ 'bidderWinsCount': 0,
69
+ 'schain': {
70
+ 'ver': '1.0',
71
+ 'complete': 1,
72
+ 'nodes': [
73
+ {
74
+ 'asi': 'novi.ba',
75
+ 'sid': '199424',
76
+ 'hp': 1
77
+ }
78
+ ]
79
+ }
80
+ }
81
+ ];
82
+
83
+ let bidderRequest = {
84
+ 'bidderCode': 'luponmedia',
85
+ 'auctionId': '7376c117-b7aa-49f5-a661-488543deeefd',
86
+ 'bidderRequestId': '140411b5010a2a',
87
+ 'bids': [
88
+ {
89
+ 'bidder': 'luponmedia',
90
+ 'params': {
91
+ 'siteId': 303522,
92
+ 'keyId': '4o2c4'
93
+ },
94
+ 'crumbs': {
95
+ 'pubcid': '8d8b16cb-1383-4a0f-b4bb-0be28464d974'
96
+ },
97
+ 'mediaTypes': {
98
+ 'banner': {
99
+ 'sizes': [
100
+ [
101
+ 300,
102
+ 250
103
+ ]
104
+ ]
105
+ }
106
+ },
107
+ 'adUnitCode': 'div-gpt-ad-1533155193780-2',
108
+ 'transactionId': '585d96a5-bd93-4a89-b8ea-0f546f3aaa82',
109
+ 'sizes': [
110
+ [
111
+ 300,
112
+ 250
113
+ ]
114
+ ],
115
+ 'bidId': '268a30af10dd6f',
116
+ 'bidderRequestId': '140411b5010a2a',
117
+ 'auctionId': '7376c117-b7aa-49f5-a661-488543deeefd',
118
+ 'src': 'client',
119
+ 'bidRequestsCount': 1,
120
+ 'bidderRequestsCount': 1,
121
+ 'bidderWinsCount': 0,
122
+ 'schain': {
123
+ 'ver': '1.0',
124
+ 'complete': 1,
125
+ 'nodes': [
126
+ {
127
+ 'asi': 'novi.ba',
128
+ 'sid': '199424',
129
+ 'hp': 1
130
+ }
131
+ ]
132
+ }
133
+ }
134
+ ],
135
+ 'auctionStart': 1587413920820,
136
+ 'timeout': 2000,
137
+ 'refererInfo': {
138
+ 'referer': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines',
139
+ 'reachedTop': true,
140
+ 'numIframes': 0,
141
+ 'stack': [
142
+ 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines'
143
+ ]
144
+ },
145
+ 'start': 1587413920835
146
+ };
147
+
148
+ it('sends bid request to ENDPOINT via POST', function () {
149
+ const requests = spec.buildRequests(bidRequests, bidderRequest);
150
+ let dynRes = JSON.parse(requests.data);
151
+ expect(requests.url).to.equal(ENDPOINT_URL);
152
+ expect(requests.method).to.equal('POST');
153
+ expect(requests.data).to.equal('{"id":"585d96a5-bd93-4a89-b8ea-0f546f3aaa82","test":0,"source":{"tid":"585d96a5-bd93-4a89-b8ea-0f546f3aaa82","ext":{"schain":{"ver":"1.0","complete":1,"nodes":[{"asi":"novi.ba","sid":"199424","hp":1}]}}},"tmax":1500,"imp":[{"id":"268a30af10dd6f","secure":1,"ext":{"luponmedia":{"siteId":303522,"keyId":"4o2c4"}},"banner":{"format":[{"w":300,"h":250}]}}],"ext":{"prebid":{"targeting":{"includewinners":true,"includebidderkeys":false}}},"user":{"id":"' + dynRes.user.id + '","buyeruid":"8d8b16cb-1383-4a0f-b4bb-0be28464d974"},"site":{"page":"https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines"}}');
154
+ });
155
+ });
156
+
157
+ describe('interpretResponse', function () {
158
+ it('should get correct banner bid response', function () {
159
+ let response = {
160
+ 'id': '4776d680-15a2-45c3-bad5-db6bebd94a06',
161
+ 'seatbid': [
162
+ {
163
+ 'bid': [
164
+ {
165
+ 'id': '2a122246ef72ea',
166
+ 'impid': '2a122246ef72ea',
167
+ 'price': 0.43,
168
+ 'adm': '<a href="https://novi.ba" target="_blank" style="position:absolute; width:300px; height:250px; z-index:5;"> </a><iframe src="https://lupon.media/vijestiba/300x250new/index.html" height="250" width="300" scrolling="no" frameborder="0"></iframe>',
169
+ 'adid': '56380110',
170
+ 'cid': '44724710',
171
+ 'crid': '443801010',
172
+ 'w': 300,
173
+ 'h': 250,
174
+ 'ext': {
175
+ 'prebid': {
176
+ 'targeting': {
177
+ 'hb_bidder': 'luponmedia',
178
+ 'hb_pb': '0.40',
179
+ 'hb_size': '300x250'
180
+ },
181
+ 'type': 'banner'
182
+ }
183
+ }
184
+ }
185
+ ],
186
+ 'seat': 'luponmedia'
187
+ }
188
+ ],
189
+ 'cur': 'USD',
190
+ 'ext': {
191
+ 'responsetimemillis': {
192
+ 'luponmedia': 233
193
+ },
194
+ 'tmaxrequest': 1500,
195
+ 'usersyncs': {
196
+ 'status': 'ok',
197
+ 'bidder_status': []
198
+ }
199
+ }
200
+ };
201
+
202
+ let expectedResponse = [
203
+ {
204
+ 'requestId': '2a122246ef72ea',
205
+ 'cpm': '0.43',
206
+ 'width': 300,
207
+ 'height': 250,
208
+ 'creativeId': '443801010',
209
+ 'currency': 'USD',
210
+ 'dealId': '23425',
211
+ 'netRevenue': false,
212
+ 'ttl': 300,
213
+ 'referrer': '',
214
+ 'ad': '<a href="https://novi.ba" target="_blank" style="position:absolute; width:300px; height:250px; z-index:5;"> </a><iframe src="https://lupon.media/vijestiba/300x250new/index.html" height="250" width="300" scrolling="no" frameborder="0"></iframe>'
215
+ }
216
+ ];
217
+
218
+ let bidderRequest = {
219
+ 'data': '{"site":{"page":"https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines"}}'
220
+ };
221
+
222
+ let result = spec.interpretResponse({ body: response }, bidderRequest);
223
+ expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0]));
224
+ });
225
+
226
+ it('handles nobid responses', function () {
227
+ let noBidResponse = [];
228
+
229
+ let noBidBidderRequest = {
230
+ 'data': '{"site":{"page":""}}'
231
+ }
232
+ let noBidResult = spec.interpretResponse({ body: noBidResponse }, noBidBidderRequest);
233
+ expect(noBidResult.length).to.equal(0);
234
+ });
235
+ });
236
+
237
+ describe('getUserSyncs', function () {
238
+ const bidResponse1 = {
239
+ 'body': {
240
+ 'ext': {
241
+ 'responsetimemillis': {
242
+ 'luponmedia': 233
243
+ },
244
+ 'tmaxrequest': 1500,
245
+ 'usersyncs': {
246
+ 'status': 'ok',
247
+ 'bidder_status': [
248
+ {
249
+ 'bidder': 'luponmedia',
250
+ 'no_cookie': true,
251
+ 'usersync': {
252
+ 'url': 'https://adxpremium.services/api/usersync',
253
+ 'type': 'redirect'
254
+ }
255
+ },
256
+ {
257
+ 'bidder': 'luponmedia',
258
+ 'no_cookie': true,
259
+ 'usersync': {
260
+ 'url': 'https://adxpremium.services/api/iframeusersync',
261
+ 'type': 'iframe'
262
+ }
263
+ }
264
+ ]
265
+ }
266
+ }
267
+ }
268
+ };
269
+
270
+ const bidResponse2 = {
271
+ 'body': {
272
+ 'ext': {
273
+ 'responsetimemillis': {
274
+ 'luponmedia': 233
275
+ },
276
+ 'tmaxrequest': 1500,
277
+ 'usersyncs': {
278
+ 'status': 'no_cookie',
279
+ 'bidder_status': []
280
+ }
281
+ }
282
+ }
283
+ };
284
+
285
+ it('should use a sync url from first response (pixel and iframe)', function () {
286
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, [bidResponse1, bidResponse2]);
287
+ expect(syncs).to.deep.equal([
288
+ {
289
+ type: 'image',
290
+ url: 'https://adxpremium.services/api/usersync'
291
+ },
292
+ {
293
+ type: 'iframe',
294
+ url: 'https://adxpremium.services/api/iframeusersync'
295
+ }
296
+ ]);
297
+ });
298
+
299
+ it('handle empty response (e.g. timeout)', function () {
300
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, []);
301
+ expect(syncs).to.deep.equal([]);
302
+ });
303
+
304
+ it('returns empty syncs when not pixel enabled and not iframe enabled', function () {
305
+ const syncs = spec.getUserSyncs({ pixelEnabled: false, iframeEnabled: false }, [bidResponse1]);
306
+ expect(syncs).to.deep.equal([]);
307
+ });
308
+
309
+ it('returns pixel syncs when pixel enabled and not iframe enabled', function() {
310
+ resetUserSync();
311
+
312
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: false }, [bidResponse1]);
313
+ expect(syncs).to.deep.equal([
314
+ {
315
+ type: 'image',
316
+ url: 'https://adxpremium.services/api/usersync'
317
+ }
318
+ ]);
319
+ });
320
+
321
+ it('returns iframe syncs when not pixel enabled and iframe enabled', function() {
322
+ resetUserSync();
323
+
324
+ const syncs = spec.getUserSyncs({ pixelEnabled: false, iframeEnabled: true }, [bidResponse1]);
325
+ expect(syncs).to.deep.equal([
326
+ {
327
+ type: 'iframe',
328
+ url: 'https://adxpremium.services/api/iframeusersync'
329
+ }
330
+ ]);
331
+ });
332
+ });
333
+
334
+ describe('hasValidSupplyChainParams', function () {
335
+ it('returns true if schain is valid', function () {
336
+ const schain = {
337
+ 'ver': '1.0',
338
+ 'complete': 1,
339
+ 'nodes': [
340
+ {
341
+ 'asi': 'novi.ba',
342
+ 'sid': '199424',
343
+ 'hp': 1
344
+ }
345
+ ]
346
+ };
347
+
348
+ const checkSchain = hasValidSupplyChainParams(schain);
349
+ expect(checkSchain).to.equal(true);
350
+ });
351
+
352
+ it('returns false if schain is invalid', function () {
353
+ const schain = {
354
+ 'ver': '1.0',
355
+ 'complete': 1,
356
+ 'nodes': [
357
+ {
358
+ 'invalid': 'novi.ba'
359
+ }
360
+ ]
361
+ };
362
+
363
+ const checkSchain = hasValidSupplyChainParams(schain);
364
+ expect(checkSchain).to.equal(false);
365
+ });
366
+ });
367
+
368
+ describe('onBidWon', function () {
369
+ const bidWonEvent = {
370
+ 'bidderCode': 'luponmedia',
371
+ 'width': 300,
372
+ 'height': 250,
373
+ 'statusMessage': 'Bid available',
374
+ 'adId': '105bbf8c54453ff',
375
+ 'requestId': '934b8752185955',
376
+ 'mediaType': 'banner',
377
+ 'source': 'client',
378
+ 'cpm': 0.364,
379
+ 'creativeId': '443801010',
380
+ 'currency': 'USD',
381
+ 'netRevenue': false,
382
+ 'ttl': 300,
383
+ 'referrer': '',
384
+ 'ad': '',
385
+ 'auctionId': '926a8ea3-3dd4-4bf2-95ab-c85c2ce7e99b',
386
+ 'responseTimestamp': 1598527728026,
387
+ 'requestTimestamp': 1598527727629,
388
+ 'bidder': 'luponmedia',
389
+ 'adUnitCode': 'div-gpt-ad-1533155193780-5',
390
+ 'timeToRespond': 397,
391
+ 'size': '300x250',
392
+ 'status': 'rendered'
393
+ };
394
+
395
+ let ajaxStub;
396
+
397
+ beforeEach(() => {
398
+ ajaxStub = sinon.stub(spec, 'sendWinningsToServer')
399
+ })
400
+
401
+ afterEach(() => {
402
+ ajaxStub.restore()
403
+ })
404
+
405
+ it('calls luponmedia\'s callback endpoint', () => {
406
+ const result = spec.onBidWon(bidWonEvent);
407
+ expect(result).to.equal(undefined);
408
+ expect(ajaxStub.calledOnce).to.equal(true);
409
+ expect(ajaxStub.firstCall.args[0]).to.deep.equal(JSON.stringify(bidWonEvent));
410
+ });
411
+ });
412
+ });
@@ -167,7 +167,7 @@ describe('MediaSquare bid adapter tests', function () {
167
167
  });
168
168
  it('Verifies user sync without cookie in bid response', function () {
169
169
  var syncs = spec.getUserSyncs({}, [BID_RESPONSE], DEFAULT_OPTIONS.gdprConsent, DEFAULT_OPTIONS.uspConsent);
170
- expect(syncs).to.have.property('type').and.to.equal('iframe');
170
+ expect(syncs).to.have.lengthOf(0);
171
171
  });
172
172
  it('Verifies user sync with cookies in bid response', function () {
173
173
  BID_RESPONSE.body.cookies = [{'type': 'image', 'url': 'http://www.cookie.sync.org/'}];
@@ -178,13 +178,13 @@ describe('MediaSquare bid adapter tests', function () {
178
178
  });
179
179
  it('Verifies user sync with no bid response', function() {
180
180
  var syncs = spec.getUserSyncs({}, null, DEFAULT_OPTIONS.gdprConsent, DEFAULT_OPTIONS.uspConsent);
181
- expect(syncs).to.have.property('type').and.to.equal('iframe');
181
+ expect(syncs).to.have.lengthOf(0);
182
182
  });
183
183
  it('Verifies user sync with no bid body response', function() {
184
184
  var syncs = spec.getUserSyncs({}, [], DEFAULT_OPTIONS.gdprConsent, DEFAULT_OPTIONS.uspConsent);
185
- expect(syncs).to.have.property('type').and.to.equal('iframe');
185
+ expect(syncs).to.have.lengthOf(0);
186
186
  var syncs = spec.getUserSyncs({}, [{}], DEFAULT_OPTIONS.gdprConsent, DEFAULT_OPTIONS.uspConsent);
187
- expect(syncs).to.have.property('type').and.to.equal('iframe');
187
+ expect(syncs).to.have.lengthOf(0);
188
188
  });
189
189
  it('Verifies native in bid response', function () {
190
190
  const request = spec.buildRequests(NATIVE_PARAMS, DEFAULT_OPTIONS);
@@ -192,6 +192,24 @@ describe('Merkle System', function () {
192
192
 
193
193
  expect(id.id).to.exist.and.to.equal(storedId);
194
194
  });
195
+ it('extendId() should warn on missing endpoint', function () {
196
+ let config = {
197
+ params: {
198
+ ...CONFIG_PARAMS,
199
+ endpoint: undefined
200
+ },
201
+ storage: STORAGE_PARAMS
202
+ };
203
+
204
+ let yesterday = new Date(Date.now() - 86400000).toUTCString();
205
+ let storedId = {value: 'Merkle_Stored_ID', date: yesterday};
206
+
207
+ let submoduleCallback = merkleIdSubmodule.extendId(config, undefined,
208
+ storedId).callback;
209
+ submoduleCallback(callbackSpy);
210
+ expect(callbackSpy.calledOnce).to.be.true;
211
+ expect(utils.logWarn.args[0][0]).to.exist.and.to.equal('User ID - merkleId submodule endpoint string is not defined');
212
+ });
195
213
 
196
214
  it('extendId() callback on configured storageParam.refreshInSeconds', function () {
197
215
  let config = {
@@ -0,0 +1,134 @@
1
+ import { expect } from 'chai';
2
+ import { spec, _getPlatform } from 'modules/missenaBidAdapter.js';
3
+ import { newBidder } from 'src/adapters/bidderFactory.js';
4
+
5
+ describe('Missena Adapter', function () {
6
+ const adapter = newBidder(spec);
7
+
8
+ const bidId = 'abc';
9
+
10
+ const bid = {
11
+ bidder: 'missena',
12
+ bidId: bidId,
13
+ sizes: [[1, 1]],
14
+ params: {
15
+ apiKey: 'PA-34745704',
16
+ },
17
+ };
18
+
19
+ describe('codes', function () {
20
+ it('should return a bidder code of missena', function () {
21
+ expect(spec.code).to.equal('missena');
22
+ });
23
+ });
24
+
25
+ describe('isBidRequestValid', function () {
26
+ it('should return true if the apiKey param is present', function () {
27
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
28
+ });
29
+
30
+ it('should return false if the apiKey is missing', function () {
31
+ expect(
32
+ spec.isBidRequestValid(Object.assign(bid, { params: {} }))
33
+ ).to.equal(false);
34
+ });
35
+
36
+ it('should return false if the apiKey is an empty string', function () {
37
+ expect(
38
+ spec.isBidRequestValid(Object.assign(bid, { params: { apiKey: '' } }))
39
+ ).to.equal(false);
40
+ });
41
+ });
42
+
43
+ describe('buildRequests', function () {
44
+ const consentString = 'AAAAAAAAA==';
45
+
46
+ const bidderRequest = {
47
+ gdprConsent: {
48
+ consentString: consentString,
49
+ gdprApplies: true,
50
+ },
51
+ refererInfo: {
52
+ referer: 'https://referer',
53
+ canonicalUrl: 'https://canonical',
54
+ },
55
+ };
56
+
57
+ const requests = spec.buildRequests([bid, bid], bidderRequest);
58
+ const request = requests[0];
59
+ const payload = JSON.parse(request.data);
60
+
61
+ it('should return as many server requests as bidder requests', function () {
62
+ expect(requests.length).to.equal(2);
63
+ });
64
+
65
+ it('should have a post method', function () {
66
+ expect(request.method).to.equal('POST');
67
+ });
68
+
69
+ it('should send the bidder id', function () {
70
+ expect(payload.request_id).to.equal(bidId);
71
+ });
72
+
73
+ it('should send referer information to the request', function () {
74
+ expect(payload.referer).to.equal('https://referer');
75
+ expect(payload.referer_canonical).to.equal('https://canonical');
76
+ });
77
+
78
+ it('should send gdpr consent information to the request', function () {
79
+ expect(payload.consent_string).to.equal(consentString);
80
+ expect(payload.consent_required).to.equal(true);
81
+ });
82
+ });
83
+
84
+ describe('interpretResponse', function () {
85
+ const serverResponse = {
86
+ requestId: bidId,
87
+ cpm: 0.5,
88
+ currency: 'USD',
89
+ ad: '<!-- -->',
90
+ meta: {
91
+ advertiserDomains: ['missena.com']
92
+ },
93
+ };
94
+
95
+ const serverTimeoutResponse = {
96
+ requestId: bidId,
97
+ timeout: true,
98
+ ad: '<!-- -->',
99
+ };
100
+
101
+ const serverEmptyAdResponse = {
102
+ requestId: bidId,
103
+ cpm: 0.5,
104
+ currency: 'USD',
105
+ ad: '',
106
+ };
107
+
108
+ it('should return a proper bid response', function () {
109
+ const result = spec.interpretResponse({ body: serverResponse }, bid);
110
+
111
+ expect(result.length).to.equal(1);
112
+
113
+ expect(Object.keys(result[0])).to.have.members(
114
+ Object.keys(serverResponse)
115
+ );
116
+ });
117
+
118
+ it('should return an empty response when the server answers with a timeout', function () {
119
+ const result = spec.interpretResponse(
120
+ { body: serverTimeoutResponse },
121
+ bid
122
+ );
123
+ expect(result).to.deep.equal([]);
124
+ });
125
+
126
+ it('should return an empty response when the server answers with an empty ad', function () {
127
+ const result = spec.interpretResponse(
128
+ { body: serverEmptyAdResponse },
129
+ bid
130
+ );
131
+ expect(result).to.deep.equal([]);
132
+ });
133
+ });
134
+ });
@@ -8,29 +8,46 @@ import { spec } from 'modules/nativoBidAdapter.js'
8
8
  describe('nativoBidAdapterTests', function () {
9
9
  describe('isBidRequestValid', function () {
10
10
  let bid = {
11
- bidder: 'nativo',
12
- params: {
13
- placementId: '10433394',
14
- },
15
- adUnitCode: 'adunit-code',
16
- sizes: [
17
- [300, 250],
18
- [300, 600],
19
- ],
20
- bidId: '27b02036ccfa6e',
21
- bidderRequestId: '1372cd8bd8d6a8',
22
- auctionId: 'cfc467e4-2707-48da-becb-bcaab0b2c114',
11
+ bidder: 'nativo'
23
12
  }
24
13
 
25
- it('should return true when required params found', function () {
14
+ it('should return true if no params found', function () {
15
+ expect(spec.isBidRequestValid(bid)).to.equal(true)
16
+ })
17
+
18
+ it('should return true for valid placementId value', function () {
19
+ bid.params = {
20
+ placementId: '10433394',
21
+ }
22
+ expect(spec.isBidRequestValid(bid)).to.equal(true)
23
+ })
24
+
25
+ it('should return true for valid placementId value', function () {
26
+ bid.params = {
27
+ placementId: 10433394,
28
+ }
29
+ expect(spec.isBidRequestValid(bid)).to.equal(true)
30
+ })
31
+
32
+ it('should return false for invalid placementId value', function () {
33
+ bid.params = {
34
+ placementId: true,
35
+ }
36
+ expect(spec.isBidRequestValid(bid)).to.equal(false)
37
+ })
38
+
39
+ it('should return true for valid placementId value', function () {
40
+ bid.params = {
41
+ url: 'www.test.com',
42
+ }
26
43
  expect(spec.isBidRequestValid(bid)).to.equal(true)
27
44
  })
28
45
 
29
- it('should return true when params are not passed', function () {
30
- let bid2 = Object.assign({}, bid)
31
- delete bid2.params
32
- bid2.params = {}
33
- expect(spec.isBidRequestValid(bid2)).to.equal(true)
46
+ it('should return false for invalid placementId value', function () {
47
+ bid.params = {
48
+ url: 4567890,
49
+ }
50
+ expect(spec.isBidRequestValid(bid)).to.equal(false)
34
51
  })
35
52
  })
36
53