prebid.js 6.7.0 → 6.11.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/.eslintrc.js +8 -1
- package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
- package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
- package/integrationExamples/gpt/userId_example.html +2 -2
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
- package/integrationExamples/gpt/x-domain/creative.html +63 -29
- package/modules/.submodules.json +3 -0
- package/modules/adagioBidAdapter.js +0 -8
- package/modules/adagioBidAdapter.md +1 -1
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/adnuntiusRtdProvider.js +96 -0
- package/modules/adnuntiusRtdProvider.md +41 -0
- package/modules/adotBidAdapter.js +516 -567
- package/modules/adotBidAdapter.md +6 -44
- package/modules/adpod.js +12 -14
- package/modules/adyoulikeBidAdapter.js +2 -0
- package/modules/appnexusBidAdapter.js +14 -2
- package/modules/asealBidAdapter.js +58 -0
- package/modules/asealBidAdapter.md +52 -0
- package/modules/brandmetricsRtdProvider.js +168 -0
- package/modules/brandmetricsRtdProvider.md +40 -0
- package/modules/conversantBidAdapter.js +7 -0
- package/modules/criteoBidAdapter.js +9 -0
- package/modules/currency.js +27 -5
- package/modules/displayioBidAdapter.js +157 -0
- package/modules/displayioBidAdapter.md +148 -0
- package/modules/dspxBidAdapter.js +69 -29
- package/modules/dspxBidAdapter.md +2 -1
- package/modules/e_volutionBidAdapter.js +158 -0
- package/modules/gridBidAdapter.js +15 -1
- package/modules/gumgumBidAdapter.js +52 -38
- package/modules/hadronIdSystem.js +96 -0
- package/modules/hadronIdSystem.md +35 -0
- package/modules/hadronRtdProvider.js +254 -0
- package/modules/hadronRtdProvider.md +126 -0
- package/modules/haloIdSystem.md +4 -35
- package/modules/haloRtdProvider.md +3 -126
- package/modules/imRtdProvider.js +10 -0
- package/modules/improvedigitalBidAdapter.js +5 -0
- package/modules/interactiveOffersBidAdapter.js +9 -6
- package/modules/iqzoneBidAdapter.js +10 -3
- package/modules/iqzoneBidAdapter.md +16 -0
- package/modules/ixBidAdapter.js +2 -6
- package/modules/kubientBidAdapter.js +50 -19
- package/modules/lunamediahbBidAdapter.js +32 -4
- package/modules/malltvBidAdapter.js +7 -3
- package/modules/malltvBidAdapter.md +64 -51
- package/modules/mass.js +3 -5
- package/modules/mediakeysBidAdapter.js +0 -5
- package/modules/medianetAnalyticsAdapter.js +1 -1
- package/modules/mediasquareBidAdapter.js +9 -1
- package/modules/nextMillenniumBidAdapter.js +1 -0
- package/modules/oguryBidAdapter.js +7 -14
- package/modules/prebidServerBidAdapter/index.js +61 -39
- package/modules/priceFloors.js +20 -12
- package/modules/pubmaticBidAdapter.js +1 -1
- package/modules/richaudienceBidAdapter.js +8 -3
- package/modules/riseBidAdapter.js +17 -6
- package/modules/rtbhouseBidAdapter.js +2 -0
- package/modules/rubiconAnalyticsAdapter.js +5 -0
- package/modules/rubiconBidAdapter.js +2 -2
- package/modules/sizeMappingV2.js +1 -8
- package/modules/sortableAnalyticsAdapter.js +5 -4
- package/modules/sovrnBidAdapter.js +93 -18
- package/modules/sovrnBidAdapter.md +80 -2
- package/modules/sspBCBidAdapter.js +53 -20
- package/modules/telariaBidAdapter.js +22 -29
- package/modules/trustpidSystem.js +197 -0
- package/modules/trustpidSystem.md +45 -0
- package/modules/undertoneBidAdapter.js +17 -1
- package/modules/userId/eids.js +16 -1
- package/modules/userId/eids.md +10 -2
- package/modules/userId/userId.md +17 -2
- package/modules/vibrantmediaBidAdapter.js +220 -0
- package/modules/vibrantmediaBidAdapter.md +92 -0
- package/modules/vidoomyBidAdapter.js +8 -0
- package/modules/vidoomyBidAdapter.md +4 -2
- package/modules/weboramaRtdProvider.js +264 -34
- package/modules/weboramaRtdProvider.md +110 -40
- package/modules/yahoosspBidAdapter.js +3 -1
- package/modules/yieldoneBidAdapter.js +6 -0
- package/package.json +2 -1
- package/src/adRendering.js +38 -0
- package/src/adapterManager.js +24 -19
- package/src/adapters/bidderFactory.js +14 -11
- package/src/adloader.js +2 -1
- package/src/auction.js +138 -115
- package/src/auctionIndex.js +85 -0
- package/src/auctionManager.js +3 -0
- package/src/bidderSettings.js +69 -0
- package/src/bidfactory.js +18 -6
- package/src/native.js +29 -21
- package/src/prebid.js +3 -19
- package/src/secureCreatives.js +128 -45
- package/src/targeting.js +11 -2
- package/src/utils.js +14 -17
- package/src/video.js +10 -11
- package/src/videoCache.js +10 -9
- package/test/fixtures/fixtures.js +2 -1
- package/test/helpers/indexStub.js +28 -0
- package/test/helpers/syncPromise.js +71 -0
- package/test/spec/auctionmanager_spec.js +268 -89
- package/test/spec/config_spec.js +24 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
- package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
- package/test/spec/modules/adotBidAdapter_spec.js +294 -3124
- package/test/spec/modules/adpod_spec.js +91 -156
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +4 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
- package/test/spec/modules/asealBidAdapter_spec.js +144 -0
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
- package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
- package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
- package/test/spec/modules/currency_spec.js +36 -15
- package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
- package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
- package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
- package/test/spec/modules/eids_spec.js +2 -2
- package/test/spec/modules/gridBidAdapter_spec.js +18 -0
- package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
- package/test/spec/modules/hadronIdSystem_spec.js +57 -0
- package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
- package/test/spec/modules/imRtdProvider_spec.js +30 -1
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
- package/test/spec/modules/iqzoneBidAdapter_spec.js +1 -0
- package/test/spec/modules/ixBidAdapter_spec.js +1 -1
- package/test/spec/modules/kubientBidAdapter_spec.js +182 -84
- package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
- package/test/spec/modules/mass_spec.js +2 -14
- package/test/spec/modules/mediakeysBidAdapter_spec.js +9 -5
- package/test/spec/modules/mediasquareBidAdapter_spec.js +25 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
- package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
- package/test/spec/modules/priceFloors_spec.js +83 -24
- package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
- package/test/spec/modules/riseBidAdapter_spec.js +30 -4
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +31 -1
- package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
- package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
- package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
- package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
- package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
- package/test/spec/modules/trustpidSystem_spec.js +232 -0
- package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
- package/test/spec/modules/userId_spec.js +39 -39
- package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +7 -1
- package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
- package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
- package/test/spec/native_spec.js +62 -40
- package/test/spec/unit/core/adapterManager_spec.js +22 -0
- package/test/spec/unit/core/auctionIndex_spec.js +129 -0
- package/test/spec/unit/core/bidderFactory_spec.js +65 -12
- package/test/spec/unit/core/bidderSettings_spec.js +123 -0
- package/test/spec/unit/core/targeting_spec.js +93 -0
- package/test/spec/unit/pbjs_api_spec.js +80 -42
- package/test/spec/unit/secureCreatives_spec.js +143 -24
- package/test/spec/videoCache_spec.js +18 -19
- package/test/spec/video_spec.js +51 -61
|
@@ -51,7 +51,8 @@ describe('imRtdProvider', function () {
|
|
|
51
51
|
describe('getBidderFunction', function () {
|
|
52
52
|
const assumedBidder = [
|
|
53
53
|
'ix',
|
|
54
|
-
'pubmatic'
|
|
54
|
+
'pubmatic',
|
|
55
|
+
'fluct'
|
|
55
56
|
];
|
|
56
57
|
assumedBidder.forEach(bidderName => {
|
|
57
58
|
it(`should return bidderFunction with assumed bidder: ${bidderName}`, function () {
|
|
@@ -70,6 +71,34 @@ describe('imRtdProvider', function () {
|
|
|
70
71
|
it(`should return null with unexpected bidder`, function () {
|
|
71
72
|
expect(getBidderFunction('test')).to.equal(null);
|
|
72
73
|
});
|
|
74
|
+
describe('fluct bidder function', function () {
|
|
75
|
+
it('should return a bid w/o im_segments if not any exists', function () {
|
|
76
|
+
const bid = {bidder: 'fluct'};
|
|
77
|
+
expect(getBidderFunction('fluct')(bid, '')).to.eql(bid);
|
|
78
|
+
});
|
|
79
|
+
it('should return a bid w/ im_segments if any exists', function () {
|
|
80
|
+
const bid = {
|
|
81
|
+
bidder: 'fluct',
|
|
82
|
+
params: {
|
|
83
|
+
kv: {
|
|
84
|
+
foo: ['foo1']
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
expect(getBidderFunction('fluct')(bid, {im_segments: ['12345', '67890']}))
|
|
89
|
+
.to.eql(
|
|
90
|
+
{
|
|
91
|
+
bidder: 'fluct',
|
|
92
|
+
params: {
|
|
93
|
+
kv: {
|
|
94
|
+
foo: ['foo1'],
|
|
95
|
+
imsids: ['12345', '67890']
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
73
102
|
})
|
|
74
103
|
|
|
75
104
|
describe('getCustomBidderFunction', function () {
|
|
@@ -557,6 +557,25 @@ describe('Improve Digital Adapter Tests', function () {
|
|
|
557
557
|
]
|
|
558
558
|
);
|
|
559
559
|
});
|
|
560
|
+
|
|
561
|
+
it('should set coppa', function() {
|
|
562
|
+
sinon.stub(config, 'getConfig')
|
|
563
|
+
.withArgs('coppa')
|
|
564
|
+
.returns(true);
|
|
565
|
+
const bidRequest = Object.assign({}, simpleBidRequest);
|
|
566
|
+
const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
|
|
567
|
+
const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
|
|
568
|
+
expect(params.bid_request.coppa).to.equal(1);
|
|
569
|
+
|
|
570
|
+
config.getConfig.restore();
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
it('should undefined coppa', function() {
|
|
574
|
+
const bidRequest = Object.assign({}, simpleBidRequest);
|
|
575
|
+
const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
|
|
576
|
+
const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
|
|
577
|
+
expect(params.bid_request.coppa).to.equal(undefined);
|
|
578
|
+
});
|
|
560
579
|
});
|
|
561
580
|
|
|
562
581
|
const serverResponse = {
|
|
@@ -143,6 +143,7 @@ describe('IQZoneBidAdapter', function () {
|
|
|
143
143
|
expect(placement.bidId).to.be.a('string');
|
|
144
144
|
expect(placement.schain).to.be.an('object');
|
|
145
145
|
expect(placement.bidfloor).to.exist.and.to.equal(0);
|
|
146
|
+
expect(placement.type).to.exist.and.to.equal('publisher');
|
|
146
147
|
|
|
147
148
|
if (placement.adFormat === BANNER) {
|
|
148
149
|
expect(placement.sizes).to.be.an('array');
|
|
@@ -1230,7 +1230,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
1230
1230
|
const r = JSON.parse(request.data.r);
|
|
1231
1231
|
|
|
1232
1232
|
expect(r.ext.ixdiag.userIds).to.be.an('array');
|
|
1233
|
-
expect(r.ext.ixdiag.userIds.should.include('lotamePanoramaId'));
|
|
1233
|
+
expect(r.ext.ixdiag.userIds.should.not.include('lotamePanoramaId'));
|
|
1234
1234
|
expect(r.ext.ixdiag.userIds.should.not.include('merkleId'));
|
|
1235
1235
|
expect(r.ext.ixdiag.userIds.should.not.include('parrableId'));
|
|
1236
1236
|
});
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { expect, assert } from 'chai';
|
|
2
2
|
import { spec } from 'modules/kubientBidAdapter.js';
|
|
3
3
|
import { BANNER, VIDEO } from '../../../src/mediaTypes.js';
|
|
4
|
+
import {config} from '../../../src/config';
|
|
5
|
+
|
|
6
|
+
function encodeQueryData(data) {
|
|
7
|
+
return Object.keys(data).map(function(key) {
|
|
8
|
+
return [key, data[key]].map(encodeURIComponent).join('=');
|
|
9
|
+
}).join('&');
|
|
10
|
+
}
|
|
4
11
|
|
|
5
12
|
describe('KubientAdapter', function () {
|
|
6
13
|
let bidBanner = {
|
|
@@ -94,24 +101,20 @@ describe('KubientAdapter', function () {
|
|
|
94
101
|
uspConsent: uspConsentData
|
|
95
102
|
};
|
|
96
103
|
describe('buildRequestBanner', function () {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
expect(serverRequests).to.be.an('array');
|
|
104
|
+
beforeEach(function () {
|
|
105
|
+
config.resetConfig();
|
|
100
106
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
107
|
+
it('Creates Banner 1 ServerRequest object with method, URL and data', function () {
|
|
108
|
+
config.setConfig({'coppa': false});
|
|
109
|
+
let serverRequests = spec.buildRequests([bidBanner], Object.assign({}, bidderRequest, {bids: [bidBanner]}));
|
|
110
|
+
expect(serverRequests).to.be.an('array');
|
|
111
|
+
for (let i = 0; i < serverRequests.length; i++) {
|
|
112
|
+
let serverRequest = serverRequests[i];
|
|
104
113
|
expect(serverRequest.method).to.be.a('string');
|
|
105
114
|
expect(serverRequest.url).to.be.a('string');
|
|
106
115
|
expect(serverRequest.data).to.be.a('string');
|
|
107
|
-
});
|
|
108
|
-
it('Returns POST method', function () {
|
|
109
116
|
expect(serverRequest.method).to.equal('POST');
|
|
110
|
-
});
|
|
111
|
-
it('Returns valid URL', function () {
|
|
112
117
|
expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
|
|
113
|
-
});
|
|
114
|
-
it('Returns valid data if array of bids is valid', function () {
|
|
115
118
|
let data = JSON.parse(serverRequest.data);
|
|
116
119
|
expect(data).to.be.an('object');
|
|
117
120
|
expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
|
|
@@ -131,28 +134,24 @@ describe('KubientAdapter', function () {
|
|
|
131
134
|
expect(adSlot.schain).to.be.an('object');
|
|
132
135
|
expect(adSlot.banner).to.be.an('object');
|
|
133
136
|
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
136
139
|
});
|
|
137
140
|
describe('buildRequestVideo', function () {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
expect(serverRequests).to.be.an('array');
|
|
141
|
+
beforeEach(function () {
|
|
142
|
+
config.resetConfig();
|
|
141
143
|
});
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
it('Creates Video 1 ServerRequest object with method, URL and data', function () {
|
|
145
|
+
config.setConfig({'coppa': false});
|
|
146
|
+
let serverRequests = spec.buildRequests([bidVideo], Object.assign({}, bidderRequest, {bids: [bidVideo]}));
|
|
147
|
+
expect(serverRequests).to.be.an('array');
|
|
148
|
+
for (let i = 0; i < serverRequests.length; i++) {
|
|
149
|
+
let serverRequest = serverRequests[i];
|
|
145
150
|
expect(serverRequest.method).to.be.a('string');
|
|
146
151
|
expect(serverRequest.url).to.be.a('string');
|
|
147
152
|
expect(serverRequest.data).to.be.a('string');
|
|
148
|
-
});
|
|
149
|
-
it('Returns POST method', function () {
|
|
150
153
|
expect(serverRequest.method).to.equal('POST');
|
|
151
|
-
});
|
|
152
|
-
it('Returns valid URL', function () {
|
|
153
154
|
expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
|
|
154
|
-
});
|
|
155
|
-
it('Returns valid data if array of bids is valid', function () {
|
|
156
155
|
let data = JSON.parse(serverRequest.data);
|
|
157
156
|
expect(data).to.be.an('object');
|
|
158
157
|
expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
|
|
@@ -172,11 +171,89 @@ describe('KubientAdapter', function () {
|
|
|
172
171
|
expect(adSlot.schain).to.be.an('object');
|
|
173
172
|
expect(adSlot.video).to.be.an('object');
|
|
174
173
|
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('buildRequestBanner', function () {
|
|
178
|
+
beforeEach(function () {
|
|
179
|
+
config.resetConfig();
|
|
180
|
+
});
|
|
181
|
+
it('Creates Banner 2 ServerRequest object with method, URL and data with bidBanner', function () {
|
|
182
|
+
config.setConfig({'coppa': true});
|
|
183
|
+
let serverRequests = spec.buildRequests([bidBanner], Object.assign({}, bidderRequest, {bids: [bidBanner]}));
|
|
184
|
+
expect(serverRequests).to.be.an('array');
|
|
185
|
+
for (let i = 0; i < serverRequests.length; i++) {
|
|
186
|
+
let serverRequest = serverRequests[i];
|
|
187
|
+
expect(serverRequest.method).to.be.a('string');
|
|
188
|
+
expect(serverRequest.url).to.be.a('string');
|
|
189
|
+
expect(serverRequest.data).to.be.a('string');
|
|
190
|
+
expect(serverRequest.method).to.equal('POST');
|
|
191
|
+
expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
|
|
192
|
+
let data = JSON.parse(serverRequest.data);
|
|
193
|
+
expect(data).to.be.an('object');
|
|
194
|
+
expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'coppa', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
|
|
195
|
+
expect(data.v).to.exist.and.to.be.a('string');
|
|
196
|
+
expect(data.requestId).to.exist.and.to.be.a('string');
|
|
197
|
+
expect(data.coppa).to.be.a('number').and.to.equal(1);
|
|
198
|
+
expect(data.referer).to.be.a('string');
|
|
199
|
+
expect(data.tmax).to.exist.and.to.be.a('number');
|
|
200
|
+
expect(data.gdpr).to.exist.and.to.be.within(0, 1);
|
|
201
|
+
expect(data.consent).to.equal(consentString);
|
|
202
|
+
expect(data.uspConsent).to.exist.and.to.equal(uspConsentData);
|
|
203
|
+
for (let j = 0; j < data['adSlots'].length; j++) {
|
|
204
|
+
let adSlot = data['adSlots'][i];
|
|
205
|
+
expect(adSlot).to.have.all.keys('bidId', 'zoneId', 'floor', 'banner', 'schain');
|
|
206
|
+
expect(adSlot.bidId).to.be.a('string').and.to.equal(bidBanner.bidId);
|
|
207
|
+
expect(adSlot.zoneId).to.be.a('string').and.to.equal(bidBanner.params.zoneid);
|
|
208
|
+
expect(adSlot.floor).to.be.a('number');
|
|
209
|
+
expect(adSlot.schain).to.be.an('object');
|
|
210
|
+
expect(adSlot.banner).to.be.an('object');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe('buildRequestVideo', function () {
|
|
216
|
+
beforeEach(function () {
|
|
217
|
+
config.resetConfig();
|
|
218
|
+
});
|
|
219
|
+
it('Creates Video 2 ServerRequest object with method, URL and data', function () {
|
|
220
|
+
config.setConfig({'coppa': true});
|
|
221
|
+
let serverRequests = spec.buildRequests([bidVideo], Object.assign({}, bidderRequest, {bids: [bidVideo]}));
|
|
222
|
+
expect(serverRequests).to.be.an('array');
|
|
223
|
+
for (let i = 0; i < serverRequests.length; i++) {
|
|
224
|
+
let serverRequest = serverRequests[i];
|
|
225
|
+
expect(serverRequest.method).to.be.a('string');
|
|
226
|
+
expect(serverRequest.url).to.be.a('string');
|
|
227
|
+
expect(serverRequest.data).to.be.a('string');
|
|
228
|
+
expect(serverRequest.method).to.equal('POST');
|
|
229
|
+
expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
|
|
230
|
+
let data = JSON.parse(serverRequest.data);
|
|
231
|
+
expect(data).to.be.an('object');
|
|
232
|
+
expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'coppa', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
|
|
233
|
+
expect(data.v).to.exist.and.to.be.a('string');
|
|
234
|
+
expect(data.requestId).to.exist.and.to.be.a('string');
|
|
235
|
+
expect(data.coppa).to.be.a('number').and.to.equal(1);
|
|
236
|
+
expect(data.referer).to.be.a('string');
|
|
237
|
+
expect(data.tmax).to.exist.and.to.be.a('number');
|
|
238
|
+
expect(data.gdpr).to.exist.and.to.be.within(0, 1);
|
|
239
|
+
expect(data.consent).to.equal(consentString);
|
|
240
|
+
expect(data.uspConsent).to.exist.and.to.equal(uspConsentData);
|
|
241
|
+
for (let j = 0; j < data['adSlots'].length; j++) {
|
|
242
|
+
let adSlot = data['adSlots'][i];
|
|
243
|
+
expect(adSlot).to.have.all.keys('bidId', 'zoneId', 'floor', 'video', 'schain');
|
|
244
|
+
expect(adSlot.bidId).to.be.a('string').and.to.equal(bidVideo.bidId);
|
|
245
|
+
expect(adSlot.zoneId).to.be.a('string').and.to.equal(bidVideo.params.zoneid);
|
|
246
|
+
expect(adSlot.floor).to.be.a('number');
|
|
247
|
+
expect(adSlot.schain).to.be.an('object');
|
|
248
|
+
expect(adSlot.video).to.be.an('object');
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
177
252
|
});
|
|
178
|
-
|
|
179
253
|
describe('isBidRequestValid', function () {
|
|
254
|
+
beforeEach(function () {
|
|
255
|
+
config.resetConfig();
|
|
256
|
+
});
|
|
180
257
|
it('Should return true when required params are found', function () {
|
|
181
258
|
expect(spec.isBidRequestValid(bidBanner)).to.be.true;
|
|
182
259
|
expect(spec.isBidRequestValid(bidVideo)).to.be.true;
|
|
@@ -192,8 +269,10 @@ describe('KubientAdapter', function () {
|
|
|
192
269
|
expect(spec.isBidRequestValid(bidVideo)).to.be.false;
|
|
193
270
|
});
|
|
194
271
|
});
|
|
195
|
-
|
|
196
272
|
describe('interpretResponse', function () {
|
|
273
|
+
beforeEach(function () {
|
|
274
|
+
config.resetConfig();
|
|
275
|
+
});
|
|
197
276
|
it('Should interpret response', function () {
|
|
198
277
|
const serverResponse = {
|
|
199
278
|
body:
|
|
@@ -234,7 +313,6 @@ describe('KubientAdapter', function () {
|
|
|
234
313
|
expect(dataItem.meta).to.exist.and.to.be.a('object');
|
|
235
314
|
expect(dataItem.meta.advertiserDomains).to.exist.and.to.be.a('array').and.to.equal(serverResponse.body.seatbid[0].bid[0].meta.adomain);
|
|
236
315
|
});
|
|
237
|
-
|
|
238
316
|
it('Should return no ad when not given a server response', function () {
|
|
239
317
|
const ads = spec.interpretResponse(null);
|
|
240
318
|
expect(ads).to.be.an('array').and.to.have.length(0);
|
|
@@ -242,6 +320,9 @@ describe('KubientAdapter', function () {
|
|
|
242
320
|
});
|
|
243
321
|
|
|
244
322
|
describe('interpretResponse Video', function () {
|
|
323
|
+
beforeEach(function () {
|
|
324
|
+
config.resetConfig();
|
|
325
|
+
});
|
|
245
326
|
it('Should interpret response', function () {
|
|
246
327
|
const serverResponse = {
|
|
247
328
|
body:
|
|
@@ -285,7 +366,6 @@ describe('KubientAdapter', function () {
|
|
|
285
366
|
expect(dataItem.mediaType).to.exist.and.to.equal(VIDEO);
|
|
286
367
|
expect(dataItem.vastXml).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].adm);
|
|
287
368
|
});
|
|
288
|
-
|
|
289
369
|
it('Should return no ad when not given a server response', function () {
|
|
290
370
|
const ads = spec.interpretResponse(null);
|
|
291
371
|
expect(ads).to.be.an('array').and.to.have.length(0);
|
|
@@ -293,89 +373,68 @@ describe('KubientAdapter', function () {
|
|
|
293
373
|
});
|
|
294
374
|
|
|
295
375
|
describe('getUserSyncs', function () {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
iframeEnabled: true
|
|
299
|
-
};
|
|
300
|
-
let serverResponses = null;
|
|
301
|
-
let gdprConsent = {
|
|
302
|
-
consentString: consentString
|
|
303
|
-
};
|
|
304
|
-
let uspConsent = null;
|
|
305
|
-
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
306
|
-
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
307
|
-
expect(syncs[0].type).to.equal('iframe');
|
|
308
|
-
expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.html?consent_str=' + consentString + '&consent_given=0');
|
|
309
|
-
});
|
|
310
|
-
it('should register the sync iframe with gdpr', function () {
|
|
311
|
-
let syncOptions = {
|
|
312
|
-
iframeEnabled: true
|
|
313
|
-
};
|
|
314
|
-
let serverResponses = null;
|
|
315
|
-
let gdprConsent = {
|
|
316
|
-
gdprApplies: true,
|
|
317
|
-
consentString: consentString
|
|
318
|
-
};
|
|
319
|
-
let uspConsent = null;
|
|
320
|
-
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
321
|
-
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
322
|
-
expect(syncs[0].type).to.equal('iframe');
|
|
323
|
-
expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.html?consent_str=' + consentString + '&gdpr=1&consent_given=0');
|
|
324
|
-
});
|
|
325
|
-
it('should register the sync iframe with gdpr vendor', function () {
|
|
326
|
-
let syncOptions = {
|
|
327
|
-
iframeEnabled: true
|
|
328
|
-
};
|
|
329
|
-
let serverResponses = null;
|
|
330
|
-
let gdprConsent = {
|
|
331
|
-
gdprApplies: true,
|
|
332
|
-
consentString: consentString,
|
|
333
|
-
apiVersion: 1,
|
|
334
|
-
vendorData: {
|
|
335
|
-
vendorConsents: {
|
|
336
|
-
794: 1
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
};
|
|
340
|
-
let uspConsent = null;
|
|
341
|
-
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
342
|
-
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
343
|
-
expect(syncs[0].type).to.equal('iframe');
|
|
344
|
-
expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.html?consent_str=' + consentString + '&gdpr=1&consent_given=1');
|
|
376
|
+
beforeEach(function () {
|
|
377
|
+
config.resetConfig();
|
|
345
378
|
});
|
|
346
379
|
it('should register the sync image without gdpr', function () {
|
|
347
380
|
let syncOptions = {
|
|
348
381
|
pixelEnabled: true
|
|
349
382
|
};
|
|
383
|
+
let values = {};
|
|
350
384
|
let serverResponses = null;
|
|
351
385
|
let gdprConsent = {
|
|
352
386
|
consentString: consentString
|
|
353
387
|
};
|
|
354
388
|
let uspConsent = null;
|
|
389
|
+
config.setConfig({
|
|
390
|
+
userSync: {
|
|
391
|
+
filterSettings: {
|
|
392
|
+
image: {
|
|
393
|
+
bidders: '*',
|
|
394
|
+
filter: 'include'
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
});
|
|
355
399
|
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
400
|
+
values['consent'] = consentString;
|
|
356
401
|
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
357
402
|
expect(syncs[0].type).to.equal('image');
|
|
358
|
-
expect(syncs[0].url).to.equal('https://
|
|
403
|
+
expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
|
|
359
404
|
});
|
|
360
405
|
it('should register the sync image with gdpr', function () {
|
|
361
406
|
let syncOptions = {
|
|
362
407
|
pixelEnabled: true
|
|
363
408
|
};
|
|
409
|
+
let values = {};
|
|
364
410
|
let serverResponses = null;
|
|
365
411
|
let gdprConsent = {
|
|
366
412
|
gdprApplies: true,
|
|
367
413
|
consentString: consentString
|
|
368
414
|
};
|
|
369
415
|
let uspConsent = null;
|
|
416
|
+
config.setConfig({
|
|
417
|
+
userSync: {
|
|
418
|
+
filterSettings: {
|
|
419
|
+
image: {
|
|
420
|
+
bidders: '*',
|
|
421
|
+
filter: 'include'
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
});
|
|
370
426
|
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
427
|
+
values['gdpr'] = 1;
|
|
428
|
+
values['consent'] = consentString;
|
|
371
429
|
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
372
430
|
expect(syncs[0].type).to.equal('image');
|
|
373
|
-
expect(syncs[0].url).to.equal('https://
|
|
431
|
+
expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
|
|
374
432
|
});
|
|
375
433
|
it('should register the sync image with gdpr vendor', function () {
|
|
376
434
|
let syncOptions = {
|
|
377
435
|
pixelEnabled: true
|
|
378
436
|
};
|
|
437
|
+
let values = {};
|
|
379
438
|
let serverResponses = null;
|
|
380
439
|
let gdprConsent = {
|
|
381
440
|
gdprApplies: true,
|
|
@@ -390,10 +449,49 @@ describe('KubientAdapter', function () {
|
|
|
390
449
|
}
|
|
391
450
|
};
|
|
392
451
|
let uspConsent = null;
|
|
452
|
+
config.setConfig({
|
|
453
|
+
userSync: {
|
|
454
|
+
filterSettings: {
|
|
455
|
+
image: {
|
|
456
|
+
bidders: '*',
|
|
457
|
+
filter: 'include'
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
463
|
+
values['gdpr'] = 1;
|
|
464
|
+
values['consent'] = consentString;
|
|
465
|
+
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
466
|
+
expect(syncs[0].type).to.equal('image');
|
|
467
|
+
expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
|
|
468
|
+
});
|
|
469
|
+
it('should register the sync image without gdpr and with uspConsent', function () {
|
|
470
|
+
let syncOptions = {
|
|
471
|
+
pixelEnabled: true
|
|
472
|
+
};
|
|
473
|
+
let values = {};
|
|
474
|
+
let serverResponses = null;
|
|
475
|
+
let gdprConsent = {
|
|
476
|
+
consentString: consentString
|
|
477
|
+
};
|
|
478
|
+
let uspConsent = '1YNN';
|
|
479
|
+
config.setConfig({
|
|
480
|
+
userSync: {
|
|
481
|
+
filterSettings: {
|
|
482
|
+
image: {
|
|
483
|
+
bidders: '*',
|
|
484
|
+
filter: 'include'
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
});
|
|
393
489
|
let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
|
|
490
|
+
values['consent'] = consentString;
|
|
491
|
+
values['usp'] = uspConsent;
|
|
394
492
|
expect(syncs).to.be.an('array').and.to.have.length(1);
|
|
395
493
|
expect(syncs[0].type).to.equal('image');
|
|
396
|
-
expect(syncs[0].url).to.equal('https://
|
|
494
|
+
expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
|
|
397
495
|
});
|
|
398
496
|
})
|
|
399
497
|
});
|
|
@@ -80,7 +80,7 @@ describe('LunamediaHBBidAdapter', function () {
|
|
|
80
80
|
expect(data).to.be.an('object');
|
|
81
81
|
let placement = data['placements'][0];
|
|
82
82
|
expect(placement).to.be.an('object');
|
|
83
|
-
expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'wPlayer', 'hPlayer', 'schain');
|
|
83
|
+
expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'wPlayer', 'hPlayer', 'schain', 'videoContext');
|
|
84
84
|
expect(placement.traffic).to.equal(VIDEO);
|
|
85
85
|
expect(placement.wPlayer).to.equal(playerSize[0]);
|
|
86
86
|
expect(placement.hPlayer).to.equal(playerSize[1]);
|
|
@@ -301,4 +301,30 @@ describe('LunamediaHBBidAdapter', function () {
|
|
|
301
301
|
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
302
302
|
});
|
|
303
303
|
});
|
|
304
|
+
|
|
305
|
+
describe('getUserSyncs', function() {
|
|
306
|
+
it('Should return array of objects with proper sync config , include GDPR', function() {
|
|
307
|
+
const syncData = spec.getUserSyncs({}, {}, {
|
|
308
|
+
consentString: 'ALL',
|
|
309
|
+
gdprApplies: true,
|
|
310
|
+
}, {});
|
|
311
|
+
expect(syncData).to.be.an('array').which.is.not.empty;
|
|
312
|
+
expect(syncData[0]).to.be.an('object')
|
|
313
|
+
expect(syncData[0].type).to.be.a('string')
|
|
314
|
+
expect(syncData[0].type).to.equal('image')
|
|
315
|
+
expect(syncData[0].url).to.be.a('string')
|
|
316
|
+
expect(syncData[0].url).to.equal('https://cookie.lmgssp.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
|
|
317
|
+
});
|
|
318
|
+
it('Should return array of objects with proper sync config , include CCPA', function() {
|
|
319
|
+
const syncData = spec.getUserSyncs({}, {}, {}, {
|
|
320
|
+
consentString: '1---'
|
|
321
|
+
});
|
|
322
|
+
expect(syncData).to.be.an('array').which.is.not.empty;
|
|
323
|
+
expect(syncData[0]).to.be.an('object')
|
|
324
|
+
expect(syncData[0].type).to.be.a('string')
|
|
325
|
+
expect(syncData[0].type).to.equal('image')
|
|
326
|
+
expect(syncData[0].url).to.be.a('string')
|
|
327
|
+
expect(syncData[0].url).to.equal('https://cookie.lmgssp.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
|
|
328
|
+
});
|
|
329
|
+
});
|
|
304
330
|
});
|
|
@@ -60,17 +60,9 @@ const mockedNonMassBids = [
|
|
|
60
60
|
},
|
|
61
61
|
];
|
|
62
62
|
|
|
63
|
-
// mock bidder request:
|
|
64
|
-
const mockedBidderRequest = {
|
|
65
|
-
bidderCode: 'ix',
|
|
66
|
-
bidderRequestId: 'bidder-request-id-1'
|
|
67
|
-
};
|
|
68
|
-
|
|
69
63
|
const noop = function() {};
|
|
70
64
|
|
|
71
65
|
describe('MASS Module', function() {
|
|
72
|
-
let bidderRequest = Object.assign({}, mockedBidderRequest);
|
|
73
|
-
|
|
74
66
|
it('should be enabled by default', function() {
|
|
75
67
|
expect(isEnabled).to.equal(true);
|
|
76
68
|
});
|
|
@@ -86,9 +78,7 @@ describe('MASS Module', function() {
|
|
|
86
78
|
const originalBid = Object.assign({}, mockedBid);
|
|
87
79
|
const bid = Object.assign({}, originalBid);
|
|
88
80
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
addBidResponseHook.call({bidderRequest}, noop, 'ad-code-id', bid);
|
|
81
|
+
addBidResponseHook(noop, 'ad-code-id', bid);
|
|
92
82
|
|
|
93
83
|
expect(bid).to.deep.equal(originalBid);
|
|
94
84
|
});
|
|
@@ -100,9 +90,7 @@ describe('MASS Module', function() {
|
|
|
100
90
|
const originalBid = Object.assign({}, mockedBid);
|
|
101
91
|
const bid = Object.assign({}, originalBid);
|
|
102
92
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
addBidResponseHook.call({bidderRequest}, noop, 'ad-code-id', bid);
|
|
93
|
+
addBidResponseHook(noop, 'ad-code-id', bid);
|
|
106
94
|
|
|
107
95
|
expect(bid.ad).to.not.equal(originalBid.ad);
|
|
108
96
|
|
|
@@ -575,12 +575,15 @@ describe('mediakeysBidAdapter', function () {
|
|
|
575
575
|
},
|
|
576
576
|
user: {
|
|
577
577
|
yob: 1985,
|
|
578
|
-
gender: 'm'
|
|
579
|
-
},
|
|
580
|
-
device: {
|
|
578
|
+
gender: 'm',
|
|
581
579
|
geo: {
|
|
582
580
|
country: 'FR',
|
|
583
581
|
city: 'Marseille'
|
|
582
|
+
},
|
|
583
|
+
ext: {
|
|
584
|
+
data: {
|
|
585
|
+
registered: true
|
|
586
|
+
}
|
|
584
587
|
}
|
|
585
588
|
}
|
|
586
589
|
}
|
|
@@ -596,8 +599,9 @@ describe('mediakeysBidAdapter', function () {
|
|
|
596
599
|
expect(data.site.ext.data.category).to.equal('sport');
|
|
597
600
|
expect(data.user.yob).to.equal(1985);
|
|
598
601
|
expect(data.user.gender).to.equal('m');
|
|
599
|
-
expect(data.
|
|
600
|
-
expect(data.
|
|
602
|
+
expect(data.user.geo.country).to.equal('FR');
|
|
603
|
+
expect(data.user.geo.city).to.equal('Marseille');
|
|
604
|
+
expect(data.user.ext.data.registered).to.be.true;
|
|
601
605
|
});
|
|
602
606
|
});
|
|
603
607
|
|
|
@@ -61,7 +61,25 @@ describe('MediaSquare bid adapter tests', function () {
|
|
|
61
61
|
code: 'publishername_atf_desktop_rg_pave'
|
|
62
62
|
},
|
|
63
63
|
}];
|
|
64
|
-
|
|
64
|
+
var FLOORS_PARAMS = [{
|
|
65
|
+
adUnitCode: 'banner-div',
|
|
66
|
+
bidId: 'aaaa1234',
|
|
67
|
+
auctionId: 'bbbb1234',
|
|
68
|
+
transactionId: 'cccc1234',
|
|
69
|
+
mediaTypes: {
|
|
70
|
+
banner: {
|
|
71
|
+
sizes: [
|
|
72
|
+
[300, 250]
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
bidder: 'mediasquare',
|
|
77
|
+
params: {
|
|
78
|
+
owner: 'test',
|
|
79
|
+
code: 'publishername_atf_desktop_rg_pave'
|
|
80
|
+
},
|
|
81
|
+
getFloor: function (a) { return { currency: 'EUR', floor: 1.0 }; },
|
|
82
|
+
}];
|
|
65
83
|
var BID_RESPONSE = {'body': {
|
|
66
84
|
'responses': [{
|
|
67
85
|
'transaction_id': 'cccc1234',
|
|
@@ -117,6 +135,12 @@ describe('MediaSquare bid adapter tests', function () {
|
|
|
117
135
|
expect(requestContent.codes[0]).to.have.property('auctionId').and.to.equal('bbbb1234');
|
|
118
136
|
expect(requestContent.codes[0]).to.have.property('transactionId').and.to.equal('cccc1234');
|
|
119
137
|
expect(requestContent.codes[0]).to.have.property('mediatypes').exist;
|
|
138
|
+
expect(requestContent.codes[0]).to.have.property('floor').exist;
|
|
139
|
+
expect(requestContent.codes[0].floor).to.deep.equal({});
|
|
140
|
+
const requestfloor = spec.buildRequests(FLOORS_PARAMS, DEFAULT_OPTIONS);
|
|
141
|
+
const responsefloor = JSON.parse(requestfloor.data);
|
|
142
|
+
expect(responsefloor.codes[0]).to.have.property('floor').exist;
|
|
143
|
+
expect(responsefloor.codes[0].floor).to.have.property('floor').and.to.equal(1.0);
|
|
120
144
|
});
|
|
121
145
|
|
|
122
146
|
it('Verify parse response', function () {
|