prebid.js 7.30.0 → 7.32.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/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/aidemBidAdapter.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/aolBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appushBidAdapter.js +1 -0
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.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/confiantRtdProvider.js +1 -0
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datawrkzBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/holidBidAdapter.js +1 -0
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.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/liveyieldAnalyticsAdapter.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/medianetRtdProvider.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 +131 -127
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/orbitsoftBidAdapter.js +1 -0
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.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/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.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/smilewantedBidAdapter.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/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.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/yieldlabBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/adloox.html +5 -0
- package/libraries/pbsExtensions/processors/adUnitCode.js +13 -0
- package/libraries/pbsExtensions/processors/pbs.js +5 -0
- package/modules/.submodules.json +1 -0
- package/modules/adagioBidAdapter.js +0 -4
- package/modules/adagioBidAdapter.md +4 -22
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/adlooxAnalyticsAdapter.md +5 -3
- package/modules/adlooxRtdProvider.js +82 -278
- package/modules/adlooxRtdProvider.md +6 -6
- package/modules/aidemBidAdapter.js +4 -0
- package/modules/aidemBidAdapter.md +1 -0
- package/modules/alkimiBidAdapter.js +23 -6
- package/modules/aolBidAdapter.js +12 -0
- package/modules/appnexusBidAdapter.js +2 -2
- package/modules/appushBidAdapter.js +188 -0
- package/modules/appushBidAdapter.md +79 -0
- package/modules/asoBidAdapter.js +8 -5
- package/modules/confiantRtdProvider.js +128 -0
- package/modules/confiantRtdProvider.md +45 -0
- package/modules/connectIdSystem.js +15 -1
- package/modules/datawrkzBidAdapter.js +24 -4
- package/modules/feedadBidAdapter.js +17 -7
- package/modules/holidBidAdapter.js +170 -0
- package/modules/holidBidAdapter.md +36 -0
- package/modules/jwplayerVideoProvider.js +10 -3
- package/modules/kueezRtbBidAdapter.js +21 -8
- package/modules/medianetRtdProvider.js +4 -4
- package/modules/nexx360BidAdapter.js +5 -7
- package/modules/orbitsoftBidAdapter.js +150 -0
- package/modules/permutiveRtdProvider.js +1 -1
- package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
- package/modules/riseBidAdapter.js +2 -1
- package/modules/riseBidAdapter.md +2 -0
- package/modules/seedtagBidAdapter.js +12 -0
- package/modules/smartxBidAdapter.js +6 -0
- package/modules/taboolaBidAdapter.js +61 -14
- package/modules/yahoosspBidAdapter.js +5 -0
- package/modules/yieldlabBidAdapter.js +150 -134
- package/modules/yieldmoBidAdapter.js +1 -12
- package/package.json +1 -1
- package/src/adloader.js +2 -1
- package/src/prebid.js +7 -8
- package/test/spec/modules/adagioBidAdapter_spec.js +1 -28
- package/test/spec/modules/adlooxRtdProvider_spec.js +28 -120
- package/test/spec/modules/aidemBidAdapter_spec.js +10 -2
- package/test/spec/modules/alkimiBidAdapter_spec.js +15 -3
- package/test/spec/modules/aolBidAdapter_spec.js +22 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +7 -3
- package/test/spec/modules/appushBidAdapter_spec.js +372 -0
- package/test/spec/modules/confiantRtdProvider_spec.js +107 -0
- package/test/spec/modules/connectIdSystem_spec.js +17 -5
- package/test/spec/modules/feedadBidAdapter_spec.js +60 -13
- package/test/spec/modules/holidBidAdapter_spec.js +165 -0
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +147 -24
- package/test/spec/modules/medianetRtdProvider_spec.js +3 -3
- package/test/spec/modules/orbitsoftBidAdapter_spec.js +255 -0
- package/test/spec/modules/riseBidAdapter_spec.js +7 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +56 -10
- package/test/spec/modules/smartxBidAdapter_spec.js +10 -0
- package/test/spec/modules/taboolaBidAdapter_spec.js +142 -5
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +45 -10
- package/test/spec/modules/yahoosspBidAdapter_spec.js +16 -1
- package/test/spec/modules/yieldlabBidAdapter_spec.js +311 -301
- package/test/spec/modules/yieldmoBidAdapter_spec.js +70 -0
- package/test/spec/ortbConverter/pbsExtensions/adUnitCode_spec.js +23 -0
- package/test/spec/unit/pbjs_api_spec.js +11 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { spec } from '../../../modules/appushBidAdapter.js';
|
|
3
|
+
import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
|
|
4
|
+
import { getUniqueIdentifierStr } from '../../../src/utils.js';
|
|
5
|
+
|
|
6
|
+
const bidder = 'appush'
|
|
7
|
+
|
|
8
|
+
describe('AppushBidAdapter', function () {
|
|
9
|
+
const bids = [
|
|
10
|
+
{
|
|
11
|
+
bidId: getUniqueIdentifierStr(),
|
|
12
|
+
bidder: bidder,
|
|
13
|
+
mediaTypes: {
|
|
14
|
+
[BANNER]: {
|
|
15
|
+
sizes: [[300, 250]]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
params: {
|
|
19
|
+
placementId: 'testBanner',
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
bidId: getUniqueIdentifierStr(),
|
|
24
|
+
bidder: bidder,
|
|
25
|
+
mediaTypes: {
|
|
26
|
+
[VIDEO]: {
|
|
27
|
+
playerSize: [[300, 300]],
|
|
28
|
+
minduration: 5,
|
|
29
|
+
maxduration: 60
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
params: {
|
|
33
|
+
placementId: 'testVideo',
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
bidId: getUniqueIdentifierStr(),
|
|
38
|
+
bidder: bidder,
|
|
39
|
+
mediaTypes: {
|
|
40
|
+
[NATIVE]: {
|
|
41
|
+
native: {
|
|
42
|
+
title: {
|
|
43
|
+
required: true
|
|
44
|
+
},
|
|
45
|
+
body: {
|
|
46
|
+
required: true
|
|
47
|
+
},
|
|
48
|
+
icon: {
|
|
49
|
+
required: true,
|
|
50
|
+
size: [64, 64]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
params: {
|
|
56
|
+
placementId: 'testNative',
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
const invalidBid = {
|
|
62
|
+
bidId: getUniqueIdentifierStr(),
|
|
63
|
+
bidder: bidder,
|
|
64
|
+
mediaTypes: {
|
|
65
|
+
[BANNER]: {
|
|
66
|
+
sizes: [[300, 250]]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
params: {
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const bidderRequest = {
|
|
75
|
+
uspConsent: '1---',
|
|
76
|
+
gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
|
|
77
|
+
refererInfo: {
|
|
78
|
+
referer: 'https://test.com'
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
describe('isBidRequestValid', function () {
|
|
83
|
+
it('Should return true if there are bidId, params and key parameters present', function () {
|
|
84
|
+
expect(spec.isBidRequestValid(bids[0])).to.be.true;
|
|
85
|
+
});
|
|
86
|
+
it('Should return false if at least one of parameters is not present', function () {
|
|
87
|
+
expect(spec.isBidRequestValid(invalidBid)).to.be.false;
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe('buildRequests', function () {
|
|
92
|
+
let serverRequest = spec.buildRequests(bids, bidderRequest);
|
|
93
|
+
|
|
94
|
+
it('Creates a ServerRequest object with method, URL and data', function () {
|
|
95
|
+
expect(serverRequest).to.exist;
|
|
96
|
+
expect(serverRequest.method).to.exist;
|
|
97
|
+
expect(serverRequest.url).to.exist;
|
|
98
|
+
expect(serverRequest.data).to.exist;
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('Returns POST method', function () {
|
|
102
|
+
expect(serverRequest.method).to.equal('POST');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('Returns valid URL', function () {
|
|
106
|
+
expect(serverRequest.url).to.equal('https://hb.appush.com/pbjs');
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('Returns general data valid', function () {
|
|
110
|
+
let data = serverRequest.data;
|
|
111
|
+
expect(data).to.be.an('object');
|
|
112
|
+
expect(data).to.have.all.keys('deviceWidth',
|
|
113
|
+
'deviceHeight',
|
|
114
|
+
'language',
|
|
115
|
+
'secure',
|
|
116
|
+
'host',
|
|
117
|
+
'page',
|
|
118
|
+
'placements',
|
|
119
|
+
'coppa',
|
|
120
|
+
'ccpa',
|
|
121
|
+
'gdpr',
|
|
122
|
+
'tmax'
|
|
123
|
+
);
|
|
124
|
+
expect(data.deviceWidth).to.be.a('number');
|
|
125
|
+
expect(data.deviceHeight).to.be.a('number');
|
|
126
|
+
expect(data.language).to.be.a('string');
|
|
127
|
+
expect(data.secure).to.be.within(0, 1);
|
|
128
|
+
expect(data.host).to.be.a('string');
|
|
129
|
+
expect(data.page).to.be.a('string');
|
|
130
|
+
expect(data.coppa).to.be.a('number');
|
|
131
|
+
expect(data.gdpr).to.be.a('string');
|
|
132
|
+
expect(data.ccpa).to.be.a('string');
|
|
133
|
+
expect(data.tmax).to.be.a('number');
|
|
134
|
+
expect(data.placements).to.have.lengthOf(3);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('Returns valid placements', function () {
|
|
138
|
+
const { placements } = serverRequest.data;
|
|
139
|
+
for (let i = 0, len = placements.length; i < len; i++) {
|
|
140
|
+
const placement = placements[i];
|
|
141
|
+
expect(placement.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
|
|
142
|
+
expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
|
|
143
|
+
expect(placement.bidId).to.be.a('string');
|
|
144
|
+
expect(placement.schain).to.be.an('object');
|
|
145
|
+
expect(placement.bidfloor).to.exist.and.to.equal(0);
|
|
146
|
+
expect(placement.type).to.exist.and.to.equal('publisher');
|
|
147
|
+
|
|
148
|
+
if (placement.adFormat === BANNER) {
|
|
149
|
+
expect(placement.sizes).to.be.an('array');
|
|
150
|
+
}
|
|
151
|
+
switch (placement.adFormat) {
|
|
152
|
+
case BANNER:
|
|
153
|
+
expect(placement.sizes).to.be.an('array');
|
|
154
|
+
break;
|
|
155
|
+
case VIDEO:
|
|
156
|
+
expect(placement.playerSize).to.be.an('array');
|
|
157
|
+
expect(placement.minduration).to.be.an('number');
|
|
158
|
+
expect(placement.maxduration).to.be.an('number');
|
|
159
|
+
break;
|
|
160
|
+
case NATIVE:
|
|
161
|
+
expect(placement.native).to.be.an('object');
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it('Returns data with gdprConsent and without uspConsent', function () {
|
|
168
|
+
delete bidderRequest.uspConsent;
|
|
169
|
+
serverRequest = spec.buildRequests(bids, bidderRequest);
|
|
170
|
+
let data = serverRequest.data;
|
|
171
|
+
expect(data.gdpr).to.exist;
|
|
172
|
+
expect(data.gdpr).to.be.a('string');
|
|
173
|
+
expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
|
|
174
|
+
expect(data.ccpa).to.not.exist;
|
|
175
|
+
delete bidderRequest.gdprConsent;
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it('Returns data with uspConsent and without gdprConsent', function () {
|
|
179
|
+
bidderRequest.uspConsent = '1---';
|
|
180
|
+
delete bidderRequest.gdprConsent;
|
|
181
|
+
serverRequest = spec.buildRequests(bids, bidderRequest);
|
|
182
|
+
let data = serverRequest.data;
|
|
183
|
+
expect(data.ccpa).to.exist;
|
|
184
|
+
expect(data.ccpa).to.be.a('string');
|
|
185
|
+
expect(data.ccpa).to.equal(bidderRequest.uspConsent);
|
|
186
|
+
expect(data.gdpr).to.not.exist;
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('Returns empty data if no valid requests are passed', function () {
|
|
190
|
+
serverRequest = spec.buildRequests([], bidderRequest);
|
|
191
|
+
let data = serverRequest.data;
|
|
192
|
+
expect(data.placements).to.be.an('array').that.is.empty;
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe('interpretResponse', function () {
|
|
197
|
+
it('Should interpret banner response', function () {
|
|
198
|
+
const banner = {
|
|
199
|
+
body: [{
|
|
200
|
+
mediaType: 'banner',
|
|
201
|
+
width: 300,
|
|
202
|
+
height: 250,
|
|
203
|
+
cpm: 0.4,
|
|
204
|
+
ad: 'Test',
|
|
205
|
+
requestId: '23fhj33i987f',
|
|
206
|
+
ttl: 120,
|
|
207
|
+
creativeId: '2',
|
|
208
|
+
netRevenue: true,
|
|
209
|
+
currency: 'USD',
|
|
210
|
+
dealId: '1',
|
|
211
|
+
meta: {
|
|
212
|
+
advertiserDomains: ['google.com'],
|
|
213
|
+
advertiserId: 1234
|
|
214
|
+
}
|
|
215
|
+
}]
|
|
216
|
+
};
|
|
217
|
+
let bannerResponses = spec.interpretResponse(banner);
|
|
218
|
+
expect(bannerResponses).to.be.an('array').that.is.not.empty;
|
|
219
|
+
let dataItem = bannerResponses[0];
|
|
220
|
+
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
|
|
221
|
+
'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
|
|
222
|
+
expect(dataItem.requestId).to.equal(banner.body[0].requestId);
|
|
223
|
+
expect(dataItem.cpm).to.equal(banner.body[0].cpm);
|
|
224
|
+
expect(dataItem.width).to.equal(banner.body[0].width);
|
|
225
|
+
expect(dataItem.height).to.equal(banner.body[0].height);
|
|
226
|
+
expect(dataItem.ad).to.equal(banner.body[0].ad);
|
|
227
|
+
expect(dataItem.ttl).to.equal(banner.body[0].ttl);
|
|
228
|
+
expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
|
|
229
|
+
expect(dataItem.netRevenue).to.be.true;
|
|
230
|
+
expect(dataItem.currency).to.equal(banner.body[0].currency);
|
|
231
|
+
expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
|
|
232
|
+
});
|
|
233
|
+
it('Should interpret video response', function () {
|
|
234
|
+
const video = {
|
|
235
|
+
body: [{
|
|
236
|
+
vastUrl: 'test.com',
|
|
237
|
+
mediaType: 'video',
|
|
238
|
+
cpm: 0.5,
|
|
239
|
+
requestId: '23fhj33i987f',
|
|
240
|
+
ttl: 120,
|
|
241
|
+
creativeId: '2',
|
|
242
|
+
netRevenue: true,
|
|
243
|
+
currency: 'USD',
|
|
244
|
+
dealId: '1',
|
|
245
|
+
meta: {
|
|
246
|
+
advertiserDomains: ['google.com'],
|
|
247
|
+
advertiserId: 1234
|
|
248
|
+
}
|
|
249
|
+
}]
|
|
250
|
+
};
|
|
251
|
+
let videoResponses = spec.interpretResponse(video);
|
|
252
|
+
expect(videoResponses).to.be.an('array').that.is.not.empty;
|
|
253
|
+
|
|
254
|
+
let dataItem = videoResponses[0];
|
|
255
|
+
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
|
|
256
|
+
'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
|
|
257
|
+
expect(dataItem.requestId).to.equal('23fhj33i987f');
|
|
258
|
+
expect(dataItem.cpm).to.equal(0.5);
|
|
259
|
+
expect(dataItem.vastUrl).to.equal('test.com');
|
|
260
|
+
expect(dataItem.ttl).to.equal(120);
|
|
261
|
+
expect(dataItem.creativeId).to.equal('2');
|
|
262
|
+
expect(dataItem.netRevenue).to.be.true;
|
|
263
|
+
expect(dataItem.currency).to.equal('USD');
|
|
264
|
+
expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
|
|
265
|
+
});
|
|
266
|
+
it('Should interpret native response', function () {
|
|
267
|
+
const native = {
|
|
268
|
+
body: [{
|
|
269
|
+
mediaType: 'native',
|
|
270
|
+
native: {
|
|
271
|
+
clickUrl: 'test.com',
|
|
272
|
+
title: 'Test',
|
|
273
|
+
image: 'test.com',
|
|
274
|
+
impressionTrackers: ['test.com'],
|
|
275
|
+
},
|
|
276
|
+
ttl: 120,
|
|
277
|
+
cpm: 0.4,
|
|
278
|
+
requestId: '23fhj33i987f',
|
|
279
|
+
creativeId: '2',
|
|
280
|
+
netRevenue: true,
|
|
281
|
+
currency: 'USD',
|
|
282
|
+
meta: {
|
|
283
|
+
advertiserDomains: ['google.com'],
|
|
284
|
+
advertiserId: 1234
|
|
285
|
+
}
|
|
286
|
+
}]
|
|
287
|
+
};
|
|
288
|
+
let nativeResponses = spec.interpretResponse(native);
|
|
289
|
+
expect(nativeResponses).to.be.an('array').that.is.not.empty;
|
|
290
|
+
|
|
291
|
+
let dataItem = nativeResponses[0];
|
|
292
|
+
expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
|
|
293
|
+
expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
|
|
294
|
+
expect(dataItem.requestId).to.equal('23fhj33i987f');
|
|
295
|
+
expect(dataItem.cpm).to.equal(0.4);
|
|
296
|
+
expect(dataItem.native.clickUrl).to.equal('test.com');
|
|
297
|
+
expect(dataItem.native.title).to.equal('Test');
|
|
298
|
+
expect(dataItem.native.image).to.equal('test.com');
|
|
299
|
+
expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
|
|
300
|
+
expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
|
|
301
|
+
expect(dataItem.ttl).to.equal(120);
|
|
302
|
+
expect(dataItem.creativeId).to.equal('2');
|
|
303
|
+
expect(dataItem.netRevenue).to.be.true;
|
|
304
|
+
expect(dataItem.currency).to.equal('USD');
|
|
305
|
+
expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
|
|
306
|
+
});
|
|
307
|
+
it('Should return an empty array if invalid banner response is passed', function () {
|
|
308
|
+
const invBanner = {
|
|
309
|
+
body: [{
|
|
310
|
+
width: 300,
|
|
311
|
+
cpm: 0.4,
|
|
312
|
+
ad: 'Test',
|
|
313
|
+
requestId: '23fhj33i987f',
|
|
314
|
+
ttl: 120,
|
|
315
|
+
creativeId: '2',
|
|
316
|
+
netRevenue: true,
|
|
317
|
+
currency: 'USD',
|
|
318
|
+
dealId: '1'
|
|
319
|
+
}]
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
let serverResponses = spec.interpretResponse(invBanner);
|
|
323
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
324
|
+
});
|
|
325
|
+
it('Should return an empty array if invalid video response is passed', function () {
|
|
326
|
+
const invVideo = {
|
|
327
|
+
body: [{
|
|
328
|
+
mediaType: 'video',
|
|
329
|
+
cpm: 0.5,
|
|
330
|
+
requestId: '23fhj33i987f',
|
|
331
|
+
ttl: 120,
|
|
332
|
+
creativeId: '2',
|
|
333
|
+
netRevenue: true,
|
|
334
|
+
currency: 'USD',
|
|
335
|
+
dealId: '1'
|
|
336
|
+
}]
|
|
337
|
+
};
|
|
338
|
+
let serverResponses = spec.interpretResponse(invVideo);
|
|
339
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
340
|
+
});
|
|
341
|
+
it('Should return an empty array if invalid native response is passed', function () {
|
|
342
|
+
const invNative = {
|
|
343
|
+
body: [{
|
|
344
|
+
mediaType: 'native',
|
|
345
|
+
clickUrl: 'test.com',
|
|
346
|
+
title: 'Test',
|
|
347
|
+
impressionTrackers: ['test.com'],
|
|
348
|
+
ttl: 120,
|
|
349
|
+
requestId: '23fhj33i987f',
|
|
350
|
+
creativeId: '2',
|
|
351
|
+
netRevenue: true,
|
|
352
|
+
currency: 'USD',
|
|
353
|
+
}]
|
|
354
|
+
};
|
|
355
|
+
let serverResponses = spec.interpretResponse(invNative);
|
|
356
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
357
|
+
});
|
|
358
|
+
it('Should return an empty array if invalid response is passed', function () {
|
|
359
|
+
const invalid = {
|
|
360
|
+
body: [{
|
|
361
|
+
ttl: 120,
|
|
362
|
+
creativeId: '2',
|
|
363
|
+
netRevenue: true,
|
|
364
|
+
currency: 'USD',
|
|
365
|
+
dealId: '1'
|
|
366
|
+
}]
|
|
367
|
+
};
|
|
368
|
+
let serverResponses = spec.interpretResponse(invalid);
|
|
369
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
370
|
+
});
|
|
371
|
+
});
|
|
372
|
+
});
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as utils from '../../../src/utils.js';
|
|
2
|
+
import * as hook from '../../../src/hook.js'
|
|
3
|
+
import * as events from '../../../src/events.js';
|
|
4
|
+
import CONSTANTS from '../../../src/constants.json';
|
|
5
|
+
|
|
6
|
+
import confiantModule from '../../../modules/confiantRtdProvider.js';
|
|
7
|
+
|
|
8
|
+
const {
|
|
9
|
+
injectConfigScript,
|
|
10
|
+
setupPage,
|
|
11
|
+
subscribeToConfiantCommFrame,
|
|
12
|
+
registerConfiantSubmodule
|
|
13
|
+
} = confiantModule;
|
|
14
|
+
|
|
15
|
+
describe('Confiant RTD module', function () {
|
|
16
|
+
describe('setupPage()', function() {
|
|
17
|
+
it('should return false if propertId is not present in config', function() {
|
|
18
|
+
expect(setupPage({})).to.be.false;
|
|
19
|
+
expect(setupPage({ params: {} })).to.be.false;
|
|
20
|
+
expect(setupPage({ params: { propertyId: '' } })).to.be.false;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('should return true if expected parameters are present', function() {
|
|
24
|
+
expect(setupPage({ params: { propertyId: 'clientId' } })).to.be.true;
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
describe('Module initialization', function() {
|
|
29
|
+
let insertElementStub;
|
|
30
|
+
beforeEach(function() {
|
|
31
|
+
insertElementStub = sinon.stub(utils, 'insertElement');
|
|
32
|
+
});
|
|
33
|
+
afterEach(function() {
|
|
34
|
+
utils.insertElement.restore();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should subscribe to rovided Window object', function () {
|
|
38
|
+
const mockWindow = { addEventListener: sinon.spy() };
|
|
39
|
+
|
|
40
|
+
subscribeToConfiantCommFrame(mockWindow);
|
|
41
|
+
|
|
42
|
+
sinon.assert.calledOnce(mockWindow.addEventListener);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('should fire BillableEvent as a result for message in comm window', function() {
|
|
46
|
+
let listenerCallback;
|
|
47
|
+
const mockWindow = { addEventListener: (a, cb) => (listenerCallback = cb) };
|
|
48
|
+
let billableEventsCounter = 0;
|
|
49
|
+
|
|
50
|
+
events.on(CONSTANTS.EVENTS.BILLABLE_EVENT, (e) => {
|
|
51
|
+
if (e.vendor === 'confiant') {
|
|
52
|
+
billableEventsCounter++;
|
|
53
|
+
expect(e.type).to.equal('impression');
|
|
54
|
+
expect(e.billingId).to.be.a('number');
|
|
55
|
+
expect(e.auctionId).to.equal('auctionId');
|
|
56
|
+
expect(e.transactionId).to.equal('transactionId');
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
subscribeToConfiantCommFrame(mockWindow);
|
|
61
|
+
listenerCallback({
|
|
62
|
+
data: {
|
|
63
|
+
auctionId: 'auctionId',
|
|
64
|
+
transactionId: 'transactionId'
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
listenerCallback({
|
|
68
|
+
data: {
|
|
69
|
+
auctionId: 'auctionId',
|
|
70
|
+
transactionId: 'transactionId'
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
expect(billableEventsCounter).to.equal(2);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe('Sumbodule execution', function() {
|
|
79
|
+
let submoduleStub;
|
|
80
|
+
let insertElementStub;
|
|
81
|
+
beforeEach(function () {
|
|
82
|
+
submoduleStub = sinon.stub(hook, 'submodule');
|
|
83
|
+
insertElementStub = sinon.stub(utils, 'insertElement');
|
|
84
|
+
});
|
|
85
|
+
afterEach(function () {
|
|
86
|
+
utils.insertElement.restore();
|
|
87
|
+
submoduleStub.restore();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
function initModule() {
|
|
91
|
+
registerConfiantSubmodule();
|
|
92
|
+
|
|
93
|
+
expect(submoduleStub.calledOnceWith('realTimeData')).to.equal(true);
|
|
94
|
+
|
|
95
|
+
const registeredSubmoduleDefinition = submoduleStub.getCall(0).args[1];
|
|
96
|
+
expect(registeredSubmoduleDefinition).to.be.an('object');
|
|
97
|
+
expect(registeredSubmoduleDefinition).to.have.own.property('name', 'confiant');
|
|
98
|
+
expect(registeredSubmoduleDefinition).to.have.own.property('init').that.is.a('function');
|
|
99
|
+
|
|
100
|
+
return registeredSubmoduleDefinition;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
it('should register Confiant submodule', function () {
|
|
104
|
+
initModule();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
@@ -31,7 +31,11 @@ describe('Yahoo ConnectID Submodule', () => {
|
|
|
31
31
|
gdprApplies: 1,
|
|
32
32
|
consentString: 'GDPR_CONSENT_STRING'
|
|
33
33
|
},
|
|
34
|
-
uspConsent: 'USP_CONSENT_STRING'
|
|
34
|
+
uspConsent: 'USP_CONSENT_STRING',
|
|
35
|
+
gppConsent: {
|
|
36
|
+
gppString: 'header~section6~section7',
|
|
37
|
+
applicableSections: [6, 7]
|
|
38
|
+
}
|
|
35
39
|
};
|
|
36
40
|
});
|
|
37
41
|
|
|
@@ -157,7 +161,9 @@ describe('Yahoo ConnectID Submodule', () => {
|
|
|
157
161
|
'1p': '0',
|
|
158
162
|
gdpr: '1',
|
|
159
163
|
gdpr_consent: consentData.gdpr.consentString,
|
|
160
|
-
us_privacy: consentData.uspConsent
|
|
164
|
+
us_privacy: consentData.uspConsent,
|
|
165
|
+
gpp: consentData.gppConsent.gppString,
|
|
166
|
+
gpp_sid: '6%2C7'
|
|
161
167
|
};
|
|
162
168
|
const requestQueryParams = parseQS(ajaxStub.firstCall.args[0].split('?')[1]);
|
|
163
169
|
|
|
@@ -178,7 +184,9 @@ describe('Yahoo ConnectID Submodule', () => {
|
|
|
178
184
|
'1p': '0',
|
|
179
185
|
gdpr: '1',
|
|
180
186
|
gdpr_consent: consentData.gdpr.consentString,
|
|
181
|
-
us_privacy: consentData.uspConsent
|
|
187
|
+
us_privacy: consentData.uspConsent,
|
|
188
|
+
gpp: consentData.gppConsent.gppString,
|
|
189
|
+
gpp_sid: '6%2C7'
|
|
182
190
|
};
|
|
183
191
|
const requestQueryParams = parseQS(ajaxStub.firstCall.args[0].split('?')[1]);
|
|
184
192
|
|
|
@@ -201,7 +209,9 @@ describe('Yahoo ConnectID Submodule', () => {
|
|
|
201
209
|
'1p': '0',
|
|
202
210
|
gdpr: '1',
|
|
203
211
|
gdpr_consent: consentData.gdpr.consentString,
|
|
204
|
-
us_privacy: consentData.uspConsent
|
|
212
|
+
us_privacy: consentData.uspConsent,
|
|
213
|
+
gpp: consentData.gppConsent.gppString,
|
|
214
|
+
gpp_sid: '6%2C7'
|
|
205
215
|
};
|
|
206
216
|
const requestQueryParams = parseQS(ajaxStub.firstCall.args[0].split('?')[1]);
|
|
207
217
|
|
|
@@ -221,7 +231,9 @@ describe('Yahoo ConnectID Submodule', () => {
|
|
|
221
231
|
'1p': '0',
|
|
222
232
|
gdpr: '1',
|
|
223
233
|
gdpr_consent: consentData.gdpr.consentString,
|
|
224
|
-
us_privacy: consentData.uspConsent
|
|
234
|
+
us_privacy: consentData.uspConsent,
|
|
235
|
+
gpp: consentData.gppConsent.gppString,
|
|
236
|
+
gpp_sid: '6%2C7'
|
|
225
237
|
};
|
|
226
238
|
const requestQueryParams = parseQS(ajaxStub.firstCall.args[0].split('?')[1]);
|
|
227
239
|
|
|
@@ -4,6 +4,7 @@ import {BANNER, NATIVE, VIDEO} from '../../../src/mediaTypes.js';
|
|
|
4
4
|
import {server} from 'test/mocks/xhr.js';
|
|
5
5
|
|
|
6
6
|
const CODE = 'feedad';
|
|
7
|
+
const EXPECTED_ADAPTER_VERSION = '1.0.5';
|
|
7
8
|
|
|
8
9
|
describe('FeedAdAdapter', function () {
|
|
9
10
|
describe('Public API', function () {
|
|
@@ -300,6 +301,20 @@ describe('FeedAdAdapter', function () {
|
|
|
300
301
|
expect(result.data.gdprApplies).to.equal(request.gdprConsent.gdprApplies);
|
|
301
302
|
expect(result.data.consentIabTcf).to.equal(request.gdprConsent.consentString);
|
|
302
303
|
});
|
|
304
|
+
it('should include adapter and prebid version', function () {
|
|
305
|
+
let bid = {
|
|
306
|
+
code: 'feedad',
|
|
307
|
+
mediaTypes: {
|
|
308
|
+
banner: {
|
|
309
|
+
sizes: [[320, 250]]
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
params: {clientToken: 'clientToken', placementId: 'placement-id'}
|
|
313
|
+
};
|
|
314
|
+
let result = spec.buildRequests([bid], bidderRequest);
|
|
315
|
+
expect(result.data.bids[0].params.prebid_adapter_version).to.equal(EXPECTED_ADAPTER_VERSION);
|
|
316
|
+
expect(result.data.bids[0].params.prebid_sdk_version).to.equal('$prebid.version$');
|
|
317
|
+
});
|
|
303
318
|
});
|
|
304
319
|
|
|
305
320
|
describe('interpretResponse', function () {
|
|
@@ -358,14 +373,20 @@ describe('FeedAdAdapter', function () {
|
|
|
358
373
|
const pixelSync2 = {type: 'image', url: 'the pixel url 2'};
|
|
359
374
|
const iFrameSync1 = {type: 'iframe', url: 'the iFrame url 1'};
|
|
360
375
|
const iFrameSync2 = {type: 'iframe', url: 'the iFrame url 2'};
|
|
376
|
+
const mockServerResponse = (content) => {
|
|
377
|
+
if (!(content instanceof Array)) {
|
|
378
|
+
content = [content];
|
|
379
|
+
}
|
|
380
|
+
return content.map(it => ({body: it}));
|
|
381
|
+
};
|
|
361
382
|
|
|
362
383
|
it('should pass through the syncs out of the extension fields of the server response', function () {
|
|
363
|
-
const serverResponse = [{
|
|
384
|
+
const serverResponse = mockServerResponse([{
|
|
364
385
|
ext: {
|
|
365
386
|
pixels: [pixelSync1, pixelSync2],
|
|
366
387
|
iframes: [iFrameSync1, iFrameSync2],
|
|
367
388
|
}
|
|
368
|
-
}];
|
|
389
|
+
}]);
|
|
369
390
|
const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse)
|
|
370
391
|
expect(result).to.deep.equal([
|
|
371
392
|
pixelSync1,
|
|
@@ -376,7 +397,7 @@ describe('FeedAdAdapter', function () {
|
|
|
376
397
|
});
|
|
377
398
|
|
|
378
399
|
it('should concat the syncs of all responses', function () {
|
|
379
|
-
const serverResponse = [{
|
|
400
|
+
const serverResponse = mockServerResponse([{
|
|
380
401
|
ext: {
|
|
381
402
|
pixels: [pixelSync1],
|
|
382
403
|
iframes: [iFrameSync2],
|
|
@@ -391,7 +412,7 @@ describe('FeedAdAdapter', function () {
|
|
|
391
412
|
ext: {
|
|
392
413
|
pixels: [pixelSync2],
|
|
393
414
|
}
|
|
394
|
-
}];
|
|
415
|
+
}]);
|
|
395
416
|
const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse);
|
|
396
417
|
expect(result).to.deep.equal([
|
|
397
418
|
pixelSync1,
|
|
@@ -402,7 +423,7 @@ describe('FeedAdAdapter', function () {
|
|
|
402
423
|
});
|
|
403
424
|
|
|
404
425
|
it('should filter out duplicates', function () {
|
|
405
|
-
const serverResponse = [{
|
|
426
|
+
const serverResponse = mockServerResponse([{
|
|
406
427
|
ext: {
|
|
407
428
|
pixels: [pixelSync1, pixelSync1],
|
|
408
429
|
iframes: [iFrameSync2, iFrameSync2],
|
|
@@ -411,7 +432,7 @@ describe('FeedAdAdapter', function () {
|
|
|
411
432
|
ext: {
|
|
412
433
|
iframes: [iFrameSync2, iFrameSync2],
|
|
413
434
|
}
|
|
414
|
-
}];
|
|
435
|
+
}]);
|
|
415
436
|
const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse);
|
|
416
437
|
expect(result).to.deep.equal([
|
|
417
438
|
pixelSync1,
|
|
@@ -420,12 +441,12 @@ describe('FeedAdAdapter', function () {
|
|
|
420
441
|
});
|
|
421
442
|
|
|
422
443
|
it('should not include iFrame syncs if the option is disabled', function () {
|
|
423
|
-
const serverResponse = [{
|
|
444
|
+
const serverResponse = mockServerResponse([{
|
|
424
445
|
ext: {
|
|
425
446
|
pixels: [pixelSync1, pixelSync2],
|
|
426
447
|
iframes: [iFrameSync1, iFrameSync2],
|
|
427
448
|
}
|
|
428
|
-
}];
|
|
449
|
+
}]);
|
|
429
450
|
const result = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: true}, serverResponse);
|
|
430
451
|
expect(result).to.deep.equal([
|
|
431
452
|
pixelSync1,
|
|
@@ -434,12 +455,12 @@ describe('FeedAdAdapter', function () {
|
|
|
434
455
|
});
|
|
435
456
|
|
|
436
457
|
it('should not include pixel syncs if the option is disabled', function () {
|
|
437
|
-
const serverResponse = [{
|
|
458
|
+
const serverResponse = mockServerResponse([{
|
|
438
459
|
ext: {
|
|
439
460
|
pixels: [pixelSync1, pixelSync2],
|
|
440
461
|
iframes: [iFrameSync1, iFrameSync2],
|
|
441
462
|
}
|
|
442
|
-
}];
|
|
463
|
+
}]);
|
|
443
464
|
const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: false}, serverResponse);
|
|
444
465
|
expect(result).to.deep.equal([
|
|
445
466
|
iFrameSync1,
|
|
@@ -448,15 +469,40 @@ describe('FeedAdAdapter', function () {
|
|
|
448
469
|
});
|
|
449
470
|
|
|
450
471
|
it('should not include any syncs if the sync options are disabled or missing', function () {
|
|
451
|
-
const serverResponse = [{
|
|
472
|
+
const serverResponse = mockServerResponse([{
|
|
452
473
|
ext: {
|
|
453
474
|
pixels: [pixelSync1, pixelSync2],
|
|
454
475
|
iframes: [iFrameSync1, iFrameSync2],
|
|
455
476
|
}
|
|
456
|
-
}];
|
|
477
|
+
}]);
|
|
457
478
|
const result = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: false}, serverResponse);
|
|
458
479
|
expect(result).to.deep.equal([]);
|
|
459
480
|
});
|
|
481
|
+
|
|
482
|
+
it('should handle empty responses', function () {
|
|
483
|
+
const serverResponse = mockServerResponse([]);
|
|
484
|
+
const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, serverResponse)
|
|
485
|
+
expect(result).to.deep.equal([]);
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
it('should not throw if the server response is weird', function () {
|
|
489
|
+
const responses = [
|
|
490
|
+
mockServerResponse(null),
|
|
491
|
+
mockServerResponse('null'),
|
|
492
|
+
mockServerResponse(1234),
|
|
493
|
+
mockServerResponse({}),
|
|
494
|
+
mockServerResponse([{}, 123]),
|
|
495
|
+
];
|
|
496
|
+
responses.forEach(it => {
|
|
497
|
+
expect(() => spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, it)).not.to.throw;
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
it('should return empty array if the body extension is null', function () {
|
|
502
|
+
const response = mockServerResponse({ext: null});
|
|
503
|
+
const result = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}, response);
|
|
504
|
+
expect(result).to.deep.equal([]);
|
|
505
|
+
});
|
|
460
506
|
});
|
|
461
507
|
|
|
462
508
|
describe('event tracking calls', function () {
|
|
@@ -592,7 +638,8 @@ describe('FeedAdAdapter', function () {
|
|
|
592
638
|
prebid_bid_id: bidId,
|
|
593
639
|
prebid_transaction_id: transactionId,
|
|
594
640
|
referer,
|
|
595
|
-
|
|
641
|
+
prebid_adapter_version: EXPECTED_ADAPTER_VERSION,
|
|
642
|
+
prebid_sdk_version: '$prebid.version$',
|
|
596
643
|
};
|
|
597
644
|
subject(data);
|
|
598
645
|
expect(server.requests.length).to.equal(1);
|