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.
Files changed (182) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/browsers.json +1 -0
  5. package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
  6. package/modules/.submodules.json +1 -0
  7. package/modules/adfBidAdapter.js +21 -16
  8. package/modules/adgenerationBidAdapter.js +28 -4
  9. package/modules/adkernelBidAdapter.js +3 -1
  10. package/modules/admixerBidAdapter.js +11 -0
  11. package/modules/adnuntiusBidAdapter.js +1 -0
  12. package/modules/adtelligentBidAdapter.js +2 -1
  13. package/modules/airgridRtdProvider.js +1 -1
  14. package/modules/akamaiDapRtdProvider.js +474 -0
  15. package/modules/akamaiDapRtdProvider.md +47 -0
  16. package/modules/aolBidAdapter.js +2 -1
  17. package/modules/appnexusBidAdapter.js +5 -3
  18. package/modules/atsAnalyticsAdapter.js +89 -63
  19. package/modules/atsAnalyticsAdapter.md +1 -0
  20. package/modules/betweenBidAdapter.js +20 -3
  21. package/modules/bliinkBidAdapter.js +58 -32
  22. package/modules/bliinkBidAdapter.md +29 -6
  23. package/modules/browsiRtdProvider.js +106 -18
  24. package/modules/cleanioRtdProvider.js +192 -0
  25. package/modules/cleanioRtdProvider.md +59 -0
  26. package/modules/codefuelBidAdapter.js +183 -0
  27. package/modules/codefuelBidAdapter.md +111 -0
  28. package/modules/connectIdSystem.js +104 -0
  29. package/modules/connectIdSystem.md +33 -0
  30. package/modules/cwireBidAdapter.js +272 -0
  31. package/modules/cwireBidAdapter.md +43 -0
  32. package/modules/deepintentBidAdapter.js +106 -9
  33. package/modules/deepintentBidAdapter.md +36 -1
  34. package/modules/deltaprojectsBidAdapter.js +252 -0
  35. package/modules/deltaprojectsBidAdapter.md +32 -0
  36. package/modules/dgkeywordRtdProvider.js +0 -1
  37. package/modules/engageyaBidAdapter.js +157 -0
  38. package/modules/glimpseBidAdapter.js +160 -48
  39. package/modules/glimpseBidAdapter.md +11 -74
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gridNMBidAdapter.js +7 -6
  42. package/modules/gumgumBidAdapter.js +16 -2
  43. package/modules/iasRtdProvider.js +83 -67
  44. package/modules/inskinBidAdapter.js +7 -3
  45. package/modules/ixBidAdapter.js +8 -1
  46. package/modules/jixieBidAdapter.js +8 -2
  47. package/modules/justpremiumBidAdapter.js +6 -1
  48. package/modules/kargoBidAdapter.js +14 -7
  49. package/modules/kargoBidAdapter.md +20 -0
  50. package/modules/limelightDigitalBidAdapter.js +22 -2
  51. package/modules/livewrappedAnalyticsAdapter.js +53 -3
  52. package/modules/mediakeysBidAdapter.js +405 -14
  53. package/modules/mediakeysBidAdapter.md +108 -0
  54. package/modules/multibid/index.js +3 -3
  55. package/modules/mytargetBidAdapter.js +112 -0
  56. package/modules/nativoBidAdapter.js +48 -29
  57. package/modules/nativoBidAdapter.md +0 -1
  58. package/modules/nextMillenniumBidAdapter.js +12 -3
  59. package/modules/nextrollBidAdapter.js +375 -0
  60. package/modules/nobidBidAdapter.js +2 -1
  61. package/modules/oguryBidAdapter.js +36 -7
  62. package/modules/openxBidAdapter.js +34 -22
  63. package/modules/operaadsBidAdapter.js +21 -1
  64. package/modules/otmBidAdapter.js +146 -0
  65. package/modules/otmBidAdapter.md +27 -26
  66. package/modules/outbrainBidAdapter.js +5 -0
  67. package/modules/pixfutureBidAdapter.js +24 -4
  68. package/modules/pixfutureBidAdapter.md +127 -0
  69. package/modules/playwireBidAdapter.md +61 -0
  70. package/modules/prebidServerBidAdapter/index.js +1 -1
  71. package/modules/proxistoreBidAdapter.js +4 -6
  72. package/modules/publinkIdSystem.js +17 -7
  73. package/modules/publinkIdSystem.md +7 -2
  74. package/modules/pubmaticBidAdapter.js +22 -6
  75. package/modules/pubmaticBidAdapter.md +1 -1
  76. package/modules/relaidoBidAdapter.js +8 -2
  77. package/modules/rtdModule/index.js +2 -2
  78. package/modules/sharethroughBidAdapter.js +12 -19
  79. package/modules/slimcutBidAdapter.js +121 -0
  80. package/modules/sonobiBidAdapter.js +7 -0
  81. package/modules/sortableBidAdapter.js +1 -0
  82. package/modules/spotxBidAdapter.js +15 -1
  83. package/modules/sspBCBidAdapter.js +207 -12
  84. package/modules/sspBCBidAdapter.md +1 -1
  85. package/modules/talkadsBidAdapter.js +129 -0
  86. package/modules/talkadsBidAdapter.md +60 -0
  87. package/modules/tappxBidAdapter.js +6 -5
  88. package/modules/teadsBidAdapter.js +3 -0
  89. package/modules/tripleliftBidAdapter.js +22 -5
  90. package/modules/trustxBidAdapter.js +17 -11
  91. package/modules/undertoneBidAdapter.js +9 -5
  92. package/modules/undertoneBidAdapter.md +5 -1
  93. package/modules/unicornBidAdapter.js +3 -3
  94. package/modules/userId/eids.js +18 -0
  95. package/modules/userId/eids.md +7 -0
  96. package/modules/userId/userId.md +12 -0
  97. package/modules/ventesBidAdapter.js +370 -0
  98. package/modules/ventesBidAdapter.md +94 -0
  99. package/modules/videobyteBidAdapter.js +13 -6
  100. package/modules/videobyteBidAdapter.md +49 -0
  101. package/modules/vidoomyBidAdapter.js +20 -12
  102. package/modules/visxBidAdapter.js +15 -22
  103. package/modules/yahoosspBidAdapter.js +637 -0
  104. package/modules/yahoosspBidAdapter.md +795 -0
  105. package/modules/yieldlabBidAdapter.js +48 -3
  106. package/modules/yieldlabBidAdapter.md +16 -1
  107. package/modules/yieldmoBidAdapter.js +20 -6
  108. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  109. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  110. package/package.json +1 -1
  111. package/src/adapterManager.js +5 -0
  112. package/src/adapters/bidderFactory.js +4 -3
  113. package/src/auction.js +11 -11
  114. package/src/constants.json +1 -0
  115. package/src/secureCreatives.js +6 -7
  116. package/src/targeting.js +11 -9
  117. package/test/.eslintrc.js +2 -1
  118. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  119. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  120. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  121. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  122. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  123. package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
  124. package/test/spec/modules/atsAnalyticsAdapter_spec.js +77 -9
  125. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  126. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  127. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  128. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  129. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  130. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  131. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  132. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  133. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  134. package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
  135. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  136. package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
  137. package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
  138. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  139. package/test/spec/modules/ixBidAdapter_spec.js +13 -3
  140. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  141. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  142. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  143. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
  144. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  145. package/test/spec/modules/multibid_spec.js +31 -31
  146. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  147. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  148. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  149. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  150. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  151. package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
  152. package/test/spec/modules/openxBidAdapter_spec.js +85 -13
  153. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  154. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  155. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  156. package/test/spec/modules/publinkIdSystem_spec.js +34 -15
  157. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  158. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  159. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  160. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  161. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  162. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  163. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  164. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  165. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  166. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  167. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  168. package/test/spec/modules/trustxBidAdapter_spec.js +38 -5
  169. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  170. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  171. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  172. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  173. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  174. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  175. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  176. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  177. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  178. package/test/spec/unit/core/adapterManager_spec.js +32 -0
  179. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  180. package/test/spec/unit/pbjs_api_spec.js +37 -2
  181. package/test/spec/unit/secureCreatives_spec.js +54 -25
  182. package/modules/turktelekomBidAdapter.md +0 -49
