prebid.js 5.16.0 → 5.20.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/.devcontainer/Dockerfile +11 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.devcontainer/postCreate.sh +6 -0
- package/browsers.json +1 -0
- 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 +3 -1
- package/modules/admixerBidAdapter.js +11 -0
- package/modules/adnuntiusBidAdapter.js +1 -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 +89 -63
- 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/glimpseBidAdapter.js +160 -48
- package/modules/glimpseBidAdapter.md +11 -74
- package/modules/gridBidAdapter.js +1 -0
- package/modules/gridNMBidAdapter.js +7 -6
- package/modules/gumgumBidAdapter.js +16 -2
- package/modules/iasRtdProvider.js +83 -67
- 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/kargoBidAdapter.js +14 -7
- package/modules/kargoBidAdapter.md +20 -0
- package/modules/limelightDigitalBidAdapter.js +22 -2
- package/modules/livewrappedAnalyticsAdapter.js +53 -3
- package/modules/mediakeysBidAdapter.js +405 -14
- package/modules/mediakeysBidAdapter.md +108 -0
- package/modules/multibid/index.js +3 -3
- package/modules/mytargetBidAdapter.js +112 -0
- package/modules/nativoBidAdapter.js +48 -29
- package/modules/nativoBidAdapter.md +0 -1
- package/modules/nextMillenniumBidAdapter.js +12 -3
- package/modules/nextrollBidAdapter.js +375 -0
- package/modules/nobidBidAdapter.js +2 -1
- 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 +17 -7
- package/modules/publinkIdSystem.md +7 -2
- package/modules/pubmaticBidAdapter.js +22 -6
- package/modules/pubmaticBidAdapter.md +1 -1
- package/modules/relaidoBidAdapter.js +8 -2
- package/modules/rtdModule/index.js +2 -2
- package/modules/sharethroughBidAdapter.js +12 -19
- package/modules/slimcutBidAdapter.js +121 -0
- package/modules/sonobiBidAdapter.js +7 -0
- package/modules/sortableBidAdapter.js +1 -0
- package/modules/spotxBidAdapter.js +15 -1
- package/modules/sspBCBidAdapter.js +207 -12
- package/modules/sspBCBidAdapter.md +1 -1
- package/modules/talkadsBidAdapter.js +129 -0
- package/modules/talkadsBidAdapter.md +60 -0
- package/modules/tappxBidAdapter.js +6 -5
- package/modules/teadsBidAdapter.js +3 -0
- package/modules/tripleliftBidAdapter.js +22 -5
- package/modules/trustxBidAdapter.js +17 -11
- 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/vidoomyBidAdapter.js +20 -12
- 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/yieldmoBidAdapter.js +20 -6
- 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/.eslintrc.js +2 -1
- package/test/spec/modules/adfBidAdapter_spec.js +83 -29
- package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
- 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 +77 -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/glimpseBidAdapter_spec.js +302 -204
- package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
- package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
- package/test/spec/modules/iasRtdProvider_spec.js +71 -6
- 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/mediakeysBidAdapter_spec.js +406 -51
- package/test/spec/modules/multibid_spec.js +31 -31
- package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
- package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
- package/test/spec/modules/nobidBidAdapter_spec.js +65 -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 +34 -15
- package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
- package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
- package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
- package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
- package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
- 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 +38 -5
- 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/yieldmoBidAdapter_spec.js +30 -9
- 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/modules/turktelekomBidAdapter.md +0 -49
|
@@ -1,207 +1,305 @@
|
|
|
1
|
-
import { expect } from 'chai'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { expect } from 'chai'
|
|
2
|
+
import { newBidder } from 'src/adapters/bidderFactory.js'
|
|
3
|
+
import { spec } from 'modules/glimpseBidAdapter.js'
|
|
4
|
+
|
|
5
|
+
const ENDPOINT = 'https://api.glimpsevault.io/ads/serving/public/v1/prebid'
|
|
6
|
+
|
|
7
|
+
const mock = {
|
|
8
|
+
bidRequest: {
|
|
9
|
+
bidder: 'glimpse',
|
|
10
|
+
bidId: '26a80b71cfd671',
|
|
11
|
+
bidderRequestId: '133baeded6ac94',
|
|
12
|
+
auctionId: '96692a73-307b-44b8-8e4f-ddfb40341570',
|
|
13
|
+
adUnitCode: 'banner-div-a',
|
|
14
|
+
sizes: [[300, 250]],
|
|
15
|
+
params: {
|
|
16
|
+
placementId: 'glimpse-demo-300x250',
|
|
17
|
+
},
|
|
15
18
|
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
gdprApplies: true,
|
|
33
|
-
vendorData: {},
|
|
19
|
+
bidderRequest: {
|
|
20
|
+
bidderCode: 'glimpse',
|
|
21
|
+
bidderRequestId: '133baeded6ac94',
|
|
22
|
+
auctionId: '96692a73-307b-44b8-8e4f-ddfb40341570',
|
|
23
|
+
timeout: 3000,
|
|
24
|
+
gdprConsent: {
|
|
25
|
+
consentString: 'COzP517OzP517AcABBENAlCsAP_AAAAAAAwIF8NX-T5eL2vju2Zdt7JEaYwfZxyigOgThgQIsW8NwIeFbBoGP2EgHBG4JCQAGBAkkgCBAQMsHGBcCQAAgIgRiRKMYE2MjzNKBJJAigkbc0FACDVunsHS2ZCY70-8O__bPAviADAvUC-AAAAA.YAAAAAAAAAAA',
|
|
26
|
+
vendorData: {},
|
|
27
|
+
gdprApplies: true,
|
|
28
|
+
},
|
|
29
|
+
refererInfo: {
|
|
30
|
+
numIframes: 0,
|
|
31
|
+
reachedTop: true,
|
|
32
|
+
referer: 'https://demo.glimpseprotocol.io/prebid/desktop',
|
|
33
|
+
stack: ['https://demo.glimpseprotocol.io/prebid/desktop'],
|
|
34
|
+
},
|
|
34
35
|
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
bidResponse: {
|
|
37
|
+
auth: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZWxsbyI6IndvcmxkISJ9.1p6T0ORhJ6riLprhXBGdzRhG3Q1egM27uFhPGNapPxs',
|
|
38
|
+
data: {
|
|
39
|
+
bids: [
|
|
40
|
+
{
|
|
41
|
+
bidder: 'glimpse',
|
|
42
|
+
requestId: '133baeded6ac94',
|
|
43
|
+
creativeId: 'glimpse-demo-300x250',
|
|
44
|
+
adUnitCode: 'banner-div-a',
|
|
45
|
+
currency: 'GBP',
|
|
46
|
+
ad: '<div>Hello, World!</div>',
|
|
47
|
+
width: 300,
|
|
48
|
+
height: 250,
|
|
49
|
+
cpm: 1.04,
|
|
50
|
+
pbAg: '1.04',
|
|
51
|
+
pbDg: '1.04',
|
|
52
|
+
pbHg: '1.04',
|
|
53
|
+
pbLg: '1.00',
|
|
54
|
+
pbMg: '1.05',
|
|
55
|
+
netRevenue: true,
|
|
56
|
+
mediaType: 'banner',
|
|
57
|
+
ttl: 300,
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
},
|
|
40
61
|
},
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
expect(
|
|
167
|
-
expect(
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const bids = spec.interpretResponse(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const getBidRequest = () => getDeepCopy(mock.bidRequest)
|
|
65
|
+
const getBidderRequest = () => ({
|
|
66
|
+
bids: [getBidRequest()],
|
|
67
|
+
...getDeepCopy(mock.bidderRequest),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
const getBidResponseHelper = () => getDeepCopy(mock.bidResponse)
|
|
71
|
+
const getBidResponse = () => ({
|
|
72
|
+
body: getBidResponseHelper(),
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
function getDeepCopy(object) {
|
|
76
|
+
return JSON.parse(JSON.stringify(object))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
describe('GlimpseProtocolAdapter', () => {
|
|
80
|
+
const glimpseAdapter = newBidder(spec)
|
|
81
|
+
|
|
82
|
+
describe('Inherited functions', () => {
|
|
83
|
+
it('Functions exist and are valid types', () => {
|
|
84
|
+
expect(glimpseAdapter.callBids).to.exist.and.to.be.a('function')
|
|
85
|
+
expect(glimpseAdapter.getSpec).to.exist.and.to.be.a('function')
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
describe('isBidRequestValid', () => {
|
|
90
|
+
it('Returns true when a bid request has a valid placement id', () => {
|
|
91
|
+
const bidRequest = getBidRequest()
|
|
92
|
+
|
|
93
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
94
|
+
expect(isValidBidRequest).to.be.true
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('Returns false when params are empty', () => {
|
|
98
|
+
const bidRequest = getBidRequest()
|
|
99
|
+
bidRequest.params = {}
|
|
100
|
+
|
|
101
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
102
|
+
expect(isValidBidRequest).to.be.false
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('Returns false when params are null', () => {
|
|
106
|
+
const bidRequest = getBidRequest()
|
|
107
|
+
bidRequest.params = null
|
|
108
|
+
|
|
109
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
110
|
+
expect(isValidBidRequest).to.be.false
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
it('Returns false when params are undefined', () => {
|
|
114
|
+
const bidRequest = getBidRequest()
|
|
115
|
+
delete bidRequest.params
|
|
116
|
+
|
|
117
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
118
|
+
expect(isValidBidRequest).to.be.false
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
it('Returns false when params are invalid type', () => {
|
|
122
|
+
const bidRequest = getBidRequest()
|
|
123
|
+
bidRequest.params = 123
|
|
124
|
+
|
|
125
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
126
|
+
expect(isValidBidRequest).to.be.false
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it('Returns false when placement id is empty', () => {
|
|
130
|
+
const bidRequest = getBidRequest()
|
|
131
|
+
bidRequest.params.placementId = ''
|
|
132
|
+
|
|
133
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
134
|
+
expect(isValidBidRequest).to.be.false
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('Returns false when placement id is null', () => {
|
|
138
|
+
const bidRequest = getBidRequest()
|
|
139
|
+
bidRequest.params.placementId = null
|
|
140
|
+
|
|
141
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
142
|
+
expect(isValidBidRequest).to.be.false
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it('Returns false when placement id is undefined', () => {
|
|
146
|
+
const bidRequest = getBidRequest()
|
|
147
|
+
delete bidRequest.params.placementId
|
|
148
|
+
|
|
149
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
150
|
+
expect(isValidBidRequest).to.be.false
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
it('Returns false when placement id has an invalid type', () => {
|
|
154
|
+
const bidRequest = getBidRequest()
|
|
155
|
+
bidRequest.params.placementId = 123
|
|
156
|
+
|
|
157
|
+
const isValidBidRequest = spec.isBidRequestValid(bidRequest)
|
|
158
|
+
expect(isValidBidRequest).to.be.false
|
|
159
|
+
})
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
describe('buildRequests', () => {
|
|
163
|
+
const bidRequests = [getBidRequest()]
|
|
164
|
+
const bidderRequest = getBidderRequest()
|
|
165
|
+
|
|
166
|
+
it('Adds GDPR consent', () => {
|
|
167
|
+
const request = spec.buildRequests(bidRequests, bidderRequest)
|
|
168
|
+
const payload = JSON.parse(request.data)
|
|
169
|
+
const expected = bidderRequest.gdprConsent.consentString
|
|
170
|
+
|
|
171
|
+
expect(payload.data.gdprConsent).to.exist
|
|
172
|
+
expect(payload.data.gdprConsent.gdprApplies).to.be.true
|
|
173
|
+
expect(payload.data.gdprConsent.consentString).to.equal(expected)
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
it('Adds referer information', () => {
|
|
177
|
+
const request = spec.buildRequests(bidRequests, bidderRequest)
|
|
178
|
+
const payload = JSON.parse(request.data)
|
|
179
|
+
const expected = mock.bidderRequest.refererInfo.referer
|
|
180
|
+
|
|
181
|
+
expect(payload.data.referer).to.equal(expected)
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
it('Sends a POST request to the Glimpse server', () => {
|
|
185
|
+
const request = spec.buildRequests(bidRequests)
|
|
186
|
+
|
|
187
|
+
expect(request.url).to.equal(ENDPOINT)
|
|
188
|
+
expect(request.method).to.equal('POST')
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
describe('interpretResponse', () => {
|
|
193
|
+
it('Handles valid bid responses', () => {
|
|
194
|
+
const bidResponse = getBidResponse()
|
|
195
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
196
|
+
|
|
197
|
+
expect(bids).to.have.lengthOf(1)
|
|
198
|
+
expect(bids[0].adUnitCode).to.equal(mock.bidRequest.adUnitCode)
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
it('Handles no bid responses', () => {
|
|
202
|
+
const bidResponse = getBidResponse()
|
|
203
|
+
bidResponse.body.data.bids = []
|
|
204
|
+
|
|
205
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
206
|
+
expect(bids).to.have.lengthOf(0)
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
it('Returns no bids if body is empty', () => {
|
|
210
|
+
const bidResponse = getBidResponse()
|
|
211
|
+
bidResponse.body = {}
|
|
212
|
+
|
|
213
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
214
|
+
expect(bids).to.have.lengthOf(0)
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
it('Returns no bids if body is null', () => {
|
|
218
|
+
const bidResponse = getBidResponse()
|
|
219
|
+
bidResponse.body = null
|
|
220
|
+
|
|
221
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
222
|
+
expect(bids).to.have.lengthOf(0)
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
it('Returns no bids if body is undefined', () => {
|
|
226
|
+
const bidResponse = getBidResponse()
|
|
227
|
+
delete bidResponse.body
|
|
228
|
+
|
|
229
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
230
|
+
expect(bids).to.have.lengthOf(0)
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
it('Returns no bids if body is invalid type', () => {
|
|
234
|
+
const bidResponse = getBidResponse()
|
|
235
|
+
bidResponse.body = 123
|
|
236
|
+
|
|
237
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
238
|
+
expect(bids).to.have.lengthOf(0)
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
it('Returns no bids if auth is empty', () => {
|
|
242
|
+
const bidResponse = getBidResponse()
|
|
243
|
+
bidResponse.body.auth = ''
|
|
244
|
+
|
|
245
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
246
|
+
expect(bids).to.have.lengthOf(0)
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
it('Returns no bids if auth is null', () => {
|
|
250
|
+
const bidResponse = getBidResponse()
|
|
251
|
+
bidResponse.body.auth = null
|
|
252
|
+
|
|
253
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
254
|
+
expect(bids).to.have.lengthOf(0)
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
it('Returns no bids if auth is undefined', () => {
|
|
258
|
+
const bidResponse = getBidResponse()
|
|
259
|
+
delete bidResponse.body.auth
|
|
260
|
+
|
|
261
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
262
|
+
expect(bids).to.have.lengthOf(0)
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
it('Returns no bids if auth is invalid type', () => {
|
|
266
|
+
const bidResponse = getBidResponse()
|
|
267
|
+
bidResponse.body.auth = 123
|
|
268
|
+
|
|
269
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
270
|
+
expect(bids).to.have.lengthOf(0)
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
it('Returns no bid if data is empty', () => {
|
|
274
|
+
const bidResponse = getBidResponse()
|
|
275
|
+
bidResponse.body.data = {}
|
|
276
|
+
|
|
277
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
278
|
+
expect(bids).to.have.lengthOf(0)
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
it('Returns no bid if data is null', () => {
|
|
282
|
+
const bidResponse = getBidResponse()
|
|
283
|
+
bidResponse.body.data = null
|
|
284
|
+
|
|
285
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
286
|
+
expect(bids).to.have.lengthOf(0)
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
it('Returns no bid if data is undefined', () => {
|
|
290
|
+
const bidResponse = getBidResponse()
|
|
291
|
+
delete bidResponse.body.data
|
|
292
|
+
|
|
293
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
294
|
+
expect(bids).to.have.lengthOf(0)
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
it('Returns no bid if data is invalid type', () => {
|
|
298
|
+
const bidResponse = getBidResponse()
|
|
299
|
+
bidResponse.body.data = "This shouldn't be a string"
|
|
300
|
+
|
|
301
|
+
const bids = spec.interpretResponse(bidResponse)
|
|
302
|
+
expect(bids).to.have.lengthOf(0)
|
|
303
|
+
})
|
|
304
|
+
})
|
|
305
|
+
})
|
|
@@ -341,6 +341,7 @@ describe('TheMediaGridNM Adapter', function () {
|
|
|
341
341
|
const responses = [
|
|
342
342
|
{'bid': [{'price': 1.15, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341234\"><\/Ad>\n<\/VAST>', 'content_type': 'video', 'h': 250, 'w': 300, 'dealid': 11}], 'seat': '2'},
|
|
343
343
|
{'bid': [{'price': 0.5, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341235\"><\/Ad>\n<\/VAST>', 'content_type': 'video', 'h': 600, 'w': 300, adomain: ['my_domain.ru']}], 'seat': '2'},
|
|
344
|
+
{'bid': [{'price': 2.00, 'nurl': 'https://some_test_vast_url.com', 'content_type': 'video', 'adomain': ['example.com'], 'w': 300, 'h': 600}], 'seat': '2'},
|
|
344
345
|
{'bid': [{'price': 0, 'h': 250, 'w': 300}], 'seat': '2'},
|
|
345
346
|
{'bid': [{'price': 0, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341237\"><\/Ad>\n<\/VAST>', 'h': 250, 'w': 300}], 'seat': '2'},
|
|
346
347
|
undefined,
|
|
@@ -394,6 +395,28 @@ describe('TheMediaGridNM Adapter', function () {
|
|
|
394
395
|
'context': 'instream'
|
|
395
396
|
}
|
|
396
397
|
}
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
'bidder': 'gridNM',
|
|
401
|
+
'params': {
|
|
402
|
+
'source': 'jwp',
|
|
403
|
+
'secid': '11',
|
|
404
|
+
'pubid': '22',
|
|
405
|
+
'video': {
|
|
406
|
+
'mimes': ['video/mp4'],
|
|
407
|
+
'protocols': [1, 2, 3],
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
'adUnitCode': 'adunit-code-1',
|
|
411
|
+
'sizes': [[300, 250], [300, 600]],
|
|
412
|
+
'bidId': '127f4b12a432c',
|
|
413
|
+
'bidderRequestId': 'a75bc868f32',
|
|
414
|
+
'auctionId': '1cbd2feafe5e8b',
|
|
415
|
+
'mediaTypes': {
|
|
416
|
+
'video': {
|
|
417
|
+
'context': 'instream'
|
|
418
|
+
}
|
|
419
|
+
}
|
|
397
420
|
}
|
|
398
421
|
];
|
|
399
422
|
const requests = spec.buildRequests(bidRequests);
|
|
@@ -435,6 +458,22 @@ describe('TheMediaGridNM Adapter', function () {
|
|
|
435
458
|
'adResponse': {
|
|
436
459
|
'content': '<VAST version=\"3.0\">\n<Ad id=\"21341235\"><\/Ad>\n<\/VAST>'
|
|
437
460
|
}
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
'requestId': '127f4b12a432c',
|
|
464
|
+
'cpm': 2.00,
|
|
465
|
+
'creativeId': 'a75bc868f32',
|
|
466
|
+
'dealId': undefined,
|
|
467
|
+
'width': 300,
|
|
468
|
+
'height': 600,
|
|
469
|
+
'currency': 'USD',
|
|
470
|
+
'mediaType': 'video',
|
|
471
|
+
'netRevenue': true,
|
|
472
|
+
'ttl': 360,
|
|
473
|
+
'meta': {
|
|
474
|
+
advertiserDomains: ['example.com']
|
|
475
|
+
},
|
|
476
|
+
'vastUrl': 'https://some_test_vast_url.com',
|
|
438
477
|
}
|
|
439
478
|
];
|
|
440
479
|
|
|
@@ -445,7 +484,7 @@ describe('TheMediaGridNM Adapter', function () {
|
|
|
445
484
|
});
|
|
446
485
|
|
|
447
486
|
it('handles wrong and nobid responses', function () {
|
|
448
|
-
responses.slice(
|
|
487
|
+
responses.slice(3).forEach((resp) => {
|
|
449
488
|
const request = spec.buildRequests([{
|
|
450
489
|
'bidder': 'gridNM',
|
|
451
490
|
'params': {
|
|
@@ -531,9 +531,13 @@ describe('gumgumAdapter', function () {
|
|
|
531
531
|
const jcsi = JSON.stringify(JCSI);
|
|
532
532
|
const bidRequest = spec.buildRequests(bidRequests)[0];
|
|
533
533
|
const actualKeys = Object.keys(JSON.parse(bidRequest.data.jcsi)).sort();
|
|
534
|
-
expect(actualKeys).to.
|
|
534
|
+
expect(actualKeys).to.eql(expectedKeys);
|
|
535
535
|
expect(bidRequest.data.jcsi).to.eq(jcsi);
|
|
536
536
|
});
|
|
537
|
+
it('should include the local time and timezone offset', function () {
|
|
538
|
+
const bidRequest = spec.buildRequests(bidRequests)[0];
|
|
539
|
+
expect(!!bidRequest.data.lt).to.be.true;
|
|
540
|
+
});
|
|
537
541
|
})
|
|
538
542
|
|
|
539
543
|
describe('interpretResponse', function () {
|
|
@@ -683,11 +687,24 @@ describe('gumgumAdapter', function () {
|
|
|
683
687
|
expect(result[0].height).to.equal('1');
|
|
684
688
|
});
|
|
685
689
|
|
|
686
|
-
it('uses
|
|
687
|
-
const
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
690
|
+
it('uses request size that nearest matches response size for in-screen', function () {
|
|
691
|
+
const request = { ...bidRequest };
|
|
692
|
+
const body = { ...serverResponse };
|
|
693
|
+
const expectedSize = [ 300, 50 ];
|
|
694
|
+
let result;
|
|
695
|
+
|
|
696
|
+
request.pi = 2;
|
|
697
|
+
request.sizes.unshift(expectedSize);
|
|
698
|
+
|
|
699
|
+
// typical ad server response values for in-screen
|
|
700
|
+
body.ad.width = 300;
|
|
701
|
+
body.ad.height = 100;
|
|
702
|
+
|
|
703
|
+
result = spec.interpretResponse({ body }, request)[0];
|
|
704
|
+
|
|
705
|
+
expect(result.width = expectedSize[0]);
|
|
706
|
+
expect(result.height = expectedSize[1]);
|
|
707
|
+
})
|
|
691
708
|
|
|
692
709
|
it('defaults to use bidRequest sizes', function () {
|
|
693
710
|
const { ad, jcsi, pag, thms, meta } = serverResponse
|