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,397 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/compassBidAdapter.js';
3
+ import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
+
6
+ const bidder = 'compass'
7
+
8
+ describe('CompassBidAdapter', function () {
9
+ const bids = [
10
+ {
11
+ bidId: getUniqueIdentifierStr(),
12
+ bidder: bidder,
13
+ mediaTypes: {
14
+ [BANNER]: {
15
+ sizes: [[300, 250]]
16
+ }
17
+ },
18
+ params: {
19
+ placementId: 'testBanner',
20
+ }
21
+ },
22
+ {
23
+ bidId: getUniqueIdentifierStr(),
24
+ bidder: bidder,
25
+ mediaTypes: {
26
+ [VIDEO]: {
27
+ playerSize: [[300, 300]],
28
+ minduration: 5,
29
+ maxduration: 60
30
+ }
31
+ },
32
+ params: {
33
+ placementId: 'testVideo',
34
+ }
35
+ },
36
+ {
37
+ bidId: getUniqueIdentifierStr(),
38
+ bidder: bidder,
39
+ mediaTypes: {
40
+ [NATIVE]: {
41
+ native: {
42
+ title: {
43
+ required: true
44
+ },
45
+ body: {
46
+ required: true
47
+ },
48
+ icon: {
49
+ required: true,
50
+ size: [64, 64]
51
+ }
52
+ }
53
+ }
54
+ },
55
+ params: {
56
+ placementId: 'testNative',
57
+ }
58
+ }
59
+ ];
60
+
61
+ const invalidBid = {
62
+ bidId: getUniqueIdentifierStr(),
63
+ bidder: bidder,
64
+ mediaTypes: {
65
+ [BANNER]: {
66
+ sizes: [[300, 250]]
67
+ }
68
+ },
69
+ params: {
70
+
71
+ }
72
+ }
73
+
74
+ const bidderRequest = {
75
+ uspConsent: '1---',
76
+ gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
77
+ refererInfo: {
78
+ referer: 'https://test.com'
79
+ }
80
+ };
81
+
82
+ describe('isBidRequestValid', function () {
83
+ it('Should return true if there are bidId, params and key parameters present', function () {
84
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
85
+ });
86
+ it('Should return false if at least one of parameters is not present', function () {
87
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
88
+ });
89
+ });
90
+
91
+ describe('buildRequests', function () {
92
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
93
+
94
+ it('Creates a ServerRequest object with method, URL and data', function () {
95
+ expect(serverRequest).to.exist;
96
+ expect(serverRequest.method).to.exist;
97
+ expect(serverRequest.url).to.exist;
98
+ expect(serverRequest.data).to.exist;
99
+ });
100
+
101
+ it('Returns POST method', function () {
102
+ expect(serverRequest.method).to.equal('POST');
103
+ });
104
+
105
+ it('Returns valid URL', function () {
106
+ expect(serverRequest.url).to.equal('https://sa-lb.deliverimp.com/pbjs');
107
+ });
108
+
109
+ it('Returns general data valid', function () {
110
+ let data = serverRequest.data;
111
+ expect(data).to.be.an('object');
112
+ expect(data).to.have.all.keys('deviceWidth',
113
+ 'deviceHeight',
114
+ 'language',
115
+ 'secure',
116
+ 'host',
117
+ 'page',
118
+ 'placements',
119
+ 'coppa',
120
+ 'ccpa',
121
+ 'gdpr',
122
+ 'tmax'
123
+ );
124
+ expect(data.deviceWidth).to.be.a('number');
125
+ expect(data.deviceHeight).to.be.a('number');
126
+ expect(data.language).to.be.a('string');
127
+ expect(data.secure).to.be.within(0, 1);
128
+ expect(data.host).to.be.a('string');
129
+ expect(data.page).to.be.a('string');
130
+ expect(data.coppa).to.be.a('number');
131
+ expect(data.gdpr).to.be.a('string');
132
+ expect(data.ccpa).to.be.a('string');
133
+ expect(data.tmax).to.be.a('number');
134
+ expect(data.placements).to.have.lengthOf(3);
135
+ });
136
+
137
+ it('Returns valid placements', function () {
138
+ const { placements } = serverRequest.data;
139
+ for (let i = 0, len = placements.length; i < len; i++) {
140
+ const placement = placements[i];
141
+ expect(placement.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
142
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
143
+ expect(placement.bidId).to.be.a('string');
144
+ expect(placement.schain).to.be.an('object');
145
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
146
+
147
+ if (placement.adFormat === BANNER) {
148
+ expect(placement.sizes).to.be.an('array');
149
+ }
150
+ switch (placement.adFormat) {
151
+ case BANNER:
152
+ expect(placement.sizes).to.be.an('array');
153
+ break;
154
+ case VIDEO:
155
+ expect(placement.playerSize).to.be.an('array');
156
+ expect(placement.minduration).to.be.an('number');
157
+ expect(placement.maxduration).to.be.an('number');
158
+ break;
159
+ case NATIVE:
160
+ expect(placement.native).to.be.an('object');
161
+ break;
162
+ }
163
+ }
164
+ });
165
+
166
+ it('Returns data with gdprConsent and without uspConsent', function () {
167
+ delete bidderRequest.uspConsent;
168
+ serverRequest = spec.buildRequests(bids, bidderRequest);
169
+ let data = serverRequest.data;
170
+ expect(data.gdpr).to.exist;
171
+ expect(data.gdpr).to.be.a('string');
172
+ expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
173
+ expect(data.ccpa).to.not.exist;
174
+ delete bidderRequest.gdprConsent;
175
+ });
176
+
177
+ it('Returns data with uspConsent and without gdprConsent', function () {
178
+ bidderRequest.uspConsent = '1---';
179
+ delete bidderRequest.gdprConsent;
180
+ serverRequest = spec.buildRequests(bids, bidderRequest);
181
+ let data = serverRequest.data;
182
+ expect(data.ccpa).to.exist;
183
+ expect(data.ccpa).to.be.a('string');
184
+ expect(data.ccpa).to.equal(bidderRequest.uspConsent);
185
+ expect(data.gdpr).to.not.exist;
186
+ });
187
+
188
+ it('Returns empty data if no valid requests are passed', function () {
189
+ serverRequest = spec.buildRequests([], bidderRequest);
190
+ let data = serverRequest.data;
191
+ expect(data.placements).to.be.an('array').that.is.empty;
192
+ });
193
+ });
194
+
195
+ describe('interpretResponse', function () {
196
+ it('Should interpret banner response', function () {
197
+ const banner = {
198
+ body: [{
199
+ mediaType: 'banner',
200
+ width: 300,
201
+ height: 250,
202
+ cpm: 0.4,
203
+ ad: 'Test',
204
+ requestId: '23fhj33i987f',
205
+ ttl: 120,
206
+ creativeId: '2',
207
+ netRevenue: true,
208
+ currency: 'USD',
209
+ dealId: '1',
210
+ meta: {
211
+ advertiserDomains: ['google.com'],
212
+ advertiserId: 1234
213
+ }
214
+ }]
215
+ };
216
+ let bannerResponses = spec.interpretResponse(banner);
217
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
218
+ let dataItem = bannerResponses[0];
219
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
220
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
221
+ expect(dataItem.requestId).to.equal(banner.body[0].requestId);
222
+ expect(dataItem.cpm).to.equal(banner.body[0].cpm);
223
+ expect(dataItem.width).to.equal(banner.body[0].width);
224
+ expect(dataItem.height).to.equal(banner.body[0].height);
225
+ expect(dataItem.ad).to.equal(banner.body[0].ad);
226
+ expect(dataItem.ttl).to.equal(banner.body[0].ttl);
227
+ expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
228
+ expect(dataItem.netRevenue).to.be.true;
229
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
230
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
231
+ });
232
+ it('Should interpret video response', function () {
233
+ const video = {
234
+ body: [{
235
+ vastUrl: 'test.com',
236
+ mediaType: 'video',
237
+ cpm: 0.5,
238
+ requestId: '23fhj33i987f',
239
+ ttl: 120,
240
+ creativeId: '2',
241
+ netRevenue: true,
242
+ currency: 'USD',
243
+ dealId: '1',
244
+ meta: {
245
+ advertiserDomains: ['google.com'],
246
+ advertiserId: 1234
247
+ }
248
+ }]
249
+ };
250
+ let videoResponses = spec.interpretResponse(video);
251
+ expect(videoResponses).to.be.an('array').that.is.not.empty;
252
+
253
+ let dataItem = videoResponses[0];
254
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
255
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
256
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
257
+ expect(dataItem.cpm).to.equal(0.5);
258
+ expect(dataItem.vastUrl).to.equal('test.com');
259
+ expect(dataItem.ttl).to.equal(120);
260
+ expect(dataItem.creativeId).to.equal('2');
261
+ expect(dataItem.netRevenue).to.be.true;
262
+ expect(dataItem.currency).to.equal('USD');
263
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
264
+ });
265
+ it('Should interpret native response', function () {
266
+ const native = {
267
+ body: [{
268
+ mediaType: 'native',
269
+ native: {
270
+ clickUrl: 'test.com',
271
+ title: 'Test',
272
+ image: 'test.com',
273
+ impressionTrackers: ['test.com'],
274
+ },
275
+ ttl: 120,
276
+ cpm: 0.4,
277
+ requestId: '23fhj33i987f',
278
+ creativeId: '2',
279
+ netRevenue: true,
280
+ currency: 'USD',
281
+ meta: {
282
+ advertiserDomains: ['google.com'],
283
+ advertiserId: 1234
284
+ }
285
+ }]
286
+ };
287
+ let nativeResponses = spec.interpretResponse(native);
288
+ expect(nativeResponses).to.be.an('array').that.is.not.empty;
289
+
290
+ let dataItem = nativeResponses[0];
291
+ expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
292
+ expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
293
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
294
+ expect(dataItem.cpm).to.equal(0.4);
295
+ expect(dataItem.native.clickUrl).to.equal('test.com');
296
+ expect(dataItem.native.title).to.equal('Test');
297
+ expect(dataItem.native.image).to.equal('test.com');
298
+ expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
299
+ expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
300
+ expect(dataItem.ttl).to.equal(120);
301
+ expect(dataItem.creativeId).to.equal('2');
302
+ expect(dataItem.netRevenue).to.be.true;
303
+ expect(dataItem.currency).to.equal('USD');
304
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
305
+ });
306
+ it('Should return an empty array if invalid banner response is passed', function () {
307
+ const invBanner = {
308
+ body: [{
309
+ width: 300,
310
+ cpm: 0.4,
311
+ ad: 'Test',
312
+ requestId: '23fhj33i987f',
313
+ ttl: 120,
314
+ creativeId: '2',
315
+ netRevenue: true,
316
+ currency: 'USD',
317
+ dealId: '1'
318
+ }]
319
+ };
320
+
321
+ let serverResponses = spec.interpretResponse(invBanner);
322
+ expect(serverResponses).to.be.an('array').that.is.empty;
323
+ });
324
+ it('Should return an empty array if invalid video response is passed', function () {
325
+ const invVideo = {
326
+ body: [{
327
+ mediaType: 'video',
328
+ cpm: 0.5,
329
+ requestId: '23fhj33i987f',
330
+ ttl: 120,
331
+ creativeId: '2',
332
+ netRevenue: true,
333
+ currency: 'USD',
334
+ dealId: '1'
335
+ }]
336
+ };
337
+ let serverResponses = spec.interpretResponse(invVideo);
338
+ expect(serverResponses).to.be.an('array').that.is.empty;
339
+ });
340
+ it('Should return an empty array if invalid native response is passed', function () {
341
+ const invNative = {
342
+ body: [{
343
+ mediaType: 'native',
344
+ clickUrl: 'test.com',
345
+ title: 'Test',
346
+ impressionTrackers: ['test.com'],
347
+ ttl: 120,
348
+ requestId: '23fhj33i987f',
349
+ creativeId: '2',
350
+ netRevenue: true,
351
+ currency: 'USD',
352
+ }]
353
+ };
354
+ let serverResponses = spec.interpretResponse(invNative);
355
+ expect(serverResponses).to.be.an('array').that.is.empty;
356
+ });
357
+ it('Should return an empty array if invalid response is passed', function () {
358
+ const invalid = {
359
+ body: [{
360
+ ttl: 120,
361
+ creativeId: '2',
362
+ netRevenue: true,
363
+ currency: 'USD',
364
+ dealId: '1'
365
+ }]
366
+ };
367
+ let serverResponses = spec.interpretResponse(invalid);
368
+ expect(serverResponses).to.be.an('array').that.is.empty;
369
+ });
370
+ });
371
+
372
+ describe('getUserSyncs', function() {
373
+ it('Should return array of objects with proper sync config , include GDPR', function() {
374
+ const syncData = spec.getUserSyncs({}, {}, {
375
+ consentString: 'ALL',
376
+ gdprApplies: true,
377
+ }, {});
378
+ expect(syncData).to.be.an('array').which.is.not.empty;
379
+ expect(syncData[0]).to.be.an('object')
380
+ expect(syncData[0].type).to.be.a('string')
381
+ expect(syncData[0].type).to.equal('image')
382
+ expect(syncData[0].url).to.be.a('string')
383
+ expect(syncData[0].url).to.equal('https://sa-cs.deliverimp.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
384
+ });
385
+ it('Should return array of objects with proper sync config , include CCPA', function() {
386
+ const syncData = spec.getUserSyncs({}, {}, {}, {
387
+ consentString: '1---'
388
+ });
389
+ expect(syncData).to.be.an('array').which.is.not.empty;
390
+ expect(syncData[0]).to.be.an('object')
391
+ expect(syncData[0].type).to.be.a('string')
392
+ expect(syncData[0].type).to.equal('image')
393
+ expect(syncData[0].url).to.be.a('string')
394
+ expect(syncData[0].url).to.equal('https://sa-cs.deliverimp.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
395
+ });
396
+ });
397
+ });
@@ -715,6 +715,26 @@ describe('consentManagement', function () {
715
715
  expect(consent).to.be.null;
716
716
  });
717
717
 
718
+ it('allows the auction when CMP is unresponsive', (done) => {
719
+ setConsentConfig({
720
+ cmpApi: 'iab',
721
+ timeout: 10,
722
+ defaultGdprScope: true
723
+ });
724
+
725
+ requestBidsHook(() => {
726
+ didHookReturn = true;
727
+ }, {});
728
+
729
+ setTimeout(() => {
730
+ expect(didHookReturn).to.be.true;
731
+ const consent = gdprDataHandler.getConsentData();
732
+ expect(consent.gdprApplies).to.be.true;
733
+ expect(consent.consentString).to.be.undefined;
734
+ done();
735
+ }, 20);
736
+ });
737
+
718
738
  it('It still considers it a valid cmp response if gdprApplies is not a boolean', function () {
719
739
  // gdprApplies is undefined, should just still store consent response but use whatever defaultGdprScope was
720
740
  let testConsentData = {
@@ -36,11 +36,6 @@ const BidderRequestBuilder = function BidderRequestBuilder(options) {
36
36
  bidderRequestId: BID_DEFAULTS.request.bidderRequestId,
37
37
  transactionId: BID_DEFAULTS.request.transactionId,
38
38
  timeout: 3000,
39
- refererInfo: {
40
- numIframes: 0,
41
- reachedTop: true,
42
- referer: 'http://test.io/index.html?pbjs_debug=true'
43
- }
44
39
  };
45
40
 
46
41
  const request = {
@@ -82,16 +77,13 @@ const BidRequestBuilder = function BidRequestBuilder(options, deleteKeys) {
82
77
  };
83
78
 
84
79
  describe('C-WIRE bid adapter', () => {
85
- let utilsMock;
86
80
  let sandbox;
87
81
 
88
82
  beforeEach(() => {
89
- utilsMock = sinon.mock(utils);
90
83
  sandbox = sinon.createSandbox();
91
84
  });
92
85
 
93
86
  afterEach(() => {
94
- utilsMock.restore();
95
87
  sandbox.restore();
96
88
  });
97
89
 
@@ -146,6 +138,12 @@ describe('C-WIRE bid adapter', () => {
146
138
 
147
139
  describe('C-WIRE - buildRequests()', function () {
148
140
  it('creates a valid request', function () {
141
+ // for whatever reason stub for getWindowLocation does not work
142
+ // so this was the closest way to test for get params
143
+ const params = sandbox.stub(utils, 'getParameterByName');
144
+ params.withArgs('cwgroups').returns('group_1');
145
+ params.withArgs('cwcreative').returns('54321');
146
+
149
147
  const bid01 = new BidRequestBuilder({
150
148
  mediaTypes: {
151
149
  banner: {
@@ -153,12 +151,16 @@ describe('C-WIRE bid adapter', () => {
153
151
  }
154
152
  }
155
153
  }).withParams().build();
154
+
156
155
  const bidderRequest01 = new BidderRequestBuilder().build();
157
156
 
158
157
  const requests = spec.buildRequests([bid01], bidderRequest01);
158
+
159
159
  expect(requests.data.slots.length).to.equal(1);
160
160
  expect(requests.data.cwid).to.be.null;
161
161
  expect(requests.data.slots[0].sizes[0]).to.equal('1x1');
162
+ expect(requests.data.cwcreative).to.equal('54321');
163
+ expect(requests.data.refgroups[0]).to.equal('group_1');
162
164
  });
163
165
  });
164
166