@@ -0,0 +1,290 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from 'modules/nextrollBidAdapter.js';
3
+ import * as utils from 'src/utils.js';
4
+ import { deepClone } from '../../../src/utils';
5
+
6
+ describe('nextrollBidAdapter', function() {
7
+ let utilsMock;
8
+ beforeEach(function () {
9
+ utilsMock = sinon.mock(utils);
10
+ });
11
+
12
+ afterEach(function() {
13
+ global.NextRoll = undefined;
14
+ utilsMock.restore();
15
+ });
16
+
17
+ let validBid = {
18
+ bidder: 'nextroll',
19
+ adUnitCode: 'adunit-code',
20
+ bidId: 'bid_id',
21
+ sizes: [[300, 200]],
22
+ params: {
23
+ bidfloor: 1,
24
+ zoneId: 'zone1',
25
+ publisherId: 'publisher_id'
26
+ }
27
+ };
28
+ let bidWithoutValidId = { id: '' };
29
+ let bidWithoutId = { params: { zoneId: 'zone1' } };
30
+
31
+ describe('nativeBidRequest', () => {
32
+ it('validates native spec', () => {
33
+ let nativeAdUnit = [{
34
+ bidder: 'nextroll',
35
+ adUnitCode: 'adunit-code',
36
+ bidId: 'bid_id',
37
+ mediaTypes: {
38
+ native: {
39
+ title: {required: true, len: 80},
40
+ image: {required: true, sizes: [728, 90]},
41
+ sponsoredBy: {required: false, len: 20},
42
+ clickUrl: {required: true},
43
+ body: {required: true, len: 25},
44
+ icon: {required: true, sizes: [50, 50], aspect_ratios: [{ratio_height: 3, ratio_width: 4}]},
45
+ someRandomAsset: {required: false, len: 100} // This should be ignored
46
+ }
47
+ },
48
+ params: {
49
+ bidfloor: 1,
50
+ zoneId: 'zone1',
51
+ publisherId: 'publisher_id'
52
+ }
53
+ }];
54
+
55
+ let request = spec.buildRequests(nativeAdUnit)
56
+ let assets = request[0].data.imp.native.request.native.assets
57
+
58
+ let excptedAssets = [
59
+ {id: 1, required: 1, title: {len: 80}},
60
+ {id: 2, required: 1, img: {w: 728, h: 90, wmin: 1, hmin: 1, type: 3}},
61
+ {id: 3, required: 1, img: {w: 50, h: 50, wmin: 4, hmin: 3, type: 1}},
62
+ {id: 5, required: 0, data: {len: 20, type: 1}},
63
+ {id: 6, required: 1, data: {len: 25, type: 2}}
64
+ ]
65
+ expect(assets).to.be.deep.equal(excptedAssets)
66
+ })
67
+ })
68
+
69
+ describe('isBidRequestValid', function() {
70
+ it('validates the bids correctly when the bid has an id', function() {
71
+ expect(spec.isBidRequestValid(validBid)).to.be.true;
72
+ });
73
+
74
+ it('validates the bids correcly when the bid does not have an id', function() {
75
+ expect(spec.isBidRequestValid(bidWithoutValidId)).to.be.false;
76
+ expect(spec.isBidRequestValid(bidWithoutId)).to.be.false;
77
+ });
78
+ });
79
+
80
+ describe('buildRequests', function() {
81
+ it('builds the same amount of requests as valid requests it takes', function() {
82
+ expect(spec.buildRequests([validBid, validBid], {})).to.be.lengthOf(2);
83
+ });
84
+
85
+ it('doest not build a request when there is no valid requests', function () {
86
+ expect(spec.buildRequests([], {})).to.be.lengthOf(0);
87
+ });
88
+
89
+ it('builds a request with POST method', function () {
90
+ expect(spec.buildRequests([validBid], {})[0].method).to.equal('POST');
91
+ });
92
+
93
+ it('builds a request with cookies method', function () {
94
+ expect(spec.buildRequests([validBid], {})[0].options.withCredentials).to.be.true;
95
+ });
96
+
97
+ it('builds a request with id, url and imp object', function () {
98
+ const request = spec.buildRequests([validBid], {})[0];
99
+ expect(request.data.id).to.be.an('string').that.is.not.empty;
100
+ expect(request.url).to.equal('https://d.adroll.com/bid/prebid/');
101
+ expect(request.data.imp).to.exist.and.to.be.a('object');
102
+ });
103
+
104
+ it('builds a request with site and device information', function () {
105
+ const request = spec.buildRequests([validBid], {})[0];
106
+
107
+ expect(request.data.site).to.exist.and.to.be.a('object');
108
+ expect(request.data.device).to.exist.and.to.be.a('object');
109
+ });
110
+
111
+ it('builds a request with a complete imp object', function () {
112
+ const request = spec.buildRequests([validBid], {})[0];
113
+
114
+ expect(request.data.imp.id).to.equal('bid_id');
115
+ expect(request.data.imp.bidfloor).to.be.equal(1);
116
+ expect(request.data.imp.banner).to.exist.and.to.be.a('object');
117
+ expect(request.data.imp.ext.zone.id).to.be.equal('zone1');
118
+ });
119
+
120
+ it('builds a request with the correct floor object', function () {
121
+ // bidfloor is defined, getFloor isn't
122
+ let bid = deepClone(validBid);
123
+ let request = spec.buildRequests([bid], {})[0];
124
+ expect(request.data.imp.bidfloor).to.be.equal(1);
125
+
126
+ // bidfloor not defined, getFloor not defined
127
+ bid = deepClone(validBid);
128
+ bid.params.bidfloor = null;
129
+ request = spec.buildRequests([bid], {})[0];
130
+ expect(request.data.imp.bidfloor).to.not.exist;
131
+
132
+ // bidfloor defined, getFloor defined, use getFloor
133
+ let getFloorResponse = { currency: 'USD', floor: 3 };
134
+ bid = deepClone(validBid);
135
+ bid.getFloor = () => getFloorResponse;
136
+ request = spec.buildRequests([bid], {})[0];
137
+
138
+ expect(request.data.imp.bidfloor).to.exist.and.to.equal(3);
139
+ });
140
+
141
+ it('includes the sizes into the request correctly', function () {
142
+ const bannerObject = spec.buildRequests([validBid], {})[0].data.imp.banner;
143
+
144
+ expect(bannerObject.format).to.exist;
145
+ expect(bannerObject.format).to.be.lengthOf(1);
146
+ expect(bannerObject.format[0].w).to.be.equal(300);
147
+ expect(bannerObject.format[0].h).to.be.equal(200);
148
+ });
149
+
150
+ it('sets the CCPA consent string', function () {
151
+ const us_privacy = '1YYY';
152
+ const request = spec.buildRequests([validBid], {'uspConsent': us_privacy})[0];
153
+
154
+ expect(request.data.regs.ext.us_privacy).to.be.equal(us_privacy);
155
+ });
156
+ });
157
+
158
+ describe('interpretResponse', function () {
159
+ let responseBody = {
160
+ id: 'bidresponse_id',
161
+ dealId: 'deal_id',
162
+ seatbid: [
163
+ {
164
+ bid: [
165
+ {
166
+ price: 1.2,
167
+ w: 300,
168
+ h: 200,
169
+ crid: 'crid1',
170
+ adm: 'adm1'
171
+ }
172
+ ]
173
+ },
174
+ {
175
+ bid: [
176
+ {
177
+ price: 2.1,
178
+ w: 250,
179
+ h: 300,
180
+ crid: 'crid2',
181
+ adm: 'adm2'
182
+ }
183
+ ]
184
+ }
185
+ ]
186
+ };
187
+
188
+ it('returns an empty list when there is no response body', function () {
189
+ expect(spec.interpretResponse({}, {})).to.be.eql([]);
190
+ });
191
+
192
+ it('builds the same amount of responses as server responses it receives', function () {
193
+ expect(spec.interpretResponse({body: responseBody}, {})).to.be.lengthOf(2);
194
+ });
195
+
196
+ it('builds a response with the expected fields', function () {
197
+ const response = spec.interpretResponse({body: responseBody}, {})[0];
198
+
199
+ expect(response.requestId).to.be.equal('bidresponse_id');
200
+ expect(response.cpm).to.be.equal(1.2);
201
+ expect(response.width).to.be.equal(300);
202
+ expect(response.height).to.be.equal(200);
203
+ expect(response.creativeId).to.be.equal('crid1');
204
+ expect(response.dealId).to.be.equal('deal_id');
205
+ expect(response.currency).to.be.equal('USD');
206
+ expect(response.netRevenue).to.be.equal(true);
207
+ expect(response.ttl).to.be.equal(300);
208
+ expect(response.ad).to.be.equal('adm1');
209
+ });
210
+ });
211
+
212
+ describe('interpret native response', () => {
213
+ let clickUrl = 'https://clickurl.com/with/some/path'
214
+ let titleText = 'Some title'
215
+ let imgW = 300
216
+ let imgH = 250
217
+ let imgUrl = 'https://clickurl.com/img.png'
218
+ let brandText = 'Some Brand'
219
+ let impUrl = 'https://clickurl.com/imptracker'
220
+
221
+ let responseBody = {
222
+ body: {
223
+ id: 'bidresponse_id',
224
+ seatbid: [{
225
+ bid: [{
226
+ price: 1.2,
227
+ crid: 'crid1',
228
+ adm: {
229
+ link: {url: clickUrl},
230
+ assets: [
231
+ {id: 1, title: {text: titleText}},
232
+ {id: 2, img: {w: imgW, h: imgH, url: imgUrl}},
233
+ {id: 5, data: {value: brandText}}
234
+ ],
235
+ imptrackers: [impUrl]
236
+ }
237
+ }]
238
+ }]
239
+ }
240
+ };
241
+
242
+ it('Should interpret response', () => {
243
+ let response = spec.interpretResponse(utils.deepClone(responseBody))
244
+ let expectedResponse = {
245
+ clickUrl: clickUrl,
246
+ impressionTrackers: [impUrl],
247
+ privacyLink: 'https://info.evidon.com/pub_info/573',
248
+ privacyIcon: 'https://c.betrad.com/pub/icon1.png',
249
+ title: titleText,
250
+ image: {url: imgUrl, width: imgW, height: imgH},
251
+ sponsoredBy: brandText,
252
+ clickTrackers: [],
253
+ jstracker: []
254
+ }
255
+
256
+ expect(response[0].native).to.be.deep.equal(expectedResponse)
257
+ })
258
+
259
+ it('Should interpret all assets', () => {
260
+ let allAssetsResponse = utils.deepClone(responseBody)
261
+ let iconUrl = imgUrl + '?icon=true', iconW = 10, iconH = 15
262
+ let logoUrl = imgUrl + '?logo=true', logoW = 20, logoH = 25
263
+ let bodyText = 'Some body text'
264
+
265
+ allAssetsResponse.body.seatbid[0].bid[0].adm.assets.push(...[
266
+ {id: 3, img: {w: iconW, h: iconH, url: iconUrl}},
267
+ {id: 4, img: {w: logoW, h: logoH, url: logoUrl}},
268
+ {id: 6, data: {value: bodyText}}
269
+ ])
270
+
271
+ let response = spec.interpretResponse(allAssetsResponse)
272
+ let expectedResponse = {
273
+ clickUrl: clickUrl,
274
+ impressionTrackers: [impUrl],
275
+ jstracker: [],
276
+ clickTrackers: [],
277
+ privacyLink: 'https://info.evidon.com/pub_info/573',
278
+ privacyIcon: 'https://c.betrad.com/pub/icon1.png',
279
+ title: titleText,
280
+ image: {url: imgUrl, width: imgW, height: imgH},
281
+ icon: {url: iconUrl, width: iconW, height: iconH},
282
+ logo: {url: logoUrl, width: logoW, height: logoH},
283
+ body: bodyText,
284
+ sponsoredBy: brandText
285
+ }
286
+
287
+ expect(response[0].native).to.be.deep.equal(expectedResponse)
288
+ })
289
+ })
290
+ });
@@ -2,6 +2,7 @@ import { expect } from 'chai';
2
2
  import * as utils from 'src/utils.js';
