prebid.js 5.17.0 → 6.0.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/.babelrc.js +3 -6
- package/README.md +3 -1
- package/browsers.json +1 -8
- package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
- package/modules/.submodules.json +1 -0
- package/modules/adfBidAdapter.js +21 -16
- package/modules/adgenerationBidAdapter.js +28 -4
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/admixerBidAdapter.js +11 -0
- package/modules/adtelligentBidAdapter.js +2 -1
- package/modules/airgridRtdProvider.js +1 -1
- package/modules/akamaiDapRtdProvider.js +474 -0
- package/modules/akamaiDapRtdProvider.md +47 -0
- package/modules/aolBidAdapter.js +2 -1
- package/modules/appnexusBidAdapter.js +5 -3
- package/modules/atsAnalyticsAdapter.js +67 -46
- package/modules/atsAnalyticsAdapter.md +1 -0
- package/modules/betweenBidAdapter.js +20 -3
- package/modules/bliinkBidAdapter.js +58 -32
- package/modules/bliinkBidAdapter.md +29 -6
- package/modules/browsiRtdProvider.js +106 -18
- package/modules/cleanioRtdProvider.js +192 -0
- package/modules/cleanioRtdProvider.md +59 -0
- package/modules/codefuelBidAdapter.js +183 -0
- package/modules/codefuelBidAdapter.md +111 -0
- package/modules/connectIdSystem.js +104 -0
- package/modules/connectIdSystem.md +33 -0
- package/modules/cwireBidAdapter.js +272 -0
- package/modules/cwireBidAdapter.md +43 -0
- package/modules/deepintentBidAdapter.js +106 -9
- package/modules/deepintentBidAdapter.md +36 -1
- package/modules/deltaprojectsBidAdapter.js +252 -0
- package/modules/deltaprojectsBidAdapter.md +32 -0
- package/modules/dgkeywordRtdProvider.js +0 -1
- package/modules/engageyaBidAdapter.js +157 -0
- package/modules/gridBidAdapter.js +1 -0
- package/modules/gumgumBidAdapter.js +8 -0
- package/modules/inskinBidAdapter.js +7 -3
- package/modules/ixBidAdapter.js +8 -1
- package/modules/jixieBidAdapter.js +8 -2
- package/modules/justpremiumBidAdapter.js +6 -1
- package/modules/limelightDigitalBidAdapter.js +22 -2
- package/modules/livewrappedAnalyticsAdapter.js +53 -3
- package/modules/mediakeysBidAdapter.js +2 -1
- package/modules/multibid/index.js +3 -3
- package/modules/nativoBidAdapter.js +6 -2
- package/modules/nextMillenniumBidAdapter.js +12 -3
- package/modules/oguryBidAdapter.js +36 -7
- package/modules/openxBidAdapter.js +34 -22
- package/modules/operaadsBidAdapter.js +21 -1
- package/modules/otmBidAdapter.js +146 -0
- package/modules/otmBidAdapter.md +27 -26
- package/modules/outbrainBidAdapter.js +5 -0
- package/modules/pixfutureBidAdapter.js +24 -4
- package/modules/pixfutureBidAdapter.md +127 -0
- package/modules/playwireBidAdapter.md +61 -0
- package/modules/prebidServerBidAdapter/index.js +1 -1
- package/modules/proxistoreBidAdapter.js +4 -6
- package/modules/publinkIdSystem.js +11 -6
- package/modules/pubmaticBidAdapter.js +9 -0
- package/modules/pubmaticBidAdapter.md +1 -1
- package/modules/rtdModule/index.js +2 -2
- package/modules/sonobiBidAdapter.js +7 -0
- package/modules/sortableBidAdapter.js +1 -0
- package/modules/talkadsBidAdapter.js +129 -0
- package/modules/talkadsBidAdapter.md +60 -0
- package/modules/teadsBidAdapter.js +3 -0
- package/modules/tripleliftBidAdapter.js +22 -5
- package/modules/trustxBidAdapter.js +8 -6
- package/modules/undertoneBidAdapter.js +9 -5
- package/modules/undertoneBidAdapter.md +5 -1
- package/modules/unicornBidAdapter.js +3 -3
- package/modules/userId/eids.js +18 -0
- package/modules/userId/eids.md +7 -0
- package/modules/userId/userId.md +12 -0
- package/modules/ventesBidAdapter.js +370 -0
- package/modules/ventesBidAdapter.md +94 -0
- package/modules/videobyteBidAdapter.js +13 -6
- package/modules/videobyteBidAdapter.md +49 -0
- package/modules/visxBidAdapter.js +15 -22
- package/modules/yahoosspBidAdapter.js +637 -0
- package/modules/yahoosspBidAdapter.md +795 -0
- package/modules/yieldlabBidAdapter.js +48 -3
- package/modules/yieldlabBidAdapter.md +16 -1
- package/modules/yieldmoSyntheticInventoryModule.js +46 -0
- package/modules/yieldmoSyntheticInventoryModule.md +68 -0
- package/package.json +1 -1
- package/src/adapterManager.js +5 -0
- package/src/adapters/bidderFactory.js +4 -3
- package/src/auction.js +11 -11
- package/src/constants.json +1 -0
- package/src/secureCreatives.js +6 -7
- package/src/targeting.js +11 -9
- package/test/spec/modules/adfBidAdapter_spec.js +83 -29
- package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
- package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
- package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
- package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
- package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
- package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
- package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
- package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
- package/test/spec/modules/connectIdSystem_spec.js +189 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
- package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
- package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
- package/test/spec/modules/gumgumBidAdapter_spec.js +5 -1
- package/test/spec/modules/ixBidAdapter_spec.js +13 -3
- package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
- package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
- package/test/spec/modules/multibid_spec.js +31 -31
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
- package/test/spec/modules/openxBidAdapter_spec.js +85 -13
- package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
- package/test/spec/modules/otmBidAdapter_spec.js +67 -0
- package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
- package/test/spec/modules/publinkIdSystem_spec.js +6 -6
- package/test/spec/modules/pubmaticBidAdapter_spec.js +39 -1
- package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
- package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
- package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
- package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +3 -3
- package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
- package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
- package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
- package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
- package/test/spec/modules/visxBidAdapter_spec.js +48 -4
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
- package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
- package/test/spec/unit/core/adapterManager_spec.js +32 -0
- package/test/spec/unit/core/bidderFactory_spec.js +61 -1
- package/test/spec/unit/pbjs_api_spec.js +37 -2
- package/test/spec/unit/secureCreatives_spec.js +54 -25
- package/wdio.conf.js +1 -1
- package/modules/turktelekomBidAdapter.md +0 -49
- package/yarn.lock +0 -13122
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import * as utils from '../../../src/utils.js';
|
|
3
|
+
import {
|
|
4
|
+
spec,
|
|
5
|
+
CW_PAGE_VIEW_ID,
|
|
6
|
+
ENDPOINT_URL,
|
|
7
|
+
RENDERER_URL,
|
|
8
|
+
} from '../../../modules/cwireBidAdapter.js';
|
|
9
|
+
import * as prebidGlobal from 'src/prebidGlobal.js';
|
|
10
|
+
|
|
11
|
+
// ------------------------------------
|
|
12
|
+
// Bid Request Builder
|
|
13
|
+
// ------------------------------------
|
|
14
|
+
|
|
15
|
+
const BID_DEFAULTS = {
|
|
16
|
+
request: {
|
|
17
|
+
bidder: 'cwire',
|
|
18
|
+
auctionId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
|
19
|
+
transactionId: 'txaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
|
20
|
+
bidId: 'bid123445',
|
|
21
|
+
bidderRequestId: 'brid12345',
|
|
22
|
+
code: 'original-div',
|
|
23
|
+
},
|
|
24
|
+
params: {
|
|
25
|
+
placementId: 123456,
|
|
26
|
+
pageId: 777,
|
|
27
|
+
adUnitElementId: 'target-div'
|
|
28
|
+
},
|
|
29
|
+
sizes: [[300, 250], [1, 1]],
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const BidderRequestBuilder = function BidderRequestBuilder(options) {
|
|
33
|
+
const defaults = {
|
|
34
|
+
bidderCode: 'cwire',
|
|
35
|
+
auctionId: BID_DEFAULTS.request.auctionId,
|
|
36
|
+
bidderRequestId: BID_DEFAULTS.request.bidderRequestId,
|
|
37
|
+
transactionId: BID_DEFAULTS.request.transactionId,
|
|
38
|
+
timeout: 3000,
|
|
39
|
+
refererInfo: {
|
|
40
|
+
numIframes: 0,
|
|
41
|
+
reachedTop: true,
|
|
42
|
+
referer: 'http://test.io/index.html?pbjs_debug=true'
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const request = {
|
|
47
|
+
...defaults,
|
|
48
|
+
...options
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
this.build = () => request;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const BidRequestBuilder = function BidRequestBuilder(options, deleteKeys) {
|
|
55
|
+
const defaults = JSON.parse(JSON.stringify(BID_DEFAULTS));
|
|
56
|
+
|
|
57
|
+
const request = {
|
|
58
|
+
...defaults.request,
|
|
59
|
+
...options
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
if (request && utils.isArray(deleteKeys)) {
|
|
63
|
+
deleteKeys.forEach((k) => {
|
|
64
|
+
delete request[k];
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
this.withParams = (options, deleteKeys) => {
|
|
69
|
+
request.params = {
|
|
70
|
+
...defaults.params,
|
|
71
|
+
...options
|
|
72
|
+
};
|
|
73
|
+
if (request && utils.isArray(deleteKeys)) {
|
|
74
|
+
deleteKeys.forEach((k) => {
|
|
75
|
+
delete request.params[k];
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
return this;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
this.build = () => request;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
describe('C-WIRE bid adapter', () => {
|
|
85
|
+
let utilsMock;
|
|
86
|
+
let sandbox;
|
|
87
|
+
|
|
88
|
+
beforeEach(() => {
|
|
89
|
+
utilsMock = sinon.mock(utils);
|
|
90
|
+
sandbox = sinon.createSandbox();
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
afterEach(() => {
|
|
94
|
+
utilsMock.restore();
|
|
95
|
+
sandbox.restore();
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// START TESTING
|
|
99
|
+
describe('C-WIRE - isBidRequestValid', function () {
|
|
100
|
+
it('should return true when required params found', function () {
|
|
101
|
+
const bid01 = new BidRequestBuilder().withParams().build();
|
|
102
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(true);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('should fail if there is no placementId', function () {
|
|
106
|
+
const bid01 = new BidRequestBuilder().withParams().build();
|
|
107
|
+
delete bid01.params.placementId
|
|
108
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(false);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should fail if invalid placementId type', function () {
|
|
112
|
+
const bid01 = new BidRequestBuilder().withParams().build();
|
|
113
|
+
delete bid01.params.placementId;
|
|
114
|
+
bid01.placementId = '322';
|
|
115
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(false);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('should fail if there is no pageId', function () {
|
|
119
|
+
const bid01 = new BidRequestBuilder().withParams().build();
|
|
120
|
+
delete bid01.params.pageId
|
|
121
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(false);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it('should fail if invalid pageId type', function () {
|
|
125
|
+
const bid01 = new BidRequestBuilder().withParams().build();
|
|
126
|
+
delete bid01.params.pageId;
|
|
127
|
+
bid01.params.pageId = '3320';
|
|
128
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(false);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('should use params.adUnitElementId if provided', function () {
|
|
132
|
+
const bid01 = new BidRequestBuilder().withParams().build();
|
|
133
|
+
|
|
134
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(true);
|
|
135
|
+
expect(bid01.params.adUnitElementId).to.exist;
|
|
136
|
+
expect(bid01.params.adUnitElementId).to.equal('target-div');
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('should use default adUnitCode if no adUnitElementId provided', function () {
|
|
140
|
+
const bid01 = new BidRequestBuilder().withParams({}, ['adUnitElementId']).build();
|
|
141
|
+
expect(spec.isBidRequestValid(bid01)).to.equal(true);
|
|
142
|
+
expect(bid01.params.adUnitElementId).to.exist;
|
|
143
|
+
expect(bid01.params.adUnitElementId).to.equal('original-div');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
describe('C-WIRE - buildRequests()', function () {
|
|
148
|
+
it('creates a valid request', function () {
|
|
149
|
+
const bid01 = new BidRequestBuilder({
|
|
150
|
+
mediaTypes: {
|
|
151
|
+
banner: {
|
|
152
|
+
sizes: [[1, 1]],
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}).withParams().build();
|
|
156
|
+
const bidderRequest01 = new BidderRequestBuilder().build();
|
|
157
|
+
|
|
158
|
+
const requests = spec.buildRequests([bid01], bidderRequest01);
|
|
159
|
+
expect(requests.data.slots.length).to.equal(1);
|
|
160
|
+
expect(requests.data.cwid).to.be.null;
|
|
161
|
+
expect(requests.data.slots[0].sizes[0]).to.equal('1x1');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
describe('C-WIRE - interpretResponse()', function () {
|
|
166
|
+
const serverResponse = {
|
|
167
|
+
body: {
|
|
168
|
+
bids: [{
|
|
169
|
+
html: '<div><h2>AD CONTENT</h2></div>',
|
|
170
|
+
currency: 'CHF',
|
|
171
|
+
cpm: 43.37,
|
|
172
|
+
dimensions: [1, 1],
|
|
173
|
+
netRevenue: true,
|
|
174
|
+
creativeId: '1337',
|
|
175
|
+
requestId: BID_DEFAULTS.request.bidId,
|
|
176
|
+
ttl: 3500,
|
|
177
|
+
}],
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const expectedResponse = [{
|
|
182
|
+
ad: JSON.parse(JSON.stringify(serverResponse.body.bids[0].html)),
|
|
183
|
+
bidderCode: BID_DEFAULTS.request.bidder,
|
|
184
|
+
cpm: JSON.parse(JSON.stringify(serverResponse.body.bids[0].cpm)),
|
|
185
|
+
creativeId: JSON.parse(JSON.stringify(serverResponse.body.bids[0].creativeId)),
|
|
186
|
+
currency: JSON.parse(JSON.stringify(serverResponse.body.bids[0].currency)),
|
|
187
|
+
height: JSON.parse(JSON.stringify(serverResponse.body.bids[0].dimensions[0])),
|
|
188
|
+
width: JSON.parse(JSON.stringify(serverResponse.body.bids[0].dimensions[1])),
|
|
189
|
+
netRevenue: JSON.parse(JSON.stringify(serverResponse.body.bids[0].netRevenue)),
|
|
190
|
+
requestId: JSON.parse(JSON.stringify(serverResponse.body.bids[0].requestId)),
|
|
191
|
+
ttl: JSON.parse(JSON.stringify(serverResponse.body.bids[0].ttl)),
|
|
192
|
+
meta: {
|
|
193
|
+
advertiserDomains: [],
|
|
194
|
+
},
|
|
195
|
+
mediaType: 'banner',
|
|
196
|
+
}]
|
|
197
|
+
|
|
198
|
+
it('correctly parses response', function () {
|
|
199
|
+
const bid01 = new BidRequestBuilder({
|
|
200
|
+
mediaTypes: {
|
|
201
|
+
banner: {
|
|
202
|
+
sizes: [[1, 1]],
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}).withParams().build();
|
|
206
|
+
|
|
207
|
+
const bidderRequest01 = new BidderRequestBuilder().build();
|
|
208
|
+
const requests = spec.buildRequests([bid01], bidderRequest01);
|
|
209
|
+
|
|
210
|
+
const response = spec.interpretResponse(serverResponse, requests);
|
|
211
|
+
expect(response).to.deep.equal(expectedResponse);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('attaches renderer', function () {
|
|
215
|
+
const bid01 = new BidRequestBuilder({
|
|
216
|
+
mediaTypes: {
|
|
217
|
+
video: {
|
|
218
|
+
playerSize: [[640, 480]],
|
|
219
|
+
context: 'outstream',
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}).withParams().build();
|
|
223
|
+
const bidderRequest01 = new BidderRequestBuilder().build();
|
|
224
|
+
|
|
225
|
+
const _serverResponse = utils.deepClone(serverResponse);
|
|
226
|
+
_serverResponse.body.bids[0].vastXml = '<xml></xml>';
|
|
227
|
+
|
|
228
|
+
const _expectedResponse = utils.deepClone(expectedResponse);
|
|
229
|
+
_expectedResponse[0].mediaType = 'video';
|
|
230
|
+
_expectedResponse[0].videoScript = JSON.parse(JSON.stringify(_serverResponse.body.bids[0].html));
|
|
231
|
+
_expectedResponse[0].vastXml = JSON.parse(JSON.stringify(_serverResponse.body.bids[0].vastXml));
|
|
232
|
+
delete _expectedResponse[0].ad;
|
|
233
|
+
|
|
234
|
+
const requests = spec.buildRequests([bid01], bidderRequest01);
|
|
235
|
+
expect(requests.data.slots[0].sizes).to.deep.equal(['640x480']);
|
|
236
|
+
|
|
237
|
+
const response = spec.interpretResponse(_serverResponse, requests);
|
|
238
|
+
expect(response[0].renderer).to.exist;
|
|
239
|
+
expect(response[0].renderer.url).to.equals(RENDERER_URL);
|
|
240
|
+
expect(response[0].renderer.loaded).to.equals(false);
|
|
241
|
+
|
|
242
|
+
delete response[0].renderer;
|
|
243
|
+
expect(response).to.deep.equal(_expectedResponse);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
});
|
|
@@ -3,8 +3,8 @@ import {spec} from 'modules/deepintentBidAdapter.js';
|
|
|
3
3
|
import * as utils from '../../../src/utils.js';
|
|
4
4
|
|
|
5
5
|
describe('Deepintent adapter', function () {
|
|
6
|
-
let request;
|
|
7
|
-
let bannerResponse;
|
|
6
|
+
let request, videoBidRequests;
|
|
7
|
+
let bannerResponse, videoBidResponse, invalidResponse;
|
|
8
8
|
|
|
9
9
|
beforeEach(function () {
|
|
10
10
|
request = [
|
|
@@ -32,6 +32,38 @@ describe('Deepintent adapter', function () {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
];
|
|
35
|
+
videoBidRequests =
|
|
36
|
+
[
|
|
37
|
+
{
|
|
38
|
+
code: 'video1',
|
|
39
|
+
mediaTypes: {
|
|
40
|
+
video: {
|
|
41
|
+
playerSize: [640, 480],
|
|
42
|
+
context: 'instream'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
bidder: 'deepintent',
|
|
46
|
+
bidId: '22bddb28db77d',
|
|
47
|
+
params: {
|
|
48
|
+
tagId: '100013',
|
|
49
|
+
video: {
|
|
50
|
+
mimes: ['video/mp4', 'video/x-flv'],
|
|
51
|
+
skippable: true,
|
|
52
|
+
testwrongparam: 3,
|
|
53
|
+
testwrongparam1: 'wrong',
|
|
54
|
+
minduration: 5,
|
|
55
|
+
maxduration: 30,
|
|
56
|
+
startdelay: 5,
|
|
57
|
+
playbackmethod: [1, 3],
|
|
58
|
+
api: [1, 2],
|
|
59
|
+
protocols: [2, 3],
|
|
60
|
+
battr: [13, 14],
|
|
61
|
+
minbitrate: 10,
|
|
62
|
+
maxbitrate: 10
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
];
|
|
35
67
|
bannerResponse = {
|
|
36
68
|
'body': {
|
|
37
69
|
'id': '303e1fae-9677-41e2-9a92-15a23445363f',
|
|
@@ -53,7 +85,47 @@ describe('Deepintent adapter', function () {
|
|
|
53
85
|
}],
|
|
54
86
|
'bidid': '0b08b09f-aaa1-4c14-b1c8-7debb1a7c1cd'
|
|
55
87
|
}
|
|
56
|
-
}
|
|
88
|
+
};
|
|
89
|
+
invalidResponse = {
|
|
90
|
+
'body': {
|
|
91
|
+
'id': '303e1fae-9677-41e2-9a92-15a23445363f',
|
|
92
|
+
'seatbid': [{
|
|
93
|
+
'bid': [{
|
|
94
|
+
'id': '11447bb1-a266-470d-b0d7-8810f5b1b75f',
|
|
95
|
+
'impid': 'a7e92b9b-d9db-4de8-9c3f-f90737335445',
|
|
96
|
+
'price': 0.6,
|
|
97
|
+
'adid': '10001',
|
|
98
|
+
'adm': 'invalid response',
|
|
99
|
+
'adomain': ['deepintent.com'],
|
|
100
|
+
'cid': '103389',
|
|
101
|
+
'crid': '13665',
|
|
102
|
+
'w': 300,
|
|
103
|
+
'h': 250,
|
|
104
|
+
'dealId': 'dee_12312stdszzsx'
|
|
105
|
+
}],
|
|
106
|
+
'seat': '10000'
|
|
107
|
+
}],
|
|
108
|
+
'bidid': '0b08b09f-aaa1-4c14-b1c8-7debb1a7c1cd'
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
videoBidResponse = {
|
|
112
|
+
'body': {
|
|
113
|
+
'id': '93D3BAD6-E2E2-49FB-9D89-920B1761C865',
|
|
114
|
+
'seatbid': [{
|
|
115
|
+
'bid': [{
|
|
116
|
+
'id': '74858439-49D7-4169-BA5D-44A046315B2F',
|
|
117
|
+
'impid': '22bddb28db77d',
|
|
118
|
+
'price': 1.3,
|
|
119
|
+
'adm': '<VAST version="3.0"><Ad id="601364"><InLine><AdSystem>Acudeo Compatible</AdSystem><AdTitle>VAST 2.0 Instream Test 1</AdTitle><Description>VAST 2.0 Instream Test 1</Description><Impression><![CDATA[http://172.16.4.213/AdServer/AdDisplayTrackerServlet?operId=1&pubId=5890&siteId=47163&adId=1405268&adType=13&adServerId=243&kefact=70.000000&kaxefact=70.000000&kadNetFrequecy=0&kadwidth=0&kadheight=0&kadsizeid=97&kltstamp=1529929473&indirectAdId=0&adServerOptimizerId=2&ranreq=0.1&kpbmtpfact=100.000000&dcId=1&tldId=0&passback=0&svr=MADS1107&ekefact=Ad8wW91TCwCmdG0jlfjXn7Tyzh20hnTVx-m5DoNSep-RXGDr&ekaxefact=Ad8wWwRUCwAGir4Zzl1eF0bKiC-qrCV0D0yp_eE7YizB_BQk&ekpbmtpfact=Ad8wWxRUCwD7qgzwwPE2LnS5-Ou19uO5amJl1YT6-XVFvQ41&imprId=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&oid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&crID=creative-1_1_2&ucrid=160175026529250297&campaignId=17050&creativeId=0&pctr=0.000000&wDSPByrId=511&wDspId=6&wbId=0&wrId=0&wAdvID=3170&isRTB=1&rtbId=EBCA079F-8D7C-45B8-B733-92951F670AA1&pmZoneId=zone1&pageURL=www.yahoo.com&lpu=ae.com]]></Impression><Impression>https://dsptracker.com/{PSPM}</Impression><Error><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&er=[ERRORCODE]]]></Error><Error><![CDATA[https://Errortrack.com?p=1234&er=[ERRORCODE]]]></Error><Creatives><Creative AdID="601364"><Linear skipoffset="20%"><TrackingEvents><Tracking event="close"><![CDATA[https://mytracking.com/linear/close]]></Tracking><Tracking event="skip"><![CDATA[https://mytracking.com/linear/skip]]></Tracking><Tracking event="creativeView"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=1]]></Tracking><Tracking event="start"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=2]]></Tracking><Tracking event="midpoint"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=3]]></Tracking><Tracking event="firstQuartile"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=4]]></Tracking><Tracking event="thirdQuartile"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=5]]></Tracking><Tracking event="complete"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=6]]></Tracking></TrackingEvents><Duration>00:00:04</Duration><VideoClicks><ClickTracking><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=99]]></ClickTracking><ClickThrough>https://www.deepintent.com</ClickThrough></VideoClicks><MediaFiles><MediaFile delivery="progressive" type="video/mp4" bitrate="500" width="400" height="300" scalable="true" maintainAspectRatio="true"><![CDATA[https://staging.deepintent.com:8443/video/Shashank/mediaFileHost/media/mp4-sample-2.mp4]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>',
|
|
120
|
+
'h': 250,
|
|
121
|
+
'w': 300,
|
|
122
|
+
'ext': {
|
|
123
|
+
'deal_channel': 6
|
|
124
|
+
}
|
|
125
|
+
}]
|
|
126
|
+
}]
|
|
127
|
+
}
|
|
128
|
+
};
|
|
57
129
|
});
|
|
58
130
|
|
|
59
131
|
describe('validations', function () {
|
|
@@ -88,6 +160,45 @@ describe('Deepintent adapter', function () {
|
|
|
88
160
|
isValid = spec.isBidRequestValid(bid);
|
|
89
161
|
expect(isValid).to.equals(false);
|
|
90
162
|
});
|
|
163
|
+
it('should check for context if video is present', function() {
|
|
164
|
+
let bid = {
|
|
165
|
+
bidder: 'deepintent',
|
|
166
|
+
params: {
|
|
167
|
+
tagId: '12345',
|
|
168
|
+
video: {
|
|
169
|
+
mimes: ['video/mp4', 'video/x-flv'],
|
|
170
|
+
skippable: true,
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
mediaTypes: {
|
|
174
|
+
video: {
|
|
175
|
+
playerSize: [640, 480],
|
|
176
|
+
context: 'instream'
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
isValid = spec.isBidRequestValid(bid);
|
|
181
|
+
expect(isValid).to.equal(true);
|
|
182
|
+
});
|
|
183
|
+
it('should error out if context is not present and is Video', function() {
|
|
184
|
+
let bid = {
|
|
185
|
+
bidder: 'deepintent',
|
|
186
|
+
params: {
|
|
187
|
+
tagId: '12345',
|
|
188
|
+
video: {
|
|
189
|
+
mimes: ['video/mp4', 'video/x-flv'],
|
|
190
|
+
skippable: true,
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
mediaTypes: {
|
|
194
|
+
video: {
|
|
195
|
+
playerSize: [640, 480]
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
isValid = spec.isBidRequestValid(bid);
|
|
200
|
+
expect(isValid).to.equal(false);
|
|
201
|
+
})
|
|
91
202
|
});
|
|
92
203
|
describe('request check', function () {
|
|
93
204
|
it('unmutaable bid request check', function () {
|
|
@@ -179,6 +290,28 @@ describe('Deepintent adapter', function () {
|
|
|
179
290
|
expect(data2.regs).to.equal(undefined);
|
|
180
291
|
expect(data2.user.ext).to.equal(undefined);
|
|
181
292
|
});
|
|
293
|
+
it('bid request check: Video params check ', function() {
|
|
294
|
+
let bRequest = spec.buildRequests(videoBidRequests);
|
|
295
|
+
let data = JSON.parse(bRequest.data);
|
|
296
|
+
expect(data.imp[0].video).to.be.a('object');
|
|
297
|
+
expect(data.imp[0].video.minduration).to.be.a('number');
|
|
298
|
+
expect(data.imp[0].video.maxduration).to.be.a('number');
|
|
299
|
+
expect(data.imp[0].video.startdelay).to.be.a('number');
|
|
300
|
+
expect(data.imp[0].video.playbackmethod).to.be.an('array');
|
|
301
|
+
expect(data.imp[0].video.api).to.be.an('array');
|
|
302
|
+
expect(data.imp[0].video.protocols).to.be.an('array');
|
|
303
|
+
expect(data.imp[0].video.battr).to.be.an('array');
|
|
304
|
+
expect(data.imp[0].video.minbitrate).to.be.a('number');
|
|
305
|
+
expect(data.imp[0].video.maxbitrate).to.be.a('number');
|
|
306
|
+
expect(data.imp[0].video.w).to.be.a('number');
|
|
307
|
+
});
|
|
308
|
+
it('bid request param check : invalid video params', function() {
|
|
309
|
+
let bRequest = spec.buildRequests(videoBidRequests);
|
|
310
|
+
let data = JSON.parse(bRequest.data);
|
|
311
|
+
expect(data.imp[0].video).to.be.a('object');
|
|
312
|
+
expect(data.imp[0].video.testwrongparam).to.equal(undefined);
|
|
313
|
+
expect(data.imp[0].video.testwrongparam1).to.equal(undefined);
|
|
314
|
+
});
|
|
182
315
|
});
|
|
183
316
|
describe('user sync check', function () {
|
|
184
317
|
it('user sync url check', function () {
|
|
@@ -202,10 +335,27 @@ describe('Deepintent adapter', function () {
|
|
|
202
335
|
expect(bResponse[0].height).to.equal(bannerResponse.body.seatbid[0].bid[0].h);
|
|
203
336
|
expect(bResponse[0].currency).to.equal('USD');
|
|
204
337
|
expect(bResponse[0].netRevenue).to.equal(false);
|
|
338
|
+
expect(bResponse[0].mediaType).to.equal('banner');
|
|
205
339
|
expect(bResponse[0].meta.advertiserDomains).to.deep.equal(['deepintent.com']);
|
|
206
340
|
expect(bResponse[0].ttl).to.equal(300);
|
|
207
341
|
expect(bResponse[0].creativeId).to.equal(bannerResponse.body.seatbid[0].bid[0].crid);
|
|
208
342
|
expect(bResponse[0].dealId).to.equal(bannerResponse.body.seatbid[0].bid[0].dealId);
|
|
209
343
|
});
|
|
344
|
+
it('bid response check: valid video bid response', function() {
|
|
345
|
+
let request = spec.buildRequests(videoBidRequests);
|
|
346
|
+
let response = spec.interpretResponse(videoBidResponse, request);
|
|
347
|
+
expect(response[0].mediaType).to.equal('video');
|
|
348
|
+
expect(response[0].vastXml).to.not.equal(undefined);
|
|
349
|
+
});
|
|
350
|
+
it('invalid bid response check ', function() {
|
|
351
|
+
let bRequest = spec.buildRequests(request);
|
|
352
|
+
let response = spec.interpretResponse(invalidResponse, bRequest);
|
|
353
|
+
expect(response[0].mediaType).to.equal(undefined);
|
|
354
|
+
});
|
|
355
|
+
it('invalid bid response check ', function() {
|
|
356
|
+
let bRequest = spec.buildRequests(videoBidRequests);
|
|
357
|
+
let response = spec.interpretResponse(invalidResponse, bRequest);
|
|
358
|
+
expect(response[0].mediaType).to.equal(undefined);
|
|
359
|
+
});
|
|
210
360
|
})
|
|
211
361
|
});
|