prebid.js 6.1.0 → 6.5.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 (184) hide show
  1. package/.circleci/config.yml +1 -1
  2. package/README.md +1 -1
  3. package/browsers.json +13 -29
  4. package/gulpfile.js +87 -82
  5. package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
  6. package/karma.conf.maker.js +2 -2
  7. package/modules/33acrossBidAdapter.js +189 -102
  8. package/modules/adagioBidAdapter.js +1 -1
  9. package/modules/addefendBidAdapter.js +1 -0
  10. package/modules/adkernelBidAdapter.js +146 -61
  11. package/modules/adlooxAdServerVideo.js +2 -2
  12. package/modules/adlooxAnalyticsAdapter.js +4 -4
  13. package/modules/admanBidAdapter.js +1 -0
  14. package/modules/admixerBidAdapter.js +3 -2
  15. package/modules/adnuntiusBidAdapter.js +5 -2
  16. package/modules/adomikAnalyticsAdapter.js +6 -0
  17. package/modules/adplusBidAdapter.js +203 -0
  18. package/modules/adplusBidAdapter.md +39 -0
  19. package/modules/adxcgBidAdapter.js +311 -359
  20. package/modules/adxcgBidAdapter.md +22 -21
  21. package/modules/adyoulikeBidAdapter.js +20 -11
  22. package/modules/aniviewBidAdapter.js +1 -1
  23. package/modules/appnexusBidAdapter.js +19 -3
  24. package/modules/beachfrontBidAdapter.js +14 -17
  25. package/modules/beopBidAdapter.js +6 -4
  26. package/modules/bidViewability.js +3 -3
  27. package/modules/bidViewabilityIO.js +3 -3
  28. package/modules/bliinkBidAdapter.js +1 -1
  29. package/modules/colossussspBidAdapter.js +7 -0
  30. package/modules/compassBidAdapter.js +201 -0
  31. package/modules/compassBidAdapter.md +79 -0
  32. package/modules/consentManagement.js +7 -1
  33. package/modules/craftBidAdapter.js +5 -3
  34. package/modules/criteoBidAdapter.js +1 -1
  35. package/modules/currency.js +2 -2
  36. package/modules/cwireBidAdapter.js +3 -0
  37. package/modules/dailyhuntBidAdapter.js +435 -0
  38. package/modules/dailyhuntBidAdapter.md +4 -0
  39. package/modules/dchain.js +149 -0
  40. package/modules/dchain.md +45 -0
  41. package/modules/docereeBidAdapter.js +10 -1
  42. package/modules/docereeBidAdapter.md +2 -0
  43. package/modules/dspxBidAdapter.js +1 -1
  44. package/modules/emx_digitalBidAdapter.js +9 -1
  45. package/modules/engageyaBidAdapter.js +1 -1
  46. package/modules/feedadBidAdapter.js +2 -2
  47. package/modules/feedadBidAdapter.md +4 -2
  48. package/modules/freewheel-sspBidAdapter.js +6 -0
  49. package/modules/futureads.md +48 -0
  50. package/modules/glimpseBidAdapter.js +16 -3
  51. package/modules/goldbachBidAdapter.js +1176 -0
  52. package/modules/goldbachBidAdapter.md +151 -0
  53. package/modules/gptPreAuction.js +55 -7
  54. package/modules/gridBidAdapter.js +4 -3
  55. package/modules/gumgumBidAdapter.js +7 -3
  56. package/modules/improvedigitalBidAdapter.js +19 -3
  57. package/modules/instreamTracking.js +4 -4
  58. package/modules/intersectionRtdProvider.js +114 -0
  59. package/modules/invibesBidAdapter.js +64 -14
  60. package/modules/invibesBidAdapter.md +2 -1
  61. package/modules/ipromBidAdapter.js +79 -0
  62. package/modules/ixBidAdapter.js +53 -18
  63. package/modules/kinessoIdSystem.js +1 -1
  64. package/modules/limelightDigitalBidAdapter.js +3 -1
  65. package/modules/livewrappedAnalyticsAdapter.js +3 -1
  66. package/modules/livewrappedBidAdapter.js +8 -2
  67. package/modules/loglyliftBidAdapter.js +79 -0
  68. package/modules/loglyliftBidAdapter.md +55 -0
  69. package/modules/lotamePanoramaIdSystem.js +80 -8
  70. package/modules/luponmediaBidAdapter.js +570 -0
  71. package/modules/mediasquareBidAdapter.js +1 -9
  72. package/modules/missenaBidAdapter.js +89 -0
  73. package/modules/nextMillenniumBidAdapter.js +37 -7
  74. package/modules/optimeraRtdProvider.js +8 -1
  75. package/modules/ozoneBidAdapter.js +21 -64
  76. package/modules/prebidServerBidAdapter/index.js +16 -12
  77. package/modules/pubgeniusBidAdapter.js +1 -1
  78. package/modules/pubmaticBidAdapter.js +3 -3
  79. package/modules/pubxaiAnalyticsAdapter.js +17 -0
  80. package/modules/relaidoBidAdapter.js +86 -65
  81. package/modules/richaudienceBidAdapter.js +2 -3
  82. package/modules/rtdModule/index.js +48 -18
  83. package/modules/rubiconBidAdapter.js +31 -19
  84. package/modules/sharedIdSystem.js +27 -1
  85. package/modules/smaatoBidAdapter.js +4 -1
  86. package/modules/smartxBidAdapter.js +17 -1
  87. package/modules/tappxBidAdapter.js +3 -1
  88. package/modules/targetVideoBidAdapter.js +187 -0
  89. package/modules/targetVideoBidAdapter.md +34 -0
  90. package/modules/telariaBidAdapter.js +2 -2
  91. package/modules/trustxBidAdapter.js +8 -16
  92. package/modules/undertoneBidAdapter.js +8 -1
  93. package/modules/userId/index.js +27 -2
  94. package/modules/ventes.md +71 -0
  95. package/modules/ventesBidAdapter.js +104 -64
  96. package/modules/ventesBidAdapter.md +0 -1
  97. package/modules/vidoomyBidAdapter.js +16 -10
  98. package/modules/visxBidAdapter.js +19 -2
  99. package/modules/visxBidAdapter.md +4 -6
  100. package/modules/weboramaRtdProvider.js +288 -73
  101. package/modules/weboramaRtdProvider.md +27 -10
  102. package/modules/yahoosspBidAdapter.js +5 -1
  103. package/modules/yahoosspBidAdapter.md +1 -1
  104. package/modules/yieldmoBidAdapter.js +23 -5
  105. package/modules/yieldoneBidAdapter.js +115 -11
  106. package/modules/zetaSspBidAdapter.md +33 -1
  107. package/modules/zeta_global_sspAnalyticsAdapter.js +97 -0
  108. package/modules/zeta_global_sspAnalyticsAdapter.md +24 -0
  109. package/modules/zeta_global_sspBidAdapter.js +22 -1
  110. package/package.json +1 -1
  111. package/plugins/pbjsGlobals.js +28 -1
  112. package/src/auction.js +5 -4
  113. package/src/config.js +27 -3
  114. package/src/prebid.js +3 -2
  115. package/src/targeting.js +24 -3
  116. package/src/utils.js +53 -8
  117. package/test/helpers/prebidGlobal.js +1 -0
  118. package/test/spec/config_spec.js +279 -0
  119. package/test/spec/integration/faker/googletag.js +6 -0
  120. package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
  121. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  122. package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
  123. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +6 -0
  124. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  125. package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
  126. package/test/spec/modules/adyoulikeBidAdapter_spec.js +75 -0
  127. package/test/spec/modules/appnexusBidAdapter_spec.js +49 -1
  128. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  129. package/test/spec/modules/beopBidAdapter_spec.js +1 -1
  130. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  131. package/test/spec/modules/bidViewability_spec.js +4 -4
  132. package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
  133. package/test/spec/modules/compassBidAdapter_spec.js +397 -0
  134. package/test/spec/modules/consentManagement_spec.js +20 -0
  135. package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
  136. package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
  137. package/test/spec/modules/dchain_spec.js +329 -0
  138. package/test/spec/modules/docereeBidAdapter_spec.js +9 -1
  139. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  140. package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
  141. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  142. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  143. package/test/spec/modules/gptPreAuction_spec.js +177 -2
  144. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  145. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
  146. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  147. package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
  148. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  149. package/test/spec/modules/ixBidAdapter_spec.js +112 -62
  150. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +84 -23
  151. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +22 -0
  152. package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
  153. package/test/spec/modules/loglyliftBidAdapter_spec.js +172 -0
  154. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
  155. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  156. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
  157. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  158. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
  159. package/test/spec/modules/optimeraRtdProvider_spec.js +14 -1
  160. package/test/spec/modules/ozoneBidAdapter_spec.js +43 -31
  161. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -0
  162. package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
  163. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  164. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
  165. package/test/spec/modules/realTimeDataModule_spec.js +135 -49
  166. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  167. package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
  168. package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
  169. package/test/spec/modules/sharedIdSystem_spec.js +52 -6
  170. package/test/spec/modules/smaatoBidAdapter_spec.js +31 -0
  171. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  172. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  173. package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
  174. package/test/spec/modules/userId_spec.js +51 -0
  175. package/test/spec/modules/visxBidAdapter_spec.js +120 -4
  176. package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
  177. package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
  178. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  179. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +427 -0
  180. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
  181. package/test/spec/unit/core/targeting_spec.js +116 -0
  182. package/test/spec/utils_spec.js +38 -0
  183. package/test/test_deps.js +3 -0
  184. package/test/test_index.js +1 -3