3
3
  import { spec } from 'modules/nobidBidAdapter.js';
4
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
5
+ import { config } from 'src/config.js';
5
6
  import * as bidderFactory from 'src/adapters/bidderFactory.js';
6
7
 
7
8
  describe('Nobid Adapter', function () {
@@ -50,6 +51,70 @@ describe('Nobid Adapter', function () {
50
51
  });
51
52
  });
52
53
 
54
+ describe('Request with ORTB2', function () {
55
+ const SITE_ID = 2;
56
+ const REFERER = 'https://www.examplereferer.com';
57
+ const BIDDER_CODE = 'duration';
58
+ let bidRequests = [
59
+ {
60
+ 'bidder': BIDDER_CODE,
61
+ 'params': {
62
+ 'siteId': SITE_ID
63
+ },
64
+ 'adUnitCode': 'adunit-code',
65
+ 'sizes': [[300, 250]],
66
+ 'bidId': '30b31c1838de1e',
67
+ 'bidderRequestId': '22edbae2733bf6',
68
+ 'auctionId': '1d1a030790a475',
69
+ }
70
+ ];
71
+
72
+ let bidderRequest = {
73
+ refererInfo: {referer: REFERER}, bidderCode: BIDDER_CODE
74
+ }
75
+
76
+ const siteName = 'example';
77
+ const siteDomain = 'page.example.com';
78
+ const sitePage = 'https://page.example.com/here.html';
79
+ const siteRef = 'https://ref.example.com';
80
+ const siteKeywords = 'power tools, drills';
81
+ const siteSearch = 'drill';
82
+ const siteCat = 'IAB2';
83
+ const siteSectionCat = 'IAB2-2';
84
+ const sitePageCat = 'IAB2-12';
85
+
86
+ it('ortb2 should exist', function () {
87
+ config.setConfig({
88
+ ortb2: {
89
+ site: {
90
+ name: siteName,
91
+ domain: siteDomain,
92
+ cat: [ siteCat ],
93
+ sectioncat: [ siteSectionCat ],
94
+ pagecat: [ sitePageCat ],
95
+ page: sitePage,
96
+ ref: siteRef,
97
+ keywords: siteKeywords,
98
+ search: siteSearch
99
+ }
100
+ }
101
+ });
102
+ const request = spec.buildRequests(bidRequests, bidderRequest);
103
+ let payload = JSON.parse(request.data);
104
+ payload = JSON.parse(JSON.stringify(payload));
105
+ expect(payload.sid).to.equal(SITE_ID);
106
+ expect(payload.ortb2.site.name).to.equal(siteName);
107
+ expect(payload.ortb2.site.domain).to.equal(siteDomain);
108
+ expect(payload.ortb2.site.page).to.equal(sitePage);
109
+ expect(payload.ortb2.site.ref).to.equal(siteRef);
110
+ expect(payload.ortb2.site.keywords).to.equal(siteKeywords);
111
+ expect(payload.ortb2.site.search).to.equal(siteSearch);
112
+ expect(payload.ortb2.site.cat[0]).to.equal(siteCat);
113
+ expect(payload.ortb2.site.sectioncat[0]).to.equal(siteSectionCat);
114
+ expect(payload.ortb2.site.pagecat[0]).to.equal(sitePageCat);
115
+ });
116
+ });
117
+
53
118
  describe('isDurationBidRequestValid', function () {
54
119
  const SITE_ID = 2;
55
120
  const REFERER = 'https://www.examplereferer.com';
@@ -255,7 +320,6 @@ describe('Nobid Adapter', function () {
255
320
  expect(payload.a).to.exist;
256
321
  expect(payload.t).to.exist;
257
322
  expect(payload.tz).to.exist;
258
- expect(payload.r).to.exist.and.to.equal('100x100');
259
323
  expect(payload.lang).to.exist;
260
324
  expect(payload.ref).to.exist;
261
325
  expect(payload.a[0].d).to.exist.and.to.equal('adunit-code');