prebid.js 8.7.0 → 8.9.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/1plusXRtdProvider.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/a1MediaRtdProvider.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerIdSystem.js +1 -1
- package/dist/adnuntiusRtdProvider.js +1 -1
- package/dist/adpartnerBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adriverIdSystem.js +1 -1
- package/dist/adtelligentIdSystem.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/adyoulikeBidAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/akamaiDapRtdProvider.js +1 -1
- package/dist/alkimiBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.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/automatadBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.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/brandmetricsRtdProvider.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/brightcomSSPBidAdapter.js +1 -1
- package/dist/britepoolIdSystem.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/categoryTranslation.js +1 -1
- package/dist/chtnwBidAdapter.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/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/currency.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dacIdSystem.js +1 -1
- package/dist/dailyhuntBidAdapter.js +1 -1
- package/dist/datablocksBidAdapter.js +1 -1
- package/dist/dependencies.json +4 -1
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dmdIdSystem.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/fabrickIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fledgeForGpt.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -1
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/gnetBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -1
- package/dist/growthCodeRtdProvider.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/hadronIdSystem.js +1 -1
- package/dist/hadronRtdProvider.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/iasRtdProvider.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/idImportLibrary.js +1 -1
- package/dist/identityLinkIdSystem.js +1 -1
- package/dist/imRtdProvider.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/imuIdSystem.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/konduitWrapper.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/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/mantisBidAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/merkleIdSystem.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/mgidRtdProvider.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/mspa.js +1 -1
- package/dist/mwOpenLinkIdSystem.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +248 -247
- package/dist/novatiqIdSystem.js +1 -1
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/open8BidAdapter.js +1 -1
- package/dist/operaadsBidAdapter.js +1 -1
- package/dist/operaadsIdSystem.js +1 -0
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/optimeraRtdProvider.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionAnalyticsAdapter.js +1 -1
- package/dist/oxxionRtdProvider.js +1 -1
- package/dist/parrableIdSystem.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/prismaBidAdapter.js +1 -1
- package/dist/pubgeniusBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/qwarryBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/reconciliationRtdProvider.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevadRtdProvider.js +1 -1
- package/dist/retailspotBidAdapter.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/rubiconBidAdapter.js +1 -1
- package/dist/scaleableAnalyticsAdapter.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/silverpushBidAdapter.js +1 -1
- package/dist/sirdataRtdProvider.js +1 -1
- package/dist/slimcutBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/snigelBidAdapter.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/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/talkadsBidAdapter.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 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/timeoutRtdProvider.js +1 -1
- package/dist/topicsFpdModule.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/unifiedIdSystem.js +1 -1
- package/dist/verizonMediaIdSystem.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/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/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/growthcode.html +3 -12
- package/integrationExamples/topics/topics-server.js +72 -0
- package/libraries/mspa/activityControls.js +3 -1
- package/modules/.submodules.json +2 -1
- package/modules/a1MediaRtdProvider.js +1 -1
- package/modules/adagioBidAdapter.js +11 -3
- package/modules/admaticBidAdapter.js +5 -0
- package/modules/adqueryBidAdapter.js +23 -21
- package/modules/adqueryIdSystem.js +45 -30
- package/modules/adrelevantisBidAdapter.js +2 -0
- package/modules/bidViewability.js +7 -0
- package/modules/bidViewability.md +9 -8
- package/modules/brandmetricsRtdProvider.js +30 -27
- package/modules/concertBidAdapter.js +1 -0
- package/modules/criteoBidAdapter.js +66 -43
- package/modules/fledgeForGpt.js +17 -4
- package/modules/fledgeForGpt.md +17 -10
- package/modules/geoedgeRtdProvider.js +44 -18
- package/modules/geoedgeRtdProvider.md +2 -1
- package/modules/growthCodeAnalyticsAdapter.js +7 -4
- package/modules/growthCodeAnalyticsAdapter.md +1 -7
- package/modules/liveIntentIdSystem.js +16 -1
- package/modules/nativoBidAdapter.js +21 -3
- package/modules/nexx360BidAdapter.js +7 -1
- package/modules/onetagBidAdapter.js +3 -0
- package/modules/operaadsBidAdapter.js +5 -0
- package/modules/operaadsBidAdapter.md +5 -5
- package/modules/operaadsIdSystem.js +106 -0
- package/modules/operaadsIdSystem.md +52 -0
- package/modules/oxxionAnalyticsAdapter.js +22 -5
- package/modules/prebidServerBidAdapter/index.js +8 -2
- package/modules/pubmaticAnalyticsAdapter.js +16 -3
- package/modules/rubiconBidAdapter.js +2 -2
- package/modules/smartyadsBidAdapter.js +18 -1
- package/modules/snigelBidAdapter.js +69 -16
- package/modules/snigelBidAdapter.md +9 -3
- package/modules/topicsFpdModule.js +35 -9
- package/modules/visxBidAdapter.js +51 -1
- package/package.json +2 -2
- package/src/adapters/bidderFactory.js +14 -5
- package/src/adloader.js +1 -0
- package/src/ajax.js +126 -87
- package/src/constants.json +8 -2
- package/src/native.js +14 -3
- package/test/mocks/xhr.js +256 -9
- package/test/spec/libraries/mspa/activityControls_spec.js +6 -0
- package/test/spec/modules/adagioBidAdapter_spec.js +15 -0
- package/test/spec/modules/adlooxAdServerVideo_spec.js +1 -5
- package/test/spec/modules/adlooxRtdProvider_spec.js +1 -5
- package/test/spec/modules/admaticBidAdapter_spec.js +5 -0
- package/test/spec/modules/adqueryIdSystem_spec.js +13 -24
- package/test/spec/modules/bidViewability_spec.js +32 -1
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +6 -0
- package/test/spec/modules/categoryTranslation_spec.js +7 -9
- package/test/spec/modules/concertBidAdapter_spec.js +1 -1
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +3 -5
- package/test/spec/modules/criteoBidAdapter_spec.js +228 -0
- package/test/spec/modules/currency_spec.js +2 -2
- package/test/spec/modules/dmdIdSystem_spec.js +2 -2
- package/test/spec/modules/eids_spec.js +48 -0
- package/test/spec/modules/euidIdSystem_spec.js +10 -9
- package/test/spec/modules/feedadBidAdapter_spec.js +1 -1
- package/test/spec/modules/fledge_spec.js +117 -43
- package/test/spec/modules/geoedgeRtdProvider_spec.js +52 -39
- package/test/spec/modules/greenbidsRtdProvider_spec.js +3 -12
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +0 -1
- package/test/spec/modules/hadronIdSystem_spec.js +1 -1
- package/test/spec/modules/id5AnalyticsAdapter_spec.js +1 -7
- package/test/spec/modules/id5IdSystem_spec.js +25 -25
- package/test/spec/modules/identityLinkIdSystem_spec.js +0 -2
- package/test/spec/modules/intentIqIdSystem_spec.js +0 -2
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +2 -6
- package/test/spec/modules/jwplayerRtdProvider_spec.js +26 -28
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
- package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/mgidRtdProvider_spec.js +1 -5
- package/test/spec/modules/nativoBidAdapter_spec.js +6 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +48 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +5 -19
- package/test/spec/modules/onetagBidAdapter_spec.js +69 -0
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/operaadsIdSystem_spec.js +53 -0
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +6 -1
- package/test/spec/modules/prebidServerBidAdapter_spec.js +33 -2
- package/test/spec/modules/priceFloors_spec.js +33 -37
- package/test/spec/modules/publinkIdSystem_spec.js +1 -1
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +102 -18
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +2 -8
- package/test/spec/modules/rubiconBidAdapter_spec.js +24 -0
- package/test/spec/modules/smartyadsBidAdapter_spec.js +49 -0
- package/test/spec/modules/snigelBidAdapter_spec.js +57 -6
- package/test/spec/modules/teadsIdSystem_spec.js +1 -1
- package/test/spec/modules/topicsFpdModule_spec.js +102 -1
- package/test/spec/modules/uid2IdSystem_helpers.js +5 -5
- package/test/spec/modules/uid2IdSystem_spec.js +24 -24
- package/test/spec/modules/userId_spec.js +1 -1
- package/test/spec/modules/visxBidAdapter_spec.js +151 -1
- package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +2 -5
- package/test/spec/native_spec.js +20 -5
- package/test/spec/unit/core/ajax_spec.js +403 -0
- package/test/spec/unit/core/bidderFactory_spec.js +80 -8
- package/test/spec/videoCache_spec.js +4 -4
|
@@ -22,6 +22,7 @@ import {auctionManager} from '../../../src/auctionManager.js';
|
|
|
22
22
|
import {stubAuctionIndex} from '../../helpers/indexStub.js';
|
|
23
23
|
import {guardTids} from '../../../src/adapters/bidderFactory.js';
|
|
24
24
|
import * as activities from '../../../src/activities/rules.js';
|
|
25
|
+
import {server} from '../../mocks/xhr.js';
|
|
25
26
|
|
|
26
27
|
describe('the price floors module', function () {
|
|
27
28
|
let logErrorSpy;
|
|
@@ -593,16 +594,11 @@ describe('the price floors module', function () {
|
|
|
593
594
|
adUnits,
|
|
594
595
|
});
|
|
595
596
|
};
|
|
596
|
-
let fakeFloorProvider;
|
|
597
597
|
let actualAllowedFields = allowedFields;
|
|
598
598
|
let actualFieldMatchingFunctions = fieldMatchingFunctions;
|
|
599
599
|
const defaultAllowedFields = [...allowedFields];
|
|
600
600
|
const defaultMatchingFunctions = {...fieldMatchingFunctions};
|
|
601
|
-
beforeEach(function() {
|
|
602
|
-
fakeFloorProvider = sinon.fakeServer.create();
|
|
603
|
-
});
|
|
604
601
|
afterEach(function() {
|
|
605
|
-
fakeFloorProvider.restore();
|
|
606
602
|
exposedAdUnits = undefined;
|
|
607
603
|
actualAllowedFields = [...defaultAllowedFields];
|
|
608
604
|
actualFieldMatchingFunctions = {...defaultMatchingFunctions};
|
|
@@ -986,7 +982,7 @@ describe('the price floors module', function () {
|
|
|
986
982
|
});
|
|
987
983
|
});
|
|
988
984
|
it('Should continue auction of delay is hit without a response from floor provider', function () {
|
|
989
|
-
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.
|
|
985
|
+
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json//'}});
|
|
990
986
|
|
|
991
987
|
// start the auction it should delay and not immediately call `continueAuction`
|
|
992
988
|
runStandardAuction();
|
|
@@ -1013,7 +1009,7 @@ describe('the price floors module', function () {
|
|
|
1013
1009
|
fetchStatus: 'timeout',
|
|
1014
1010
|
floorProvider: undefined
|
|
1015
1011
|
});
|
|
1016
|
-
|
|
1012
|
+
server.respond();
|
|
1017
1013
|
});
|
|
1018
1014
|
it('It should fetch if config has url and bidRequests have fetch level flooring meta data', function () {
|
|
1019
1015
|
// init the fake server with response stuff
|
|
@@ -1021,14 +1017,14 @@ describe('the price floors module', function () {
|
|
|
1021
1017
|
...basicFloorData,
|
|
1022
1018
|
modelVersion: 'fetch model name', // change the model name
|
|
1023
1019
|
};
|
|
1024
|
-
|
|
1020
|
+
server.respondWith(JSON.stringify(fetchFloorData));
|
|
1025
1021
|
|
|
1026
1022
|
// run setConfig indicating fetch
|
|
1027
|
-
handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1023
|
+
handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1028
1024
|
|
|
1029
1025
|
// floor provider should be called
|
|
1030
|
-
expect(
|
|
1031
|
-
expect(
|
|
1026
|
+
expect(server.requests.length).to.equal(1);
|
|
1027
|
+
expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
|
|
1032
1028
|
|
|
1033
1029
|
// start the auction it should delay and not immediately call `continueAuction`
|
|
1034
1030
|
runStandardAuction();
|
|
@@ -1037,7 +1033,7 @@ describe('the price floors module', function () {
|
|
|
1037
1033
|
expect(exposedAdUnits).to.be.undefined;
|
|
1038
1034
|
|
|
1039
1035
|
// make the fetch respond
|
|
1040
|
-
|
|
1036
|
+
server.respond();
|
|
1041
1037
|
expect(exposedAdUnits).to.not.be.undefined;
|
|
1042
1038
|
|
|
1043
1039
|
// the exposedAdUnits should be from the fetch not setConfig level data
|
|
@@ -1061,14 +1057,14 @@ describe('the price floors module', function () {
|
|
|
1061
1057
|
floorProvider: 'floorProviderD', // change the floor provider
|
|
1062
1058
|
modelVersion: 'fetch model name', // change the model name
|
|
1063
1059
|
};
|
|
1064
|
-
|
|
1060
|
+
server.respondWith(JSON.stringify(fetchFloorData));
|
|
1065
1061
|
|
|
1066
1062
|
// run setConfig indicating fetch
|
|
1067
|
-
handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorproviderC', auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1063
|
+
handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorproviderC', auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1068
1064
|
|
|
1069
1065
|
// floor provider should be called
|
|
1070
|
-
expect(
|
|
1071
|
-
expect(
|
|
1066
|
+
expect(server.requests.length).to.equal(1);
|
|
1067
|
+
expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
|
|
1072
1068
|
|
|
1073
1069
|
// start the auction it should delay and not immediately call `continueAuction`
|
|
1074
1070
|
runStandardAuction();
|
|
@@ -1077,7 +1073,7 @@ describe('the price floors module', function () {
|
|
|
1077
1073
|
expect(exposedAdUnits).to.be.undefined;
|
|
1078
1074
|
|
|
1079
1075
|
// make the fetch respond
|
|
1080
|
-
|
|
1076
|
+
server.respond();
|
|
1081
1077
|
|
|
1082
1078
|
// the exposedAdUnits should be from the fetch not setConfig level data
|
|
1083
1079
|
// and fetchStatus is success since fetch worked
|
|
@@ -1102,14 +1098,14 @@ describe('the price floors module', function () {
|
|
|
1102
1098
|
modelVersion: 'fetch model name', // change the model name
|
|
1103
1099
|
};
|
|
1104
1100
|
fetchFloorData.skipRate = 95;
|
|
1105
|
-
|
|
1101
|
+
server.respondWith(JSON.stringify(fetchFloorData));
|
|
1106
1102
|
|
|
1107
1103
|
// run setConfig indicating fetch
|
|
1108
|
-
handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1104
|
+
handleSetFloorsConfig({...basicFloorConfig, floorProvider: 'floorprovider', auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1109
1105
|
|
|
1110
1106
|
// floor provider should be called
|
|
1111
|
-
expect(
|
|
1112
|
-
expect(
|
|
1107
|
+
expect(server.requests.length).to.equal(1);
|
|
1108
|
+
expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
|
|
1113
1109
|
|
|
1114
1110
|
// start the auction it should delay and not immediately call `continueAuction`
|
|
1115
1111
|
runStandardAuction();
|
|
@@ -1118,7 +1114,7 @@ describe('the price floors module', function () {
|
|
|
1118
1114
|
expect(exposedAdUnits).to.be.undefined;
|
|
1119
1115
|
|
|
1120
1116
|
// make the fetch respond
|
|
1121
|
-
|
|
1117
|
+
server.respond();
|
|
1122
1118
|
expect(exposedAdUnits).to.not.be.undefined;
|
|
1123
1119
|
|
|
1124
1120
|
// the exposedAdUnits should be from the fetch not setConfig level data
|
|
@@ -1137,10 +1133,10 @@ describe('the price floors module', function () {
|
|
|
1137
1133
|
});
|
|
1138
1134
|
it('Should not break if floor provider returns 404', function () {
|
|
1139
1135
|
// run setConfig indicating fetch
|
|
1140
|
-
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1136
|
+
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1141
1137
|
|
|
1142
1138
|
// run the auction and make server respond with 404
|
|
1143
|
-
|
|
1139
|
+
server.respond();
|
|
1144
1140
|
runStandardAuction();
|
|
1145
1141
|
|
|
1146
1142
|
// error should have been called for fetch error
|
|
@@ -1160,13 +1156,13 @@ describe('the price floors module', function () {
|
|
|
1160
1156
|
});
|
|
1161
1157
|
});
|
|
1162
1158
|
it('Should not break if floor provider returns non json', function () {
|
|
1163
|
-
|
|
1159
|
+
server.respondWith('Not valid response');
|
|
1164
1160
|
|
|
1165
1161
|
// run setConfig indicating fetch
|
|
1166
|
-
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1162
|
+
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1167
1163
|
|
|
1168
1164
|
// run the auction and make server respond
|
|
1169
|
-
|
|
1165
|
+
server.respond();
|
|
1170
1166
|
runStandardAuction();
|
|
1171
1167
|
|
|
1172
1168
|
// error should have been called for response floor data not being valid
|
|
@@ -1187,27 +1183,27 @@ describe('the price floors module', function () {
|
|
|
1187
1183
|
});
|
|
1188
1184
|
it('should handle not using fetch correctly', function () {
|
|
1189
1185
|
// run setConfig twice indicating fetch
|
|
1190
|
-
|
|
1191
|
-
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1192
|
-
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1186
|
+
server.respondWith(JSON.stringify(basicFloorData));
|
|
1187
|
+
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1188
|
+
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1193
1189
|
|
|
1194
1190
|
// log warn should be called and server only should have one request
|
|
1195
1191
|
expect(logWarnSpy.calledOnce).to.equal(true);
|
|
1196
|
-
expect(
|
|
1197
|
-
expect(
|
|
1192
|
+
expect(server.requests.length).to.equal(1);
|
|
1193
|
+
expect(server.requests[0].url).to.equal('http://www.fakefloorprovider.json/');
|
|
1198
1194
|
|
|
1199
1195
|
// now we respond and then run again it should work and make another request
|
|
1200
|
-
|
|
1201
|
-
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.
|
|
1202
|
-
|
|
1196
|
+
server.respond();
|
|
1197
|
+
handleSetFloorsConfig({...basicFloorConfig, auctionDelay: 250, endpoint: {url: 'http://www.fakefloorprovider.json/'}});
|
|
1198
|
+
server.respond();
|
|
1203
1199
|
|
|
1204
1200
|
// now warn still only called once and server called twice
|
|
1205
1201
|
expect(logWarnSpy.calledOnce).to.equal(true);
|
|
1206
|
-
expect(
|
|
1202
|
+
expect(server.requests.length).to.equal(2);
|
|
1207
1203
|
|
|
1208
1204
|
// should log error if method is not GET for now
|
|
1209
1205
|
expect(logErrorSpy.calledOnce).to.equal(false);
|
|
1210
|
-
handleSetFloorsConfig({...basicFloorConfig, endpoint: {url: 'http://www.
|
|
1206
|
+
handleSetFloorsConfig({...basicFloorConfig, endpoint: {url: 'http://www.fakefloorprovider.json/', method: 'POST'}});
|
|
1211
1207
|
expect(logErrorSpy.calledOnce).to.equal(true);
|
|
1212
1208
|
});
|
|
1213
1209
|
describe('isFloorsDataValid', function () {
|
|
@@ -120,7 +120,7 @@ describe('PublinkIdSystem', () => {
|
|
|
120
120
|
expect(parsed.search.mpn).to.equal('Prebid.js');
|
|
121
121
|
expect(parsed.search.mpv).to.equal('$prebid.version$');
|
|
122
122
|
|
|
123
|
-
request.respond(204
|
|
123
|
+
request.respond(204);
|
|
124
124
|
expect(callbackSpy.called).to.be.false;
|
|
125
125
|
});
|
|
126
126
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import pubmaticAnalyticsAdapter, {
|
|
1
|
+
import pubmaticAnalyticsAdapter, {getMetadata} from 'modules/pubmaticAnalyticsAdapter.js';
|
|
2
2
|
import adapterManager from 'src/adapterManager.js';
|
|
3
3
|
import CONSTANTS from 'src/constants.json';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} from 'modules/currency.js';
|
|
4
|
+
import {config} from 'src/config.js';
|
|
5
|
+
import {setConfig} from 'modules/currency.js';
|
|
6
|
+
import {server} from '../../mocks/xhr.js';
|
|
7
|
+
import 'src/prebid.js';
|
|
9
8
|
|
|
10
9
|
let events = require('src/events');
|
|
11
10
|
let ajax = require('src/ajax');
|
|
@@ -273,7 +272,6 @@ function getLoggerJsonFromRequest(requestBody) {
|
|
|
273
272
|
|
|
274
273
|
describe('pubmatic analytics adapter', function () {
|
|
275
274
|
let sandbox;
|
|
276
|
-
let xhr;
|
|
277
275
|
let requests;
|
|
278
276
|
let oldScreen;
|
|
279
277
|
let clock;
|
|
@@ -282,9 +280,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
282
280
|
setUADefault();
|
|
283
281
|
sandbox = sinon.sandbox.create();
|
|
284
282
|
|
|
285
|
-
|
|
286
|
-
requests = [];
|
|
287
|
-
xhr.onCreate = request => requests.push(request);
|
|
283
|
+
requests = server.requests;
|
|
288
284
|
|
|
289
285
|
sandbox.stub(events, 'getEvents').returns([]);
|
|
290
286
|
|
|
@@ -393,7 +389,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
393
389
|
expect(data.s[0].ps[0].af).to.equal('video');
|
|
394
390
|
expect(data.s[0].ps[0].ocpm).to.equal(1.23);
|
|
395
391
|
expect(data.s[0].ps[0].ocry).to.equal('USD');
|
|
396
|
-
expect(data.s[0].ps[0].frv).to.equal(
|
|
392
|
+
expect(data.s[0].ps[0].frv).to.equal(1.1);
|
|
397
393
|
// slot 2
|
|
398
394
|
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
|
|
399
395
|
expect(data.s[1].fskp).to.equal(0);
|
|
@@ -422,7 +418,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
422
418
|
expect(data.s[1].ps[0].af).to.equal('banner');
|
|
423
419
|
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
|
|
424
420
|
expect(data.s[1].ps[0].ocry).to.equal('USD');
|
|
425
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
421
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
426
422
|
|
|
427
423
|
// tracker slot1
|
|
428
424
|
let firstTracker = requests[0].url;
|
|
@@ -452,6 +448,94 @@ describe('pubmatic analytics adapter', function () {
|
|
|
452
448
|
expect(data.af).to.equal('video');
|
|
453
449
|
});
|
|
454
450
|
|
|
451
|
+
it('Logger: do not log floor fields when prebids floor shows noData in location property', function() {
|
|
452
|
+
const BID_REQUESTED_COPY = utils.deepClone(MOCK.BID_REQUESTED);
|
|
453
|
+
BID_REQUESTED_COPY['bids'][1]['floorData']['location'] = 'noData';
|
|
454
|
+
|
|
455
|
+
this.timeout(5000)
|
|
456
|
+
|
|
457
|
+
sandbox.stub($$PREBID_GLOBAL$$, 'getHighestCpmBids').callsFake((key) => {
|
|
458
|
+
return [MOCK.BID_RESPONSE[0], MOCK.BID_RESPONSE[1]]
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
config.setConfig({
|
|
462
|
+
testGroupId: 15
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
|
|
466
|
+
events.emit(BID_REQUESTED, BID_REQUESTED_COPY);
|
|
467
|
+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
|
|
468
|
+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[1]);
|
|
469
|
+
events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
|
|
470
|
+
events.emit(AUCTION_END, MOCK.AUCTION_END);
|
|
471
|
+
events.emit(SET_TARGETING, MOCK.SET_TARGETING);
|
|
472
|
+
events.emit(BID_WON, MOCK.BID_WON[0]);
|
|
473
|
+
events.emit(BID_WON, MOCK.BID_WON[1]);
|
|
474
|
+
|
|
475
|
+
clock.tick(2000 + 1000);
|
|
476
|
+
expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
|
|
477
|
+
let request = requests[2]; // logger is executed late, trackers execute first
|
|
478
|
+
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
|
|
479
|
+
|
|
480
|
+
let data = getLoggerJsonFromRequest(request.requestBody);
|
|
481
|
+
|
|
482
|
+
expect(data.pubid).to.equal('9999');
|
|
483
|
+
expect(data.fmv).to.equal(undefined);
|
|
484
|
+
|
|
485
|
+
// slot 1
|
|
486
|
+
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
|
|
487
|
+
expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
|
|
488
|
+
|
|
489
|
+
// slot 2
|
|
490
|
+
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
|
|
491
|
+
expect(data.s[1].au).to.equal('/19968336/header-bid-tag-1');
|
|
492
|
+
expect(data.s[1].fskp).to.equal(undefined);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
it('Logger: log floor fields when prebids floor shows setConfig in location property', function() {
|
|
496
|
+
const BID_REQUESTED_COPY = utils.deepClone(MOCK.BID_REQUESTED);
|
|
497
|
+
BID_REQUESTED_COPY['bids'][1]['floorData']['location'] = 'setConfig';
|
|
498
|
+
|
|
499
|
+
this.timeout(5000)
|
|
500
|
+
|
|
501
|
+
sandbox.stub($$PREBID_GLOBAL$$, 'getHighestCpmBids').callsFake((key) => {
|
|
502
|
+
return [MOCK.BID_RESPONSE[0], MOCK.BID_RESPONSE[1]]
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
config.setConfig({
|
|
506
|
+
testGroupId: 15
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
|
|
510
|
+
events.emit(BID_REQUESTED, BID_REQUESTED_COPY);
|
|
511
|
+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[0]);
|
|
512
|
+
events.emit(BID_RESPONSE, MOCK.BID_RESPONSE[1]);
|
|
513
|
+
events.emit(BIDDER_DONE, MOCK.BIDDER_DONE);
|
|
514
|
+
events.emit(AUCTION_END, MOCK.AUCTION_END);
|
|
515
|
+
events.emit(SET_TARGETING, MOCK.SET_TARGETING);
|
|
516
|
+
events.emit(BID_WON, MOCK.BID_WON[0]);
|
|
517
|
+
events.emit(BID_WON, MOCK.BID_WON[1]);
|
|
518
|
+
|
|
519
|
+
clock.tick(2000 + 1000);
|
|
520
|
+
expect(requests.length).to.equal(3); // 1 logger and 2 win-tracker
|
|
521
|
+
let request = requests[2]; // logger is executed late, trackers execute first
|
|
522
|
+
expect(request.url).to.equal('https://t.pubmatic.com/wl?pubid=9999');
|
|
523
|
+
|
|
524
|
+
let data = getLoggerJsonFromRequest(request.requestBody);
|
|
525
|
+
|
|
526
|
+
expect(data.pubid).to.equal('9999');
|
|
527
|
+
expect(data.fmv).to.equal('floorModelTest');
|
|
528
|
+
|
|
529
|
+
// slot 1
|
|
530
|
+
expect(data.s[0].sn).to.equal('/19968336/header-bid-tag-0');
|
|
531
|
+
expect(data.s[0].au).to.equal('/19968336/header-bid-tag-0');
|
|
532
|
+
|
|
533
|
+
// slot 2
|
|
534
|
+
expect(data.s[1].sn).to.equal('/19968336/header-bid-tag-1');
|
|
535
|
+
expect(data.s[1].au).to.equal('/19968336/header-bid-tag-1');
|
|
536
|
+
expect(data.s[1].fskp).to.equal(0);
|
|
537
|
+
});
|
|
538
|
+
|
|
455
539
|
it('bidCpmAdjustment: USD: Logger: best case + win tracker', function() {
|
|
456
540
|
const bidCopy = utils.deepClone(BID);
|
|
457
541
|
bidCopy.cpm = bidCopy.originalCpm * 2; // bidCpmAdjustment => bidCpm * 2
|
|
@@ -501,7 +585,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
501
585
|
expect(data.s[0].ps[0].af).to.equal('video');
|
|
502
586
|
expect(data.s[0].ps[0].ocpm).to.equal(1.23);
|
|
503
587
|
expect(data.s[0].ps[0].ocry).to.equal('USD');
|
|
504
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
588
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
505
589
|
// tracker slot1
|
|
506
590
|
let firstTracker = requests[0].url;
|
|
507
591
|
expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
|
|
@@ -711,7 +795,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
711
795
|
expect(data.s[1].ps[0].af).to.equal('banner');
|
|
712
796
|
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
|
|
713
797
|
expect(data.s[1].ps[0].ocry).to.equal('USD');
|
|
714
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
798
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
715
799
|
});
|
|
716
800
|
|
|
717
801
|
it('Logger: currency conversion check', function() {
|
|
@@ -818,7 +902,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
818
902
|
expect(data.s[1].ps[0].af).to.equal('banner');
|
|
819
903
|
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
|
|
820
904
|
expect(data.s[1].ps[0].ocry).to.equal('USD');
|
|
821
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
905
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
822
906
|
expect(data.dvc).to.deep.equal({'plt': 2});
|
|
823
907
|
// respective tracker slot
|
|
824
908
|
let firstTracker = requests[1].url;
|
|
@@ -876,7 +960,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
876
960
|
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
|
|
877
961
|
expect(data.s[1].ps[0].ocry).to.equal('USD');
|
|
878
962
|
expect(data.dvc).to.deep.equal({'plt': 1});
|
|
879
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
963
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
880
964
|
// respective tracker slot
|
|
881
965
|
let firstTracker = requests[1].url;
|
|
882
966
|
expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
|
|
@@ -929,7 +1013,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
929
1013
|
expect(data.s[1].ps[0].af).to.equal('banner');
|
|
930
1014
|
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
|
|
931
1015
|
expect(data.s[1].ps[0].ocry).to.equal('USD');
|
|
932
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
1016
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
933
1017
|
// respective tracker slot
|
|
934
1018
|
let firstTracker = requests[1].url;
|
|
935
1019
|
expect(firstTracker.split('?')[0]).to.equal('https://t.pubmatic.com/wt');
|
|
@@ -1091,7 +1175,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
1091
1175
|
expect(data.s[1].ps[0].af).to.equal('banner');
|
|
1092
1176
|
expect(data.s[1].ps[0].ocpm).to.equal(1.52);
|
|
1093
1177
|
expect(data.s[1].ps[0].ocry).to.equal('USD');
|
|
1094
|
-
expect(data.s[1].ps[0].frv).to.equal(
|
|
1178
|
+
expect(data.s[1].ps[0].frv).to.equal(1.1);
|
|
1095
1179
|
|
|
1096
1180
|
// tracker slot1
|
|
1097
1181
|
let firstTracker = requests[0].url;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {expect} from 'chai';
|
|
2
2
|
import pubwiseAnalytics from 'modules/pubwiseAnalyticsAdapter.js';
|
|
3
3
|
import {expectEvents} from '../../helpers/analytics.js';
|
|
4
|
+
import {server} from '../../mocks/xhr.js';
|
|
4
5
|
|
|
5
6
|
let events = require('src/events');
|
|
6
7
|
let adapterManager = require('src/adapterManager').default;
|
|
@@ -9,7 +10,6 @@ let constants = require('src/constants.json');
|
|
|
9
10
|
describe('PubWise Prebid Analytics', function () {
|
|
10
11
|
let requests;
|
|
11
12
|
let sandbox;
|
|
12
|
-
let xhr;
|
|
13
13
|
let clock;
|
|
14
14
|
let mock = {};
|
|
15
15
|
|
|
@@ -38,9 +38,7 @@ describe('PubWise Prebid Analytics', function () {
|
|
|
38
38
|
clock = sandbox.useFakeTimers();
|
|
39
39
|
sandbox.stub(events, 'getEvents').returns([]);
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
requests = [];
|
|
43
|
-
xhr.onCreate = request => requests.push(request);
|
|
41
|
+
requests = server.requests;
|
|
44
42
|
});
|
|
45
43
|
|
|
46
44
|
afterEach(function () {
|
|
@@ -50,10 +48,6 @@ describe('PubWise Prebid Analytics', function () {
|
|
|
50
48
|
});
|
|
51
49
|
|
|
52
50
|
describe('enableAnalytics', function () {
|
|
53
|
-
beforeEach(function () {
|
|
54
|
-
requests = [];
|
|
55
|
-
});
|
|
56
|
-
|
|
57
51
|
it('should catch all events', function () {
|
|
58
52
|
pubwiseAnalytics.enableAnalytics(mock.DEFAULT_PW_CONFIG);
|
|
59
53
|
|
|
@@ -1229,6 +1229,30 @@ describe('the rubicon adapter', function () {
|
|
|
1229
1229
|
});
|
|
1230
1230
|
});
|
|
1231
1231
|
|
|
1232
|
+
it('should still use single request if other rubicon configs are set after', function () {
|
|
1233
|
+
// set single request to true
|
|
1234
|
+
config.setConfig({ rubicon: { singleRequest: true } });
|
|
1235
|
+
|
|
1236
|
+
// execute some other rubicon setConfig
|
|
1237
|
+
config.setConfig({ rubicon: { netRevenue: true } });
|
|
1238
|
+
|
|
1239
|
+
const bidCopy = utils.deepClone(bidderRequest.bids[0]);
|
|
1240
|
+
bidderRequest.bids.push(bidCopy);
|
|
1241
|
+
bidderRequest.bids.push(bidCopy);
|
|
1242
|
+
bidderRequest.bids.push(bidCopy);
|
|
1243
|
+
|
|
1244
|
+
let serverRequests = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1245
|
+
|
|
1246
|
+
// should have 1 request only
|
|
1247
|
+
expect(serverRequests).that.is.an('array').of.length(1);
|
|
1248
|
+
|
|
1249
|
+
// get the built query
|
|
1250
|
+
let data = parseQuery(serverRequests[0].data);
|
|
1251
|
+
|
|
1252
|
+
// num slots should be 4
|
|
1253
|
+
expect(data.slots).to.equal('4');
|
|
1254
|
+
});
|
|
1255
|
+
|
|
1232
1256
|
it('should not group bid requests if singleRequest does not equal true', function () {
|
|
1233
1257
|
config.setConfig({rubicon: {singleRequest: false}});
|
|
1234
1258
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {expect} from 'chai';
|
|
2
2
|
import {spec} from '../../../modules/smartyadsBidAdapter.js';
|
|
3
3
|
import { config } from '../../../src/config.js';
|
|
4
|
+
import {server} from '../../mocks/xhr';
|
|
4
5
|
|
|
5
6
|
describe('SmartyadsAdapter', function () {
|
|
6
7
|
let bid = {
|
|
@@ -14,6 +15,21 @@ describe('SmartyadsAdapter', function () {
|
|
|
14
15
|
}
|
|
15
16
|
};
|
|
16
17
|
|
|
18
|
+
let bidResponse = {
|
|
19
|
+
width: 300,
|
|
20
|
+
height: 250,
|
|
21
|
+
mediaType: 'banner',
|
|
22
|
+
ad: `<img src='https://dummyimage.com/300x250&text=Test+Mode' width=300 height=250 alt='test mode'>`,
|
|
23
|
+
requestId: '23fhj33i987f',
|
|
24
|
+
cpm: 0.1,
|
|
25
|
+
ttl: 120,
|
|
26
|
+
creativeId: '123',
|
|
27
|
+
netRevenue: true,
|
|
28
|
+
currency: 'USD',
|
|
29
|
+
dealId: 'HASH',
|
|
30
|
+
sid: 1234
|
|
31
|
+
};
|
|
32
|
+
|
|
17
33
|
describe('isBidRequestValid', function () {
|
|
18
34
|
it('Should return true if there are bidId, params and sourceid parameters present', function () {
|
|
19
35
|
expect(spec.isBidRequestValid(bid)).to.be.true;
|
|
@@ -257,4 +273,37 @@ describe('SmartyadsAdapter', function () {
|
|
|
257
273
|
]);
|
|
258
274
|
});
|
|
259
275
|
});
|
|
276
|
+
|
|
277
|
+
describe('onBidWon', function () {
|
|
278
|
+
it('should exists', function () {
|
|
279
|
+
expect(spec.onBidWon).to.exist.and.to.be.a('function');
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('should send a valid bid won notice', function () {
|
|
283
|
+
spec.onBidWon(bidResponse);
|
|
284
|
+
expect(server.requests.length).to.equal(1);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
describe('onTimeout', function () {
|
|
289
|
+
it('should exists', function () {
|
|
290
|
+
expect(spec.onTimeout).to.exist.and.to.be.a('function');
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it('should send a valid bid timeout notice', function () {
|
|
294
|
+
spec.onTimeout({});
|
|
295
|
+
expect(server.requests.length).to.equal(1);
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
describe('onBidderError', function () {
|
|
300
|
+
it('should exists', function () {
|
|
301
|
+
expect(spec.onBidderError).to.exist.and.to.be.a('function');
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
it('should send a valid bidder error notice', function () {
|
|
305
|
+
spec.onBidderError({});
|
|
306
|
+
expect(server.requests.length).to.equal(1);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
260
309
|
});
|
|
@@ -20,6 +20,7 @@ const makeBidRequest = function (overrides) {
|
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
const BASE_BIDDER_REQUEST = {
|
|
23
|
+
auctionId: 'test',
|
|
23
24
|
bidderRequestId: 'test',
|
|
24
25
|
refererInfo: {
|
|
25
26
|
canonicalUrl: 'https://localhost',
|
|
@@ -53,8 +54,8 @@ describe('snigelBidAdapter', function () {
|
|
|
53
54
|
it('should build a single request for every impression and its placement', function () {
|
|
54
55
|
const bidderRequest = Object.assign({}, BASE_BIDDER_REQUEST);
|
|
55
56
|
const bidRequests = [
|
|
56
|
-
makeBidRequest({bidId: 'a', params: {placement: 'top_leaderboard'}}),
|
|
57
|
-
makeBidRequest({bidId: 'b', params: {placement: 'bottom_leaderboard'}}),
|
|
57
|
+
makeBidRequest({bidId: 'a', adUnitCode: 'au_a', params: {placement: 'top_leaderboard'}}),
|
|
58
|
+
makeBidRequest({bidId: 'b', adUnitCode: 'au_b', params: {placement: 'bottom_leaderboard'}}),
|
|
58
59
|
];
|
|
59
60
|
|
|
60
61
|
const request = spec.buildRequests(bidRequests, bidderRequest);
|
|
@@ -70,9 +71,9 @@ describe('snigelBidAdapter', function () {
|
|
|
70
71
|
expect(data).to.have.property('page').and.to.equal('https://localhost');
|
|
71
72
|
expect(data).to.have.property('placements');
|
|
72
73
|
expect(data.placements.length).to.equal(2);
|
|
73
|
-
expect(data.placements[0].
|
|
74
|
+
expect(data.placements[0].id).to.equal('au_a');
|
|
74
75
|
expect(data.placements[0].name).to.equal('top_leaderboard');
|
|
75
|
-
expect(data.placements[1].
|
|
76
|
+
expect(data.placements[1].id).to.equal('au_b');
|
|
76
77
|
expect(data.placements[1].name).to.equal('bottom_leaderboard');
|
|
77
78
|
});
|
|
78
79
|
|
|
@@ -127,6 +128,56 @@ describe('snigelBidAdapter', function () {
|
|
|
127
128
|
const data = JSON.parse(request.data);
|
|
128
129
|
expect(data).to.have.property('coppa').and.to.equal(true);
|
|
129
130
|
});
|
|
131
|
+
|
|
132
|
+
it('should forward refresh information', function () {
|
|
133
|
+
const bidderRequest = Object.assign({}, BASE_BIDDER_REQUEST);
|
|
134
|
+
const topLeaderboard = makeBidRequest({adUnitCode: 'top_leaderboard'});
|
|
135
|
+
const bottomLeaderboard = makeBidRequest({adUnitCode: 'bottom_leaderboard'});
|
|
136
|
+
const sidebar = makeBidRequest({adUnitCode: 'sidebar'});
|
|
137
|
+
|
|
138
|
+
// first auction, no refresh
|
|
139
|
+
let request = spec.buildRequests([topLeaderboard, bottomLeaderboard], bidderRequest);
|
|
140
|
+
expect(request).to.have.property('data');
|
|
141
|
+
let data = JSON.parse(request.data);
|
|
142
|
+
expect(data).to.have.property('placements');
|
|
143
|
+
expect(data.placements.length).to.equal(2);
|
|
144
|
+
expect(data.placements[0].id).to.equal('top_leaderboard');
|
|
145
|
+
expect(data.placements[0].refresh).to.be.undefined;
|
|
146
|
+
expect(data.placements[1].id).to.equal('bottom_leaderboard');
|
|
147
|
+
expect(data.placements[1].refresh).to.be.undefined;
|
|
148
|
+
|
|
149
|
+
// second auction for top leaderboard, was refreshed
|
|
150
|
+
request = spec.buildRequests([topLeaderboard, sidebar], bidderRequest);
|
|
151
|
+
expect(request).to.have.property('data');
|
|
152
|
+
data = JSON.parse(request.data);
|
|
153
|
+
expect(data).to.have.property('placements');
|
|
154
|
+
expect(data.placements.length).to.equal(2);
|
|
155
|
+
expect(data.placements[0].id).to.equal('top_leaderboard');
|
|
156
|
+
expect(data.placements[0].refresh).to.not.be.undefined;
|
|
157
|
+
expect(data.placements[0].refresh.count).to.equal(1);
|
|
158
|
+
expect(data.placements[0].refresh.time).to.be.greaterThanOrEqual(0);
|
|
159
|
+
expect(data.placements[1].id).to.equal('sidebar');
|
|
160
|
+
expect(data.placements[1].refresh).to.be.undefined;
|
|
161
|
+
|
|
162
|
+
// third auction, all units refreshed at some point
|
|
163
|
+
request = spec.buildRequests([topLeaderboard, bottomLeaderboard, sidebar], bidderRequest);
|
|
164
|
+
expect(request).to.have.property('data');
|
|
165
|
+
data = JSON.parse(request.data);
|
|
166
|
+
expect(data).to.have.property('placements');
|
|
167
|
+
expect(data.placements.length).to.equal(3);
|
|
168
|
+
expect(data.placements[0].id).to.equal('top_leaderboard');
|
|
169
|
+
expect(data.placements[0].refresh).to.not.be.undefined;
|
|
170
|
+
expect(data.placements[0].refresh.count).to.equal(2);
|
|
171
|
+
expect(data.placements[0].refresh.time).to.be.greaterThanOrEqual(0);
|
|
172
|
+
expect(data.placements[1].id).to.equal('bottom_leaderboard');
|
|
173
|
+
expect(data.placements[1].refresh).to.not.be.undefined;
|
|
174
|
+
expect(data.placements[1].refresh.count).to.equal(1);
|
|
175
|
+
expect(data.placements[1].refresh.time).to.be.greaterThanOrEqual(0);
|
|
176
|
+
expect(data.placements[2].id).to.equal('sidebar');
|
|
177
|
+
expect(data.placements[2].refresh).to.not.be.undefined;
|
|
178
|
+
expect(data.placements[2].refresh.count).to.equal(1);
|
|
179
|
+
expect(data.placements[2].refresh.time).to.be.greaterThanOrEqual(0);
|
|
180
|
+
});
|
|
130
181
|
});
|
|
131
182
|
|
|
132
183
|
describe('interpretResponse', function () {
|
|
@@ -146,7 +197,7 @@ describe('snigelBidAdapter', function () {
|
|
|
146
197
|
cur: 'USD',
|
|
147
198
|
bids: [
|
|
148
199
|
{
|
|
149
|
-
|
|
200
|
+
id: BASE_BID_REQUEST.adUnitCode,
|
|
150
201
|
price: 0.0575,
|
|
151
202
|
ad: '<html><body><h1>Test Ad</h1></body></html>',
|
|
152
203
|
width: 728,
|
|
@@ -160,7 +211,7 @@ describe('snigelBidAdapter', function () {
|
|
|
160
211
|
},
|
|
161
212
|
};
|
|
162
213
|
|
|
163
|
-
const bids = spec.interpretResponse(serverResponse, {});
|
|
214
|
+
const bids = spec.interpretResponse(serverResponse, {bidderRequest: {bids: [BASE_BID_REQUEST]}});
|
|
164
215
|
expect(bids.length).to.equal(1);
|
|
165
216
|
const bid = bids[0];
|
|
166
217
|
expect(isValid(BASE_BID_REQUEST.adUnitCode, bid)).to.be.true;
|
|
@@ -218,7 +218,7 @@ describe('TeadsIdSystem', function () {
|
|
|
218
218
|
callback(callbackSpy);
|
|
219
219
|
const request = server.requests[0];
|
|
220
220
|
expect(request.url).to.include(teadsUrl);
|
|
221
|
-
request.respond(204
|
|
221
|
+
request.respond(204);
|
|
222
222
|
expect(logInfoStub.calledOnce).to.be.true;
|
|
223
223
|
});
|
|
224
224
|
|