prebid.js 7.45.0 → 7.47.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/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.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/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/criteoIdSystem.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/emtvBidAdapter.js +1 -0
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -0
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.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/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +137 -135
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pairIdSystem.js +1 -0
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- 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/rtbhouseBidAdapter.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/shinezBidAdapter.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/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.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/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.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/vidoomyBidAdapter.js +1 -1
- 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/integrationExamples/gpt/fledge_example.html +103 -0
- package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
- package/libraries/ortbConverter/processors/video.js +1 -0
- package/modules/admaticBidAdapter.js +7 -2
- package/modules/adnuntiusBidAdapter.js +3 -1
- package/modules/appnexusBidAdapter.js +108 -102
- package/modules/bidwatchAnalyticsAdapter.js +2 -0
- package/modules/conversantBidAdapter.js +3 -0
- package/modules/criteoBidAdapter.js +5 -1
- package/modules/criteoIdSystem.js +27 -14
- package/modules/emtvBidAdapter.js +211 -0
- package/modules/emtvBidAdapter.md +79 -0
- package/modules/eskimiBidAdapter.js +72 -0
- package/modules/eskimiBidAdapter.md +34 -0
- package/modules/gridBidAdapter.js +42 -19
- package/modules/ixBidAdapter.js +30 -0
- package/modules/kargoBidAdapter.js +473 -246
- package/modules/kueezRtbBidAdapter.js +16 -4
- package/modules/mediasquareBidAdapter.js +2 -1
- package/modules/minutemediaplusBidAdapter.js +16 -4
- package/modules/missenaBidAdapter.js +1 -1
- package/modules/nativoBidAdapter.js +110 -21
- package/modules/neuwoRtdProvider.js +0 -2
- package/modules/nextMillenniumBidAdapter.js +2 -0
- package/modules/pairIdSystem.js +79 -0
- package/modules/pubmaticBidAdapter.js +12 -9
- package/modules/rtbhouseBidAdapter.js +3 -3
- package/modules/userId/eids.js +6 -0
- package/modules/vidoomyBidAdapter.js +30 -9
- package/modules/vidoomyBidAdapter.md +12 -2
- package/modules/yieldmoBidAdapter.js +15 -5
- package/package.json +1 -1
- package/src/config.js +78 -127
- package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
- package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
- package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
- package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
- package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
- package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
- package/test/spec/modules/criteoIdSystem_spec.js +99 -9
- package/test/spec/modules/emtvBidAdapter_spec.js +400 -0
- package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
- package/test/spec/modules/gridBidAdapter_spec.js +8 -0
- package/test/spec/modules/ixBidAdapter_spec.js +57 -0
- package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
- package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
- package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
- package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/pairIdSystem_spec.js +68 -0
- package/test/spec/modules/pubCommonId_spec.js +0 -17
- package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
- package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +2 -2
- package/test/spec/modules/vidoomyBidAdapter_spec.js +72 -0
- package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
- package/test/spec/unit/pbjs_api_spec.js +19 -3
- package/test/test_index.js +13 -3
- package/dist/gridNMBidAdapter.js +0 -1
- package/modules/gridNMBidAdapter.js +0 -422
- package/modules/gridNMBidAdapter.md +0 -39
- package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
|
@@ -286,26 +286,6 @@ describe('AxonixBidAdapter', function () {
|
|
|
286
286
|
});
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
describe.skip('buildRequests: can handle native ad requests', function () {
|
|
290
|
-
it('creates ServerRequests pointing to the correct region and endpoint if it changes', function () {
|
|
291
|
-
// loop:
|
|
292
|
-
// set supply id
|
|
293
|
-
// set region/endpoint in ssp config
|
|
294
|
-
// call buildRequests, validate request (url, method, supply id)
|
|
295
|
-
expect.fail('Not implemented');
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
it('creates ServerRequests pointing to default endpoint if missing', function () {
|
|
299
|
-
// no endpoint in config means default value openrtb.axonix.com
|
|
300
|
-
expect.fail('Not implemented');
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
it('creates ServerRequests pointing to default region if missing', function () {
|
|
304
|
-
// no region in config means default value us-east-1
|
|
305
|
-
expect.fail('Not implemented');
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
|
|
309
289
|
describe('interpretResponse', function () {
|
|
310
290
|
it('considers corner cases', function() {
|
|
311
291
|
expect(spec.interpretResponse(null)).to.be.an('array').that.is.empty;
|
|
@@ -331,13 +311,6 @@ describe('AxonixBidAdapter', function () {
|
|
|
331
311
|
expect(response).to.be.an('array').that.is.not.empty;
|
|
332
312
|
expect(response[0]).to.equal(VIDEO_RESPONSE.body[0]);
|
|
333
313
|
});
|
|
334
|
-
|
|
335
|
-
it.skip('parses 1 native responses', function () {
|
|
336
|
-
// passing 1 valid native in a response generates an array with 1 correct prebid response
|
|
337
|
-
// examine mediaType:native, native element
|
|
338
|
-
// check nativeBidIsValid from {@link file://./../../../src/native.js}
|
|
339
|
-
expect.fail('Not implemented');
|
|
340
|
-
});
|
|
341
314
|
});
|
|
342
315
|
|
|
343
316
|
describe('onBidWon', function () {
|
|
@@ -92,40 +92,42 @@ describe('bigRichMediaAdapterTests', function () {
|
|
|
92
92
|
expect(payload.tags[0].sizes).to.have.lengthOf(3);
|
|
93
93
|
});
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
95
|
+
if (FEATURES.VIDEO) {
|
|
96
|
+
it('should build video bid request', function() {
|
|
97
|
+
const bidRequest = deepClone(bidRequests[0]);
|
|
98
|
+
bidRequest.params = {
|
|
99
|
+
placementId: '1234235',
|
|
100
|
+
video: {
|
|
101
|
+
skippable: true,
|
|
102
|
+
playback_method: ['auto_play_sound_off', 'auto_play_sound_unknown'],
|
|
103
|
+
context: 'outstream',
|
|
104
|
+
format: 'sticky-top'
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
bidRequest.mediaTypes = {
|
|
108
|
+
video: {
|
|
109
|
+
playerSize: [640, 480],
|
|
110
|
+
context: 'outstream',
|
|
111
|
+
mimes: ['video/mp4'],
|
|
112
|
+
skip: 0,
|
|
113
|
+
minduration: 5,
|
|
114
|
+
api: [1, 5, 6],
|
|
115
|
+
playbackmethod: [2, 4]
|
|
116
|
+
}
|
|
117
|
+
};
|
|
117
118
|
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
const request = spec.buildRequests([bidRequest]);
|
|
120
|
+
const payload = JSON.parse(request.data);
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
122
|
+
expect(payload.tags[0].video).to.deep.equal({
|
|
123
|
+
minduration: 5,
|
|
124
|
+
playback_method: 2,
|
|
125
|
+
skippable: true,
|
|
126
|
+
context: 4
|
|
127
|
+
});
|
|
128
|
+
expect(payload.tags[0].video_frameworks).to.deep.equal([1, 4])
|
|
126
129
|
});
|
|
127
|
-
|
|
128
|
-
});
|
|
130
|
+
}
|
|
129
131
|
});
|
|
130
132
|
|
|
131
133
|
describe('interpretResponse', function () {
|
|
@@ -227,42 +229,44 @@ describe('bigRichMediaAdapterTests', function () {
|
|
|
227
229
|
expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0]));
|
|
228
230
|
});
|
|
229
231
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
'
|
|
234
|
-
|
|
235
|
-
'
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
'
|
|
240
|
-
'
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
232
|
+
if (FEATURES.VIDEO) {
|
|
233
|
+
it('handles outstream video responses', function () {
|
|
234
|
+
const response = {
|
|
235
|
+
'tags': [{
|
|
236
|
+
'uuid': '84ab500420319d',
|
|
237
|
+
'ads': [{
|
|
238
|
+
'ad_type': 'video',
|
|
239
|
+
'cpm': 0.500000,
|
|
240
|
+
'notify_url': 'imptracker.com',
|
|
241
|
+
'rtb': {
|
|
242
|
+
'video': {
|
|
243
|
+
'content': '<!-- VAST Creative -->'
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
'javascriptTrackers': '<script type=\'text/javascript\' async=\'true\' src=\'https://cdn.adnxs.com/v/s/152/trk.js#v;vk=appnexus.com-omid;tv=native1-18h;dom_id=%native_dom_id%;st=0;d=1x1;vc=iab;vid_ccr=1;tag_id=13232354;cb=https%3A%2F%2Fams1-ib.adnxs.com%2Fvevent%3Freferrer%3Dhttps253A%252F%252Ftestpages-pmahe.tp.adnxs.net%252F01_basic_single%26e%3DwqT_3QLNB6DNAwAAAwDWAAUBCLfl_-MFEMStk8u3lPTjRxih88aF0fq_2QsqNgkAAAECCCRAEQEHEAAAJEAZEQkAIREJACkRCQAxEQmoMOLRpwY47UhA7UhIAlCDy74uWJzxW2AAaM26dXjzjwWAAQGKAQNVU0SSAQEG8FCYAQGgAQGoAQGwAQC4AQHAAQTIAQLQAQDYAQDgAQDwAQCKAjt1ZignYScsIDI1Mjk4ODUsIDE1NTE4ODkwNzkpO3VmKCdyJywgOTc0OTQ0MDM2HgDwjZIC8QEha0RXaXBnajgtTHdLRUlQTHZpNFlBQ0NjOFZzd0FEZ0FRQVJJN1VoUTR0R25CbGdBWU1rR2FBQndMSGlrTDRBQlVvZ0JwQy1RQVFHWUFRR2dBUUdvQVFPd0FRQzVBZk90YXFRQUFDUkF3UUh6cldxa0FBQWtRTWtCbWo4dDA1ZU84VF9aQVFBQUEBAyRQQV80QUVBOVFFAQ4sQW1BSUFvQUlBdFFJBRAAdg0IeHdBSUF5QUlBNEFJQTZBSUEtQUlBZ0FNQm1BTUJxQVAFzIh1Z01KUVUxVE1UbzBNekl3NEFPVENBLi6aAmEhUXcxdGNRagUoEfQkblBGYklBUW9BRAl8AEEBqAREbzJEABRRSk1JU1EBGwRBQQGsAFURDAxBQUFXHQzwWNgCAOACrZhI6gIzaHR0cDovL3Rlc3RwYWdlcy1wbWFoZS50cC5hZG54cy5uZXQvMDFfYmFzaWNfc2luZ2xl8gITCg9DVVNUT01fTU9ERUxfSUQSAPICGgoWMhYAPExFQUZfTkFNRRIA8gIeCho2HQAIQVNUAT7wnElGSUVEEgCAAwCIAwGQAwCYAxegAwGqAwDAA-CoAcgDANgD8ao-4AMA6AMA-AMBgAQAkgQNL3V0L3YzL3ByZWJpZJgEAKIECjEwLjIuMTIuMzioBIqpB7IEDggAEAEYACAAKAAwADgCuAQAwAQAyAQA0gQOOTMyNSNBTVMxOjQzMjDaBAIIAeAEAfAEg8u-LogFAZgFAKAF______8BAxgBwAUAyQUABQEU8D_SBQkJBQt8AAAA2AUB4AUB8AWZ9CH6BQQIABAAkAYBmAYAuAYAwQYBITAAAPA_yAYA2gYWChAAOgEAGBAAGADgBgw.%26s%3D971dce9d49b6bee447c8a58774fb30b40fe98171;ts=1551889079;cet=0;cecb=\'></script>'
|
|
247
|
+
}]
|
|
244
248
|
}]
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
249
|
+
};
|
|
250
|
+
const bidderRequest = {
|
|
251
|
+
bids: [{
|
|
252
|
+
bidId: '84ab500420319d',
|
|
253
|
+
adUnitCode: 'code',
|
|
254
|
+
mediaTypes: {
|
|
255
|
+
video: {
|
|
256
|
+
context: 'outstream'
|
|
257
|
+
}
|
|
254
258
|
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
259
|
+
}]
|
|
260
|
+
}
|
|
258
261
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
262
|
+
const result = spec.interpretResponse({ body: response }, {bidderRequest});
|
|
263
|
+
expect(result[0]).not.to.have.property('vastXml');
|
|
264
|
+
expect(result[0]).not.to.have.property('vastUrl');
|
|
265
|
+
expect(result[0]).to.have.property('width', 1);
|
|
266
|
+
expect(result[0]).to.have.property('height', 1);
|
|
267
|
+
expect(result[0]).to.have.property('mediaType', 'banner');
|
|
268
|
+
});
|
|
269
|
+
}
|
|
266
270
|
});
|
|
267
271
|
|
|
268
272
|
describe('getUserSyncs', function() {
|
|
@@ -263,6 +263,7 @@ describe('Conversant adapter tests', function() {
|
|
|
263
263
|
const payload = request.data;
|
|
264
264
|
|
|
265
265
|
expect(payload).to.have.property('id', 'req000');
|
|
266
|
+
expect(payload.source).to.have.property('tid', 'req000');
|
|
266
267
|
expect(payload).to.have.property('at', 1);
|
|
267
268
|
expect(payload).to.have.property('imp');
|
|
268
269
|
expect(payload.imp).to.be.an('array').with.lengthOf(8);
|
|
@@ -883,6 +883,38 @@ describe('The Criteo bidding adapter', function () {
|
|
|
883
883
|
expect(request.data.user.uspIab).to.equal('1YNY');
|
|
884
884
|
});
|
|
885
885
|
|
|
886
|
+
it('should properly build a request with device sua field', function () {
|
|
887
|
+
const sua = {}
|
|
888
|
+
const bidRequests = [
|
|
889
|
+
{
|
|
890
|
+
bidder: 'criteo',
|
|
891
|
+
adUnitCode: 'bid-123',
|
|
892
|
+
transactionId: 'transaction-123',
|
|
893
|
+
mediaTypes: {
|
|
894
|
+
banner: {
|
|
895
|
+
sizes: [[728, 90]]
|
|
896
|
+
}
|
|
897
|
+
},
|
|
898
|
+
params: {
|
|
899
|
+
zoneId: 123,
|
|
900
|
+
},
|
|
901
|
+
},
|
|
902
|
+
];
|
|
903
|
+
const bidderRequest = {
|
|
904
|
+
timeout: 3000,
|
|
905
|
+
uspConsent: '1YNY',
|
|
906
|
+
ortb2: {
|
|
907
|
+
device: {
|
|
908
|
+
sua: sua
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
};
|
|
912
|
+
|
|
913
|
+
const request = spec.buildRequests(bidRequests, bidderRequest);
|
|
914
|
+
expect(request.data.user.ext.sua).to.not.be.null;
|
|
915
|
+
expect(request.data.user.ext.sua).to.equal(sua);
|
|
916
|
+
});
|
|
917
|
+
|
|
886
918
|
it('should properly build a request with gpp consent field', function () {
|
|
887
919
|
const bidRequests = [
|
|
888
920
|
{
|
|
@@ -1475,7 +1507,7 @@ describe('The Criteo bidding adapter', function () {
|
|
|
1475
1507
|
creativecode: 'test-crId',
|
|
1476
1508
|
width: 728,
|
|
1477
1509
|
height: 90,
|
|
1478
|
-
|
|
1510
|
+
deal: 'myDealCode',
|
|
1479
1511
|
adomain: ['criteo.com'],
|
|
1480
1512
|
}],
|
|
1481
1513
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { criteoIdSubmodule, storage } from 'modules/criteoIdSystem.js';
|
|
2
2
|
import * as utils from 'src/utils.js';
|
|
3
|
+
import { gdprDataHandler, uspDataHandler, gppDataHandler } from '../../../src/adapterManager.js';
|
|
3
4
|
import { server } from '../../mocks/xhr';
|
|
4
5
|
|
|
5
6
|
const pastDateString = new Date(0).toString()
|
|
@@ -17,6 +18,9 @@ describe('CriteoId module', function () {
|
|
|
17
18
|
let timeStampStub;
|
|
18
19
|
let parseUrlStub;
|
|
19
20
|
let triggerPixelStub;
|
|
21
|
+
let gdprConsentDataStub;
|
|
22
|
+
let uspConsentDataStub;
|
|
23
|
+
let gppConsentDataStub;
|
|
20
24
|
|
|
21
25
|
beforeEach(function (done) {
|
|
22
26
|
getCookieStub = sinon.stub(storage, 'getCookie');
|
|
@@ -27,6 +31,9 @@ describe('CriteoId module', function () {
|
|
|
27
31
|
timeStampStub = sinon.stub(utils, 'timestamp').returns(nowTimestamp);
|
|
28
32
|
parseUrlStub = sinon.stub(utils, 'parseUrl').returns({ protocol: 'https', hostname: 'testdev.com' })
|
|
29
33
|
triggerPixelStub = sinon.stub(utils, 'triggerPixel');
|
|
34
|
+
gdprConsentDataStub = sinon.stub(gdprDataHandler, 'getConsentData');
|
|
35
|
+
uspConsentDataStub = sinon.stub(uspDataHandler, 'getConsentData');
|
|
36
|
+
gppConsentDataStub = sinon.stub(gppDataHandler, 'getConsentData');
|
|
30
37
|
done();
|
|
31
38
|
});
|
|
32
39
|
|
|
@@ -39,6 +46,9 @@ describe('CriteoId module', function () {
|
|
|
39
46
|
timeStampStub.restore();
|
|
40
47
|
triggerPixelStub.restore();
|
|
41
48
|
parseUrlStub.restore();
|
|
49
|
+
gdprConsentDataStub.restore();
|
|
50
|
+
uspConsentDataStub.restore();
|
|
51
|
+
gppConsentDataStub.restore();
|
|
42
52
|
});
|
|
43
53
|
|
|
44
54
|
const storageTestCases = [
|
|
@@ -136,11 +146,11 @@ describe('CriteoId module', function () {
|
|
|
136
146
|
}));
|
|
137
147
|
|
|
138
148
|
const gdprConsentTestCases = [
|
|
139
|
-
{ consentData: { gdprApplies: true, consentString: 'expectedConsentString' },
|
|
140
|
-
{ consentData: { gdprApplies: false, consentString: 'expectedConsentString' },
|
|
141
|
-
{ consentData: { gdprApplies: true, consentString: undefined },
|
|
142
|
-
{ consentData: { gdprApplies: 'oui', consentString: 'expectedConsentString' },
|
|
143
|
-
{ consentData: undefined,
|
|
149
|
+
{ consentData: { gdprApplies: true, consentString: 'expectedConsentString' }, expectedGdprConsent: 'expectedConsentString', expectedGdpr: '1' },
|
|
150
|
+
{ consentData: { gdprApplies: false, consentString: 'expectedConsentString' }, expectedGdprConsent: 'expectedConsentString', expectedGdpr: '0' },
|
|
151
|
+
{ consentData: { gdprApplies: true, consentString: undefined }, expectedGdprConsent: undefined, expectedGdpr: '1' },
|
|
152
|
+
{ consentData: { gdprApplies: 'oui', consentString: 'expectedConsentString' }, expectedGdprConsent: 'expectedConsentString', expectedGdpr: '0' },
|
|
153
|
+
{ consentData: undefined, expectedGdprConsent: undefined, expectedGdpr: undefined }
|
|
144
154
|
];
|
|
145
155
|
|
|
146
156
|
it('should call sync pixels if request by backend', function () {
|
|
@@ -225,14 +235,94 @@ describe('CriteoId module', function () {
|
|
|
225
235
|
|
|
226
236
|
gdprConsentTestCases.forEach(testCase => it('should call user sync url with the gdprConsent', function () {
|
|
227
237
|
let callBackSpy = sinon.spy();
|
|
228
|
-
|
|
238
|
+
|
|
239
|
+
gdprConsentDataStub.returns(testCase.consentData);
|
|
240
|
+
|
|
241
|
+
let result = criteoIdSubmodule.getId(undefined);
|
|
242
|
+
result.callback(callBackSpy);
|
|
243
|
+
|
|
244
|
+
let request = server.requests[0];
|
|
245
|
+
|
|
246
|
+
if (testCase.expectedGdprConsent) {
|
|
247
|
+
expect(request.url).to.have.string(`gdprString=${testCase.expectedGdprConsent}`);
|
|
248
|
+
} else {
|
|
249
|
+
expect(request.url).to.not.have.string('gdprString=');
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (testCase.expectedGdpr) {
|
|
253
|
+
expect(request.url).to.have.string(`gdpr=${testCase.expectedGdpr}`);
|
|
254
|
+
} else {
|
|
255
|
+
expect(request.url).to.not.have.string('gdpr=');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
request.respond(
|
|
259
|
+
200,
|
|
260
|
+
{ 'Content-Type': 'application/json' },
|
|
261
|
+
JSON.stringify({})
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
expect(callBackSpy.calledOnce).to.be.true;
|
|
265
|
+
}));
|
|
266
|
+
|
|
267
|
+
[undefined, 'abc'].forEach(usPrivacy => it('should call user sync url with the us privacy string', function () {
|
|
268
|
+
let callBackSpy = sinon.spy();
|
|
269
|
+
|
|
270
|
+
uspConsentDataStub.returns(usPrivacy);
|
|
271
|
+
|
|
272
|
+
let result = criteoIdSubmodule.getId(undefined);
|
|
229
273
|
result.callback(callBackSpy);
|
|
230
274
|
|
|
231
275
|
let request = server.requests[0];
|
|
232
|
-
|
|
233
|
-
|
|
276
|
+
|
|
277
|
+
if (usPrivacy) {
|
|
278
|
+
expect(request.url).to.have.string(`us_privacy=${usPrivacy}`);
|
|
279
|
+
} else {
|
|
280
|
+
expect(request.url).to.not.have.string('us_privacy=');
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
request.respond(
|
|
284
|
+
200,
|
|
285
|
+
{ 'Content-Type': 'application/json' },
|
|
286
|
+
JSON.stringify({})
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
expect(callBackSpy.calledOnce).to.be.true;
|
|
290
|
+
}));
|
|
291
|
+
|
|
292
|
+
[
|
|
293
|
+
{
|
|
294
|
+
consentData: {
|
|
295
|
+
gppString: 'abc',
|
|
296
|
+
applicableSections: [1]
|
|
297
|
+
},
|
|
298
|
+
expectedGpp: 'abc',
|
|
299
|
+
expectedGppSid: '1'
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
consentData: undefined,
|
|
303
|
+
expectedGpp: undefined,
|
|
304
|
+
expectedGppSid: undefined
|
|
305
|
+
}
|
|
306
|
+
].forEach(testCase => it('should call user sync url with the gpp string', function () {
|
|
307
|
+
let callBackSpy = sinon.spy();
|
|
308
|
+
|
|
309
|
+
gppConsentDataStub.returns(testCase.consentData);
|
|
310
|
+
|
|
311
|
+
let result = criteoIdSubmodule.getId(undefined);
|
|
312
|
+
result.callback(callBackSpy);
|
|
313
|
+
|
|
314
|
+
let request = server.requests[0];
|
|
315
|
+
|
|
316
|
+
if (testCase.expectedGpp) {
|
|
317
|
+
expect(request.url).to.have.string(`gpp=${testCase.expectedGpp}`);
|
|
318
|
+
} else {
|
|
319
|
+
expect(request.url).to.not.have.string('gpp=');
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
if (testCase.expectedGppSid) {
|
|
323
|
+
expect(request.url).to.have.string(`gpp_sid=${testCase.expectedGppSid}`);
|
|
234
324
|
} else {
|
|
235
|
-
expect(request.url).to.not.have.string('
|
|
325
|
+
expect(request.url).to.not.have.string('gpp_sid=');
|
|
236
326
|
}
|
|
237
327
|
|
|
238
328
|
request.respond(
|