prebid.js 7.18.0 → 7.20.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/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aolBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +1 -1
- package/dist/bidViewability.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/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/categoryTranslation.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -0
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/currency.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dchain.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/dependencies.json +9 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dianomiBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/enrichmentFpdModule.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fpd.js +1 -0
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- 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/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.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/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -0
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mass.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/multibid.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +198 -194
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/priceFloors.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.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/sonobiAnalyticsAdapter.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/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -0
- package/dist/terceptAnalyticsAdapter.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/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/visxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/libraries/fpd/sua.js +98 -0
- package/modules/.submodules.json +1 -0
- package/modules/adfBidAdapter.js +1 -1
- package/modules/adkernelAdnBidAdapter.js +1 -0
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/adqueryIdSystem.js +8 -8
- package/modules/adxcgBidAdapter.js +1 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/aolBidAdapter.js +25 -2
- package/modules/appnexusBidAdapter.js +19 -2
- package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
- package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
- package/modules/categoryTranslation.js +4 -4
- package/modules/cleanioRtdProvider.js +3 -4
- package/modules/colossussspBidAdapter.js +2 -1
- package/modules/connectIdSystem.js +16 -1
- package/modules/conversantAnalyticsAdapter.js +560 -0
- package/modules/conversantAnalyticsAdapter.md +47 -0
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/currency.js +11 -11
- package/modules/dchain.js +2 -2
- package/modules/debugging/bidInterceptor.js +2 -2
- package/modules/debugging/debugging.js +10 -2
- package/modules/debugging/legacy.js +2 -2
- package/modules/dgkeywordRtdProvider.js +21 -3
- package/modules/dianomiBidAdapter.js +1 -1
- package/modules/enrichmentFpdModule.js +33 -14
- package/modules/eplanningBidAdapter.js +48 -2
- package/modules/finativeBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +187 -117
- package/modules/improvedigitalBidAdapter.js +2 -2
- package/modules/ixBidAdapter.js +94 -23
- package/modules/liveIntentIdSystem.js +39 -5
- package/modules/lotamePanoramaIdSystem.js +10 -6
- package/modules/magniteAnalyticsAdapter.js +902 -0
- package/modules/magniteAnalyticsAdapter.md +18 -0
- package/modules/mass.js +2 -2
- package/modules/mediakeysBidAdapter.js +6 -1
- package/modules/mediakeysBidAdapter.md +50 -40
- package/modules/multibid/index.js +5 -5
- package/modules/nativoBidAdapter.js +1 -1
- package/modules/pixfutureBidAdapter.js +46 -15
- package/modules/prebidServerBidAdapter/index.js +54 -19
- package/modules/priceFloors.js +8 -22
- package/modules/readpeakBidAdapter.js +1 -1
- package/modules/rubiconAnalyticsAdapter.js +14 -9
- package/modules/rubiconBidAdapter.js +2 -3
- package/modules/seedingAllianceBidAdapter.js +1 -1
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/taboolaBidAdapter.js +5 -5
- package/modules/talkadsBidAdapter.js +1 -0
- package/modules/teadsIdSystem.js +234 -0
- package/modules/teadsIdSystem.md +22 -0
- package/modules/truereachBidAdapter.js +1 -0
- package/modules/ttdBidAdapter.js +1 -1
- package/modules/userId/index.js +21 -14
- package/modules/vrtcalBidAdapter.js +7 -1
- package/modules/vuukleBidAdapter.js +34 -3
- package/modules/yahoosspBidAdapter.js +4 -2
- package/modules/yandexBidAdapter.js +31 -8
- package/package.json +2 -2
- package/src/adapterManager.js +2 -4
- package/src/adapters/bidderFactory.js +13 -11
- package/src/auction.js +140 -69
- package/src/constants.json +8 -0
- package/src/cpmBucketManager.js +22 -3
- package/src/native.js +1 -5
- package/src/prebid.js +5 -6
- package/src/targeting.js +31 -14
- package/test/fixtures/fixtures.js +2 -1
- package/test/spec/auctionmanager_spec.js +109 -21
- package/test/spec/cpmBucketManager_spec.js +239 -177
- package/test/spec/fpd/sua_spec.js +244 -0
- package/test/spec/modules/adfBidAdapter_spec.js +2 -3
- package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
- package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
- package/test/spec/modules/amxBidAdapter_spec.js +3 -2
- package/test/spec/modules/aolBidAdapter_spec.js +42 -9
- package/test/spec/modules/appnexusBidAdapter_spec.js +24 -0
- package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
- package/test/spec/modules/connectIdSystem_spec.js +20 -0
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
- package/test/spec/modules/currency_spec.js +14 -6
- package/test/spec/modules/debugging_mod_spec.js +9 -0
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
- package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
- package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
- package/test/spec/modules/eplanningBidAdapter_spec.js +285 -1
- package/test/spec/modules/fpdModule_spec.js +9 -0
- package/test/spec/modules/gridBidAdapter_spec.js +87 -31
- package/test/spec/modules/ixBidAdapter_spec.js +221 -2
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
- package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
- package/test/spec/modules/lotamePanoramaIdSystem_spec.js +0 -1
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +1942 -0
- package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
- package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
- package/test/spec/modules/prebidServerBidAdapter_spec.js +202 -15
- package/test/spec/modules/priceFloors_spec.js +5 -5
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +2 -3
- package/test/spec/modules/seedtagBidAdapter_spec.js +15 -18
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/taboolaBidAdapter_spec.js +112 -13
- package/test/spec/modules/teadsIdSystem_spec.js +271 -0
- package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
- package/test/spec/modules/userId_spec.js +39 -4
- package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -1
- package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +48 -1
- package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
- package/test/spec/native_spec.js +5 -0
- package/test/spec/unit/core/bidderFactory_spec.js +66 -11
- package/test/spec/unit/core/targeting_spec.js +28 -9
- package/test/spec/unit/pbjs_api_spec.js +48 -2
|
@@ -808,8 +808,8 @@ describe('mediakeysBidAdapter', function () {
|
|
|
808
808
|
]
|
|
809
809
|
},
|
|
810
810
|
eventtrackers: [
|
|
811
|
-
{ event: 1, method: 1, url: 'https://
|
|
812
|
-
{ event: 1, method: 2, url: 'https://
|
|
811
|
+
{ event: 1, method: 1, url: 'https://eventrack.me/impression' },
|
|
812
|
+
{ event: 1, method: 2, url: 'https://eventrack-js.me/impression-1' }
|
|
813
813
|
]
|
|
814
814
|
};
|
|
815
815
|
|
|
@@ -845,9 +845,11 @@ describe('mediakeysBidAdapter', function () {
|
|
|
845
845
|
expect(response[0].native.clickUrl).to.exist;
|
|
846
846
|
expect(response[0].native.clickTrackers).to.exist;
|
|
847
847
|
expect(response[0].native.clickTrackers.length).to.equal(1);
|
|
848
|
-
expect(response[0].native.javascriptTrackers).to.equal('<script src="https://click-script.me"></script>');
|
|
849
848
|
expect(response[0].native.impressionTrackers).to.exist;
|
|
850
849
|
expect(response[0].native.impressionTrackers.length).to.equal(1);
|
|
850
|
+
expect(response[0].native.impressionTrackers[0]).to.equal('https://eventrack.me/impression');
|
|
851
|
+
expect(response[0].native.javascriptTrackers).to.exist;
|
|
852
|
+
expect(response[0].native.javascriptTrackers).to.equal('<script async src="https://eventrack-js.me/impression-1"></script>');
|
|
851
853
|
});
|
|
852
854
|
|
|
853
855
|
it('should ignore eventtrackers with a unsupported type', function() {
|
|
@@ -859,6 +861,21 @@ describe('mediakeysBidAdapter', function () {
|
|
|
859
861
|
expect(response[0].native.impressionTrackers).to.exist;
|
|
860
862
|
expect(response[0].native.impressionTrackers.length).to.equal(0);
|
|
861
863
|
})
|
|
864
|
+
|
|
865
|
+
it('Should handle multiple javascriptTrackers in one single string', () => {
|
|
866
|
+
const rawServerResponseNativeCopy = utils.deepClone(rawServerResponseNative);
|
|
867
|
+
const nativeObjectCopy = utils.deepClone(nativeObject);
|
|
868
|
+
nativeObjectCopy.eventtrackers.push(
|
|
869
|
+
{
|
|
870
|
+
event: 1,
|
|
871
|
+
method: 2,
|
|
872
|
+
url: 'https://eventrack-js.me/impression-2'
|
|
873
|
+
},)
|
|
874
|
+
rawServerResponseNativeCopy.body.seatbid[0].bid[0].adm = JSON.stringify(nativeObjectCopy);
|
|
875
|
+
const response = spec.interpretResponse(rawServerResponseNativeCopy, request);
|
|
876
|
+
const expected = '<script async src=\"https://eventrack-js.me/impression-1\"></script>\n<script async src=\"https://eventrack-js.me/impression-2\"></script>';
|
|
877
|
+
expect(response[0].native.javascriptTrackers).to.equal(expected);
|
|
878
|
+
});
|
|
862
879
|
});
|
|
863
880
|
});
|
|
864
881
|
|
|
@@ -125,12 +125,23 @@ describe('nativoBidAdapterTests', function () {
|
|
|
125
125
|
expect(request.url).to.include('ntv_pas')
|
|
126
126
|
})
|
|
127
127
|
|
|
128
|
+
it('ntv_url should contain query params', function () {
|
|
129
|
+
const request = spec.buildRequests(bidRequests, {
|
|
130
|
+
bidderRequestId: 123456,
|
|
131
|
+
refererInfo: {
|
|
132
|
+
location: 'https://www.test.com?queryTest=true',
|
|
133
|
+
},
|
|
134
|
+
})
|
|
135
|
+
console.log(request.url) // eslint-disable-line no-console
|
|
136
|
+
expect(request.url).to.include(encodeURIComponent('?queryTest=true'))
|
|
137
|
+
})
|
|
138
|
+
|
|
128
139
|
it('ntv_url parameter should NOT be empty even if the utl parameter was set as an empty value', function () {
|
|
129
140
|
bidRequests[0].params.url = ''
|
|
130
141
|
const request = spec.buildRequests(bidRequests, {
|
|
131
142
|
bidderRequestId: 123456,
|
|
132
143
|
refererInfo: {
|
|
133
|
-
|
|
144
|
+
location: 'https://www.test.com',
|
|
134
145
|
},
|
|
135
146
|
})
|
|
136
147
|
|
|
@@ -144,7 +155,7 @@ describe('nativoBidAdapterTests', function () {
|
|
|
144
155
|
const request = spec.buildRequests(bidRequests, {
|
|
145
156
|
bidderRequestId: 123456,
|
|
146
157
|
refererInfo: {
|
|
147
|
-
|
|
158
|
+
location: 'https://www.test.com',
|
|
148
159
|
},
|
|
149
160
|
})
|
|
150
161
|
|
|
@@ -536,6 +536,8 @@ describe('S2S Adapter', function () {
|
|
|
536
536
|
addBidResponse = sinon.spy(),
|
|
537
537
|
done = sinon.spy();
|
|
538
538
|
|
|
539
|
+
addBidResponse.reject = sinon.spy();
|
|
540
|
+
|
|
539
541
|
function prepRequest(req) {
|
|
540
542
|
req.ad_units.forEach((adUnit) => {
|
|
541
543
|
delete adUnit.nativeParams
|
|
@@ -595,6 +597,7 @@ describe('S2S Adapter', function () {
|
|
|
595
597
|
|
|
596
598
|
afterEach(function () {
|
|
597
599
|
addBidResponse.resetHistory();
|
|
600
|
+
addBidResponse.reject = sinon.spy();
|
|
598
601
|
done.resetHistory();
|
|
599
602
|
});
|
|
600
603
|
|
|
@@ -607,15 +610,14 @@ describe('S2S Adapter', function () {
|
|
|
607
610
|
resetSyncedStatus();
|
|
608
611
|
});
|
|
609
612
|
|
|
610
|
-
it('should set id
|
|
613
|
+
it('should set id and source.tid to auction ID', function () {
|
|
611
614
|
config.setConfig({ s2sConfig: CONFIG });
|
|
612
615
|
|
|
613
616
|
adapter.callBids(OUTSTREAM_VIDEO_REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
|
|
614
617
|
|
|
615
618
|
const requestBid = JSON.parse(server.requests[0].requestBody);
|
|
616
|
-
expect(requestBid.id).to.equal(
|
|
617
|
-
expect(requestBid.source).to.
|
|
618
|
-
expect(requestBid.source.tid).to.equal('437fbbf5-33f5-487a-8e16-a7112903cfe5');
|
|
619
|
+
expect(requestBid.id).to.equal(BID_REQUESTS[0].auctionId);
|
|
620
|
+
expect(requestBid.source.tid).to.equal(BID_REQUESTS[0].auctionId);
|
|
619
621
|
});
|
|
620
622
|
|
|
621
623
|
it('should block request if config did not define p1Consent URL in endpoint object config', function () {
|
|
@@ -2904,6 +2906,16 @@ describe('S2S Adapter', function () {
|
|
|
2904
2906
|
});
|
|
2905
2907
|
}
|
|
2906
2908
|
|
|
2909
|
+
it('should reject invalid bids', () => {
|
|
2910
|
+
config.setConfig({ s2sConfig: CONFIG });
|
|
2911
|
+
adapter.callBids(REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
|
|
2912
|
+
const response = deepClone(RESPONSE_OPENRTB);
|
|
2913
|
+
Object.assign(response.seatbid[0].bid[0], {w: null, h: null});
|
|
2914
|
+
server.requests[0].respond(200, {}, JSON.stringify(response));
|
|
2915
|
+
expect(addBidResponse.reject.calledOnce).to.be.true;
|
|
2916
|
+
expect(addBidResponse.called).to.be.false;
|
|
2917
|
+
});
|
|
2918
|
+
|
|
2907
2919
|
it('does not (by default) allow bids that were not requested', function () {
|
|
2908
2920
|
config.setConfig({ s2sConfig: CONFIG });
|
|
2909
2921
|
adapter.callBids(REQUEST, BID_REQUESTS, addBidResponse, done, ajax);
|
|
@@ -2912,6 +2924,7 @@ describe('S2S Adapter', function () {
|
|
|
2912
2924
|
server.requests[0].respond(200, {}, JSON.stringify(response));
|
|
2913
2925
|
|
|
2914
2926
|
expect(addBidResponse.called).to.be.false;
|
|
2927
|
+
expect(addBidResponse.reject.calledOnce).to.be.true;
|
|
2915
2928
|
});
|
|
2916
2929
|
|
|
2917
2930
|
it('allows unrequested bids if config.allowUnknownBidderCodes', function () {
|
|
@@ -2925,17 +2938,35 @@ describe('S2S Adapter', function () {
|
|
|
2925
2938
|
expect(addBidResponse.calledWith(sinon.match.any, sinon.match({ bidderCode: 'unknown' }))).to.be.true;
|
|
2926
2939
|
});
|
|
2927
2940
|
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2941
|
+
describe('stored impressions', () => {
|
|
2942
|
+
let bidReq, response;
|
|
2943
|
+
|
|
2944
|
+
function mks2sReq(s2sConfig = CONFIG) {
|
|
2945
|
+
return {...REQUEST, s2sConfig, ad_units: [{...REQUEST.ad_units[0], bids: [{bidder: null, bid_id: 'testId'}]}]};
|
|
2946
|
+
}
|
|
2947
|
+
|
|
2948
|
+
beforeEach(() => {
|
|
2949
|
+
bidReq = {...BID_REQUESTS[0], bidderCode: null, bids: [{...BID_REQUESTS[0].bids[0], bidder: null, bidId: 'testId'}]}
|
|
2950
|
+
response = deepClone(RESPONSE_OPENRTB);
|
|
2951
|
+
response.seatbid[0].seat = 'storedImpression';
|
|
2952
|
+
})
|
|
2953
|
+
|
|
2954
|
+
it('uses "null" request\'s ID for all responses, when a null request is present', function () {
|
|
2955
|
+
const cfg = {...CONFIG, allowUnknownBidderCodes: true};
|
|
2956
|
+
config.setConfig({s2sConfig: cfg});
|
|
2957
|
+
adapter.callBids(mks2sReq(cfg), [bidReq], addBidResponse, done, ajax);
|
|
2958
|
+
server.requests[0].respond(200, {}, JSON.stringify(response));
|
|
2959
|
+
sinon.assert.calledWith(addBidResponse, sinon.match.any, sinon.match({bidderCode: 'storedImpression', requestId: 'testId'}))
|
|
2960
|
+
});
|
|
2961
|
+
|
|
2962
|
+
it('does not allow null requests (= stored impressions) if allowUnknownBidderCodes is not set', () => {
|
|
2963
|
+
config.setConfig({s2sConfig: CONFIG});
|
|
2964
|
+
adapter.callBids(mks2sReq(), [bidReq], addBidResponse, done, ajax);
|
|
2965
|
+
server.requests[0].respond(200, {}, JSON.stringify(response));
|
|
2966
|
+
expect(addBidResponse.called).to.be.false;
|
|
2967
|
+
expect(addBidResponse.reject.calledOnce).to.be.true;
|
|
2968
|
+
});
|
|
2969
|
+
})
|
|
2939
2970
|
|
|
2940
2971
|
it('copies ortb2Imp to response when there is only a null bid', () => {
|
|
2941
2972
|
const cfg = {...CONFIG};
|
|
@@ -3481,5 +3512,161 @@ describe('S2S Adapter', function () {
|
|
|
3481
3512
|
const parsedRequestBody = JSON.parse(server.requests[1].requestBody);
|
|
3482
3513
|
expect(parsedRequestBody.cur).to.deep.equal(['JPY']);
|
|
3483
3514
|
});
|
|
3515
|
+
|
|
3516
|
+
it('should correctly set the floorMin key when multiple bids with various bidfloors exist', function () {
|
|
3517
|
+
const s2sConfig = Object.assign({}, CONFIG, {
|
|
3518
|
+
extPrebid: {
|
|
3519
|
+
floors: {
|
|
3520
|
+
enabled: true
|
|
3521
|
+
}
|
|
3522
|
+
},
|
|
3523
|
+
bidders: ['b1', 'b2']
|
|
3524
|
+
});
|
|
3525
|
+
|
|
3526
|
+
const bidderRequests = [
|
|
3527
|
+
{
|
|
3528
|
+
...BID_REQUESTS[0],
|
|
3529
|
+
bidderCode: 'b1',
|
|
3530
|
+
bids: [{
|
|
3531
|
+
bidder: 'b1',
|
|
3532
|
+
bidId: 1,
|
|
3533
|
+
getFloor: () => ({
|
|
3534
|
+
currency: 'US',
|
|
3535
|
+
floor: 1.23
|
|
3536
|
+
})
|
|
3537
|
+
}]
|
|
3538
|
+
},
|
|
3539
|
+
{
|
|
3540
|
+
...BID_REQUESTS[0],
|
|
3541
|
+
bidderCode: 'b2',
|
|
3542
|
+
bids: [{
|
|
3543
|
+
bidder: 'b2',
|
|
3544
|
+
bidId: 2,
|
|
3545
|
+
getFloor: () => ({
|
|
3546
|
+
currency: 'EUR',
|
|
3547
|
+
floor: 3.21
|
|
3548
|
+
})
|
|
3549
|
+
}],
|
|
3550
|
+
}
|
|
3551
|
+
];
|
|
3552
|
+
|
|
3553
|
+
const adUnits = [
|
|
3554
|
+
{
|
|
3555
|
+
code: 'au1',
|
|
3556
|
+
transactionId: 't1',
|
|
3557
|
+
mediaTypes: {
|
|
3558
|
+
banner: {sizes: [1, 1]}
|
|
3559
|
+
},
|
|
3560
|
+
bids: [{bidder: 'b1', bid_id: 1}]
|
|
3561
|
+
},
|
|
3562
|
+
{
|
|
3563
|
+
code: 'au2',
|
|
3564
|
+
transactionId: 't2',
|
|
3565
|
+
bids: [{bidder: 'b2', bid_id: 2}],
|
|
3566
|
+
mediaTypes: {
|
|
3567
|
+
banner: {sizes: [1, 1]}
|
|
3568
|
+
}
|
|
3569
|
+
}
|
|
3570
|
+
];
|
|
3571
|
+
|
|
3572
|
+
const _config = {
|
|
3573
|
+
s2sConfig: s2sConfig,
|
|
3574
|
+
};
|
|
3575
|
+
|
|
3576
|
+
const s2sBidRequest = utils.deepClone(REQUEST);
|
|
3577
|
+
s2sBidRequest.s2sConfig = s2sConfig;
|
|
3578
|
+
s2sBidRequest.ad_units = adUnits;
|
|
3579
|
+
config.setConfig(_config);
|
|
3580
|
+
|
|
3581
|
+
adapter.callBids(s2sBidRequest, bidderRequests, addBidResponse, done, ajax);
|
|
3582
|
+
const requestBid = JSON.parse(server.requests[0].requestBody);
|
|
3583
|
+
expect(requestBid.imp[0].bidfloor).to.equal(1.23);
|
|
3584
|
+
expect(requestBid.imp[1].bidfloor).to.equal(3.21);
|
|
3585
|
+
|
|
3586
|
+
// first imp floorCur should be set
|
|
3587
|
+
expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: true, floorMin: 1.23, floorMinCur: 'US' });
|
|
3588
|
+
});
|
|
3589
|
+
|
|
3590
|
+
it('should correctly set the floorMin key when multiple bids with various bidfloors exist and ortb2Imp contains the lowest floorMin', function () {
|
|
3591
|
+
const s2sConfig = Object.assign({}, CONFIG, {
|
|
3592
|
+
extPrebid: {
|
|
3593
|
+
floors: {
|
|
3594
|
+
enabled: true
|
|
3595
|
+
}
|
|
3596
|
+
},
|
|
3597
|
+
bidders: ['b1', 'b2']
|
|
3598
|
+
});
|
|
3599
|
+
|
|
3600
|
+
const bidderRequests = [
|
|
3601
|
+
{
|
|
3602
|
+
...BID_REQUESTS[0],
|
|
3603
|
+
bidderCode: 'b1',
|
|
3604
|
+
bids: [{
|
|
3605
|
+
bidder: 'b1',
|
|
3606
|
+
bidId: 1,
|
|
3607
|
+
getFloor: () => ({
|
|
3608
|
+
currency: 'CUR',
|
|
3609
|
+
floor: 1.23
|
|
3610
|
+
})
|
|
3611
|
+
}]
|
|
3612
|
+
},
|
|
3613
|
+
{
|
|
3614
|
+
...BID_REQUESTS[0],
|
|
3615
|
+
bidderCode: 'b2',
|
|
3616
|
+
bids: [{
|
|
3617
|
+
bidder: 'b2',
|
|
3618
|
+
bidId: 2,
|
|
3619
|
+
getFloor: () => ({
|
|
3620
|
+
currency: 'CUR',
|
|
3621
|
+
floor: 3.21
|
|
3622
|
+
})
|
|
3623
|
+
}],
|
|
3624
|
+
}
|
|
3625
|
+
];
|
|
3626
|
+
|
|
3627
|
+
const adUnits = [
|
|
3628
|
+
{
|
|
3629
|
+
code: 'au1',
|
|
3630
|
+
transactionId: 't1',
|
|
3631
|
+
mediaTypes: {
|
|
3632
|
+
banner: {sizes: [1, 1]}
|
|
3633
|
+
},
|
|
3634
|
+
bids: [{bidder: 'b1', bid_id: 1}]
|
|
3635
|
+
},
|
|
3636
|
+
{
|
|
3637
|
+
code: 'au2',
|
|
3638
|
+
transactionId: 't2',
|
|
3639
|
+
bids: [{bidder: 'b2', bid_id: 2}],
|
|
3640
|
+
mediaTypes: {
|
|
3641
|
+
banner: {sizes: [1, 1]}
|
|
3642
|
+
},
|
|
3643
|
+
ortb2Imp: {
|
|
3644
|
+
ext: {
|
|
3645
|
+
prebid: {
|
|
3646
|
+
floors: {
|
|
3647
|
+
floorMin: 1
|
|
3648
|
+
}
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
}
|
|
3653
|
+
];
|
|
3654
|
+
|
|
3655
|
+
const _config = {
|
|
3656
|
+
s2sConfig: s2sConfig,
|
|
3657
|
+
};
|
|
3658
|
+
|
|
3659
|
+
const s2sBidRequest = utils.deepClone(REQUEST);
|
|
3660
|
+
s2sBidRequest.s2sConfig = s2sConfig;
|
|
3661
|
+
s2sBidRequest.ad_units = adUnits;
|
|
3662
|
+
config.setConfig(_config);
|
|
3663
|
+
|
|
3664
|
+
adapter.callBids(s2sBidRequest, bidderRequests, addBidResponse, done, ajax);
|
|
3665
|
+
const requestBid = JSON.parse(server.requests[0].requestBody);
|
|
3666
|
+
expect(requestBid.imp[0].bidfloor).to.equal(1.23);
|
|
3667
|
+
expect(requestBid.imp[1].bidfloor).to.equal(3.21);
|
|
3668
|
+
|
|
3669
|
+
expect(requestBid.ext.prebid.floors).to.deep.equal({ enabled: true, floorMin: 1, floorMinCur: 'CUR' });
|
|
3670
|
+
});
|
|
3484
3671
|
});
|
|
3485
3672
|
});
|
|
@@ -1665,7 +1665,7 @@ describe('the price floors module', function () {
|
|
|
1665
1665
|
});
|
|
1666
1666
|
describe('bidResponseHook tests', function () {
|
|
1667
1667
|
const AUCTION_ID = '123456';
|
|
1668
|
-
let returnedBidResponse, indexStub;
|
|
1668
|
+
let returnedBidResponse, indexStub, reject;
|
|
1669
1669
|
let adUnit = {
|
|
1670
1670
|
transactionId: 'au',
|
|
1671
1671
|
code: 'test_div_1'
|
|
@@ -1681,6 +1681,7 @@ describe('the price floors module', function () {
|
|
|
1681
1681
|
};
|
|
1682
1682
|
beforeEach(function () {
|
|
1683
1683
|
returnedBidResponse = {};
|
|
1684
|
+
reject = sinon.stub().returns({status: 'rejected'});
|
|
1684
1685
|
indexStub = sinon.stub(auctionManager, 'index');
|
|
1685
1686
|
indexStub.get(() => stubAuctionIndex({adUnits: [adUnit]}));
|
|
1686
1687
|
});
|
|
@@ -1693,7 +1694,7 @@ describe('the price floors module', function () {
|
|
|
1693
1694
|
let next = (adUnitCode, bid) => {
|
|
1694
1695
|
returnedBidResponse = bid;
|
|
1695
1696
|
};
|
|
1696
|
-
addBidResponseHook(next, bidResp.adUnitCode, Object.assign(createBid(CONSTANTS.STATUS.GOOD, {auctionId: AUCTION_ID}), bidResp));
|
|
1697
|
+
addBidResponseHook(next, bidResp.adUnitCode, Object.assign(createBid(CONSTANTS.STATUS.GOOD, {auctionId: AUCTION_ID}), bidResp), reject);
|
|
1697
1698
|
};
|
|
1698
1699
|
it('continues with the auction if not floors data is present without any flooring', function () {
|
|
1699
1700
|
runBidResponse();
|
|
@@ -1710,9 +1711,8 @@ describe('the price floors module', function () {
|
|
|
1710
1711
|
_floorDataForAuction[AUCTION_ID] = utils.deepClone(basicFloorConfig);
|
|
1711
1712
|
_floorDataForAuction[AUCTION_ID].data.values = { 'banner': 1.0 };
|
|
1712
1713
|
runBidResponse();
|
|
1713
|
-
expect(
|
|
1714
|
-
expect(returnedBidResponse.status).to.equal(
|
|
1715
|
-
expect(returnedBidResponse.cpm).to.equal(0);
|
|
1714
|
+
expect(reject.calledOnce).to.be.true;
|
|
1715
|
+
expect(returnedBidResponse.status).to.equal('rejected');
|
|
1716
1716
|
});
|
|
1717
1717
|
it('if it finds a rule and does not floor should update the bid accordingly', function () {
|
|
1718
1718
|
_floorDataForAuction[AUCTION_ID] = utils.deepClone(basicFloorConfig);
|
|
@@ -4,6 +4,7 @@ import rubiconAnalyticsAdapter, {
|
|
|
4
4
|
getHostNameFromReferer,
|
|
5
5
|
storage,
|
|
6
6
|
rubiConf,
|
|
7
|
+
resetRubiConf
|
|
7
8
|
} from 'modules/rubiconAnalyticsAdapter.js';
|
|
8
9
|
import CONSTANTS from 'src/constants.json';
|
|
9
10
|
import { config } from 'src/config.js';
|
|
@@ -667,6 +668,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
667
668
|
expect(utils.generateUUID.called).to.equal(true);
|
|
668
669
|
});
|
|
669
670
|
it('should merge in and preserve older set configs', function () {
|
|
671
|
+
resetRubiConf();
|
|
670
672
|
config.setConfig({
|
|
671
673
|
rubicon: {
|
|
672
674
|
wrapperName: '1001_general',
|
|
@@ -689,7 +691,6 @@ describe('rubicon analytics adapter', function () {
|
|
|
689
691
|
fpkvs: {
|
|
690
692
|
source: 'fb'
|
|
691
693
|
},
|
|
692
|
-
updatePageView: true
|
|
693
694
|
});
|
|
694
695
|
|
|
695
696
|
// update it with stuff
|
|
@@ -714,7 +715,6 @@ describe('rubicon analytics adapter', function () {
|
|
|
714
715
|
source: 'fb',
|
|
715
716
|
link: 'email'
|
|
716
717
|
},
|
|
717
|
-
updatePageView: true
|
|
718
718
|
});
|
|
719
719
|
|
|
720
720
|
// overwriting specific edge keys should update them
|
|
@@ -740,7 +740,6 @@ describe('rubicon analytics adapter', function () {
|
|
|
740
740
|
link: 'iMessage',
|
|
741
741
|
source: 'twitter'
|
|
742
742
|
},
|
|
743
|
-
updatePageView: true
|
|
744
743
|
});
|
|
745
744
|
});
|
|
746
745
|
});
|
|
@@ -361,28 +361,25 @@ describe('Seedtag Adapter', function () {
|
|
|
361
361
|
it('should add schain to payload when exposed on validBidRequest', function () {
|
|
362
362
|
// https://github.com/prebid/Prebid.js/blob/master/modules/schain.md#sample-code-for-passing-the-schain-object
|
|
363
363
|
const schain = {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
hp: 1,
|
|
373
|
-
},
|
|
364
|
+
ver: '1.0',
|
|
365
|
+
complete: 1,
|
|
366
|
+
nodes: [
|
|
367
|
+
{
|
|
368
|
+
asi: 'indirectseller.com',
|
|
369
|
+
sid: '00001',
|
|
370
|
+
hp: 1,
|
|
371
|
+
},
|
|
374
372
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
},
|
|
373
|
+
{
|
|
374
|
+
asi: 'indirectseller-2.com',
|
|
375
|
+
sid: '00002',
|
|
376
|
+
hp: 1,
|
|
377
|
+
},
|
|
378
|
+
],
|
|
382
379
|
};
|
|
383
380
|
|
|
384
381
|
// duplicate
|
|
385
|
-
const bidRequests = JSON.parse(JSON.stringify(validBidRequests))
|
|
382
|
+
const bidRequests = JSON.parse(JSON.stringify(validBidRequests));
|
|
386
383
|
bidRequests[0].schain = schain;
|
|
387
384
|
|
|
388
385
|
const request = spec.buildRequests(bidRequests, bidderRequest);
|
|
@@ -172,6 +172,7 @@ describe('sharethrough adapter spec', function () {
|
|
|
172
172
|
refererInfo: {
|
|
173
173
|
ref: 'https://referer.com',
|
|
174
174
|
},
|
|
175
|
+
auctionId: 'auction-id'
|
|
175
176
|
};
|
|
176
177
|
});
|
|
177
178
|
|
|
@@ -233,7 +234,7 @@ describe('sharethrough adapter spec', function () {
|
|
|
233
234
|
expect(openRtbReq.device.ua).to.equal(navigator.userAgent);
|
|
234
235
|
expect(openRtbReq.regs.coppa).to.equal(1);
|
|
235
236
|
|
|
236
|
-
expect(openRtbReq.source.tid).to.equal(
|
|
237
|
+
expect(openRtbReq.source.tid).to.equal(bidderRequest.auctionId);
|
|
237
238
|
expect(openRtbReq.source.ext.version).not.to.be.undefined;
|
|
238
239
|
expect(openRtbReq.source.ext.str).not.to.be.undefined;
|
|
239
240
|
expect(openRtbReq.source.ext.schain).to.deep.equal(bidRequests[0].schain);
|
|
@@ -4,7 +4,7 @@ import {config} from '../../../src/config'
|
|
|
4
4
|
import * as utils from '../../../src/utils'
|
|
5
5
|
|
|
6
6
|
describe('Taboola Adapter', function () {
|
|
7
|
-
let hasLocalStorage, cookiesAreEnabled, getDataFromLocalStorage, localStorageIsEnabled, getCookie;
|
|
7
|
+
let hasLocalStorage, cookiesAreEnabled, getDataFromLocalStorage, localStorageIsEnabled, getCookie, commonBidRequest;
|
|
8
8
|
|
|
9
9
|
beforeEach(() => {
|
|
10
10
|
hasLocalStorage = sinon.stub(userData.storageManager, 'hasLocalStorage');
|
|
@@ -12,7 +12,7 @@ describe('Taboola Adapter', function () {
|
|
|
12
12
|
getCookie = sinon.stub(userData.storageManager, 'getCookie');
|
|
13
13
|
getDataFromLocalStorage = sinon.stub(userData.storageManager, 'getDataFromLocalStorage');
|
|
14
14
|
localStorageIsEnabled = sinon.stub(userData.storageManager, 'localStorageIsEnabled');
|
|
15
|
-
|
|
15
|
+
commonBidRequest = createBidRequest();
|
|
16
16
|
$$PREBID_GLOBAL$$.bidderSettings = {
|
|
17
17
|
taboola: {
|
|
18
18
|
storageAllowed: true
|
|
@@ -30,19 +30,19 @@ describe('Taboola Adapter', function () {
|
|
|
30
30
|
$$PREBID_GLOBAL$$.bidderSettings = {};
|
|
31
31
|
})
|
|
32
32
|
|
|
33
|
-
const
|
|
33
|
+
const displayBidRequestParams = {
|
|
34
|
+
sizes: [[300, 250], [300, 600]]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const createBidRequest = () => ({
|
|
34
38
|
bidder: 'taboola',
|
|
35
39
|
params: {
|
|
36
40
|
publisherId: 'publisherId',
|
|
37
41
|
tagId: 'placement name'
|
|
38
42
|
},
|
|
39
|
-
bidId:
|
|
40
|
-
auctionId:
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const displayBidRequestParams = {
|
|
44
|
-
sizes: [[300, 250], [300, 600]]
|
|
45
|
-
}
|
|
43
|
+
bidId: utils.generateUUID(),
|
|
44
|
+
auctionId: utils.generateUUID(),
|
|
45
|
+
});
|
|
46
46
|
|
|
47
47
|
describe('isBidRequestValid', function () {
|
|
48
48
|
it('should fail when bid is invalid - tagId isn`t defined', function () {
|
|
@@ -132,7 +132,7 @@ describe('Taboola Adapter', function () {
|
|
|
132
132
|
|
|
133
133
|
describe('buildRequests', function () {
|
|
134
134
|
const defaultBidRequest = {
|
|
135
|
-
...
|
|
135
|
+
...createBidRequest(),
|
|
136
136
|
...displayBidRequestParams,
|
|
137
137
|
}
|
|
138
138
|
|
|
@@ -441,6 +441,105 @@ describe('Taboola Adapter', function () {
|
|
|
441
441
|
overriddenServerResponse.body.seatbid[0].bid = bid;
|
|
442
442
|
});
|
|
443
443
|
|
|
444
|
+
it('should interpret multi impression request', function () {
|
|
445
|
+
const multiRequest = {
|
|
446
|
+
bids: [
|
|
447
|
+
{
|
|
448
|
+
...createBidRequest(),
|
|
449
|
+
...displayBidRequestParams
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
...createBidRequest(),
|
|
453
|
+
...displayBidRequestParams
|
|
454
|
+
}
|
|
455
|
+
]
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
const multiServerResponse = {
|
|
459
|
+
body: {
|
|
460
|
+
'id': '49ffg4d58ef9a163a69fhgfghd4fad03621b9e036f24f7_15',
|
|
461
|
+
'seatbid': [
|
|
462
|
+
{
|
|
463
|
+
'bid': [
|
|
464
|
+
{
|
|
465
|
+
'id': '0b3dd94348-134b-435f-8db5-6bf5afgfc39e86c',
|
|
466
|
+
'impid': '2',
|
|
467
|
+
'price': 0.342068,
|
|
468
|
+
'adid': '2785119545551083381',
|
|
469
|
+
'adm': 'ADM2',
|
|
470
|
+
'adomain': [
|
|
471
|
+
'example.xyz'
|
|
472
|
+
],
|
|
473
|
+
'cid': '15744349',
|
|
474
|
+
'crid': '278195503434041083381',
|
|
475
|
+
'w': 300,
|
|
476
|
+
'h': 250,
|
|
477
|
+
'exp': 60,
|
|
478
|
+
'lurl': 'http://us-trc.taboola.com/sample'
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
'id': '0b3dd94348-134b-435f-8db5-6bf5afgfc39e86c',
|
|
482
|
+
'impid': '1',
|
|
483
|
+
'price': 0.342068,
|
|
484
|
+
'adid': '2785119545551083381',
|
|
485
|
+
'adm': 'ADM1',
|
|
486
|
+
'adomain': [
|
|
487
|
+
'example.xyz'
|
|
488
|
+
],
|
|
489
|
+
'cid': '15744349',
|
|
490
|
+
'crid': '278195503434041083381',
|
|
491
|
+
'w': 300,
|
|
492
|
+
'h': 250,
|
|
493
|
+
'exp': 60,
|
|
494
|
+
'lurl': 'http://us-trc.taboola.com/sample'
|
|
495
|
+
}
|
|
496
|
+
],
|
|
497
|
+
'seat': '14204545260'
|
|
498
|
+
}
|
|
499
|
+
],
|
|
500
|
+
'bidid': 'da43860a-4644-442a-b5e0-93f268cf8d19',
|
|
501
|
+
'cur': 'USD'
|
|
502
|
+
}
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
const [bid] = multiServerResponse.body.seatbid[0].bid;
|
|
506
|
+
const expectedRes = [
|
|
507
|
+
{
|
|
508
|
+
requestId: multiRequest.bids[1].bidId,
|
|
509
|
+
cpm: bid.price,
|
|
510
|
+
creativeId: bid.crid,
|
|
511
|
+
ttl: 60,
|
|
512
|
+
netRevenue: true,
|
|
513
|
+
currency: multiServerResponse.body.cur,
|
|
514
|
+
mediaType: 'banner',
|
|
515
|
+
ad: multiServerResponse.body.seatbid[0].bid[0].adm,
|
|
516
|
+
width: bid.w,
|
|
517
|
+
height: bid.h,
|
|
518
|
+
meta: {
|
|
519
|
+
'advertiserDomains': bid.adomain
|
|
520
|
+
},
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
requestId: multiRequest.bids[0].bidId,
|
|
524
|
+
cpm: bid.price,
|
|
525
|
+
creativeId: bid.crid,
|
|
526
|
+
ttl: 60,
|
|
527
|
+
netRevenue: true,
|
|
528
|
+
currency: multiServerResponse.body.cur,
|
|
529
|
+
mediaType: 'banner',
|
|
530
|
+
ad: multiServerResponse.body.seatbid[0].bid[1].adm,
|
|
531
|
+
width: bid.w,
|
|
532
|
+
height: bid.h,
|
|
533
|
+
meta: {
|
|
534
|
+
'advertiserDomains': bid.adomain
|
|
535
|
+
},
|
|
536
|
+
}
|
|
537
|
+
]
|
|
538
|
+
|
|
539
|
+
const res = spec.interpretResponse(multiServerResponse, multiRequest)
|
|
540
|
+
expect(res).to.deep.equal(expectedRes)
|
|
541
|
+
});
|
|
542
|
+
|
|
444
543
|
it('should interpret display response', function () {
|
|
445
544
|
const [bid] = serverResponse.body.seatbid[0].bid;
|
|
446
545
|
const expectedRes = [
|
|
@@ -449,7 +548,7 @@ describe('Taboola Adapter', function () {
|
|
|
449
548
|
cpm: bid.price,
|
|
450
549
|
creativeId: bid.crid,
|
|
451
550
|
ttl: 60,
|
|
452
|
-
netRevenue:
|
|
551
|
+
netRevenue: true,
|
|
453
552
|
currency: serverResponse.body.cur,
|
|
454
553
|
mediaType: 'banner',
|
|
455
554
|
ad: bid.adm,
|
|
@@ -475,7 +574,7 @@ describe('Taboola Adapter', function () {
|
|
|
475
574
|
cpm: bid.price,
|
|
476
575
|
creativeId: bid.crid,
|
|
477
576
|
ttl: 125,
|
|
478
|
-
netRevenue:
|
|
577
|
+
netRevenue: true,
|
|
479
578
|
currency: serverResponse.body.cur,
|
|
480
579
|
mediaType: 'banner',
|
|
481
580
|
ad: bid.adm,
|