prebid.js 8.6.0 → 8.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/a1MediaRtdProvider.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adsinteractiveBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/alkimiBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/automatadAnalyticsAdapter.js +1 -0
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.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/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connatixBidAdapter.js +1 -0
- 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/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +7 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freepassBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/gmosspBidAdapter.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/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +145 -142
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/operaadsBidAdapter.js +1 -1
- package/dist/operaadsIdSystem.js +1 -0
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionAnalyticsAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.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/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/topics/topics-server.js +72 -0
- package/modules/.submodules.json +2 -1
- package/modules/a1MediaRtdProvider.js +1 -1
- package/modules/adagioBidAdapter.js +15 -1
- package/modules/adgenerationBidAdapter.js +4 -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/adsinteractiveBidAdapter.js +2 -0
- package/modules/alkimiBidAdapter.js +19 -7
- package/modules/automatadAnalyticsAdapter.js +325 -0
- package/modules/automatadAnalyticsAdapter.md +23 -0
- package/modules/bidViewability.js +7 -0
- package/modules/bidViewability.md +9 -8
- package/modules/brandmetricsRtdProvider.js +30 -27
- package/modules/connatixBidAdapter.js +185 -0
- package/modules/connatixBidAdapter.md +37 -0
- package/modules/criteoBidAdapter.js +73 -50
- package/modules/freepassBidAdapter.js +20 -1
- package/modules/freepassBidAdapter.md +4 -1
- package/modules/geoedgeRtdProvider.js +43 -13
- package/modules/geoedgeRtdProvider.md +2 -1
- package/modules/gridBidAdapter.js +1 -8
- package/modules/liveIntentIdSystem.js +16 -1
- package/modules/medianetBidAdapter.js +7 -4
- package/modules/mediasquareBidAdapter.js +3 -0
- package/modules/nativoBidAdapter.js +21 -3
- 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/optidigitalBidAdapter.js +25 -16
- package/modules/oxxionAnalyticsAdapter.js +22 -5
- 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/tappxBidAdapter.js +17 -14
- package/modules/topicsFpdModule.js +35 -9
- package/modules/undertoneBidAdapter.md +1 -1
- package/modules/userId/eids.md +7 -0
- package/modules/visxBidAdapter.js +51 -1
- package/package.json +2 -2
- package/src/adloader.js +1 -0
- package/src/native.js +2 -2
- package/test/spec/modules/adagioBidAdapter_spec.js +89 -0
- package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
- package/test/spec/modules/admaticBidAdapter_spec.js +5 -0
- package/test/spec/modules/adqueryIdSystem_spec.js +13 -24
- package/test/spec/modules/alkimiBidAdapter_spec.js +3 -9
- package/test/spec/modules/automatadAnalyticsAdapter_spec.js +533 -0
- package/test/spec/modules/bidViewability_spec.js +32 -1
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +6 -0
- package/test/spec/modules/connatixBidAdapter_spec.js +366 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +249 -0
- package/test/spec/modules/eids_spec.js +48 -0
- package/test/spec/modules/freepassBidAdapter_spec.js +44 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +44 -24
- package/test/spec/modules/gridBidAdapter_spec.js +68 -0
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
- package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
- package/test/spec/modules/medianetBidAdapter_spec.js +18 -18
- package/test/spec/modules/mediasquareBidAdapter_spec.js +5 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +6 -1
- package/test/spec/modules/onetagBidAdapter_spec.js +69 -0
- package/test/spec/modules/operaadsIdSystem_spec.js +53 -0
- package/test/spec/modules/optidigitalBidAdapter_spec.js +9 -2
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +6 -1
- 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/tappxBidAdapter_spec.js +19 -0
- package/test/spec/modules/topicsFpdModule_spec.js +102 -1
- package/test/spec/modules/visxBidAdapter_spec.js +151 -1
- package/test/spec/native_spec.js +5 -3
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
import * as events from 'src/events';
|
|
2
|
+
import * as utils from 'src/utils.js';
|
|
3
|
+
|
|
4
|
+
import spec, {self as exports} from 'modules/automatadAnalyticsAdapter.js';
|
|
5
|
+
|
|
6
|
+
import CONSTANTS from 'src/constants.json';
|
|
7
|
+
import { expect } from 'chai';
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
AUCTION_DEBUG,
|
|
11
|
+
BID_REQUESTED,
|
|
12
|
+
BID_REJECTED,
|
|
13
|
+
AUCTION_INIT,
|
|
14
|
+
BIDDER_DONE,
|
|
15
|
+
BID_RESPONSE,
|
|
16
|
+
BID_TIMEOUT,
|
|
17
|
+
BID_WON,
|
|
18
|
+
NO_BID
|
|
19
|
+
} = CONSTANTS.EVENTS
|
|
20
|
+
|
|
21
|
+
const CONFIG_WITH_DEBUG = {
|
|
22
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
23
|
+
options: {
|
|
24
|
+
publisherID: '230',
|
|
25
|
+
siteID: '421'
|
|
26
|
+
},
|
|
27
|
+
includeEvents: [AUCTION_DEBUG, AUCTION_INIT, BIDDER_DONE, BID_RESPONSE, BID_TIMEOUT, NO_BID, BID_WON, BID_REQUESTED, BID_REJECTED]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe('Automatad Analytics Adapter', () => {
|
|
31
|
+
var sandbox, clock;
|
|
32
|
+
|
|
33
|
+
describe('Adapter Setup Configuration', () => {
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
sandbox = sinon.createSandbox();
|
|
36
|
+
sandbox.stub(utils, 'logMessage')
|
|
37
|
+
sandbox.stub(events, 'getEvents').returns([]);
|
|
38
|
+
sandbox.stub(utils, 'logError');
|
|
39
|
+
});
|
|
40
|
+
afterEach(() => {
|
|
41
|
+
sandbox.restore();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('Should log error and return false if nothing is passed as the param in the enable analytics call', () => {
|
|
45
|
+
spec.enableAnalytics()
|
|
46
|
+
|
|
47
|
+
expect(utils.logError.called).to.equal(true)
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('Should log error and return false if object type is not passed as the param in the enable analytics call', () => {
|
|
51
|
+
spec.enableAnalytics('hello world')
|
|
52
|
+
|
|
53
|
+
expect(utils.logError.called).to.equal(true)
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('Should log error and return false if options is not defined in the enable analytics call', () => {
|
|
57
|
+
spec.enableAnalytics({
|
|
58
|
+
provider: 'atmtdAnalyticsAdapter'
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
expect(utils.logError.called).to.equal(true)
|
|
62
|
+
});
|
|
63
|
+
it('Should log error and return false if pub id is not defined in the enable analytics call', () => {
|
|
64
|
+
spec.enableAnalytics({
|
|
65
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
66
|
+
options: {
|
|
67
|
+
siteID: '230'
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
expect(utils.logError.called).to.equal(true)
|
|
72
|
+
});
|
|
73
|
+
it('Should log error and return false if pub id is not defined in the enable analytics call', () => {
|
|
74
|
+
spec.enableAnalytics({
|
|
75
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
76
|
+
options: {
|
|
77
|
+
publisherID: '230'
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
expect(utils.logError.called).to.equal(true)
|
|
82
|
+
});
|
|
83
|
+
it('Should successfully configure the adapter and set global log debug messages flag to false', () => {
|
|
84
|
+
spec.enableAnalytics({
|
|
85
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
86
|
+
options: {
|
|
87
|
+
publisherID: '230',
|
|
88
|
+
siteID: '421',
|
|
89
|
+
logDebug: false
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
expect(utils.logError.called).to.equal(false)
|
|
93
|
+
expect(utils.logMessage.called).to.equal(true)
|
|
94
|
+
spec.disableAnalytics();
|
|
95
|
+
});
|
|
96
|
+
it('Should successfully configure the adapter and set global log debug messages flag to true', () => {
|
|
97
|
+
sandbox.stub(exports, 'initializeQueue').callsFake(() => {});
|
|
98
|
+
sandbox.stub(exports, 'addGPTHandlers').callsFake(() => {});
|
|
99
|
+
const config = {
|
|
100
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
101
|
+
options: {
|
|
102
|
+
publisherID: '230',
|
|
103
|
+
siteID: '410',
|
|
104
|
+
logDebug: true
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
spec.enableAnalytics(config)
|
|
109
|
+
expect(utils.logError.called).to.equal(false)
|
|
110
|
+
expect(exports.initializeQueue.called).to.equal(true)
|
|
111
|
+
expect(exports.addGPTHandlers.called).to.equal(true)
|
|
112
|
+
expect(utils.logMessage.called).to.equal(true)
|
|
113
|
+
spec.disableAnalytics();
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe('Behaviour of the adapter when the sdk has loaded', () => {
|
|
118
|
+
before(() => {
|
|
119
|
+
spec.enableAnalytics(CONFIG_WITH_DEBUG);
|
|
120
|
+
const obj = {
|
|
121
|
+
auctionInitHandler: (args) => {},
|
|
122
|
+
bidResponseHandler: (args) => {},
|
|
123
|
+
bidderDoneHandler: (args) => {},
|
|
124
|
+
bidWonHandler: (args) => {},
|
|
125
|
+
noBidHandler: (args) => {},
|
|
126
|
+
auctionDebugHandler: (args) => {},
|
|
127
|
+
bidderTimeoutHandler: (args) => {},
|
|
128
|
+
bidRequestedHandler: (args) => {},
|
|
129
|
+
bidRejectedHandler: (args) => {}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
global.window.atmtdAnalytics = obj
|
|
133
|
+
|
|
134
|
+
Object.keys(obj).forEach((fn) => sandbox.spy(global.window.atmtdAnalytics, fn))
|
|
135
|
+
})
|
|
136
|
+
beforeEach(() => {
|
|
137
|
+
sandbox = sinon.createSandbox();
|
|
138
|
+
sandbox.stub(events, 'getEvents').returns([]);
|
|
139
|
+
sandbox.stub(utils, 'logMessage');
|
|
140
|
+
sandbox.stub(utils, 'logError');
|
|
141
|
+
});
|
|
142
|
+
afterEach(() => {
|
|
143
|
+
sandbox.restore();
|
|
144
|
+
});
|
|
145
|
+
after(() => {
|
|
146
|
+
global.window.atmtdAnalytics = undefined;
|
|
147
|
+
spec.disableAnalytics();
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
it('Should call the auctionInitHandler when the auction init event is fired', () => {
|
|
151
|
+
events.emit(AUCTION_INIT, {type: AUCTION_INIT})
|
|
152
|
+
expect(global.window.atmtdAnalytics.auctionInitHandler.called).to.equal(true)
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('Should call the bidRequested when the bidRequested event is fired', () => {
|
|
156
|
+
events.emit(BID_REQUESTED, {type: BID_REQUESTED})
|
|
157
|
+
expect(global.window.atmtdAnalytics.bidRequestedHandler.called).to.equal(true)
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it('Should call the bidRejected when the bidRejected event is fired', () => {
|
|
161
|
+
events.emit(BID_REJECTED, {type: BID_REJECTED})
|
|
162
|
+
expect(global.window.atmtdAnalytics.bidRejectedHandler.called).to.equal(true)
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('Should call the bidResponseHandler when the bidResponse event is fired', () => {
|
|
166
|
+
events.emit(BID_RESPONSE, {type: BID_RESPONSE})
|
|
167
|
+
expect(global.window.atmtdAnalytics.bidResponseHandler.called).to.equal(true)
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it('Should call the bidderDoneHandler when the bidderDone event is fired', () => {
|
|
171
|
+
events.emit(BIDDER_DONE, {type: BIDDER_DONE})
|
|
172
|
+
expect(global.window.atmtdAnalytics.bidderDoneHandler.called).to.equal(true)
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('Should call the bidWonHandler when the bidWon event is fired', () => {
|
|
176
|
+
events.emit(BID_WON, {type: BID_WON})
|
|
177
|
+
expect(global.window.atmtdAnalytics.bidWonHandler.called).to.equal(true)
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('Should call the noBidHandler when the noBid event is fired', () => {
|
|
181
|
+
events.emit(NO_BID, {type: NO_BID})
|
|
182
|
+
expect(global.window.atmtdAnalytics.noBidHandler.called).to.equal(true)
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('Should call the bidTimeoutHandler when the bidTimeout event is fired', () => {
|
|
186
|
+
events.emit(BID_TIMEOUT, {type: BID_TIMEOUT})
|
|
187
|
+
expect(global.window.atmtdAnalytics.bidderTimeoutHandler.called).to.equal(true)
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('Should call the auctionDebugHandler when the auctionDebug event is fired', () => {
|
|
191
|
+
events.emit(AUCTION_DEBUG, {type: AUCTION_DEBUG})
|
|
192
|
+
expect(global.window.atmtdAnalytics.auctionDebugHandler.called).to.equal(true)
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe('Behaviour of the adapter when the SDK has not loaded', () => {
|
|
197
|
+
before(() => {
|
|
198
|
+
spec.enableAnalytics(CONFIG_WITH_DEBUG);
|
|
199
|
+
})
|
|
200
|
+
beforeEach(() => {
|
|
201
|
+
sandbox = sinon.createSandbox();
|
|
202
|
+
sandbox.stub(events, 'getEvents').returns([]);
|
|
203
|
+
sandbox.stub(utils, 'logMessage');
|
|
204
|
+
sandbox.stub(utils, 'logError');
|
|
205
|
+
|
|
206
|
+
global.window.atmtdAnalytics = undefined
|
|
207
|
+
exports.__atmtdAnalyticsQueue.length = 0
|
|
208
|
+
sandbox.stub(exports.__atmtdAnalyticsQueue, 'push').callsFake((args) => {
|
|
209
|
+
Array.prototype.push.apply(exports.__atmtdAnalyticsQueue, [args]);
|
|
210
|
+
})
|
|
211
|
+
});
|
|
212
|
+
afterEach(() => {
|
|
213
|
+
sandbox.restore();
|
|
214
|
+
});
|
|
215
|
+
after(() => {
|
|
216
|
+
spec.disableAnalytics();
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
it('Should push to the que when the auctionInit event is fired', () => {
|
|
220
|
+
events.emit(AUCTION_INIT, {type: AUCTION_INIT})
|
|
221
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
222
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
223
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
224
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(AUCTION_INIT)
|
|
225
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(AUCTION_INIT)
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
it('Should push to the que when the bidResponse event is fired', () => {
|
|
229
|
+
events.emit(BID_RESPONSE, {type: BID_RESPONSE})
|
|
230
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
231
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
232
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
233
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(BID_RESPONSE)
|
|
234
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(BID_RESPONSE)
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('Should push to the que when the bidRequested event is fired', () => {
|
|
238
|
+
events.emit(BID_REQUESTED, {type: BID_REQUESTED})
|
|
239
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
240
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
241
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
242
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(BID_REQUESTED)
|
|
243
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(BID_REQUESTED)
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
it('Should push to the que when the bidRejected event is fired', () => {
|
|
247
|
+
events.emit(BID_REJECTED, {type: BID_REJECTED})
|
|
248
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
249
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
250
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
251
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(BID_REJECTED)
|
|
252
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(BID_REJECTED)
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
it('Should push to the que when the bidderDone event is fired', () => {
|
|
256
|
+
events.emit(BIDDER_DONE, {type: BIDDER_DONE})
|
|
257
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
258
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
259
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
260
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(BIDDER_DONE)
|
|
261
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(BIDDER_DONE)
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it('Should push to the que when the bidWon event is fired', () => {
|
|
265
|
+
events.emit(BID_WON, {type: BID_WON})
|
|
266
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
267
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
268
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
269
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(BID_WON)
|
|
270
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(BID_WON)
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
it('Should push to the que when the noBid event is fired', () => {
|
|
274
|
+
events.emit(NO_BID, {type: NO_BID})
|
|
275
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
276
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
277
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
278
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(NO_BID)
|
|
279
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(NO_BID)
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('Should push to the que when the auctionDebug is fired', () => {
|
|
283
|
+
events.emit(AUCTION_DEBUG, {type: AUCTION_DEBUG})
|
|
284
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
285
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
286
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
287
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(AUCTION_DEBUG)
|
|
288
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(AUCTION_DEBUG)
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('Should push to the que when the bidderTimeout event is fired', () => {
|
|
292
|
+
events.emit(BID_TIMEOUT, {type: BID_TIMEOUT})
|
|
293
|
+
expect(exports.__atmtdAnalyticsQueue.push.called).to.equal(true)
|
|
294
|
+
expect(exports.__atmtdAnalyticsQueue).to.be.an('array').to.have.lengthOf(1)
|
|
295
|
+
expect(exports.__atmtdAnalyticsQueue[0]).to.have.lengthOf(2)
|
|
296
|
+
expect(exports.__atmtdAnalyticsQueue[0][0]).to.equal(BID_TIMEOUT)
|
|
297
|
+
expect(exports.__atmtdAnalyticsQueue[0][1].type).to.equal(BID_TIMEOUT)
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
describe('Process Events from Que when SDK still has not loaded', () => {
|
|
302
|
+
before(() => {
|
|
303
|
+
spec.enableAnalytics({
|
|
304
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
305
|
+
options: {
|
|
306
|
+
publisherID: '230',
|
|
307
|
+
siteID: '421'
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
global.window.atmtdAnalytics = undefined
|
|
311
|
+
|
|
312
|
+
sandbox.stub(exports.__atmtdAnalyticsQueue, 'push').callsFake((args) => {
|
|
313
|
+
Array.prototype.push.apply(exports.__atmtdAnalyticsQueue, [args]);
|
|
314
|
+
})
|
|
315
|
+
})
|
|
316
|
+
beforeEach(() => {
|
|
317
|
+
sandbox = sinon.createSandbox();
|
|
318
|
+
sandbox.stub(events, 'getEvents').returns([]);
|
|
319
|
+
sandbox.spy(exports, 'prettyLog')
|
|
320
|
+
sandbox.spy(exports, 'processEvents')
|
|
321
|
+
|
|
322
|
+
clock = sandbox.useFakeTimers();
|
|
323
|
+
exports.__atmtdAnalyticsQueue.length = 0
|
|
324
|
+
});
|
|
325
|
+
afterEach(() => {
|
|
326
|
+
sandbox.restore();
|
|
327
|
+
exports.queuePointer = 0;
|
|
328
|
+
exports.retryCount = 0;
|
|
329
|
+
exports.__atmtdAnalyticsQueue = []
|
|
330
|
+
spec.disableAnalytics();
|
|
331
|
+
})
|
|
332
|
+
|
|
333
|
+
it('Should retry processing auctionInit in certain intervals', () => {
|
|
334
|
+
expect(exports.queuePointer).to.equal(0)
|
|
335
|
+
expect(exports.retryCount).to.equal(0)
|
|
336
|
+
const que = [[AUCTION_INIT, {type: AUCTION_INIT}]]
|
|
337
|
+
exports.__atmtdAnalyticsQueue.push(que[0])
|
|
338
|
+
exports.processEvents()
|
|
339
|
+
expect(exports.prettyLog.getCall(0).args[0]).to.equal('status')
|
|
340
|
+
expect(exports.prettyLog.getCall(0).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 1`)
|
|
341
|
+
expect(exports.prettyLog.getCall(1).args[0]).to.equal('warn')
|
|
342
|
+
expect(exports.prettyLog.getCall(1).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 1500ms ...`)
|
|
343
|
+
clock.tick(1510)
|
|
344
|
+
expect(exports.prettyLog.getCall(2).args[0]).to.equal('status')
|
|
345
|
+
expect(exports.prettyLog.getCall(2).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 2`)
|
|
346
|
+
expect(exports.prettyLog.getCall(3).args[0]).to.equal('warn')
|
|
347
|
+
expect(exports.prettyLog.getCall(3).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 3000ms ...`)
|
|
348
|
+
clock.tick(3010)
|
|
349
|
+
expect(exports.prettyLog.getCall(4).args[0]).to.equal('status')
|
|
350
|
+
expect(exports.prettyLog.getCall(4).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 3`)
|
|
351
|
+
expect(exports.prettyLog.getCall(5).args[0]).to.equal('warn')
|
|
352
|
+
expect(exports.prettyLog.getCall(5).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 5000ms ...`)
|
|
353
|
+
clock.tick(5010)
|
|
354
|
+
expect(exports.prettyLog.getCall(6).args[0]).to.equal('status')
|
|
355
|
+
expect(exports.prettyLog.getCall(6).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 4`)
|
|
356
|
+
expect(exports.prettyLog.getCall(7).args[0]).to.equal('warn')
|
|
357
|
+
expect(exports.prettyLog.getCall(7).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 10000ms ...`)
|
|
358
|
+
clock.tick(10010)
|
|
359
|
+
expect(exports.prettyLog.getCall(8).args[0]).to.equal('error')
|
|
360
|
+
expect(exports.prettyLog.getCall(8).args[1]).to.equal(`Aggregator still hasn't loaded. Processing que stopped`)
|
|
361
|
+
expect(exports.queuePointer).to.equal(0)
|
|
362
|
+
expect(exports.processEvents.callCount).to.equal(5)
|
|
363
|
+
})
|
|
364
|
+
|
|
365
|
+
it('Should retry processing slotRenderEnded in certain intervals', () => {
|
|
366
|
+
expect(exports.queuePointer).to.equal(0)
|
|
367
|
+
expect(exports.retryCount).to.equal(0)
|
|
368
|
+
const que = [['slotRenderEnded', {type: 'slotRenderEnded'}]]
|
|
369
|
+
exports.__atmtdAnalyticsQueue.push(que[0])
|
|
370
|
+
exports.processEvents()
|
|
371
|
+
expect(exports.prettyLog.getCall(0).args[0]).to.equal('status')
|
|
372
|
+
expect(exports.prettyLog.getCall(0).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 1`)
|
|
373
|
+
expect(exports.prettyLog.getCall(1).args[0]).to.equal('warn')
|
|
374
|
+
expect(exports.prettyLog.getCall(1).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 1500ms ...`)
|
|
375
|
+
clock.tick(1510)
|
|
376
|
+
expect(exports.prettyLog.getCall(2).args[0]).to.equal('status')
|
|
377
|
+
expect(exports.prettyLog.getCall(2).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 2`)
|
|
378
|
+
expect(exports.prettyLog.getCall(3).args[0]).to.equal('warn')
|
|
379
|
+
expect(exports.prettyLog.getCall(3).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 3000ms ...`)
|
|
380
|
+
clock.tick(3010)
|
|
381
|
+
expect(exports.prettyLog.getCall(4).args[0]).to.equal('status')
|
|
382
|
+
expect(exports.prettyLog.getCall(4).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 3`)
|
|
383
|
+
expect(exports.prettyLog.getCall(5).args[0]).to.equal('warn')
|
|
384
|
+
expect(exports.prettyLog.getCall(5).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 5000ms ...`)
|
|
385
|
+
clock.tick(5010)
|
|
386
|
+
expect(exports.prettyLog.getCall(6).args[0]).to.equal('status')
|
|
387
|
+
expect(exports.prettyLog.getCall(6).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 4`)
|
|
388
|
+
expect(exports.prettyLog.getCall(7).args[0]).to.equal('warn')
|
|
389
|
+
expect(exports.prettyLog.getCall(7).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 10000ms ...`)
|
|
390
|
+
clock.tick(10010)
|
|
391
|
+
expect(exports.prettyLog.getCall(8).args[0]).to.equal('error')
|
|
392
|
+
expect(exports.prettyLog.getCall(8).args[1]).to.equal(`Aggregator still hasn't loaded. Processing que stopped`)
|
|
393
|
+
expect(exports.queuePointer).to.equal(0)
|
|
394
|
+
expect(exports.processEvents.callCount).to.equal(5)
|
|
395
|
+
})
|
|
396
|
+
|
|
397
|
+
it('Should retry processing impressionViewable in certain intervals', () => {
|
|
398
|
+
expect(exports.queuePointer).to.equal(0)
|
|
399
|
+
expect(exports.retryCount).to.equal(0)
|
|
400
|
+
const que = [['impressionViewable', {type: 'impressionViewable'}]]
|
|
401
|
+
exports.__atmtdAnalyticsQueue.push(que[0])
|
|
402
|
+
exports.processEvents()
|
|
403
|
+
expect(exports.prettyLog.getCall(0).args[0]).to.equal('status')
|
|
404
|
+
expect(exports.prettyLog.getCall(0).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 1`)
|
|
405
|
+
expect(exports.prettyLog.getCall(1).args[0]).to.equal('warn')
|
|
406
|
+
expect(exports.prettyLog.getCall(1).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 1500ms ...`)
|
|
407
|
+
clock.tick(1510)
|
|
408
|
+
expect(exports.prettyLog.getCall(2).args[0]).to.equal('status')
|
|
409
|
+
expect(exports.prettyLog.getCall(2).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 2`)
|
|
410
|
+
expect(exports.prettyLog.getCall(3).args[0]).to.equal('warn')
|
|
411
|
+
expect(exports.prettyLog.getCall(3).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 3000ms ...`)
|
|
412
|
+
clock.tick(3010)
|
|
413
|
+
expect(exports.prettyLog.getCall(4).args[0]).to.equal('status')
|
|
414
|
+
expect(exports.prettyLog.getCall(4).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 3`)
|
|
415
|
+
expect(exports.prettyLog.getCall(5).args[0]).to.equal('warn')
|
|
416
|
+
expect(exports.prettyLog.getCall(5).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 5000ms ...`)
|
|
417
|
+
clock.tick(5010)
|
|
418
|
+
expect(exports.prettyLog.getCall(6).args[0]).to.equal('status')
|
|
419
|
+
expect(exports.prettyLog.getCall(6).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 4`)
|
|
420
|
+
expect(exports.prettyLog.getCall(7).args[0]).to.equal('warn')
|
|
421
|
+
expect(exports.prettyLog.getCall(7).args[1]).to.equal(`Adapter failed to process event as aggregator has not loaded. Retrying in 10000ms ...`)
|
|
422
|
+
clock.tick(10010)
|
|
423
|
+
expect(exports.prettyLog.getCall(8).args[0]).to.equal('error')
|
|
424
|
+
expect(exports.prettyLog.getCall(8).args[1]).to.equal(`Aggregator still hasn't loaded. Processing que stopped`)
|
|
425
|
+
expect(exports.queuePointer).to.equal(0)
|
|
426
|
+
expect(exports.processEvents.callCount).to.equal(5)
|
|
427
|
+
})
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
describe('Process Events from Que when SDK has loaded', () => {
|
|
431
|
+
before(() => {
|
|
432
|
+
spec.enableAnalytics({
|
|
433
|
+
provider: 'atmtdAnalyticsAdapter',
|
|
434
|
+
options: {
|
|
435
|
+
publisherID: '230',
|
|
436
|
+
siteID: '421'
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
sandbox = sinon.createSandbox();
|
|
440
|
+
sandbox.reset()
|
|
441
|
+
const obj = {
|
|
442
|
+
auctionInitHandler: (args) => {},
|
|
443
|
+
bidResponseHandler: (args) => {},
|
|
444
|
+
bidderDoneHandler: (args) => {},
|
|
445
|
+
bidWonHandler: (args) => {},
|
|
446
|
+
noBidHandler: (args) => {},
|
|
447
|
+
auctionDebugHandler: (args) => {},
|
|
448
|
+
bidderTimeoutHandler: (args) => {},
|
|
449
|
+
impressionViewableHandler: (args) => {},
|
|
450
|
+
slotRenderEndedGPTHandler: (args) => {},
|
|
451
|
+
bidRequestedHandler: (args) => {},
|
|
452
|
+
bidRejectedHandler: (args) => {}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
global.window.atmtdAnalytics = obj;
|
|
456
|
+
|
|
457
|
+
Object.keys(obj).forEach((fn) => sandbox.spy(global.window.atmtdAnalytics, fn))
|
|
458
|
+
sandbox.stub(events, 'getEvents').returns([]);
|
|
459
|
+
sandbox.spy(exports, 'prettyLog')
|
|
460
|
+
exports.retryCount = 0;
|
|
461
|
+
exports.queuePointer = 0;
|
|
462
|
+
exports.__atmtdAnalyticsQueue = [
|
|
463
|
+
[AUCTION_INIT, {type: AUCTION_INIT}],
|
|
464
|
+
[BID_RESPONSE, {type: BID_RESPONSE}],
|
|
465
|
+
[BID_REQUESTED, {type: BID_REQUESTED}],
|
|
466
|
+
[BID_REJECTED, {type: BID_REJECTED}],
|
|
467
|
+
[NO_BID, {type: NO_BID}],
|
|
468
|
+
[BID_WON, {type: BID_WON}],
|
|
469
|
+
[BIDDER_DONE, {type: BIDDER_DONE}],
|
|
470
|
+
[AUCTION_DEBUG, {type: AUCTION_DEBUG}],
|
|
471
|
+
[BID_TIMEOUT, {type: BID_TIMEOUT}],
|
|
472
|
+
['slotRenderEnded', {type: 'slotRenderEnded'}],
|
|
473
|
+
['impressionViewable', {type: 'impressionViewable'}]
|
|
474
|
+
]
|
|
475
|
+
});
|
|
476
|
+
after(() => {
|
|
477
|
+
sandbox.restore();
|
|
478
|
+
spec.disableAnalytics();
|
|
479
|
+
})
|
|
480
|
+
|
|
481
|
+
it('Should make calls to appropriate SDK event handlers', () => {
|
|
482
|
+
exports.processEvents()
|
|
483
|
+
expect(exports.prettyLog.getCall(0).args[0]).to.equal('status')
|
|
484
|
+
expect(exports.prettyLog.getCall(0).args[1]).to.equal(`Que has been inactive for a while. Adapter starting to process que now... Trial Count = 1`)
|
|
485
|
+
expect(exports.retryCount).to.equal(0)
|
|
486
|
+
expect(exports.prettyLog.callCount).to.equal(1)
|
|
487
|
+
expect(exports.queuePointer).to.equal(exports.__atmtdAnalyticsQueue.length)
|
|
488
|
+
expect(global.window.atmtdAnalytics.auctionInitHandler.calledOnce).to.equal(true)
|
|
489
|
+
expect(global.window.atmtdAnalytics.bidResponseHandler.calledOnce).to.equal(true)
|
|
490
|
+
expect(global.window.atmtdAnalytics.bidRejectedHandler.calledOnce).to.equal(true)
|
|
491
|
+
expect(global.window.atmtdAnalytics.bidRequestedHandler.calledOnce).to.equal(true)
|
|
492
|
+
expect(global.window.atmtdAnalytics.noBidHandler.calledOnce).to.equal(true)
|
|
493
|
+
expect(global.window.atmtdAnalytics.bidWonHandler.calledOnce).to.equal(true)
|
|
494
|
+
expect(global.window.atmtdAnalytics.auctionDebugHandler.calledOnce).to.equal(true)
|
|
495
|
+
expect(global.window.atmtdAnalytics.bidderTimeoutHandler.calledOnce).to.equal(true)
|
|
496
|
+
expect(global.window.atmtdAnalytics.bidderDoneHandler.calledOnce).to.equal(true)
|
|
497
|
+
expect(global.window.atmtdAnalytics.slotRenderEndedGPTHandler.calledOnce).to.equal(true)
|
|
498
|
+
expect(global.window.atmtdAnalytics.impressionViewableHandler.calledOnce).to.equal(true)
|
|
499
|
+
})
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
describe('Prettylog fn tests', () => {
|
|
503
|
+
beforeEach(() => {
|
|
504
|
+
sandbox = sinon.createSandbox()
|
|
505
|
+
sandbox.spy(utils, 'logInfo')
|
|
506
|
+
sandbox.spy(utils, 'logError')
|
|
507
|
+
exports.isLoggingEnabled = true
|
|
508
|
+
})
|
|
509
|
+
|
|
510
|
+
afterEach(() => {
|
|
511
|
+
sandbox.restore()
|
|
512
|
+
})
|
|
513
|
+
|
|
514
|
+
it('Should call logMessage once in normal mode', () => {
|
|
515
|
+
exports.prettyLog('status', 'Hello world')
|
|
516
|
+
expect(utils.logInfo.callCount).to.equal(1)
|
|
517
|
+
})
|
|
518
|
+
|
|
519
|
+
it('Should call logMessage twice in group mode and have the cb called', () => {
|
|
520
|
+
const spy = sandbox.spy()
|
|
521
|
+
exports.prettyLog('status', 'Hello world', true, spy)
|
|
522
|
+
expect(utils.logInfo.callCount).to.equal(2)
|
|
523
|
+
expect(spy.called).to.equal(true)
|
|
524
|
+
})
|
|
525
|
+
|
|
526
|
+
it('Should call logMessage twice in group mode and have the cb which throws an error', () => {
|
|
527
|
+
const spy = sandbox.stub().throws()
|
|
528
|
+
exports.prettyLog('status', 'Hello world', true, spy)
|
|
529
|
+
expect(utils.logInfo.callCount).to.equal(2)
|
|
530
|
+
expect(utils.logError.called).to.equal(true)
|
|
531
|
+
})
|
|
532
|
+
});
|
|
533
|
+
});
|
|
@@ -245,18 +245,31 @@ describe('#bidViewability', function() {
|
|
|
245
245
|
let logWinningBidNotFoundSpy;
|
|
246
246
|
let callBidViewableBidderSpy;
|
|
247
247
|
let winningBidsArray;
|
|
248
|
+
let callBidBillableBidderSpy;
|
|
249
|
+
let adUnits = [
|
|
250
|
+
{
|
|
251
|
+
'code': 'abc123',
|
|
252
|
+
'bids': [
|
|
253
|
+
{
|
|
254
|
+
'bidder': 'pubmatic'
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
];
|
|
248
259
|
|
|
249
260
|
beforeEach(function() {
|
|
250
261
|
sandbox = sinon.sandbox.create();
|
|
251
262
|
triggerPixelSpy = sandbox.spy(utils, ['triggerPixel']);
|
|
252
263
|
eventsEmitSpy = sandbox.spy(events, ['emit']);
|
|
253
264
|
callBidViewableBidderSpy = sandbox.spy(adapterManager, ['callBidViewableBidder']);
|
|
265
|
+
callBidBillableBidderSpy = sandbox.spy(adapterManager, ['callBidBillableBidder']);
|
|
254
266
|
// mocking winningBidsArray
|
|
255
267
|
winningBidsArray = [];
|
|
256
268
|
sandbox.stub(prebidGlobal, 'getGlobal').returns({
|
|
257
269
|
getAllWinningBids: function (number) {
|
|
258
270
|
return winningBidsArray;
|
|
259
|
-
}
|
|
271
|
+
},
|
|
272
|
+
adUnits
|
|
260
273
|
});
|
|
261
274
|
});
|
|
262
275
|
|
|
@@ -293,5 +306,23 @@ describe('#bidViewability', function() {
|
|
|
293
306
|
// CONSTANTS.EVENTS.BID_VIEWABLE is NOT triggered
|
|
294
307
|
expect(eventsEmitSpy.callCount).to.equal(0);
|
|
295
308
|
});
|
|
309
|
+
|
|
310
|
+
it('should call the callBidBillableBidder function if the viewable bid is associated with an ad unit with deferBilling set to true', function() {
|
|
311
|
+
let moduleConfig = {};
|
|
312
|
+
const deferredBillingAdUnit = {
|
|
313
|
+
'code': '/harshad/Jan/2021/',
|
|
314
|
+
'deferBilling': true,
|
|
315
|
+
'bids': [
|
|
316
|
+
{
|
|
317
|
+
'bidder': 'pubmatic'
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
};
|
|
321
|
+
adUnits.push(deferredBillingAdUnit);
|
|
322
|
+
winningBidsArray.push(PBJS_WINNING_BID);
|
|
323
|
+
bidViewability.impressionViewableHandler(moduleConfig, GPT_SLOT, null);
|
|
324
|
+
expect(callBidBillableBidderSpy.callCount).to.equal(1);
|
|
325
|
+
sinon.assert.calledWith(callBidBillableBidderSpy, PBJS_WINNING_BID);
|
|
326
|
+
});
|
|
296
327
|
});
|
|
297
328
|
});
|
|
@@ -67,6 +67,8 @@ const NO_USP_CONSENT = {
|
|
|
67
67
|
usp: '1NYY'
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
const UNDEFINED_USER_CONSENT = {};
|
|
71
|
+
|
|
70
72
|
function mockSurveyLoaded(surveyConf) {
|
|
71
73
|
const commands = window._brandmetrics || [];
|
|
72
74
|
commands.forEach(command => {
|
|
@@ -120,6 +122,10 @@ describe('BrandmetricsRTD module', () => {
|
|
|
120
122
|
it('should not init when there is no usp- consent', () => {
|
|
121
123
|
expect(brandmetricsRTD.brandmetricsSubmodule.init(VALID_CONFIG, NO_USP_CONSENT)).to.equal(false);
|
|
122
124
|
});
|
|
125
|
+
|
|
126
|
+
it('should init if there are no consent- objects defined', () => {
|
|
127
|
+
expect(brandmetricsRTD.brandmetricsSubmodule.init(VALID_CONFIG, UNDEFINED_USER_CONSENT)).to.equal(true);
|
|
128
|
+
});
|
|
123
129
|
});
|
|
124
130
|
|
|
125
131
|
describe('getBidRequestData', () => {
|