prebid.js 7.26.0 → 7.28.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/.github/workflows/issue_tracker.yml +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adhashBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -0
- package/dist/ajaBidAdapter.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/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/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/bucksenseBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -0
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/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/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.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/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +206 -202
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -0
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.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/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/libraries/ortb2.5StrictTranslator/dsl.js +54 -0
- package/libraries/ortb2.5StrictTranslator/spec.js +81 -0
- package/libraries/ortb2.5StrictTranslator/translator.js +37 -0
- package/libraries/ortb2.5Translator/translator.js +82 -0
- package/modules/33acrossIdSystem.js +3 -0
- package/modules/adhashBidAdapter.js +115 -30
- package/modules/adhashBidAdapter.md +1 -3
- package/modules/admaticBidAdapter.js +10 -1
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/discoveryBidAdapter.js +3 -0
- package/modules/eplanningBidAdapter.js +2 -6
- package/modules/fluctBidAdapter.js +5 -0
- package/modules/gdprEnforcement.js +26 -24
- package/modules/genericAnalyticsAdapter.js +157 -0
- package/modules/geoedgeRtdProvider.js +22 -0
- package/modules/glomexBidAdapter.js +2 -0
- package/modules/gravitoIdSystem.js +3 -4
- package/modules/gridBidAdapter.js +1 -1
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +176 -0
- package/modules/growthCodeAnalyticsAdapter.md +41 -0
- package/modules/impactifyBidAdapter.js +19 -1
- package/modules/jwplayerRtdProvider.js +1 -2
- package/modules/kargoBidAdapter.js +1 -1
- package/modules/lassoBidAdapter.js +8 -4
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/liveIntentIdSystem.js +1 -2
- package/modules/mediagoBidAdapter.js +2 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/openxBidAdapter.md +15 -14
- package/modules/pubCommonId.js +2 -1
- package/modules/pubProvidedIdSystem.js +2 -0
- package/modules/rasBidAdapter.js +8 -3
- package/modules/rasBidAdapter.md +16 -15
- package/modules/redtramBidAdapter.js +155 -0
- package/modules/redtramBidAdapter.md +33 -0
- package/modules/riseBidAdapter.js +15 -0
- package/modules/riseBidAdapter.md +3 -3
- package/modules/rtbhouseBidAdapter.js +90 -29
- package/modules/rubiconBidAdapter.js +2 -1
- package/modules/seedtagBidAdapter.js +67 -56
- package/modules/seedtagBidAdapter.md +60 -0
- package/modules/sharedIdSystem.js +3 -1
- package/modules/smartxBidAdapter.js +1 -1
- package/modules/smnBidAdapter.md +52 -0
- package/modules/taboolaBidAdapter.js +20 -7
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +4 -0
- package/modules/vidazooBidAdapter.js +31 -8
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +10 -4
- package/modules/yieldliftBidAdapter.js +3 -3
- package/package.json +2 -2
- package/src/auction.js +30 -4
- package/src/consentHandler.js +8 -0
- package/src/constants.json +2 -1
- package/src/events.js +4 -0
- package/src/native.js +31 -20
- package/src/refererDetection.js +6 -1
- package/src/storageManager.js +6 -3
- package/test/helpers/analytics.js +34 -0
- package/test/helpers/refererDetectionHelper.js +88 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +119 -1
- package/test/spec/modules/33acrossIdSystem_spec.js +4 -1
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/adhashBidAdapter_spec.js +65 -11
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
- package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
- package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
- package/test/spec/modules/fpdModule_spec.js +1 -1
- package/test/spec/modules/gdprEnforcement_spec.js +115 -68
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
- package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
- package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
- package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
- package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
- package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
- package/test/spec/modules/rasBidAdapter_spec.js +5 -1
- package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
- package/test/spec/modules/riseBidAdapter_spec.js +24 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/taboolaBidAdapter_spec.js +39 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +50 -9
- package/test/spec/modules/vidazooBidAdapter_spec.js +173 -27
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/native_spec.js +68 -56
- package/test/spec/ortb2.5StrictTranslator/dsl_spec.js +137 -0
- package/test/spec/ortb2.5StrictTranslator/spec_spec.js +358 -0
- package/test/spec/ortb2.5StrictTranslator/translator_spec.js +16 -0
- package/test/spec/ortb2.5Translator/translator_spec.js +64 -0
- package/test/spec/refererDetection_spec.js +46 -95
- package/test/spec/unit/core/storageManager_spec.js +2 -1
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {expect} from 'chai';
|
|
2
2
|
import * as events from 'src/events.js';
|
|
3
3
|
import CONSTANTS from 'src/constants.json';
|
|
4
|
-
import {
|
|
4
|
+
import {server} from 'test/mocks/xhr.js';
|
|
5
5
|
import {disableAjaxForAnalytics, enableAjaxForAnalytics} from '../mocks/analyticsStub.js';
|
|
6
|
+
import {clearEvents} from 'src/events.js';
|
|
7
|
+
import {
|
|
8
|
+
DEFAULT_EXCLUDE_EVENTS,
|
|
9
|
+
DEFAULT_INCLUDE_EVENTS,
|
|
10
|
+
setDebounceDelay
|
|
11
|
+
} from '../../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
6
12
|
|
|
7
|
-
const REQUEST_BIDS = CONSTANTS.EVENTS.REQUEST_BIDS;
|
|
8
|
-
const BID_REQUESTED = CONSTANTS.EVENTS.BID_REQUESTED;
|
|
9
|
-
const BID_RESPONSE = CONSTANTS.EVENTS.BID_RESPONSE;
|
|
10
13
|
const BID_WON = CONSTANTS.EVENTS.BID_WON;
|
|
11
|
-
const
|
|
12
|
-
const AD_RENDER_FAILED = CONSTANTS.EVENTS.AD_RENDER_FAILED;
|
|
13
|
-
const AD_RENDER_SUCCEEDED = CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED;
|
|
14
|
-
const AUCTION_DEBUG = CONSTANTS.EVENTS.AUCTION_DEBUG;
|
|
15
|
-
const ADD_AD_UNITS = CONSTANTS.EVENTS.ADD_AD_UNITS;
|
|
14
|
+
const NO_BID = CONSTANTS.EVENTS.NO_BID;
|
|
16
15
|
|
|
17
16
|
const AnalyticsAdapter = require('libraries/analyticsAdapter/AnalyticsAdapter.js').default;
|
|
18
17
|
const config = {
|
|
@@ -35,6 +34,7 @@ FEATURE: Analytics Adapters API
|
|
|
35
34
|
|
|
36
35
|
afterEach(function () {
|
|
37
36
|
adapter.disableAnalytics();
|
|
37
|
+
clearEvents();
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
it('should track enable status in `enabled`', () => {
|
|
@@ -43,21 +43,21 @@ FEATURE: Analytics Adapters API
|
|
|
43
43
|
expect(adapter.enabled).to.equal(true);
|
|
44
44
|
adapter.disableAnalytics();
|
|
45
45
|
expect(adapter.enabled).to.equal(false);
|
|
46
|
-
})
|
|
46
|
+
});
|
|
47
47
|
|
|
48
48
|
it(`SHOULD call the endpoint WHEN an event occurs that is to be tracked`, function () {
|
|
49
|
-
const eventType =
|
|
50
|
-
const args = {
|
|
49
|
+
const eventType = BID_WON;
|
|
50
|
+
const args = {some: 'data'};
|
|
51
51
|
|
|
52
|
-
adapter.track({
|
|
52
|
+
adapter.track({eventType, args});
|
|
53
53
|
|
|
54
54
|
let result = JSON.parse(server.requests[0].requestBody);
|
|
55
|
-
expect(result).to.deep.equal({args: {some: 'data'}, eventType
|
|
55
|
+
expect(result).to.deep.equal({args: {some: 'data'}, eventType});
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
it(`SHOULD queue the event first and then track it WHEN an event occurs before tracking library is available`, function () {
|
|
59
|
-
const eventType =
|
|
60
|
-
const args = {
|
|
59
|
+
const eventType = BID_WON;
|
|
60
|
+
const args = {wat: 'wot'};
|
|
61
61
|
|
|
62
62
|
events.emit(eventType, args);
|
|
63
63
|
adapter.enableAnalytics();
|
|
@@ -65,9 +65,58 @@ FEATURE: Analytics Adapters API
|
|
|
65
65
|
// As now AUCTION_DEBUG is triggered for WARNINGS too, the BID_RESPONSE goes last in the array
|
|
66
66
|
const index = server.requests.length - 1;
|
|
67
67
|
let result = JSON.parse(server.requests[index].requestBody);
|
|
68
|
-
expect(result).to.deep.equal({eventType
|
|
68
|
+
expect(result).to.deep.equal({eventType, args: {wat: 'wot'}});
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
+
describe('event filters', () => {
|
|
72
|
+
function fireEvents() {
|
|
73
|
+
events.emit(BID_WON, {});
|
|
74
|
+
events.emit(NO_BID, {});
|
|
75
|
+
}
|
|
76
|
+
function getEvents(ev) {
|
|
77
|
+
return server.requests
|
|
78
|
+
.map(r => JSON.parse(r.requestBody))
|
|
79
|
+
.filter(r => r.eventType === ev)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Object.entries({
|
|
83
|
+
'whitelist includeEvents': {
|
|
84
|
+
includeEvents: [BID_WON]
|
|
85
|
+
},
|
|
86
|
+
'blacklist excludeEvents': {
|
|
87
|
+
excludeEvents: [NO_BID]
|
|
88
|
+
},
|
|
89
|
+
'give precedence to exclude over include': {
|
|
90
|
+
includeEvents: [BID_WON, NO_BID],
|
|
91
|
+
excludeEvents: [NO_BID]
|
|
92
|
+
}
|
|
93
|
+
}).forEach(([t, config]) => {
|
|
94
|
+
it(`should ${t}`, () => {
|
|
95
|
+
fireEvents();
|
|
96
|
+
adapter.enableAnalytics(config);
|
|
97
|
+
expect(getEvents(BID_WON).length).to.eql(1);
|
|
98
|
+
expect(getEvents(NO_BID).length).to.eql(0);
|
|
99
|
+
fireEvents();
|
|
100
|
+
expect(getEvents(BID_WON).length).to.eql(2);
|
|
101
|
+
expect(getEvents(NO_BID).length).to.eql(0);
|
|
102
|
+
})
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('should prevent infinite loops when track triggers other events', () => {
|
|
107
|
+
let i = 0;
|
|
108
|
+
adapter.track = ((orig) => {
|
|
109
|
+
return function (event) {
|
|
110
|
+
i++;
|
|
111
|
+
orig.call(this, event);
|
|
112
|
+
events.emit(BID_WON, {})
|
|
113
|
+
}
|
|
114
|
+
})(adapter.track);
|
|
115
|
+
adapter.enableAnalytics(config);
|
|
116
|
+
events.emit(BID_WON, {});
|
|
117
|
+
expect(i >= 100).to.eql(false);
|
|
118
|
+
})
|
|
119
|
+
|
|
71
120
|
describe(`WHEN an event occurs after enable analytics\n`, function () {
|
|
72
121
|
beforeEach(function () {
|
|
73
122
|
sinon.stub(events, 'getEvents').returns([]); // these tests shouldn't be affected by previous tests
|
|
@@ -77,108 +126,26 @@ FEATURE: Analytics Adapters API
|
|
|
77
126
|
events.getEvents.restore();
|
|
78
127
|
});
|
|
79
128
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
adapter.enableAnalytics();
|
|
85
|
-
events.emit(eventType, args);
|
|
86
|
-
|
|
87
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
88
|
-
expect(result).to.deep.equal({args: {more: 'info'}, eventType: 'bidWon'});
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('SHOULD call global when a adRenderFailed event occurs', function () {
|
|
92
|
-
const eventType = AD_RENDER_FAILED;
|
|
93
|
-
const args = { call: 'adRenderFailed' };
|
|
94
|
-
|
|
95
|
-
adapter.enableAnalytics();
|
|
96
|
-
events.emit(eventType, args);
|
|
97
|
-
|
|
98
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
99
|
-
expect(result).to.deep.equal({args: {call: 'adRenderFailed'}, eventType: 'adRenderFailed'});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('SHOULD call global when a adRenderSucceeded event occurs', function () {
|
|
103
|
-
const eventType = AD_RENDER_SUCCEEDED;
|
|
104
|
-
const args = { call: 'adRenderSucceeded' };
|
|
105
|
-
|
|
106
|
-
adapter.enableAnalytics();
|
|
107
|
-
events.emit(eventType, args);
|
|
108
|
-
|
|
109
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
110
|
-
expect(result).to.deep.equal({args: {call: 'adRenderSucceeded'}, eventType: 'adRenderSucceeded'});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('SHOULD call global when an auction debug event occurs', function () {
|
|
114
|
-
const eventType = AUCTION_DEBUG;
|
|
115
|
-
const args = { call: 'auctionDebug' };
|
|
116
|
-
|
|
117
|
-
adapter.enableAnalytics();
|
|
118
|
-
events.emit(eventType, args);
|
|
119
|
-
|
|
120
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
121
|
-
expect(result).to.deep.equal({args: {call: 'auctionDebug'}, eventType: 'auctionDebug'});
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it('SHOULD call global when an addAdUnits event occurs', function () {
|
|
125
|
-
const eventType = ADD_AD_UNITS;
|
|
126
|
-
const args = { call: 'addAdUnits' };
|
|
127
|
-
|
|
128
|
-
adapter.enableAnalytics();
|
|
129
|
-
events.emit(eventType, args);
|
|
130
|
-
|
|
131
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
132
|
-
expect(result).to.deep.equal({args: {call: 'addAdUnits'}, eventType: 'addAdUnits'});
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
it('SHOULD call global when a requestBids event occurs', function () {
|
|
136
|
-
const eventType = REQUEST_BIDS;
|
|
137
|
-
const args = { call: 'request' };
|
|
138
|
-
|
|
139
|
-
adapter.enableAnalytics();
|
|
140
|
-
events.emit(eventType, args);
|
|
141
|
-
|
|
142
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
143
|
-
expect(result).to.deep.equal({args: {call: 'request'}, eventType: 'requestBids'});
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('SHOULD call global when a bidRequest event occurs', function () {
|
|
147
|
-
const eventType = BID_REQUESTED;
|
|
148
|
-
const args = { call: 'request' };
|
|
149
|
-
|
|
150
|
-
adapter.enableAnalytics();
|
|
151
|
-
events.emit(eventType, args);
|
|
152
|
-
|
|
153
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
154
|
-
expect(result).to.deep.equal({args: {call: 'request'}, eventType: 'bidRequested'});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('SHOULD call global when a bidResponse event occurs', function () {
|
|
158
|
-
const eventType = BID_RESPONSE;
|
|
159
|
-
const args = { call: 'response' };
|
|
160
|
-
|
|
161
|
-
adapter.enableAnalytics();
|
|
162
|
-
events.emit(eventType, args);
|
|
163
|
-
|
|
164
|
-
let result = JSON.parse(server.requests[0].requestBody);
|
|
165
|
-
expect(result).to.deep.equal({args: {call: 'response'}, eventType: 'bidResponse'});
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it('SHOULD call global when a bidTimeout event occurs', function () {
|
|
169
|
-
const eventType = BID_TIMEOUT;
|
|
170
|
-
const args = { call: 'timeout' };
|
|
129
|
+
Object.values(DEFAULT_INCLUDE_EVENTS).forEach(eventType => {
|
|
130
|
+
it(`SHOULD call global when a ${eventType} event occurs`, () => {
|
|
131
|
+
const args = {more: 'info'};
|
|
171
132
|
|
|
172
|
-
|
|
173
|
-
|
|
133
|
+
adapter.enableAnalytics();
|
|
134
|
+
events.emit(eventType, args);
|
|
174
135
|
|
|
175
|
-
|
|
176
|
-
|
|
136
|
+
let result = JSON.parse(server.requests[server.requests.length - 1].requestBody);
|
|
137
|
+
sinon.assert.match(result, {
|
|
138
|
+
eventType,
|
|
139
|
+
args: {
|
|
140
|
+
more: 'info'
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
});
|
|
177
144
|
});
|
|
178
145
|
|
|
179
146
|
it('SHOULD NOT call global again when adapter.enableAnalytics is called with previous timeout', function () {
|
|
180
|
-
const eventType =
|
|
181
|
-
const args = {
|
|
147
|
+
const eventType = BID_WON;
|
|
148
|
+
const args = {call: 'timeout'};
|
|
182
149
|
|
|
183
150
|
events.emit(eventType, args);
|
|
184
151
|
adapter.enableAnalytics();
|
|
@@ -189,7 +156,7 @@ FEATURE: Analytics Adapters API
|
|
|
189
156
|
|
|
190
157
|
describe(`AND sampling is enabled\n`, function () {
|
|
191
158
|
const eventType = BID_WON;
|
|
192
|
-
const args = {
|
|
159
|
+
const args = {more: 'info'};
|
|
193
160
|
|
|
194
161
|
beforeEach(function () {
|
|
195
162
|
sinon.stub(Math, 'random').returns(0.5);
|
|
@@ -225,3 +192,39 @@ FEATURE: Analytics Adapters API
|
|
|
225
192
|
});
|
|
226
193
|
});
|
|
227
194
|
});
|
|
195
|
+
|
|
196
|
+
describe('Analytics asynchronous event tracking', () => {
|
|
197
|
+
before(() => {
|
|
198
|
+
setDebounceDelay(100);
|
|
199
|
+
});
|
|
200
|
+
after(() => {
|
|
201
|
+
setDebounceDelay(0);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
let adapter, clock;
|
|
205
|
+
|
|
206
|
+
beforeEach(() => {
|
|
207
|
+
clock = sinon.useFakeTimers();
|
|
208
|
+
adapter = new AnalyticsAdapter(config);
|
|
209
|
+
adapter.track = sinon.stub();
|
|
210
|
+
adapter.enableAnalytics({});
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
afterEach(() => {
|
|
214
|
+
clock.restore();
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
it('does not call track as long as events are coming', () => {
|
|
218
|
+
events.emit(BID_WON, {i: 0});
|
|
219
|
+
sinon.assert.notCalled(adapter.track);
|
|
220
|
+
clock.tick(10);
|
|
221
|
+
events.emit(BID_WON, {i: 1});
|
|
222
|
+
sinon.assert.notCalled(adapter.track);
|
|
223
|
+
clock.tick(10);
|
|
224
|
+
sinon.assert.notCalled(adapter.track);
|
|
225
|
+
clock.tick(100);
|
|
226
|
+
sinon.assert.calledTwice(adapter.track);
|
|
227
|
+
sinon.assert.calledWith(adapter.track.firstCall, {eventType: BID_WON, args: {i: 0}});
|
|
228
|
+
sinon.assert.calledWith(adapter.track.secondCall, {eventType: BID_WON, args: {i: 1}});
|
|
229
|
+
});
|
|
230
|
+
})
|
|
@@ -22,6 +22,7 @@ import 'modules/debugging/index.js' // some tests look for debugging side effect
|
|
|
22
22
|
import {AuctionIndex} from '../../src/auctionIndex.js';
|
|
23
23
|
import {expect} from 'chai';
|
|
24
24
|
import {deepClone} from '../../src/utils.js';
|
|
25
|
+
import { IMAGE as ortbNativeRequest } from 'src/native.js';
|
|
25
26
|
|
|
26
27
|
var assert = require('assert');
|
|
27
28
|
|
|
@@ -185,7 +186,8 @@ describe('auctionmanager.js', function () {
|
|
|
185
186
|
source: 'client',
|
|
186
187
|
mediaType: 'banner',
|
|
187
188
|
meta: {
|
|
188
|
-
advertiserDomains: ['adomain']
|
|
189
|
+
advertiserDomains: ['adomain'],
|
|
190
|
+
primaryCatId: 'IAB-test'
|
|
189
191
|
}
|
|
190
192
|
};
|
|
191
193
|
|
|
@@ -199,6 +201,7 @@ describe('auctionmanager.js', function () {
|
|
|
199
201
|
expected[ CONSTANTS.TARGETING_KEYS.SOURCE ] = bid.source;
|
|
200
202
|
expected[ CONSTANTS.TARGETING_KEYS.FORMAT ] = bid.mediaType;
|
|
201
203
|
expected[ CONSTANTS.TARGETING_KEYS.ADOMAIN ] = bid.meta.advertiserDomains[0];
|
|
204
|
+
expected[ CONSTANTS.TARGETING_KEYS.ACAT ] = bid.meta.primaryCatId;
|
|
202
205
|
if (bid.mediaType === 'video') {
|
|
203
206
|
expected[ CONSTANTS.TARGETING_KEYS.UUID ] = bid.videoCacheKey;
|
|
204
207
|
expected[ CONSTANTS.TARGETING_KEYS.CACHE_ID ] = bid.videoCacheKey;
|
|
@@ -289,6 +292,12 @@ describe('auctionmanager.js', function () {
|
|
|
289
292
|
val: function (bidResponse) {
|
|
290
293
|
return bidResponse.meta.advertiserDomains[0];
|
|
291
294
|
}
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
key: CONSTANTS.TARGETING_KEYS.ACAT,
|
|
298
|
+
val: function (bidResponse) {
|
|
299
|
+
return bidResponse.meta.primaryCatId;
|
|
300
|
+
}
|
|
292
301
|
}
|
|
293
302
|
]
|
|
294
303
|
|
|
@@ -366,6 +375,12 @@ describe('auctionmanager.js', function () {
|
|
|
366
375
|
val: function (bidResponse) {
|
|
367
376
|
return bidResponse.meta.advertiserDomains[0];
|
|
368
377
|
}
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
key: CONSTANTS.TARGETING_KEYS.ACAT,
|
|
381
|
+
val: function (bidResponse) {
|
|
382
|
+
return bidResponse.meta.primaryCatId;
|
|
383
|
+
}
|
|
369
384
|
}
|
|
370
385
|
]
|
|
371
386
|
|
|
@@ -454,6 +469,24 @@ describe('auctionmanager.js', function () {
|
|
|
454
469
|
assert.deepEqual(response, expected);
|
|
455
470
|
});
|
|
456
471
|
|
|
472
|
+
it('Should set targeting as expecting when pbs is enabled', function () {
|
|
473
|
+
config.setConfig({
|
|
474
|
+
s2sConfig: {
|
|
475
|
+
accountId: '1',
|
|
476
|
+
enabled: true,
|
|
477
|
+
defaultVendor: 'appnexus',
|
|
478
|
+
bidders: ['appnexus'],
|
|
479
|
+
timeout: 1000,
|
|
480
|
+
adapter: 'prebidServer'
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
$$PREBID_GLOBAL$$.bidderSettings = {};
|
|
485
|
+
let expected = getDefaultExpected(bid);
|
|
486
|
+
let response = getKeyValueTargetingPairs(bid.bidderCode, bid);
|
|
487
|
+
assert.deepEqual(response, expected);
|
|
488
|
+
});
|
|
489
|
+
|
|
457
490
|
it('Custom bidCpmAdjustment for one bidder and inherit standard but doesn\'t use standard bidCpmAdjustment', function () {
|
|
458
491
|
$$PREBID_GLOBAL$$.bidderSettings =
|
|
459
492
|
{
|
|
@@ -1276,6 +1309,81 @@ describe('auctionmanager.js', function () {
|
|
|
1276
1309
|
});
|
|
1277
1310
|
});
|
|
1278
1311
|
|
|
1312
|
+
if (FEATURES.NATIVE) {
|
|
1313
|
+
describe('addBidResponse native', function () {
|
|
1314
|
+
let makeRequestsStub;
|
|
1315
|
+
let ajaxStub;
|
|
1316
|
+
let spec;
|
|
1317
|
+
let auction;
|
|
1318
|
+
|
|
1319
|
+
beforeEach(function () {
|
|
1320
|
+
makeRequestsStub = sinon.stub(adapterManager, 'makeBidRequests');
|
|
1321
|
+
ajaxStub = sinon.stub(ajaxLib, 'ajaxBuilder').callsFake(mockAjaxBuilder);
|
|
1322
|
+
|
|
1323
|
+
const adUnits = [{
|
|
1324
|
+
code: ADUNIT_CODE,
|
|
1325
|
+
transactionId: ADUNIT_CODE,
|
|
1326
|
+
bids: [
|
|
1327
|
+
{bidder: BIDDER_CODE, params: {placementId: 'id'}},
|
|
1328
|
+
],
|
|
1329
|
+
nativeOrtbRequest: ortbNativeRequest.ortb,
|
|
1330
|
+
mediaTypes: { native: { type: 'image' } }
|
|
1331
|
+
}];
|
|
1332
|
+
auction = auctionModule.newAuction({adUnits, adUnitCodes: [ADUNIT_CODE], callback: function() {}, cbTimeout: 3000});
|
|
1333
|
+
indexAuctions = [auction];
|
|
1334
|
+
const createAuctionStub = sinon.stub(auctionModule, 'newAuction');
|
|
1335
|
+
createAuctionStub.returns(auction);
|
|
1336
|
+
|
|
1337
|
+
spec = mockBidder(BIDDER_CODE);
|
|
1338
|
+
registerBidder(spec);
|
|
1339
|
+
});
|
|
1340
|
+
|
|
1341
|
+
afterEach(function () {
|
|
1342
|
+
ajaxStub.restore();
|
|
1343
|
+
auctionModule.newAuction.restore();
|
|
1344
|
+
adapterManager.makeBidRequests.restore();
|
|
1345
|
+
});
|
|
1346
|
+
|
|
1347
|
+
it('should add legacy fields to native response', function () {
|
|
1348
|
+
let nativeBid = mockBid();
|
|
1349
|
+
nativeBid.mediaType = 'native';
|
|
1350
|
+
nativeBid.native = {
|
|
1351
|
+
ortb: {
|
|
1352
|
+
ver: '1.2',
|
|
1353
|
+
assets: [
|
|
1354
|
+
{ id: 2, title: { text: 'Sample title' } },
|
|
1355
|
+
{ id: 4, data: { value: 'Sample body' } },
|
|
1356
|
+
{ id: 3, data: { value: 'Sample sponsoredBy' } },
|
|
1357
|
+
{ id: 1, img: { url: 'https://www.example.com/image.png', w: 200, h: 200 } },
|
|
1358
|
+
{ id: 5, img: { url: 'https://www.example.com/icon.png', w: 32, h: 32 } }
|
|
1359
|
+
],
|
|
1360
|
+
link: { url: 'http://www.click.com' },
|
|
1361
|
+
eventtrackers: [
|
|
1362
|
+
{ event: 1, method: 1, url: 'http://www.imptracker.com' },
|
|
1363
|
+
{ event: 1, method: 2, url: 'http://www.jstracker.com/file.js' }
|
|
1364
|
+
]
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
let bidRequest = mockBidRequest(nativeBid, { mediaType: { native: ortbNativeRequest } });
|
|
1369
|
+
makeRequestsStub.returns([bidRequest]);
|
|
1370
|
+
|
|
1371
|
+
spec.interpretResponse.returns(nativeBid);
|
|
1372
|
+
auction.callBids();
|
|
1373
|
+
|
|
1374
|
+
const addedBid = auction.getBidsReceived().pop();
|
|
1375
|
+
assert.equal(addedBid.native.body, 'Sample body')
|
|
1376
|
+
assert.equal(addedBid.native.title, 'Sample title')
|
|
1377
|
+
assert.equal(addedBid.native.sponsoredBy, 'Sample sponsoredBy')
|
|
1378
|
+
assert.equal(addedBid.native.clickUrl, 'http://www.click.com')
|
|
1379
|
+
assert.equal(addedBid.native.image, 'https://www.example.com/image.png')
|
|
1380
|
+
assert.equal(addedBid.native.icon, 'https://www.example.com/icon.png')
|
|
1381
|
+
assert.equal(addedBid.native.impressionTrackers[0], 'http://www.imptracker.com')
|
|
1382
|
+
assert.equal(addedBid.native.javascriptTrackers, '<script async src="http://www.jstracker.com/file.js"></script>')
|
|
1383
|
+
});
|
|
1384
|
+
});
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1279
1387
|
describe('getMediaTypeGranularity', function () {
|
|
1280
1388
|
it('video', function () {
|
|
1281
1389
|
let mediaTypes = { video: {id: '1'} };
|
|
@@ -1464,6 +1572,15 @@ describe('auctionmanager.js', function () {
|
|
|
1464
1572
|
assert.equal(doneSpy.callCount, 1);
|
|
1465
1573
|
});
|
|
1466
1574
|
|
|
1575
|
+
it('should convert cpm to number', () => {
|
|
1576
|
+
auction.addBidReceived = sinon.spy();
|
|
1577
|
+
const cbs = auctionCallbacks(doneSpy, auction);
|
|
1578
|
+
const bid = {...bids[0], cpm: '1.23'}
|
|
1579
|
+
bidRequests = [mockBidRequest(bid)];
|
|
1580
|
+
cbs.addBidResponse.call(bidRequests[0], ADUNIT_CODE, bid);
|
|
1581
|
+
sinon.assert.calledWith(auction.addBidReceived, sinon.match({cpm: 1.23}));
|
|
1582
|
+
})
|
|
1583
|
+
|
|
1467
1584
|
describe('when addBidResponse hook returns promises', () => {
|
|
1468
1585
|
let resolvers, callbacks, bids;
|
|
1469
1586
|
|
|
@@ -1605,6 +1722,7 @@ describe('auctionmanager.js', function () {
|
|
|
1605
1722
|
];
|
|
1606
1723
|
cbs = auctionCallbacks(doneSpy, auction);
|
|
1607
1724
|
expectedRejection = sinon.match(Object.assign({}, bid, {
|
|
1725
|
+
cpm: parseFloat(bid.cpm),
|
|
1608
1726
|
rejectionReason: REJECTION_REASON,
|
|
1609
1727
|
adUnitCode: AU_CODE
|
|
1610
1728
|
}));
|
|
@@ -43,7 +43,10 @@ describe('33acrossIdSystem', () => {
|
|
|
43
43
|
|
|
44
44
|
expect(request.method).to.equal('GET');
|
|
45
45
|
expect(request.withCredentials).to.be.true;
|
|
46
|
-
|
|
46
|
+
|
|
47
|
+
const regExp = new RegExp('https://lexicon.33across.com/v1/envelope\\?pid=12345&gdpr=\\d&src=pbjs&ver=$prebid.version$');
|
|
48
|
+
|
|
49
|
+
expect(request.url).to.match(regExp);
|
|
47
50
|
expect(completeCallback.calledOnceWithExactly('foo')).to.be.true;
|
|
48
51
|
});
|
|
49
52
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import adWMGAnalyticsAdapter from 'modules/adWMGAnalyticsAdapter.js';
|
|
2
2
|
import { expect } from 'chai';
|
|
3
3
|
import { server } from 'test/mocks/xhr.js';
|
|
4
|
+
import {expectEvents} from '../../helpers/analytics.js';
|
|
4
5
|
let adapterManager = require('src/adapterManager').default;
|
|
5
6
|
let events = require('src/events');
|
|
6
7
|
let constants = require('src/constants.json');
|
|
@@ -140,14 +141,15 @@ describe('adWMG Analytics', function () {
|
|
|
140
141
|
}
|
|
141
142
|
});
|
|
142
143
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
expectEvents([
|
|
145
|
+
[constants.EVENTS.AUCTION_INIT, {timestamp, auctionId, timeout, adUnits}],
|
|
146
|
+
[constants.EVENTS.BID_REQUESTED, {}],
|
|
147
|
+
[constants.EVENTS.BID_RESPONSE, bidResponse],
|
|
148
|
+
[constants.EVENTS.NO_BID, {}],
|
|
149
|
+
[constants.EVENTS.BID_TIMEOUT, bidTimeoutArgs],
|
|
150
|
+
[constants.EVENTS.AUCTION_END, {}],
|
|
151
|
+
[constants.EVENTS.BID_WON, wonRequest],
|
|
152
|
+
]).to.beTrackedBy(adWMGAnalyticsAdapter.track);
|
|
151
153
|
});
|
|
152
154
|
|
|
153
155
|
it('should be two xhr requests', function () {
|
|
@@ -83,34 +83,27 @@ describe('adagio analytics adapter', () => {
|
|
|
83
83
|
timeToRespond: 132,
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
const testEvents = {
|
|
87
|
+
[constants.EVENTS.BID_REQUESTED]: bidRequest,
|
|
88
|
+
[constants.EVENTS.BID_RESPONSE]: bidResponse,
|
|
89
|
+
[constants.EVENTS.AUCTION_END]: {}
|
|
90
|
+
};
|
|
88
91
|
|
|
89
|
-
// Step
|
|
90
|
-
events.emit(
|
|
92
|
+
// Step 1-3: Send events
|
|
93
|
+
Object.entries(testEvents).forEach(([ev, payload]) => events.emit(ev, payload));
|
|
91
94
|
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
function eventItem(eventName, args) {
|
|
96
|
+
return sinon.match({
|
|
97
|
+
action: 'pb-analytics-event',
|
|
98
|
+
ts: sinon.match((val) => val !== undefined),
|
|
99
|
+
data: {
|
|
100
|
+
eventName,
|
|
101
|
+
args
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
}
|
|
94
105
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const call0 = adagioQueuePushSpy.getCall(0);
|
|
98
|
-
expect(call0.args[0].action).to.equal('pb-analytics-event');
|
|
99
|
-
expect(call0.args[0].ts).to.not.be.undefined;
|
|
100
|
-
expect(call0.args[0].data).to.not.be.undefined;
|
|
101
|
-
expect(call0.args[0].data).to.deep.equal({eventName: constants.EVENTS.BID_REQUESTED, args: bidRequest});
|
|
102
|
-
|
|
103
|
-
const call1 = adagioQueuePushSpy.getCall(1);
|
|
104
|
-
expect(call1.args[0].action).to.equal('pb-analytics-event');
|
|
105
|
-
expect(call1.args[0].ts).to.not.be.undefined;
|
|
106
|
-
expect(call1.args[0].data).to.not.be.undefined;
|
|
107
|
-
expect(call1.args[0].data).to.deep.equal({eventName: constants.EVENTS.BID_RESPONSE, args: bidResponse});
|
|
108
|
-
|
|
109
|
-
const call2 = adagioQueuePushSpy.getCall(2);
|
|
110
|
-
expect(call2.args[0].action).to.equal('pb-analytics-event');
|
|
111
|
-
expect(call2.args[0].ts).to.not.be.undefined;
|
|
112
|
-
expect(call2.args[0].data).to.not.be.undefined;
|
|
113
|
-
expect(call2.args[0].data).to.deep.equal({eventName: constants.EVENTS.AUCTION_END, args: {}});
|
|
106
|
+
Object.entries(testEvents).forEach(([ev, payload]) => sinon.assert.calledWith(adagioQueuePushSpy, eventItem(ev, payload)));
|
|
114
107
|
});
|
|
115
108
|
});
|
|
116
109
|
|