@@ -0,0 +1,427 @@
1
+ import zetaAnalyticsAdapter from 'modules/zeta_global_sspAnalyticsAdapter.js';
2
+ import {config} from 'src/config';
3
+ import CONSTANTS from 'src/constants.json';
4
+ import {logError} from '../../../src/utils';
5
+
6
+ let utils = require('src/utils');
7
+ let events = require('src/events');
8
+
9
+ const MOCK = {
10
+ STUB: {
11
+ 'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa'
12
+ },
13
+ AUCTION_END: {
14
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
15
+ 'timestamp': 1638441234544,
16
+ 'auctionEnd': 1638441234784,
17
+ 'auctionStatus': 'completed',
18
+ 'adUnits': [
19
+ {
20
+ 'code': '/19968336/header-bid-tag-0',
21
+ 'mediaTypes': {
22
+ 'banner': {
23
+ 'sizes': [
24
+ [
25
+ 300,
26
+ 250
27
+ ],
28
+ [
29
+ 300,
30
+ 600
31
+ ]
32
+ ]
33
+ }
34
+ },
35
+ 'bids': [
36
+ {
37
+ 'bidder': 'zeta_global_ssp',
38
+ 'params': {
39
+ 'sid': 111,
40
+ 'tags': {
41
+ 'shortname': 'prebid_analytics_event_test_shortname',
42
+ 'position': 'test_position'
43
+ }
44
+ }
45
+ },
46
+ {
47
+ 'bidder': 'appnexus',
48
+ 'params': {
49
+ 'placementId': 13232385
50
+ }
51
+ }
52
+ ],
53
+ 'sizes': [
54
+ [
55
+ 300,
56
+ 250
57
+ ],
58
+ [
59
+ 300,
60
+ 600
61
+ ]
62
+ ],
63
+ 'transactionId': '6b29369c-0c2e-414e-be1f-5867aec18d83'
64
+ }
65
+ ],
66
+ 'adUnitCodes': [
67
+ '/19968336/header-bid-tag-0'
68
+ ],
69
+ 'bidderRequests': [
70
+ {
71
+ 'bidderCode': 'zeta_global_ssp',
72
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
73
+ 'bidderRequestId': '1207cb49191887',
74
+ 'bids': [
75
+ {
76
+ 'bidder': 'zeta_global_ssp',
77
+ 'params': {
78
+ 'sid': 111,
79
+ 'tags': {
80
+ 'shortname': 'prebid_analytics_event_test_shortname',
81
+ 'position': 'test_position'
82
+ }
83
+ },
84
+ 'mediaTypes': {
85
+ 'banner': {
86
+ 'sizes': [
87
+ [
88
+ 300,
89
+ 250
90
+ ],
91
+ [
92
+ 300,
93
+ 600
94
+ ]
95
+ ]
96
+ }
97
+ },
98
+ 'adUnitCode': '/19968336/header-bid-tag-0',
99
+ 'transactionId': '6b29369c-0c2e-414e-be1f-5867aec18d83',
100
+ 'sizes': [
101
+ [
102
+ 300,
103
+ 250
104
+ ],
105
+ [
106
+ 300,
107
+ 600
108
+ ]
109
+ ],
110
+ 'bidId': '206be9a13236af',
111
+ 'bidderRequestId': '1207cb49191887',
112
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
113
+ 'src': 'client',
114
+ 'bidRequestsCount': 1,
115
+ 'bidderRequestsCount': 1,
116
+ 'bidderWinsCount': 0
117
+ }
118
+ ],
119
+ 'auctionStart': 1638441234544,
120
+ 'timeout': 400,
121
+ 'refererInfo': {
122
+ 'referer': 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html',
123
+ 'reachedTop': true,
124
+ 'isAmp': false,
125
+ 'numIframes': 0,
126
+ 'stack': [
127
+ 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html'
128
+ ],
129
+ 'canonicalUrl': null
130
+ },
131
+ 'start': 1638441234547
132
+ },
133
+ {
134
+ 'bidderCode': 'appnexus',
135
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
136
+ 'bidderRequestId': '32b97f0a935422',
137
+ 'bids': [
138
+ {
139
+ 'bidder': 'appnexus',
140
+ 'params': {
141
+ 'placementId': 13232385
142
+ },
143
+ 'mediaTypes': {
144
+ 'banner': {
145
+ 'sizes': [
146
+ [
147
+ 300,
148
+ 250
149
+ ],
150
+ [
151
+ 300,
152
+ 600
153
+ ]
154
+ ]
155
+ }
156
+ },
157
+ 'adUnitCode': '/19968336/header-bid-tag-0',
158
+ 'transactionId': '6b29369c-0c2e-414e-be1f-5867aec18d83',
159
+ 'sizes': [
160
+ [
161
+ 300,
162
+ 250
163
+ ],
164
+ [
165
+ 300,
166
+ 600
167
+ ]
168
+ ],
169
+ 'bidId': '41badc0e164c758',
170
+ 'bidderRequestId': '32b97f0a935422',
171
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
172
+ 'src': 'client',
173
+ 'bidRequestsCount': 1,
174
+ 'bidderRequestsCount': 1,
175
+ 'bidderWinsCount': 0
176
+ }
177
+ ],
178
+ 'auctionStart': 1638441234544,
179
+ 'timeout': 400,
180
+ 'refererInfo': {
181
+ 'referer': 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html',
182
+ 'reachedTop': true,
183
+ 'isAmp': false,
184
+ 'numIframes': 0,
185
+ 'stack': [
186
+ 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html'
187
+ ],
188
+ 'canonicalUrl': null
189
+ },
190
+ 'start': 1638441234550
191
+ }
192
+ ],
193
+ 'noBids': [
194
+ {
195
+ 'bidder': 'appnexus',
196
+ 'params': {
197
+ 'placementId': 13232385
198
+ },
199
+ 'mediaTypes': {
200
+ 'banner': {
201
+ 'sizes': [
202
+ [
203
+ 300,
204
+ 250
205
+ ],
206
+ [
207
+ 300,
208
+ 600
209
+ ]
210
+ ]
211
+ }
212
+ },
213
+ 'adUnitCode': '/19968336/header-bid-tag-0',
214
+ 'transactionId': '6b29369c-0c2e-414e-be1f-5867aec18d83',
215
+ 'sizes': [
216
+ [
217
+ 300,
218
+ 250
219
+ ],
220
+ [
221
+ 300,
222
+ 600
223
+ ]
224
+ ],
225
+ 'bidId': '41badc0e164c758',
226
+ 'bidderRequestId': '32b97f0a935422',
227
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
228
+ 'src': 'client',
229
+ 'bidRequestsCount': 1,
230
+ 'bidderRequestsCount': 1,
231
+ 'bidderWinsCount': 0
232
+ }
233
+ ],
234
+ 'bidsReceived': [
235
+ {
236
+ 'bidderCode': 'zeta_global_ssp',
237
+ 'width': 480,
238
+ 'height': 320,
239
+ 'statusMessage': 'Bid available',
240
+ 'adId': '5759bb3ef7be1e8',
241
+ 'requestId': '206be9a13236af',
242
+ 'mediaType': 'banner',
243
+ 'source': 'client',
244
+ 'cpm': 2.258302852806723,
245
+ 'currency': 'USD',
246
+ 'ad': 'test_ad',
247
+ 'ttl': 200,
248
+ 'creativeId': '456456456',
249
+ 'netRevenue': true,
250
+ 'meta': {
251
+ 'advertiserDomains': [
252
+ 'viaplay.fi'
253
+ ]
254
+ },
255
+ 'originalCpm': 2.258302852806723,
256
+ 'originalCurrency': 'USD',
257
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
258
+ 'responseTimestamp': 1638441234670,
259
+ 'requestTimestamp': 1638441234547,
260
+ 'bidder': 'zeta_global_ssp',
261
+ 'adUnitCode': '/19968336/header-bid-tag-0',
262
+ 'timeToRespond': 123,
263
+ 'pbLg': '2.00',
264
+ 'pbMg': '2.20',
265
+ 'pbHg': '2.25',
266
+ 'pbAg': '2.25',
267
+ 'pbDg': '2.25',
268
+ 'pbCg': '',
269
+ 'size': '480x320',
270
+ 'adserverTargeting': {
271
+ 'hb_bidder': 'zeta_global_ssp',
272
+ 'hb_adid': '5759bb3ef7be1e8',
273
+ 'hb_pb': '2.20',
274
+ 'hb_size': '480x320',
275
+ 'hb_source': 'client',
276
+ 'hb_format': 'banner',
277
+ 'hb_adomain': 'viaplay.fi'
278
+ }
279
+ }
280
+ ],
281
+ 'winningBids': [],
282
+ 'timeout': 400
283
+ },
284
+ AD_RENDER_SUCCEEDED: {
285
+ 'doc': {
286
+ 'location': {
287
+ 'href': 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html',
288
+ 'protocol': 'http:',
289
+ 'host': 'localhost:63342',
290
+ 'hostname': 'localhost',
291
+ 'port': '63342',
292
+ 'pathname': '/zeta-ssp/ssp/_dev/examples/page_banner.html',
293
+ 'hash': '',
294
+ 'origin': 'http://test-zeta-ssp.net:63342',
295
+ 'ancestorOrigins': {
296
+ '0': 'http://test-zeta-ssp.net:63342'
297
+ }
298
+ }
299
+ },
300
+ 'bid': {
301
+ 'bidderCode': 'zeta_global_ssp',
302
+ 'width': 480,
303
+ 'height': 320,
304
+ 'statusMessage': 'Bid available',
305
+ 'adId': '5759bb3ef7be1e8',
306
+ 'requestId': '206be9a13236af',
307
+ 'mediaType': 'banner',
308
+ 'source': 'client',
309
+ 'cpm': 2.258302852806723,
310
+ 'currency': 'USD',
311
+ 'ad': 'test_ad',
312
+ 'ttl': 200,
313
+ 'creativeId': '456456456',
314
+ 'netRevenue': true,
315
+ 'meta': {
316
+ 'advertiserDomains': [
317
+ 'viaplay.fi'
318
+ ]
319
+ },
320
+ 'originalCpm': 2.258302852806723,
321
+ 'originalCurrency': 'USD',
322
+ 'auctionId': '75e394d9-ccce-4978-9238-91e6a1ac88a1',
323
+ 'responseTimestamp': 1638441234670,
324
+ 'requestTimestamp': 1638441234547,
325
+ 'bidder': 'zeta_global_ssp',
326
+ 'adUnitCode': '/19968336/header-bid-tag-0',
327
+ 'timeToRespond': 123,
328
+ 'pbLg': '2.00',
329
+ 'pbMg': '2.20',
330
+ 'pbHg': '2.25',
331
+ 'pbAg': '2.25',
332
+ 'pbDg': '2.25',
333
+ 'pbCg': '',
334
+ 'size': '480x320',
335
+ 'adserverTargeting': {
336
+ 'hb_bidder': 'zeta_global_ssp',
337
+ 'hb_adid': '5759bb3ef7be1e8',
338
+ 'hb_pb': '2.20',
339
+ 'hb_size': '480x320',
340
+ 'hb_source': 'client',
341
+ 'hb_format': 'banner',
342
+ 'hb_adomain': 'viaplay.fi'
343
+ },
344
+ 'status': 'rendered',
345
+ 'params': [
346
+ {
347
+ 'sid': 111,
348
+ 'tags': {
349
+ 'shortname': 'prebid_analytics_event_test_shortname',
350
+ 'position': 'test_position'
351
+ }
352
+ }
353
+ ]
354
+ },
355
+ 'adId': '5759bb3ef7be1e8'
356
+ }
357
+ }
358
+
359
+ describe('Zeta Global SSP Analytics Adapter', function() {
360
+ let sandbox;
361
+ let xhr;
362
+ let requests;
363
+
364
+ beforeEach(function() {
365
+ sandbox = sinon.sandbox.create();
366
+ requests = [];
367
+ xhr = sandbox.useFakeXMLHttpRequest();
368
+ xhr.onCreate = request => requests.push(request);
369
+ sandbox.stub(events, 'getEvents').returns([]);
370
+ });
371
+
372
+ afterEach(function () {
373
+ sandbox.restore();
374
+ config.resetConfig();
375
+ });
376
+
377
+ it('should require publisherId', function () {
378
+ sandbox.stub(utils, 'logError');
379
+ zetaAnalyticsAdapter.enableAnalytics({
380
+ options: {}
381
+ });
382
+ expect(utils.logError.called).to.equal(true);
383
+ });
384
+
385
+ describe('handle events', function() {
386
+ beforeEach(function() {
387
+ zetaAnalyticsAdapter.enableAnalytics({
388
+ options: {
389
+ sid: 111
390
+ }
391
+ });
392
+ });
393
+
394
+ afterEach(function () {
395
+ zetaAnalyticsAdapter.disableAnalytics();
396
+ });
397
+
398
+ it('events are sent', function() {
399
+ this.timeout(5000);
400
+ events.emit(CONSTANTS.EVENTS.AUCTION_INIT, MOCK.STUB);
401
+ events.emit(CONSTANTS.EVENTS.AUCTION_END, MOCK.AUCTION_END);
402
+ events.emit(CONSTANTS.EVENTS.BID_ADJUSTMENT, MOCK.STUB);
403
+ events.emit(CONSTANTS.EVENTS.BID_TIMEOUT, MOCK.STUB);
404
+ events.emit(CONSTANTS.EVENTS.BID_REQUESTED, MOCK.STUB);
405
+ events.emit(CONSTANTS.EVENTS.BID_RESPONSE, MOCK.STUB);
406
+ events.emit(CONSTANTS.EVENTS.NO_BID, MOCK.STUB);
407
+ events.emit(CONSTANTS.EVENTS.BID_WON, MOCK.STUB);
408
+ events.emit(CONSTANTS.EVENTS.BIDDER_DONE, MOCK.STUB);
409
+ events.emit(CONSTANTS.EVENTS.BIDDER_ERROR, MOCK.STUB);
410
+ events.emit(CONSTANTS.EVENTS.SET_TARGETING, MOCK.STUB);
411
+ events.emit(CONSTANTS.EVENTS.BEFORE_REQUEST_BIDS, MOCK.STUB);
412
+ events.emit(CONSTANTS.EVENTS.BEFORE_BIDDER_HTTP, MOCK.STUB);
413
+ events.emit(CONSTANTS.EVENTS.REQUEST_BIDS, MOCK.STUB);
414
+ events.emit(CONSTANTS.EVENTS.ADD_AD_UNITS, MOCK.STUB);
415
+ events.emit(CONSTANTS.EVENTS.AD_RENDER_FAILED, MOCK.STUB);
416
+ events.emit(CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED, MOCK.AD_RENDER_SUCCEEDED);
417
+ events.emit(CONSTANTS.EVENTS.TCF2_ENFORCEMENT, MOCK.STUB);
418
+ events.emit(CONSTANTS.EVENTS.AUCTION_DEBUG, MOCK.STUB);
419
+ events.emit(CONSTANTS.EVENTS.BID_VIEWABLE, MOCK.STUB);
420
+ events.emit(CONSTANTS.EVENTS.STALE_RENDER, MOCK.STUB);
421
+
422
+ expect(requests.length).to.equal(2);
423
+ expect(JSON.parse(requests[0].requestBody)).to.deep.equal(MOCK.AUCTION_END);
424
+ expect(JSON.parse(requests[1].requestBody)).to.deep.equal(MOCK.AD_RENDER_SUCCEEDED);
425
+ });
426
+ });
427
+ });
@@ -1,4 +1,5 @@
1
1
  import {spec} from '../../../modules/zeta_global_sspBidAdapter.js'
