prebid.js 6.25.0 → 6.26.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 (132) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/adagioBidAdapter.js +1 -1
  3. package/dist/adbookpspBidAdapter.js +1 -1
  4. package/dist/adgenerationBidAdapter.js +1 -1
  5. package/dist/adrelevantisBidAdapter.js +1 -1
  6. package/dist/adxcgBidAdapter.js +1 -1
  7. package/dist/adyoulikeBidAdapter.js +1 -1
  8. package/dist/ajaBidAdapter.js +1 -1
  9. package/dist/amxBidAdapter.js +1 -1
  10. package/dist/amxIdSystem.js +1 -1
  11. package/dist/appierAnalyticsAdapter.js +1 -1
  12. package/dist/appnexusBidAdapter.js +1 -1
  13. package/dist/asoBidAdapter.js +1 -1
  14. package/dist/audiencerunBidAdapter.js +1 -1
  15. package/dist/axonixBidAdapter.js +1 -1
  16. package/dist/bidglassBidAdapter.js +1 -1
  17. package/dist/big-richmediaBidAdapter.js +1 -1
  18. package/dist/bluebillywigBidAdapter.js +1 -1
  19. package/dist/bridgewellBidAdapter.js +1 -1
  20. package/dist/brightMountainMediaBidAdapter.js +1 -1
  21. package/dist/concertBidAdapter.js +1 -1
  22. package/dist/connectadBidAdapter.js +1 -1
  23. package/dist/consumableBidAdapter.js +1 -1
  24. package/dist/conversantBidAdapter.js +1 -1
  25. package/dist/cpexIdSystem.js +1 -1
  26. package/dist/craftBidAdapter.js +1 -1
  27. package/dist/criteoBidAdapter.js +1 -1
  28. package/dist/dspxBidAdapter.js +1 -1
  29. package/dist/eplanningBidAdapter.js +1 -1
  30. package/dist/glimpseBidAdapter.js +1 -1
  31. package/dist/gmosspBidAdapter.js +1 -1
  32. package/dist/goldbachBidAdapter.js +1 -1
  33. package/dist/gravitoIdSystem.js +1 -0
  34. package/dist/gridBidAdapter.js +1 -1
  35. package/dist/gridNMBidAdapter.js +1 -1
  36. package/dist/gumgumBidAdapter.js +1 -1
  37. package/dist/h12mediaBidAdapter.js +1 -1
  38. package/dist/id5IdSystem.js +1 -1
  39. package/dist/impactifyBidAdapter.js +1 -1
  40. package/dist/improvedigitalBidAdapter.js +1 -1
  41. package/dist/inmarBidAdapter.js +1 -1
  42. package/dist/insticatorBidAdapter.js +1 -1
  43. package/dist/ixBidAdapter.js +1 -1
  44. package/dist/jixieBidAdapter.js +1 -1
  45. package/dist/justpremiumBidAdapter.js +1 -1
  46. package/dist/konduitAnalyticsAdapter.js +1 -1
  47. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  48. package/dist/logicadBidAdapter.js +1 -1
  49. package/dist/loglyliftBidAdapter.js +1 -1
  50. package/dist/malltvAnalyticsAdapter.js +1 -1
  51. package/dist/marsmediaBidAdapter.js +1 -1
  52. package/dist/mediafuseBidAdapter.js +1 -1
  53. package/dist/mediakeysBidAdapter.js +1 -1
  54. package/dist/mediasquareBidAdapter.js +1 -1
  55. package/dist/mgidBidAdapter.js +1 -1
  56. package/dist/minutemediaBidAdapter.js +1 -1
  57. package/dist/not-for-prod/prebid.js +113 -111
  58. package/dist/oguryBidAdapter.js +1 -1
  59. package/dist/oneVideoBidAdapter.js +1 -1
  60. package/dist/onetagBidAdapter.js +1 -1
  61. package/dist/ooloAnalyticsAdapter.js +1 -1
  62. package/dist/outbrainBidAdapter.js +1 -1
  63. package/dist/parrableIdSystem.js +1 -1
  64. package/dist/pixfutureBidAdapter.js +1 -1
  65. package/dist/prebid-core.js +3 -3
  66. package/dist/publinkIdSystem.js +1 -1
  67. package/dist/pubmaticBidAdapter.js +1 -1
  68. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  69. package/dist/pxyzBidAdapter.js +1 -1
  70. package/dist/quantcastBidAdapter.js +1 -1
  71. package/dist/readpeakBidAdapter.js +1 -1
  72. package/dist/relaidoBidAdapter.js +1 -1
  73. package/dist/rhythmoneBidAdapter.js +1 -1
  74. package/dist/riseBidAdapter.js +1 -1
  75. package/dist/rubiconAnalyticsAdapter.js +1 -1
  76. package/dist/rubiconBidAdapter.js +1 -1
  77. package/dist/seedingAllianceBidAdapter.js +1 -1
  78. package/dist/seedtagBidAdapter.js +1 -1
  79. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  80. package/dist/sharethroughBidAdapter.js +1 -1
  81. package/dist/smaatoBidAdapter.js +1 -1
  82. package/dist/smartadserverBidAdapter.js +1 -1
  83. package/dist/smartxBidAdapter.js +1 -1
  84. package/dist/smilewantedBidAdapter.js +1 -1
  85. package/dist/sonobiBidAdapter.js +1 -1
  86. package/dist/sortableBidAdapter.js +1 -1
  87. package/dist/sovrnAnalyticsAdapter.js +1 -1
  88. package/dist/sovrnBidAdapter.js +1 -1
  89. package/dist/sspBCBidAdapter.js +1 -1
  90. package/dist/sublimeBidAdapter.js +1 -1
  91. package/dist/synacormediaBidAdapter.js +1 -1
  92. package/dist/targetVideoBidAdapter.js +1 -1
  93. package/dist/teadsBidAdapter.js +1 -1
  94. package/dist/trionBidAdapter.js +1 -1
  95. package/dist/tripleliftBidAdapter.js +1 -1
  96. package/dist/trustxBidAdapter.js +1 -1
  97. package/dist/ttdBidAdapter.js +1 -1
  98. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  99. package/dist/underdogmediaBidAdapter.js +1 -1
  100. package/dist/undertoneBidAdapter.js +1 -1
  101. package/dist/userId.js +1 -1
  102. package/dist/vidazooBidAdapter.js +1 -1
  103. package/dist/videobyteBidAdapter.js +1 -1
  104. package/dist/videoheroesBidAdapter.js +1 -0
  105. package/dist/visxBidAdapter.js +1 -1
  106. package/dist/vuukleBidAdapter.js +1 -1
  107. package/dist/widespaceBidAdapter.js +1 -1
  108. package/dist/winrBidAdapter.js +1 -1
  109. package/dist/yahoosspBidAdapter.js +1 -1
  110. package/dist/yieldmoBidAdapter.js +1 -1
  111. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  112. package/dist/zeta_global_sspBidAdapter.js +1 -1
  113. package/integrationExamples/gpt/userId_example.html +3 -0
  114. package/modules/.submodules.json +2 -1
  115. package/modules/cpexIdSystem.js +1 -2
  116. package/modules/dacIdSystem.md +4 -4
  117. package/modules/gravitoIdSystem.js +57 -0
  118. package/modules/gravitoIdSystem.md +28 -0
  119. package/modules/jixieBidAdapter.js +2 -0
  120. package/modules/oguryBidAdapter.js +27 -1
  121. package/modules/userId/eids.js +6 -0
  122. package/modules/userId/userId.md +3 -0
  123. package/modules/videoheroesBidAdapter.js +267 -0
  124. package/modules/videoheroesBidAdapter.md +134 -0
  125. package/modules/zeta_global_sspBidAdapter.js +1 -1
  126. package/package.json +1 -1
  127. package/test/spec/modules/gravitoIdSystem_spec.js +51 -0
  128. package/test/spec/modules/jixieBidAdapter_spec.js +17 -0
  129. package/test/spec/modules/oguryBidAdapter_spec.js +181 -3
  130. package/test/spec/modules/videoheroesBidAdapter_spec.js +363 -0
  131. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +37 -24
  132. package/test/spec/modules/medianetRtdProvider_spec.js +0 -146
