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.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/cpexIdSystem.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -0
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +113 -111
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/oneVideoBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +3 -3
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sortableBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/trustxBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/videoheroesBidAdapter.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/userId_example.html +3 -0
- package/modules/.submodules.json +2 -1
- package/modules/cpexIdSystem.js +1 -2
- package/modules/dacIdSystem.md +4 -4
- package/modules/gravitoIdSystem.js +57 -0
- package/modules/gravitoIdSystem.md +28 -0
- package/modules/jixieBidAdapter.js +2 -0
- package/modules/oguryBidAdapter.js +27 -1
- package/modules/userId/eids.js +6 -0
- package/modules/userId/userId.md +3 -0
- package/modules/videoheroesBidAdapter.js +267 -0
- package/modules/videoheroesBidAdapter.md +134 -0
- package/modules/zeta_global_sspBidAdapter.js +1 -1
- package/package.json +1 -1
- package/test/spec/modules/gravitoIdSystem_spec.js +51 -0
- package/test/spec/modules/jixieBidAdapter_spec.js +17 -0
- package/test/spec/modules/oguryBidAdapter_spec.js +181 -3
- package/test/spec/modules/videoheroesBidAdapter_spec.js +363 -0
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +37 -24
- 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.
|
|
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.
|
|
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.
|
|
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
|
});
|