2
+ import {BANNER, VIDEO} from '../../../src/mediaTypes';
2
3
 
3
4
  describe('Zeta Ssp Bid Adapter', function () {
4
5
  const eids = [
@@ -143,7 +144,22 @@ describe('Zeta Ssp Bid Adapter', function () {
143
144
  'https://example2.com'
144
145
  ],
145
146
  h: 150,
146
- w: 200
147
+ w: 200,
148
+ ext: {
149
+ bidtype: 'video'
150
+ }
151
+ },
152
+ {
153
+ id: 'auctionId3',
154
+ impid: 'impId3',
155
+ price: 0.2,
156
+ adm: '<?xml version=\\"1.0\\"?><VAST version=\\"4.0\\">',
157
+ crid: 'creativeId3',
158
+ adomain: [
159
+ 'https://example3.com'
160
+ ],
161
+ h: 400,
162
+ w: 300
147
163
  }
148
164
  ]
149
165
  }
@@ -159,6 +175,8 @@ describe('Zeta Ssp Bid Adapter', function () {
159
175
  const receivedBid1 = response.body.seatbid[0].bid[0];
160
176
  expect(bid1).to.not.be.empty;
161
177
  expect(bid1.ad).to.equal(receivedBid1.adm);
178
+ expect(bid1.vastXml).to.be.undefined;
179
+ expect(bid1.mediaType).to.equal(BANNER);
162
180
  expect(bid1.cpm).to.equal(receivedBid1.price);
163
181
  expect(bid1.height).to.equal(receivedBid1.h);
164
182
  expect(bid1.width).to.equal(receivedBid1.w);
@@ -169,11 +187,25 @@ describe('Zeta Ssp Bid Adapter', function () {
169
187
  const receivedBid2 = response.body.seatbid[0].bid[1];
170
188
  expect(bid2).to.not.be.empty;
171
189
  expect(bid2.ad).to.equal(receivedBid2.adm);
190
+ expect(bid2.vastXml).to.equal(receivedBid2.adm);
191
+ expect(bid2.mediaType).to.equal(VIDEO);
172
192
  expect(bid2.cpm).to.equal(receivedBid2.price);
173
193
  expect(bid2.height).to.equal(receivedBid2.h);
174
194
  expect(bid2.width).to.equal(receivedBid2.w);
175
195
  expect(bid2.requestId).to.equal(receivedBid2.impid);
176
196
  expect(bid2.meta.advertiserDomains).to.equal(receivedBid2.adomain);
197
+
198
+ const bid3 = bidResponse[2];
199
+ const receivedBid3 = response.body.seatbid[0].bid[2];
200
+ expect(bid3).to.not.be.empty;
201
+ expect(bid3.ad).to.equal(receivedBid3.adm);
202
+ expect(bid3.vastXml).to.equal(receivedBid3.adm);
203
+ expect(bid3.mediaType).to.equal(VIDEO);
204
+ expect(bid3.cpm).to.equal(receivedBid3.price);
205
+ expect(bid3.height).to.equal(receivedBid3.h);
206
+ expect(bid3.width).to.equal(receivedBid3.w);
207
+ expect(bid3.requestId).to.equal(receivedBid3.impid);
208
+ expect(bid3.meta.advertiserDomains).to.equal(receivedBid3.adomain);
177
209
  });
178
210
 
179
211
  it('Different cases for user syncs', function () {
@@ -5,6 +5,7 @@ import { createBidReceived } from 'test/fixtures/fixtures.js';
5
5
  import CONSTANTS from 'src/constants.json';
6
6
  import { auctionManager } from 'src/auctionManager.js';
7
7
  import * as utils from 'src/utils.js';
8
+ import {deepClone} from 'src/utils.js';
8
9
 
9
10
  const bid1 = {
10
11
  'bidderCode': 'rubicon',
@@ -461,6 +462,50 @@ describe('targeting tests', function () {
461
462
  });
462
463
  });
463
464
 
465
+ describe('targetingControls.allowZeroCpmBids', function () {
466
+ let bid4;
467
+ let bidderSettingsStorage;
468
+
469
+ before(function() {
470
+ bidderSettingsStorage = $$PREBID_GLOBAL$$.bidderSettings;
471
+ });
472
+
473
+ beforeEach(function () {
474
+ bid4 = utils.deepClone(bid1);
475
+ bid4.adserverTargeting = {
476
+ hb_pb: '0.0',
477
+ hb_adid: '567891011',
478
+ hb_bidder: 'appnexus',
479
+ };
480
+ bid4.bidder = bid4.bidderCode = 'appnexus';
481
+ bid4.cpm = 0;
482
+ bidsReceived = [bid4];
483
+ });
484
+
485
+ after(function() {
486
+ bidsReceived = [bid1, bid2, bid3];
487
+ $$PREBID_GLOBAL$$.bidderSettings = bidderSettingsStorage;
488
+ })
489
+
490
+ it('targeting should not include a 0 cpm by default', function() {
491
+ bid4.adserverTargeting = {};
492
+ const targeting = targetingInstance.getAllTargeting(['/123456/header-bid-tag-0']);
493
+ expect(targeting['/123456/header-bid-tag-0']).to.deep.equal({});
494
+ });
495
+
496
+ it('targeting should allow a 0 cpm with targetingControls.allowZeroCpmBids set to true', function () {
497
+ $$PREBID_GLOBAL$$.bidderSettings = {
498
+ standard: {
499
+ allowZeroCpmBids: true
500
+ }
501
+ };
502
+
503
+ const targeting = targetingInstance.getAllTargeting(['/123456/header-bid-tag-0']);
504
+ expect(targeting['/123456/header-bid-tag-0']).to.include.all.keys('hb_pb', 'hb_bidder', 'hb_adid', 'hb_bidder_appnexus', 'hb_adid_appnexus', 'hb_pb_appnexus');
505
+ expect(targeting['/123456/header-bid-tag-0']['hb_pb']).to.equal('0.0')
506
+ });
507
+ });
508
+
464
509
  describe('targetingControls.allowTargetingKeys', function () {
465
510
  let bid4;
466
511
 
@@ -501,6 +546,77 @@ describe('targeting tests', function () {
501
546
  });
502
547
  });
503
548
 
549
+ describe('targetingControls.addTargetingKeys', function () {
550
+ let winningBid = null;
551
+
552
+ beforeEach(function () {
553
+ bidsReceived = [bid1, bid2, nativeBid1, nativeBid2].map(deepClone);
554
+ bidsReceived.forEach((bid) => {
555
+ bid.adserverTargeting[CONSTANTS.TARGETING_KEYS.SOURCE] = 'test-source';
556
+ bid.adUnitCode = 'adunit';
557
+ if (winningBid == null || bid.cpm > winningBid.cpm) {
558
+ winningBid = bid;
559
+ }
560
+ });
561
+ enableSendAllBids = true;
562
+ });
563
+
564
+ const expandKey = function (key) {
565
+ const keys = new Set();
566
+ if (winningBid.adserverTargeting[key] != null) {
567
+ keys.add(key);
568
+ }
569
+ bidsReceived
570
+ .filter((bid) => bid.adserverTargeting[key] != null)
571
+ .map((bid) => bid.bidderCode)
572
+ .forEach((code) => keys.add(`${key}_${code}`.substr(0, 20)));
573
+ return new Array(...keys);
574
+ }
575
+
576
+ const targetingResult = function () {
577
+ return targetingInstance.getAllTargeting(['adunit'])['adunit'];
578
+ }
579
+
580
+ it('should include added keys', function () {
581
+ config.setConfig({
582
+ targetingControls: {
583
+ addTargetingKeys: ['SOURCE']
584
+ }
585
+ });
586
+ expect(targetingResult()).to.include.all.keys(...expandKey(CONSTANTS.TARGETING_KEYS.SOURCE));
587
+ });
588
+
589
+ it('should keep default and native keys', function() {
590
+ config.setConfig({
591
+ targetingControls: {
592
+ addTargetingKeys: ['SOURCE']
593
+ }
594
+ });
595
+ const defaultKeys = new Set(Object.values(CONSTANTS.DEFAULT_TARGETING_KEYS));
596
+ Object.values(CONSTANTS.NATIVE_KEYS).forEach((k) => defaultKeys.add(k));
597
+
598
+ const expectedKeys = new Set();
599
+ bidsReceived
600
+ .map((bid) => Object.keys(bid.adserverTargeting))
601
+ .reduce((left, right) => left.concat(right), [])
602
+ .filter((key) => defaultKeys.has(key))
603
+ .map(expandKey)
604
+ .reduce((left, right) => left.concat(right), [])
605
+ .forEach((k) => expectedKeys.add(k));
606
+ expect(targetingResult()).to.include.all.keys(...expectedKeys);
607
+ });
608
+
609
+ it('should not be allowed together with allowTargetingKeys', function () {
610
+ config.setConfig({
611
+ targetingControls: {
612
+ allowTargetingKeys: [CONSTANTS.TARGETING_KEYS.BIDDER],
613
+ addTargetingKeys: [CONSTANTS.TARGETING_KEYS.SOURCE]
614
+ }
615
+ });
616
+ expect(targetingResult).to.throw();
617
+ });
618
+ });
619
+
504
620
  describe('targetingControls.allowSendAllBidsTargetingKeys', function () {
505
621
  let bid4;
506
622
 
@@ -2,6 +2,7 @@ import { getAdServerTargeting } from 'test/fixtures/fixtures.js';
2
2
  import { expect } from 'chai';
3
3
  import CONSTANTS from 'src/constants.json';
4
4
  import * as utils from 'src/utils.js';
5
+ import {waitForElementToLoad} from 'src/utils.js';
5
6
 
6
7
  var assert = require('assert');
7
8
 
@@ -1198,4 +1199,41 @@ describe('Utils', function () {
1198
1199
  });
1199
1200
  });
1200
1201
  });
1202
+
1203
+ describe('waitForElementToLoad', () => {
1204
+ let element;
1205
+ let callbacks;
1206
+
1207
+ function callback() {
1208
+ callbacks++;
1209
+ }
1210
+
1211
+ function delay(delay = 0) {
1212
+ return new Promise((resolve) => {
1213
+ window.setTimeout(resolve, delay);
1214
+ })
1215
+ }
1216
+
1217
+ beforeEach(() => {
1218
+ callbacks = 0;
1219
+ element = window.document.createElement('div');
1220
+ });
1221
+
1222
+ it('should respect timeout if set', () => {
1223
+ waitForElementToLoad(element, 50).then(callback);
1224
+ return delay(60).then(() => {
1225
+ expect(callbacks).to.equal(1);
1226
+ });
1227
+ });
1228
+
1229
+ ['load', 'error'].forEach((event) => {
1230
+ it(`should complete on '${event} event'`, () => {
1231
+ waitForElementToLoad(element).then(callback);
1232
+ element.dispatchEvent(new Event(event));
1233
+ return delay().then(() => {
1234
+ expect(callbacks).to.equal(1);
1235
+ })
1236
+ });
1237
+ });
1238
+ });
1201
1239
  });
@@ -0,0 +1,3 @@
1
+ require('test/helpers/prebidGlobal.js');
2
+ require('test/mocks/adloaderStub.js');
3
+ require('test/mocks/xhr.js');
@@ -1,6 +1,4 @@
1
- require('test/helpers/prebidGlobal.js');
2
- require('test/mocks/adloaderStub.js');
3
- require('test/mocks/xhr.js');
1
+ require('./test_deps.js');
4
2
 
5
3
  var testsContext = require.context('.', true, /_spec$/);
6
4
  testsContext.keys().forEach(testsContext);