@@ -226,6 +226,15 @@ describe('OguryBidAdapter', function () {
226
226
  });
227
227
 
228
228
  describe('buildRequests', function () {
229
+ const stubbedWidth = 200
230
+ const stubbedHeight = 600
231
+ const stubbedWidthMethod = sinon.stub(window.top.document.documentElement, 'clientWidth').get(function() {
232
+ return stubbedWidth;
233
+ });
234
+ const stubbedHeightMethod = sinon.stub(window.top.document.documentElement, 'clientHeight').get(function() {
235
+ return stubbedHeight;
236
+ });
237
+
229
238
  const defaultTimeout = 1000;
230
239
  const expectedRequestObject = {
231
240
  id: bidRequests[0].auctionId,
@@ -270,10 +279,19 @@ describe('OguryBidAdapter', function () {
270
279
  },
271
280
  ext: {
272
281
  prebidversion: '$prebid.version$',
273
- adapterversion: '1.2.11'
282
+ adapterversion: '1.2.12'
283
+ },
284
+ device: {
285
+ w: stubbedWidth,
286
+ h: stubbedHeight
274
287
  }
275
288
  };
276
289
 
290
+ after(function() {
291
+ stubbedWidthMethod.restore();
292
+ stubbedHeightMethod.restore();
293
+ });
294
+
277
295
  it('sends bid request to ENDPOINT via POST', function () {
278
296
  const validBidRequests = utils.deepClone(bidRequests)
279
297
 
@@ -290,6 +308,166 @@ describe('OguryBidAdapter', function () {
290
308
  expect(request.data.regs.ext.gdpr).to.be.a('number');
291
309
  });
292
310
 
311
+ describe('getClientWidth', () => {
312
+ function testGetClientWidth(testGetClientSizeParams) {
313
+ const stubbedClientWidth = sinon.stub(window.top.document.documentElement, 'clientWidth').get(function() {
314
+ return testGetClientSizeParams.docClientSize
315
+ })
316
+
317
+ const stubbedInnerWidth = sinon.stub(window.top, 'innerWidth').get(function() {
318
+ return testGetClientSizeParams.innerSize
319
+ })
320
+
321
+ const stubbedOuterWidth = sinon.stub(window.top, 'outerWidth').get(function() {
322
+ return testGetClientSizeParams.outerSize
323
+ })
324
+
325
+ const stubbedWidth = sinon.stub(window.top.screen, 'width').get(function() {
326
+ return testGetClientSizeParams.screenSize
327
+ })
328
+
329
+ const validBidRequests = utils.deepClone(bidRequests)
330
+
331
+ const request = spec.buildRequests(validBidRequests, bidderRequest);
332
+ expect(request.data.device.w).to.equal(testGetClientSizeParams.expectedSize);
333
+
334
+ stubbedClientWidth.restore();
335
+ stubbedInnerWidth.restore();
336
+ stubbedOuterWidth.restore();
337
+ stubbedWidth.restore();
338
+ }
339
+
340
+ it('should get documentElementClientWidth by default', () => {
341
+ testGetClientWidth({
342
+ docClientSize: 22,
343
+ innerSize: 50,
344
+ outerSize: 45,
345
+ screenSize: 10,
346
+ expectedSize: 22,
347
+ })
348
+ })
349
+
350
+ it('should get innerWidth as first fallback', () => {
351
+ testGetClientWidth({
352
+ docClientSize: undefined,
353
+ innerSize: 700,
354
+ outerSize: 650,
355
+ screenSize: 10,
356
+ expectedSize: 700,
357
+ })
358
+ })
359
+
360
+ it('should get outerWidth as second fallback', () => {
361
+ testGetClientWidth({
362
+ docClientSize: undefined,
363
+ innerSize: undefined,
364
+ outerSize: 650,
365
+ screenSize: 10,
366
+ expectedSize: 650,
367
+ })
368
+ })
369
+
370
+ it('should get screenWidth as last fallback', () => {
371
+ testGetClientWidth({
372
+ docClientSize: undefined,
373
+ innerSize: undefined,
374
+ outerSize: undefined,
375
+ screenSize: 10,
376
+ expectedSize: 10,
377
+ });
378
+ });
379
+
380
+ it('should return 0 if all window width values are undefined', () => {
381
+ testGetClientWidth({
382
+ docClientSize: undefined,
383
+ innerSize: undefined,
384
+ outerSize: undefined,
385
+ screenSize: undefined,
386
+ expectedSize: 0,
387
+ });
388
+ });
389
+ });
390
+
391
+ describe('getClientHeight', () => {
392
+ function testGetClientHeight(testGetClientSizeParams) {
393
+ const stubbedClientHeight = sinon.stub(window.top.document.documentElement, 'clientHeight').get(function() {
394
+ return testGetClientSizeParams.docClientSize
395
+ })
396
+
397
+ const stubbedInnerHeight = sinon.stub(window.top, 'innerHeight').get(function() {
398
+ return testGetClientSizeParams.innerSize
399
+ })
400
+
401
+ const stubbedOuterHeight = sinon.stub(window.top, 'outerHeight').get(function() {
402
+ return testGetClientSizeParams.outerSize
403
+ })
404
+
405
+ const stubbedHeight = sinon.stub(window.top.screen, 'height').get(function() {
406
+ return testGetClientSizeParams.screenSize
407
+ })
408
+
409
+ const validBidRequests = utils.deepClone(bidRequests)
410
+
411
+ const request = spec.buildRequests(validBidRequests, bidderRequest);
412
+ expect(request.data.device.h).to.equal(testGetClientSizeParams.expectedSize);
413
+
414
+ stubbedClientHeight.restore();
415
+ stubbedInnerHeight.restore();
416
+ stubbedOuterHeight.restore();
417
+ stubbedHeight.restore();
418
+ }
419
+
420
+ it('should get documentElementClientHeight by default', () => {
421
+ testGetClientHeight({
422
+ docClientSize: 420,
423
+ innerSize: 500,
424
+ outerSize: 480,
425
+ screenSize: 230,
426
+ expectedSize: 420,
427
+ });
428
+ });
429
+
430
+ it('should get innerHeight as first fallback', () => {
431
+ testGetClientHeight({
432
+ docClientSize: undefined,
433
+ innerSize: 500,
434
+ outerSize: 480,
435
+ screenSize: 230,
436
+ expectedSize: 500,
437
+ });
438
+ });
439
+
440
+ it('should get outerHeight as second fallback', () => {
441
+ testGetClientHeight({
442
+ docClientSize: undefined,
443
+ innerSize: undefined,
444
+ outerSize: 480,
445
+ screenSize: 230,
446
+ expectedSize: 480,
447
+ });
448
+ });
449
+
450
+ it('should get screenHeight as last fallback', () => {
451
+ testGetClientHeight({
452
+ docClientSize: undefined,
453
+ innerSize: undefined,
454
+ outerSize: undefined,
455
+ screenSize: 230,
456
+ expectedSize: 230,
457
+ });
458
+ });
459
+
460
+ it('should return 0 if all window height values are undefined', () => {
461
+ testGetClientHeight({
462
+ docClientSize: undefined,
463
+ innerSize: undefined,
464
+ outerSize: undefined,
465
+ screenSize: undefined,
466
+ expectedSize: 0,
467
+ });
468
+ });
469
+ });
470
+
293
471
  it('should not add gdpr infos if not present', () => {
294
472
  const bidderRequestWithoutGdpr = {
295
473
  ...bidderRequest,
@@ -481,7 +659,7 @@ describe('OguryBidAdapter', function () {
481
659
  advertiserDomains: openRtbBidResponse.body.seatbid[0].bid[0].adomain
482
660
  },
483
661
  nurl: openRtbBidResponse.body.seatbid[0].bid[0].nurl,
484
- adapterVersion: '1.2.11',
662
+ adapterVersion: '1.2.12',
485
663
  prebidVersion: '$prebid.version$'
486
664
  }, {
487
665
  requestId: openRtbBidResponse.body.seatbid[0].bid[1].impid,
@@ -498,7 +676,7 @@ describe('OguryBidAdapter', function () {
498
676
  advertiserDomains: openRtbBidResponse.body.seatbid[0].bid[1].adomain
499
677
  },
500
678
  nurl: openRtbBidResponse.body.seatbid[0].bid[1].nurl,
501
- adapterVersion: '1.2.11',
679
+ adapterVersion: '1.2.12',
502
680
  prebidVersion: '$prebid.version$'
503
681
  }]
504
682
 
@@ -0,0 +1,363 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from 'modules/videoheroesBidAdapter.js';
3
+
4
+ const request_native = {
5
+ code: 'videoheroes-native-prebid',
6
+ mediaTypes: {
7
+ native: {
8
+ title: {
9
+ required: true,
10
+ len: 800
11
+ },
12
+ image: {
13
+ required: true,
14
+ len: 80
15
+ },
16
+ sponsoredBy: {
17
+ required: true
18
+ },
19
+ clickUrl: {
20
+ required: true
21
+ },
22
+ privacyLink: {
23
+ required: false
24
+ },
25
+ body: {
26
+ required: true
27
+ },
28
+ icon: {
29
+ required: true,
30
+ sizes: [50, 50]
31
+ }
32
+ }
33
+ },
34
+ bidder: 'videoheroes',
35
+ params: {
36
+ placementId: '1a8d9c22db19906cb8a5fd4518d05f62'
37
+ }
38
+ };
39
+
40
+ const request_banner = {
41
+ code: 'videoheroes-prebid',
42
+ mediaTypes: {
43
+ banner: {
44
+ sizes: [[300, 250]]
45
+ }
46
+ },
47
+ bidder: 'videoheroes',
48
+ params: {
49
+ placementId: '1a8d9c22db19906cb8a5fd4518d05f62'
50
+ }
51
+ }
52
+
53
+ const bidRequest = {
54
+ gdprConsent: {
55
+ consentString: 'HFIDUYFIUYIUYWIPOI87392DSU',
56
+ gdprApplies: true
57
+ },
58
+ uspConsent: 'uspConsentString',
59
+ bidderRequestId: 'testid',
60
+ refererInfo: {
61
+ referer: 'testdomain.com'
62
+ },
63
+ timeout: 700
64
+ }
65
+
66
+ const request_video = {
67
+ code: 'videoheroes-video-prebid',
68
+ mediaTypes: { video: {
69
+ minduration: 1,
70
+ maxduration: 999,
71
+ boxingallowed: 1,
72
+ skip: 0,
73
+ mimes: [
74
+ 'application/javascript',
75
+ 'video/mp4'
76
+ ],
77
+ playerSize: [[768, 1024]],
78
+ protocols: [
79
+ 2, 3
80
+ ],
81
+ linearity: 1,
82
+ api: [
83
+ 1,
84
+ 2
85
+ ]
86
+ }
87
+ },
88
+
89
+ bidder: 'videoheroes',
90
+ params: {
91
+ placementId: '1a8d9c22db19906cb8a5fd4518d05f62'
92
+ }
93
+
94
+ }
95
+
96
+ const response_banner = {
97
+ id: 'request_id',
98
+ bidid: 'request_imp_id',
99
+ seatbid: [{
100
+ bid: [{
101
+ id: 'bid_id',
102
+ impid: 'request_imp_id',
103
+ price: 5,
104
+ adomain: ['example.com'],
105
+ adm: 'admcode',
106
+ crid: 'crid',
107
+ ext: {
108
+ mediaType: 'banner'
109
+ }
110
+ }]
111
+ }]
112
+ };
113
+
114
+ const response_video = {
115
+ id: 'request_id',
116
+ bidid: 'request_imp_id',
117
+ seatbid: [{
118
+ bid: [{
119
+ id: 'bid_id',
120
+ impid: 'request_imp_id',
121
+ price: 5,
122
+ adomain: ['example.com'],
123
+ adm: 'admcode',
124
+ crid: 'crid',
125
+ ext: {
126
+ mediaType: 'video'
127
+ }
128
+ }],
129
+ }],
130
+ };
131
+
132
+ let imgData = {
133
+ url: `https://example.com/image`,
134
+ w: 1200,
135
+ h: 627
136
+ };
137
+
138
+ const response_native = {
139
+ id: 'request_id',
140
+ bidid: 'request_imp_id',
141
+ seatbid: [{
142
+ bid: [{
143
+ id: 'bid_id',
144
+ impid: 'request_imp_id',
145
+ price: 5,
146
+ adomain: ['example.com'],
147
+ adm: { native:
148
+ {
149
+ assets: [
150
+ {id: 1, title: 'dummyText'},
151
+ {id: 3, image: imgData},
152
+ {
153
+ id: 5,
154
+ data: {value: 'organization.name'}
155
+ }
156
+ ],
157
+ link: {url: 'example.com'},
158
+ imptrackers: ['tracker1.com', 'tracker2.com', 'tracker3.com'],
159
+ jstracker: 'tracker1.com'
160
+ }
161
+ },
162
+ crid: 'crid',
163
+ ext: {
164
+ mediaType: 'native'
165
+ }
166
+ }],
167
+ }],
168
+ };
169
+
170
+ describe('VideoheroesBidAdapter', function() {
171
+ describe('isBidRequestValid', function() {
172
+ it('should return true when required params found', function () {
173
+ expect(spec.isBidRequestValid(request_banner)).to.equal(true);
174
+ });
175
+
176
+ it('should return false when required params are not passed', function () {
177
+ let bid = Object.assign({}, request_banner);
178
+ bid.params = {
179
+ 'IncorrectParam': 0
180
+ };
181
+ expect(spec.isBidRequestValid(bid)).to.equal(false);
182
+ });
183
+ });
184
+
185
+ describe('build Native Request', function () {
186
+ const request = spec.buildRequests([request_native], bidRequest);
187
+
188
+ it('Creates a ServerRequest object with method, URL and data', function () {
189
+ expect(request).to.exist;
190
+ expect(request.method).to.exist;
191
+ expect(request.url).to.exist;
192
+ expect(request.data).to.exist;
193
+ });
194
+
195
+ it('sends bid request to our endpoint via POST', function () {
196
+ expect(request.method).to.equal('POST');
197
+ });
198
+
199
+ it('Returns valid URL', function () {
200
+ expect(request.url).to.equal('https://point.contextualadv.com/?t=2&partner=1a8d9c22db19906cb8a5fd4518d05f62');
201
+ });
202
+
203
+ it('Returns empty data if no valid requests are passed', function () {
204
+ let serverRequest = spec.buildRequests([]);
205
+ expect(serverRequest).to.be.an('array').that.is.empty;
206
+ });
207
+ });
208
+
209
+ describe('build Banner Request', function () {
210
+ const request = spec.buildRequests([request_banner], bidRequest);
211
+
212
+ it('Creates a ServerRequest object with method, URL and data', function () {
213
+ expect(request).to.exist;
214
+ expect(request.method).to.exist;
215
+ expect(request.url).to.exist;
216
+ expect(request.data).to.exist;
217
+ });
218
+
219
+ it('sends bid request to our endpoint via POST', function () {
220
+ expect(request.method).to.equal('POST');
221
+ });
222
+
223
+ it('Returns valid URL', function () {
224
+ expect(request.url).to.equal('https://point.contextualadv.com/?t=2&partner=1a8d9c22db19906cb8a5fd4518d05f62');
225
+ });
226
+ });
227
+
228
+ describe('build Video Request', function () {
229
+ const request = spec.buildRequests([request_video], bidRequest);
230
+
231
+ it('Creates a ServerRequest object with method, URL and data', function () {
232
+ expect(request).to.exist;
233
+ expect(request.method).to.exist;
234
+ expect(request.url).to.exist;
235
+ expect(request.data).to.exist;
236
+ });
237
+
238
+ it('sends bid request to our endpoint via POST', function () {
239
+ expect(request.method).to.equal('POST');
240
+ });
241
+
242
+ it('Returns valid URL', function () {
243
+ expect(request.url).to.equal('https://point.contextualadv.com/?t=2&partner=1a8d9c22db19906cb8a5fd4518d05f62');
244
+ });
245
+ });
246
+
247
+ describe('interpretResponse', function () {
248
+ it('Empty response must return empty array', function() {
249
+ const emptyResponse = null;
250
+ let response = spec.interpretResponse(emptyResponse);
251
+
252
+ expect(response).to.be.an('array').that.is.empty;
253
+ })
254
+
255
+ it('Should interpret banner response', function () {
256
+ const bannerResponse = {
257
+ body: response_banner
258
+ }
259
+
260
+ const expectedBidResponse = {
261
+ requestId: response_banner.seatbid[0].bid[0].impid,
262
+ cpm: response_banner.seatbid[0].bid[0].price,
263
+ width: response_banner.seatbid[0].bid[0].w,
264
+ height: response_banner.seatbid[0].bid[0].h,
265
+ ttl: response_banner.ttl || 1200,
266
+ currency: response_banner.cur || 'USD',
267
+ netRevenue: true,
268
+ creativeId: response_banner.seatbid[0].bid[0].crid,
269
+ dealId: response_banner.seatbid[0].bid[0].dealid,
270
+ mediaType: 'banner',
271
+ ad: response_banner.seatbid[0].bid[0].adm
272
+ }
273
+
274
+ let bannerResponses = spec.interpretResponse(bannerResponse);
275
+
276
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
277
+ let dataItem = bannerResponses[0];
278
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
279
+ 'netRevenue', 'currency', 'dealId', 'mediaType');
280
+ expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
281
+ expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
282
+ expect(dataItem.ad).to.equal(expectedBidResponse.ad);
283
+ expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
284
+ expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
285
+ expect(dataItem.netRevenue).to.be.true;
286
+ expect(dataItem.currency).to.equal(expectedBidResponse.currency);
287
+ expect(dataItem.width).to.equal(expectedBidResponse.width);
288
+ expect(dataItem.height).to.equal(expectedBidResponse.height);
289
+ });
290
+
291
+ it('Should interpret video response', function () {
292
+ const videoResponse = {
293
+ body: response_video
294
+ }
295
+
296
+ const expectedBidResponse = {
297
+ requestId: response_video.seatbid[0].bid[0].impid,
298
+ cpm: response_video.seatbid[0].bid[0].price,
299
+ width: response_video.seatbid[0].bid[0].w,
300
+ height: response_video.seatbid[0].bid[0].h,
301
+ ttl: response_video.ttl || 1200,
302
+ currency: response_video.cur || 'USD',
303
+ netRevenue: true,
304
+ creativeId: response_video.seatbid[0].bid[0].crid,
305
+ dealId: response_video.seatbid[0].bid[0].dealid,
306
+ mediaType: 'video',
307
+ vastUrl: response_video.seatbid[0].bid[0].adm
308
+ }
309
+
310
+ let videoResponses = spec.interpretResponse(videoResponse);
311
+
312
+ expect(videoResponses).to.be.an('array').that.is.not.empty;
313
+ let dataItem = videoResponses[0];
314
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'vastUrl', 'ttl', 'creativeId',
315
+ 'netRevenue', 'currency', 'dealId', 'mediaType');
316
+ expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
317
+ expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
318
+ expect(dataItem.vastUrl).to.equal(expectedBidResponse.vastUrl)
319
+ expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
320
+ expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
321
+ expect(dataItem.netRevenue).to.be.true;
322
+ expect(dataItem.currency).to.equal(expectedBidResponse.currency);
323
+ expect(dataItem.width).to.equal(expectedBidResponse.width);
324
+ expect(dataItem.height).to.equal(expectedBidResponse.height);
325
+ });
326
+
327
+ it('Should interpret native response', function () {
328
+ const nativeResponse = {
329
+ body: response_native
330
+ }
331
+
332
+ const expectedBidResponse = {
333
+ requestId: response_native.seatbid[0].bid[0].impid,
334
+ cpm: response_native.seatbid[0].bid[0].price,
335
+ width: response_native.seatbid[0].bid[0].w,
336
+ height: response_native.seatbid[0].bid[0].h,
337
+ ttl: response_native.ttl || 1200,
338
+ currency: response_native.cur || 'USD',
339
+ netRevenue: true,
340
+ creativeId: response_native.seatbid[0].bid[0].crid,
341
+ dealId: response_native.seatbid[0].bid[0].dealid,
342
+ mediaType: 'native',
343
+ native: {clickUrl: response_native.seatbid[0].bid[0].adm.native.link.url}
344
+ }
345
+
346
+ let nativeResponses = spec.interpretResponse(nativeResponse);
347
+
348
+ expect(nativeResponses).to.be.an('array').that.is.not.empty;
349
+ let dataItem = nativeResponses[0];
350
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'native', 'ttl', 'creativeId',
351
+ 'netRevenue', 'currency', 'dealId', 'mediaType');
352
+ expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
353
+ expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
354
+ expect(dataItem.native.clickUrl).to.equal(expectedBidResponse.native.clickUrl)
355
+ expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
356
+ expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
357
+ expect(dataItem.netRevenue).to.be.true;
358
+ expect(dataItem.currency).to.equal(expectedBidResponse.currency);
359
+ expect(dataItem.width).to.equal(expectedBidResponse.width);
360
+ expect(dataItem.height).to.equal(expectedBidResponse.height);
361
+ });
362
+ });
363
+ })
@@ -25,6 +25,25 @@ describe('Zeta Ssp Bid Adapter', function () {
25
25
  }
26
26
  ];
27
27
 
28
+ const params = {
29
+ user: {
30
+ uid: 222,
31
+ buyeruid: 333
32
+ },
33
+ tags: {
34
+ someTag: 444,
35
+ },
36
+ sid: 'publisherId',
37
+ shortname: 'test_shortname',
38
+ site: {
39
+ page: 'testPage'
40
+ },
41
+ app: {
42
+ bundle: 'testBundle'
43
+ },
44
+ test: 1
45
+ };
46
+
28
47
  const bannerRequest = [{
29
48
  bidId: 12345,
30
49
  auctionId: 67890,
@@ -41,18 +60,7 @@ describe('Zeta Ssp Bid Adapter', function () {
41
60
  consentString: 'consentString'
42
61
  },
43
62
  uspConsent: 'someCCPAString',
44
- params: {
45
- placement: 111,
46
- user: {
47
- uid: 222,
48
- buyeruid: 333
49
- },
50
- tags: {
51
- someTag: 444,
52
- sid: 'publisherId'
53
- },
54
- test: 1
55
- },
63
+ params: params,
56
64
  userIdAsEids: eids
57
65
  }];
58
66
 
@@ -72,18 +80,7 @@ describe('Zeta Ssp Bid Adapter', function () {
72
80
  refererInfo: {
73
81
  referer: 'http://www.zetaglobal.com/page?param=video'
74
82
  },
75
- params: {
76
- placement: 111,
77
- user: {
78
- uid: 222,
79
- buyeruid: 333
80
- },
81
- tags: {
82
- someTag: 444,
83
- sid: 'publisherId'
84
- },
85
- test: 1
86
- },
83
+ params: params
87
84
  }];
88
85
 
89
86
  it('Test the bid validation function', function () {
@@ -269,4 +266,20 @@ describe('Zeta Ssp Bid Adapter', function () {
269
266
 
270
267
  expect(payload.imp[0].banner).to.be.undefined;
271
268
  });
269
+
270
+ it('Test required params in banner request', function () {
271
+ const request = spec.buildRequests(bannerRequest, bannerRequest[0]);
272
+ const payload = JSON.parse(request.data);
273
+ expect(payload.ext.sid).to.eql('publisherId');
274
+ expect(payload.ext.tags.someTag).to.eql(444);
275
+ expect(payload.ext.tags.shortname).to.eql('test_shortname');
276
+ });
277
+
278
+ it('Test required params in video request', function () {
279
+ const request = spec.buildRequests(videoRequest, videoRequest[0]);
280
+ const payload = JSON.parse(request.data);
281
+ expect(payload.ext.sid).to.eql('publisherId');
282
+ expect(payload.ext.tags.someTag).to.eql(444);
283
+ expect(payload.ext.tags.shortname).to.eql('test_shortname');
284
+ });
272
285
  });