prebid.js 8.8.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/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/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/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.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/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/naveggIdSystem.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +240 -240
- 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/operaadsIdSystem.js +1 -1
- 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/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/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/libraries/mspa/activityControls.js +3 -1
- package/modules/adagioBidAdapter.js +11 -3
- package/modules/concertBidAdapter.js +1 -0
- package/modules/fledgeForGpt.js +17 -4
- package/modules/fledgeForGpt.md +17 -10
- package/modules/geoedgeRtdProvider.js +1 -5
- package/modules/growthCodeAnalyticsAdapter.js +7 -4
- package/modules/growthCodeAnalyticsAdapter.md +1 -7
- package/modules/nexx360BidAdapter.js +7 -1
- package/modules/prebidServerBidAdapter/index.js +8 -2
- package/modules/pubmaticAnalyticsAdapter.js +16 -3
- package/package.json +1 -1
- package/src/adapters/bidderFactory.js +14 -5
- package/src/ajax.js +126 -87
- package/src/constants.json +8 -2
- package/src/native.js +12 -1
- 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/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/currency_spec.js +2 -2
- package/test/spec/modules/dmdIdSystem_spec.js +2 -2
- 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 +11 -18
- 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/magniteAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/mgidRtdProvider_spec.js +1 -5
- package/test/spec/modules/nexx360BidAdapter_spec.js +48 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +5 -19
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -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/teadsIdSystem_spec.js +1 -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/zeta_global_sspAnalyticsAdapter_spec.js +2 -5
- package/test/spec/native_spec.js +15 -2
- 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
|
|
|
@@ -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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {coreStorage,
|
|
1
|
+
import {setConsentConfig} from 'modules/consentManagement.js';
|
|
2
|
+
import {server} from 'test/mocks/xhr.js';
|
|
3
|
+
import {coreStorage, requestBidsHook} from 'modules/userId/index.js';
|
|
4
4
|
|
|
5
5
|
const msIn12Hours = 60 * 60 * 12 * 1000;
|
|
6
6
|
const expireCookieDate = 'Thu, 01 Jan 1970 00:00:01 GMT';
|
|
@@ -34,8 +34,8 @@ export const apiHelpers = {
|
|
|
34
34
|
refresh_expires: Date.now() + 24 * 60 * 60 * 1000, // 24 hours
|
|
35
35
|
refresh_response_key: 'wR5t6HKMfJ2r4J7fEGX9Gw==', // Fake data
|
|
36
36
|
}),
|
|
37
|
-
respondAfterDelay: (delay) => new Promise((resolve) => setTimeout(() => {
|
|
38
|
-
|
|
37
|
+
respondAfterDelay: (delay, srv = server) => new Promise((resolve) => setTimeout(() => {
|
|
38
|
+
srv.respond();
|
|
39
39
|
setTimeout(() => resolve());
|
|
40
40
|
}, delay)),
|
|
41
41
|
}
|
|
@@ -7,7 +7,6 @@ import { uid2IdSubmodule } from 'modules/uid2IdSystem.js';
|
|
|
7
7
|
import 'src/prebid.js';
|
|
8
8
|
import 'modules/consentManagement.js';
|
|
9
9
|
import { getGlobal } from 'src/prebidGlobal.js';
|
|
10
|
-
import { server } from 'test/mocks/xhr.js';
|
|
11
10
|
import { configureTimerInterceptors } from 'test/mocks/timers.js';
|
|
12
11
|
import { cookieHelpers, runAuction, apiHelpers, setGdprApplies } from './uid2IdSystem_helpers.js';
|
|
13
12
|
import {hook} from 'src/hook.js';
|
|
@@ -56,22 +55,6 @@ const expectModuleStorageToContain = (initialIdentity, latestIdentity) => {
|
|
|
56
55
|
const apiUrl = 'https://prod.uidapi.com/v2/token/refresh';
|
|
57
56
|
const headers = { 'Content-Type': 'application/json' };
|
|
58
57
|
const makeSuccessResponseBody = () => btoa(JSON.stringify({ status: 'success', body: { ...apiHelpers.makeTokenResponse(initialToken), advertising_token: refreshedToken } }));
|
|
59
|
-
const configureUid2Response = (httpStatus, response) => server.respondWith('POST', apiUrl, (xhr) => xhr.respond(httpStatus, headers, response));
|
|
60
|
-
const configureUid2ApiSuccessResponse = () => configureUid2Response(200, makeSuccessResponseBody());
|
|
61
|
-
const configureUid2ApiFailResponse = () => configureUid2Response(500, 'Error');
|
|
62
|
-
|
|
63
|
-
// Runs the provided test twice - once with a successful API mock, once with one which returns a server error
|
|
64
|
-
const testApiSuccessAndFailure = (act, testDescription, failTestDescription, only = false) => {
|
|
65
|
-
const testFn = only ? it.only : it;
|
|
66
|
-
testFn(`API responds successfully: ${testDescription}`, async function() {
|
|
67
|
-
configureUid2ApiSuccessResponse();
|
|
68
|
-
await act(true);
|
|
69
|
-
});
|
|
70
|
-
testFn(`API responds with an error: ${failTestDescription ?? testDescription}`, async function() {
|
|
71
|
-
configureUid2ApiFailResponse();
|
|
72
|
-
await act(false);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
58
|
|
|
76
59
|
const testCookieAndLocalStorage = (description, test, only = false) => {
|
|
77
60
|
const describeFn = only ? describe.only : describe;
|
|
@@ -93,7 +76,7 @@ const testCookieAndLocalStorage = (description, test, only = false) => {
|
|
|
93
76
|
};
|
|
94
77
|
|
|
95
78
|
describe(`UID2 module`, function () {
|
|
96
|
-
let suiteSandbox, testSandbox, timerSpy, fullTestTitle, restoreSubtleToUndefined = false;
|
|
79
|
+
let server, suiteSandbox, testSandbox, timerSpy, fullTestTitle, restoreSubtleToUndefined = false;
|
|
97
80
|
before(function () {
|
|
98
81
|
timerSpy = configureTimerInterceptors(debugOutput);
|
|
99
82
|
hook.ready();
|
|
@@ -116,13 +99,31 @@ describe(`UID2 module`, function () {
|
|
|
116
99
|
if (restoreSubtleToUndefined) window.crypto.subtle = undefined;
|
|
117
100
|
});
|
|
118
101
|
|
|
102
|
+
const configureUid2Response = (httpStatus, response) => server.respondWith('POST', apiUrl, (xhr) => xhr.respond(httpStatus, headers, response));
|
|
103
|
+
const configureUid2ApiSuccessResponse = () => configureUid2Response(200, makeSuccessResponseBody());
|
|
104
|
+
const configureUid2ApiFailResponse = () => configureUid2Response(500, 'Error');
|
|
105
|
+
// Runs the provided test twice - once with a successful API mock, once with one which returns a server error
|
|
106
|
+
const testApiSuccessAndFailure = (act, testDescription, failTestDescription, only = false) => {
|
|
107
|
+
const testFn = only ? it.only : it;
|
|
108
|
+
testFn(`API responds successfully: ${testDescription}`, async function() {
|
|
109
|
+
configureUid2ApiSuccessResponse();
|
|
110
|
+
await act(true);
|
|
111
|
+
});
|
|
112
|
+
testFn(`API responds with an error: ${failTestDescription ?? testDescription}`, async function() {
|
|
113
|
+
configureUid2ApiFailResponse();
|
|
114
|
+
await act(false);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
119
118
|
const getFullTestTitle = (test) => `${test.parent.title ? getFullTestTitle(test.parent) + ' | ' : ''}${test.title}`;
|
|
119
|
+
|
|
120
120
|
beforeEach(function () {
|
|
121
121
|
debugOutput(`----------------- START TEST ------------------`);
|
|
122
122
|
fullTestTitle = getFullTestTitle(this.test.ctx.currentTest);
|
|
123
123
|
debugOutput(fullTestTitle);
|
|
124
124
|
testSandbox = sinon.sandbox.create();
|
|
125
125
|
testSandbox.stub(utils, 'logWarn');
|
|
126
|
+
server = sinon.createFakeServer();
|
|
126
127
|
|
|
127
128
|
init(config);
|
|
128
129
|
setSubmoduleRegistry([uid2IdSubmodule]);
|
|
@@ -143,7 +144,6 @@ describe(`UID2 module`, function () {
|
|
|
143
144
|
}
|
|
144
145
|
cookieHelpers.clearCookies(moduleCookieName, publisherCookieName);
|
|
145
146
|
coreStorage.removeDataFromLocalStorage(moduleCookieName);
|
|
146
|
-
|
|
147
147
|
debugOutput('----------------- END TEST ------------------');
|
|
148
148
|
});
|
|
149
149
|
|
|
@@ -247,7 +247,7 @@ describe(`UID2 module`, function () {
|
|
|
247
247
|
describe('When the refresh is available in time', function() {
|
|
248
248
|
testApiSuccessAndFailure(async function(apiSucceeds) {
|
|
249
249
|
scenario.setConfig(apiHelpers.makeTokenResponse(initialToken, true, true));
|
|
250
|
-
apiHelpers.respondAfterDelay(auctionDelayMs / 10);
|
|
250
|
+
apiHelpers.respondAfterDelay(auctionDelayMs / 10, server);
|
|
251
251
|
const bid = await runAuction();
|
|
252
252
|
|
|
253
253
|
if (apiSucceeds) expectToken(bid, refreshedToken);
|
|
@@ -256,7 +256,7 @@ describe(`UID2 module`, function () {
|
|
|
256
256
|
|
|
257
257
|
testApiSuccessAndFailure(async function(apiSucceeds) {
|
|
258
258
|
scenario.setConfig(apiHelpers.makeTokenResponse(initialToken, true, true));
|
|
259
|
-
apiHelpers.respondAfterDelay(auctionDelayMs / 10);
|
|
259
|
+
apiHelpers.respondAfterDelay(auctionDelayMs / 10, server);
|
|
260
260
|
|
|
261
261
|
await runAuction();
|
|
262
262
|
if (apiSucceeds) {
|
|
@@ -275,7 +275,7 @@ describe(`UID2 module`, function () {
|
|
|
275
275
|
|
|
276
276
|
testApiSuccessAndFailure(async function(apiSucceeds) {
|
|
277
277
|
scenario.setConfig(apiHelpers.makeTokenResponse(initialToken, true, true));
|
|
278
|
-
const promise = apiHelpers.respondAfterDelay(auctionDelayMs * 2);
|
|
278
|
+
const promise = apiHelpers.respondAfterDelay(auctionDelayMs * 2, server);
|
|
279
279
|
|
|
280
280
|
const bid = await runAuction();
|
|
281
281
|
expectNoIdentity(bid);
|
|
@@ -319,13 +319,13 @@ describe(`UID2 module`, function () {
|
|
|
319
319
|
scenario.setConfig(apiHelpers.makeTokenResponse(initialToken, true), {auctionDelay: 0, syncDelay: 1});
|
|
320
320
|
});
|
|
321
321
|
testApiSuccessAndFailure(async function() {
|
|
322
|
-
apiHelpers.respondAfterDelay(10);
|
|
322
|
+
apiHelpers.respondAfterDelay(10, server);
|
|
323
323
|
const bid = await runAuction();
|
|
324
324
|
expectToken(bid, initialToken);
|
|
325
325
|
}, 'it should not be refreshed before the auction runs');
|
|
326
326
|
|
|
327
327
|
testApiSuccessAndFailure(async function(success) {
|
|
328
|
-
const promise = apiHelpers.respondAfterDelay(1);
|
|
328
|
+
const promise = apiHelpers.respondAfterDelay(1, server);
|
|
329
329
|
await runAuction();
|
|
330
330
|
await promise;
|
|
331
331
|
if (success) {
|
|
@@ -3005,7 +3005,7 @@ describe('User ID', function () {
|
|
|
3005
3005
|
expect(server.requests).to.be.empty;
|
|
3006
3006
|
return endAuction();
|
|
3007
3007
|
}).then(() => {
|
|
3008
|
-
expect(server.requests[0].url).to.
|
|
3008
|
+
expect(server.requests[0].url).to.match(/\/any\/unifiedid\/url/);
|
|
3009
3009
|
});
|
|
3010
3010
|
});
|
|
3011
3011
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import zetaAnalyticsAdapter from 'modules/zeta_global_sspAnalyticsAdapter.js';
|
|
2
2
|
import {config} from 'src/config';
|
|
3
3
|
import CONSTANTS from 'src/constants.json';
|
|
4
|
-
import {
|
|
4
|
+
import {server} from '../../mocks/xhr.js';
|
|
5
5
|
|
|
6
6
|
let utils = require('src/utils');
|
|
7
7
|
let events = require('src/events');
|
|
@@ -358,14 +358,11 @@ const MOCK = {
|
|
|
358
358
|
|
|
359
359
|
describe('Zeta Global SSP Analytics Adapter', function() {
|
|
360
360
|
let sandbox;
|
|
361
|
-
let xhr;
|
|
362
361
|
let requests;
|
|
363
362
|
|
|
364
363
|
beforeEach(function() {
|
|
365
364
|
sandbox = sinon.sandbox.create();
|
|
366
|
-
requests =
|
|
367
|
-
xhr = sandbox.useFakeXMLHttpRequest();
|
|
368
|
-
xhr.onCreate = request => requests.push(request);
|
|
365
|
+
requests = server.requests;
|
|
369
366
|
sandbox.stub(events, 'getEvents').returns([]);
|
|
370
367
|
});
|
|
371
368
|
|