prebid.js 6.7.0 → 6.11.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 (160) hide show
  1. package/.eslintrc.js +8 -1
  2. package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
  3. package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
  4. package/integrationExamples/gpt/userId_example.html +2 -2
  5. package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
  6. package/integrationExamples/gpt/x-domain/creative.html +63 -29
  7. package/modules/.submodules.json +3 -0
  8. package/modules/adagioBidAdapter.js +0 -8
  9. package/modules/adagioBidAdapter.md +1 -1
  10. package/modules/adkernelBidAdapter.js +2 -1
  11. package/modules/adnuntiusRtdProvider.js +96 -0
  12. package/modules/adnuntiusRtdProvider.md +41 -0
  13. package/modules/adotBidAdapter.js +516 -567
  14. package/modules/adotBidAdapter.md +6 -44
  15. package/modules/adpod.js +12 -14
  16. package/modules/adyoulikeBidAdapter.js +2 -0
  17. package/modules/appnexusBidAdapter.js +14 -2
  18. package/modules/asealBidAdapter.js +58 -0
  19. package/modules/asealBidAdapter.md +52 -0
  20. package/modules/brandmetricsRtdProvider.js +168 -0
  21. package/modules/brandmetricsRtdProvider.md +40 -0
  22. package/modules/conversantBidAdapter.js +7 -0
  23. package/modules/criteoBidAdapter.js +9 -0
  24. package/modules/currency.js +27 -5
  25. package/modules/displayioBidAdapter.js +157 -0
  26. package/modules/displayioBidAdapter.md +148 -0
  27. package/modules/dspxBidAdapter.js +69 -29
  28. package/modules/dspxBidAdapter.md +2 -1
  29. package/modules/e_volutionBidAdapter.js +158 -0
  30. package/modules/gridBidAdapter.js +15 -1
  31. package/modules/gumgumBidAdapter.js +52 -38
  32. package/modules/hadronIdSystem.js +96 -0
  33. package/modules/hadronIdSystem.md +35 -0
  34. package/modules/hadronRtdProvider.js +254 -0
  35. package/modules/hadronRtdProvider.md +126 -0
  36. package/modules/haloIdSystem.md +4 -35
  37. package/modules/haloRtdProvider.md +3 -126
  38. package/modules/imRtdProvider.js +10 -0
  39. package/modules/improvedigitalBidAdapter.js +5 -0
  40. package/modules/interactiveOffersBidAdapter.js +9 -6
  41. package/modules/iqzoneBidAdapter.js +10 -3
  42. package/modules/iqzoneBidAdapter.md +16 -0
  43. package/modules/ixBidAdapter.js +2 -6
  44. package/modules/kubientBidAdapter.js +50 -19
  45. package/modules/lunamediahbBidAdapter.js +32 -4
  46. package/modules/malltvBidAdapter.js +7 -3
  47. package/modules/malltvBidAdapter.md +64 -51
  48. package/modules/mass.js +3 -5
  49. package/modules/mediakeysBidAdapter.js +0 -5
  50. package/modules/medianetAnalyticsAdapter.js +1 -1
  51. package/modules/mediasquareBidAdapter.js +9 -1
  52. package/modules/nextMillenniumBidAdapter.js +1 -0
  53. package/modules/oguryBidAdapter.js +7 -14
  54. package/modules/prebidServerBidAdapter/index.js +61 -39
  55. package/modules/priceFloors.js +20 -12
  56. package/modules/pubmaticBidAdapter.js +1 -1
  57. package/modules/richaudienceBidAdapter.js +8 -3
  58. package/modules/riseBidAdapter.js +17 -6
  59. package/modules/rtbhouseBidAdapter.js +2 -0
  60. package/modules/rubiconAnalyticsAdapter.js +5 -0
  61. package/modules/rubiconBidAdapter.js +2 -2
  62. package/modules/sizeMappingV2.js +1 -8
  63. package/modules/sortableAnalyticsAdapter.js +5 -4
  64. package/modules/sovrnBidAdapter.js +93 -18
  65. package/modules/sovrnBidAdapter.md +80 -2
  66. package/modules/sspBCBidAdapter.js +53 -20
  67. package/modules/telariaBidAdapter.js +22 -29
  68. package/modules/trustpidSystem.js +197 -0
  69. package/modules/trustpidSystem.md +45 -0
  70. package/modules/undertoneBidAdapter.js +17 -1
  71. package/modules/userId/eids.js +16 -1
  72. package/modules/userId/eids.md +10 -2
  73. package/modules/userId/userId.md +17 -2
  74. package/modules/vibrantmediaBidAdapter.js +220 -0
  75. package/modules/vibrantmediaBidAdapter.md +92 -0
  76. package/modules/vidoomyBidAdapter.js +8 -0
  77. package/modules/vidoomyBidAdapter.md +4 -2
  78. package/modules/weboramaRtdProvider.js +264 -34
  79. package/modules/weboramaRtdProvider.md +110 -40
  80. package/modules/yahoosspBidAdapter.js +3 -1
  81. package/modules/yieldoneBidAdapter.js +6 -0
  82. package/package.json +2 -1
  83. package/src/adRendering.js +38 -0
  84. package/src/adapterManager.js +24 -19
  85. package/src/adapters/bidderFactory.js +14 -11
  86. package/src/adloader.js +2 -1
  87. package/src/auction.js +138 -115
  88. package/src/auctionIndex.js +85 -0
  89. package/src/auctionManager.js +3 -0
  90. package/src/bidderSettings.js +69 -0
  91. package/src/bidfactory.js +18 -6
  92. package/src/native.js +29 -21
  93. package/src/prebid.js +3 -19
  94. package/src/secureCreatives.js +128 -45
  95. package/src/targeting.js +11 -2
  96. package/src/utils.js +14 -17
  97. package/src/video.js +10 -11
  98. package/src/videoCache.js +10 -9
  99. package/test/fixtures/fixtures.js +2 -1
  100. package/test/helpers/indexStub.js +28 -0
  101. package/test/helpers/syncPromise.js +71 -0
  102. package/test/spec/auctionmanager_spec.js +268 -89
  103. package/test/spec/config_spec.js +24 -1
  104. package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
  105. package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
  106. package/test/spec/modules/adotBidAdapter_spec.js +294 -3124
  107. package/test/spec/modules/adpod_spec.js +91 -156
  108. package/test/spec/modules/adyoulikeBidAdapter_spec.js +4 -0
  109. package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
  110. package/test/spec/modules/asealBidAdapter_spec.js +144 -0
  111. package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
  112. package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
  113. package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
  114. package/test/spec/modules/currency_spec.js +36 -15
  115. package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
  116. package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
  117. package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
  118. package/test/spec/modules/eids_spec.js +2 -2
  119. package/test/spec/modules/gridBidAdapter_spec.js +18 -0
  120. package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
  121. package/test/spec/modules/hadronIdSystem_spec.js +57 -0
  122. package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
  123. package/test/spec/modules/imRtdProvider_spec.js +30 -1
  124. package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
  125. package/test/spec/modules/iqzoneBidAdapter_spec.js +1 -0
  126. package/test/spec/modules/ixBidAdapter_spec.js +1 -1
  127. package/test/spec/modules/kubientBidAdapter_spec.js +182 -84
  128. package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
  129. package/test/spec/modules/mass_spec.js +2 -14
  130. package/test/spec/modules/mediakeysBidAdapter_spec.js +9 -5
  131. package/test/spec/modules/mediasquareBidAdapter_spec.js +25 -1
  132. package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
  133. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
  134. package/test/spec/modules/priceFloors_spec.js +83 -24
  135. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  136. package/test/spec/modules/riseBidAdapter_spec.js +30 -4
  137. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +31 -1
  138. package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
  139. package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
  140. package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
  141. package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
  142. package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
  143. package/test/spec/modules/trustpidSystem_spec.js +232 -0
  144. package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
  145. package/test/spec/modules/userId_spec.js +39 -39
  146. package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
  147. package/test/spec/modules/vidoomyBidAdapter_spec.js +7 -1
  148. package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
  149. package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
  150. package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
  151. package/test/spec/native_spec.js +62 -40
  152. package/test/spec/unit/core/adapterManager_spec.js +22 -0
  153. package/test/spec/unit/core/auctionIndex_spec.js +129 -0
  154. package/test/spec/unit/core/bidderFactory_spec.js +65 -12
  155. package/test/spec/unit/core/bidderSettings_spec.js +123 -0
  156. package/test/spec/unit/core/targeting_spec.js +93 -0
  157. package/test/spec/unit/pbjs_api_spec.js +80 -42
  158. package/test/spec/unit/secureCreatives_spec.js +143 -24
  159. package/test/spec/videoCache_spec.js +18 -19
  160. package/test/spec/video_spec.js +51 -61
@@ -1,3163 +1,333 @@
1
1
  import { expect } from 'chai';
2
- import { executeRenderer } from 'src/Renderer.js';
3
- import * as utils from 'src/utils.js';
4
2
  import { spec } from 'modules/adotBidAdapter.js';
5
3
 
6
4
  const BIDDER_URL = 'https://dsp.adotmob.com/headerbidding/bidrequest';
7
5
 
8
6
  describe('Adot Adapter', function () {
9
- const examples = {
10
- adUnit_banner: {
11
- adUnitCode: 'ad_unit_banner',
12
- bidder: 'adot',
13
- bidderRequestId: 'bid_request_id',
14
- bidId: 'bid_id',
15
- params: {},
16
- mediaTypes: {
17
- banner: {
18
- sizes: [[300, 250]]
19
- }
20
- }
21
- },
22
-
23
- adUnit_video_outstream: {
24
- adUnitCode: 'ad_unit_video_outstream',
25
- bidder: 'adot',
26
- bidderRequestId: 'bid_request_id',
27
- bidId: 'bid_id',
28
- params: {},
29
- mediaTypes: {
30
- video: {
31
- context: 'outstream',
32
- playerSize: [[300, 250]],
33
- mimes: ['video/mp4'],
34
- minDuration: 5,
35
- maxDuration: 30,
36
- protocols: [2, 3]
37
- }
38
- }
39
- },
40
-
41
- adUnit_video_instream: {
42
- adUnitCode: 'ad_unit_video_instream',
43
- bidder: 'adot',
44
- bidderRequestId: 'bid_request_id',
45
- bidId: 'bid_id',
46
- params: {
47
- video: {
48
- instreamContext: 'pre-roll'
49
- }
50
- },
51
- mediaTypes: {
52
- video: {
53
- context: 'instream',
54
- playerSize: [[300, 250]],
55
- mimes: ['video/mp4'],
56
- minDuration: 5,
57
- maxDuration: 30,
58
- protocols: [2, 3]
59
- }
60
- }
61
- },
62
-
63
- adUnitContext: {
64
- refererInfo: {
65
- referer: 'https://we-are-adot.com/test',
66
- },
67
- gdprConsent: {
68
- consentString: 'consent_string',
69
- gdprApplies: true
70
- }
71
- },
72
-
73
- adUnit_position: {
74
- adUnitCode: 'ad_unit_position',
75
- bidder: 'adot',
76
- bidderRequestId: 'bid_request_id',
77
- bidId: 'bid_id',
78
- params: {
79
- position: 1
80
- },
81
- mediaTypes: {
82
- banner: {
83
- sizes: [[300, 250]]
84
- }
85
- }
86
- },
87
-
88
- adUnit_native: {
89
- adUnitCode: 'ad_unit_native',
90
- bidder: 'adot',
91
- bidderRequestId: 'bid_request_id',
92
- bidId: 'bid_id',
93
- params: {},
94
- mediaTypes: {
95
- native: {
96
- title: {required: true, len: 140},
97
- icon: {required: true, sizes: [50, 50]},
98
- image: {required: false, sizes: [320, 200]},
99
- sponsoredBy: {required: false},
100
- body: {required: false},
101
- cta: {required: true}
102
- }
103
- }
104
- },
7
+ describe('isBidRequestValid', function () {
8
+ it('should return false if video and !isValidVideo', function () {
9
+ const bid = { mediaTypes: { video: {} } };
10
+ const isBidRequestValid = spec.isBidRequestValid(bid);
11
+ expect(isBidRequestValid).to.equal(false);
12
+ })
13
+
14
+ it('should return true if video and isValidVideo', function () {
15
+ const bid = { mediaTypes: { video: { 'mimes': 1, 'minduration': 1, 'maxduration': 1, 'protocols': 1 } } };
16
+ const isBidRequestValid = spec.isBidRequestValid(bid);
17
+ expect(isBidRequestValid).to.equal(true);
18
+ })
19
+
20
+ it('should return true if !video', function () {
21
+ const bid = { mediaTypes: { banner: {} } };
22
+ const isBidRequestValid = spec.isBidRequestValid(bid);
23
+ expect(isBidRequestValid).to.equal(true);
24
+ })
25
+ });
105
26
 
106
- serverRequest_banner: {
107
- method: 'POST',
108
- url: 'https://we-are-adot.com/bidrequest',
109
- data: {
110
- id: 'bid_request_id',
111
- imp: [
112
- {
113
- id: 'imp_id_banner_0_0',
114
- banner: {
115
- format: [{
116
- w: 300,
117
- h: 200
118
- }]
119
- },
120
- video: null
121
- }
122
- ],
27
+ describe('buildRequests', function () {
28
+ it('should build request (banner)', function () {
29
+ const bidderRequestId = 'bidderRequestId';
30
+ const validBidRequests = [{ bidderRequestId, mediaTypes: {} }, { bidderRequestId, bidId: 'bidId', mediaTypes: { banner: { sizes: [[300, 250]] } }, params: { placementId: 'placementId', adUnitCode: 200 } }];
31
+ const bidderRequest = { position: 2, refererInfo: { referer: 'http://localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } };
32
+
33
+ const request = spec.buildRequests(validBidRequests, bidderRequest);
34
+ const buildBidRequestResponse = {
35
+ id: bidderRequestId,
36
+ imp: [{
37
+ id: validBidRequests[1].bidId,
38
+ ext: {
39
+ placementId: validBidRequests[1].params.placementId,
40
+ adUnitCode: validBidRequests[1].adUnitCode,
41
+ container: undefined
42
+ },
43
+ banner: {
44
+ pos: bidderRequest.position,
45
+ format: [{ w: validBidRequests[1].mediaTypes.banner.sizes[0][0], h: validBidRequests[1].mediaTypes.banner.sizes[0][1] }]
46
+ },
47
+ bidfloorcur: 'USD',
48
+ bidfloor: 0
49
+ }],
123
50
  site: {
124
- page: 'https://we-are-adot.com/test',
125
- domain: 'we-are-adot.com',
126
- name: 'we-are-adot.com'
127
- },
128
- device: {
129
- ua: '',
130
- language: 'en'
51
+ page: bidderRequest.refererInfo.referer,
52
+ domain: 'localhost.com',
53
+ name: 'localhost.com',
54
+ publisher: {
55
+ // id: 'adot'
56
+ id: undefined
57
+ }
131
58
  },
132
- user: null,
133
- regs: null,
134
- at: 1,
59
+ device: { ua: navigator.userAgent, language: navigator.language },
60
+ user: { ext: { consent: bidderRequest.gdprConsent.consentString } },
61
+ regs: { ext: { gdpr: bidderRequest.gdprConsent.gdprApplies } },
135
62
  ext: {
136
- adot: {
137
- 'adapter_version': 'v1.0.0'
138
- }
139
- }
140
- },
141
- _adot_internal: {
142
- impressions: [
143
- {
144
- impressionId: 'imp_id_banner_0_0',
145
- adUnitCode: 'ad_unit_banner',
146
- bidId: 'imp_id_banner'
147
- }
148
- ]
63
+ adot: { adapter_version: 'v2.0.0' },
64
+ should_use_gzip: true
65
+ },
66
+ at: 1
149
67
  }
150
- },
151
68
 
152
- serverRequest_banner_twoImps: {
153
- method: 'POST',
154
- url: 'https://we-are-adot.com/bidrequest',
155
- data: {
156
- id: 'bid_request_id',
157
- imp: [
158
- {
159
- id: 'imp_id_banner_0_0',
160
- banner: {
161
- format: [{
162
- w: 300,
163
- h: 200
164
- }]
165
- },
166
- video: null
69
+ expect(request).to.deep.equal([{
70
+ method: 'POST',
71
+ url: BIDDER_URL,
72
+ data: buildBidRequestResponse
73
+ }])
74
+ })
75
+
76
+ it('should build request (native)', function () {
77
+ const bidderRequestId = 'bidderRequestId';
78
+ const validBidRequests = [{ bidderRequestId, mediaTypes: {} }, { bidderRequestId, bidId: 'bidId', mediaTypes: { native: { title: { required: true, len: 50, sizes: [[300, 250]] }, wrong: {}, image: {} } }, params: { placementId: 'placementId', adUnitCode: 200 } }];
79
+ const bidderRequest = { position: 2, refererInfo: { referer: 'http://localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } };
80
+
81
+ const request = spec.buildRequests(validBidRequests, bidderRequest);
82
+ const buildBidRequestResponse = {
83
+ id: bidderRequestId,
84
+ imp: [{
85
+ id: validBidRequests[1].bidId,
86
+ ext: {
87
+ placementId: validBidRequests[1].params.placementId,
88
+ adUnitCode: validBidRequests[1].adUnitCode,
89
+ container: undefined
167
90
  },
168
- {
169
- id: 'imp_id_banner_2_0_0',
170
- banner: {
171
- format: [{
172
- w: 300,
173
- h: 200
174
- }]
175
- },
176
- video: null
177
- }
178
- ],
179
- site: {
180
- page: 'https://we-are-adot.com/test',
181
- domain: 'we-are-adot.com',
182
- name: 'we-are-adot.com'
183
- },
184
- device: {
185
- ua: '',
186
- language: 'en'
187
- },
188
- user: null,
189
- regs: null,
190
- at: 1,
191
- ext: {
192
- adot: {
193
- 'adapter_version': 'v1.0.0'
194
- }
195
- }
196
- },
197
- _adot_internal: {
198
- impressions: [
199
- {
200
- impressionId: 'imp_id_banner_0_0',
201
- adUnitCode: 'ad_unit_banner',
202
- bidId: 'imp_id_banner'
91
+ native: {
92
+ request: '{\"assets\":[{\"id\":1,\"required\":true,\"title\":{\"len\":50,\"wmin\":300,\"hmin\":250}},{\"id\":3,\"img\":{\"type\":3}}]}'
203
93
  },
204
- {
205
- impressionId: 'imp_id_banner_2_0_0',
206
- adUnitCode: 'ad_unit_banner_2',
207
- bidId: 'imp_id_banner_2'
208
- }
209
- ]
210
- }
211
- },
212
-
213
- serverRequest_video_instream: {
214
- method: 'POST',
215
- url: 'https://we-are-adot.com/bidrequest',
216
- data: {
217
- id: 'bid_request_id',
218
- imp: [
219
- {
220
- id: 'imp_id_video_instream_0',
221
- banner: null,
222
- video: {
223
- mimes: ['video/mp4'],
224
- w: 300,
225
- h: 200,
226
- startdelay: 0,
227
- minduration: 5,
228
- maxduration: 35,
229
- protocols: [2, 3]
230
- }
231
- }
232
- ],
94
+ bidfloorcur: 'USD',
95
+ bidfloor: 0
96
+ }],
233
97
  site: {
234
- page: 'https://we-are-adot.com/test',
235
- domain: 'we-are-adot.com',
236
- name: 'we-are-adot.com'
237
- },
238
- device: {
239
- ua: '',
240
- language: 'en'
241
- },
242
- user: null,
243
- regs: null,
244
- at: 1,
245
- ext: {
246
- adot: {
247
- 'adapter_version': 'v1.0.0'
248
- }
249
- }
250
- },
251
- _adot_internal: {
252
- impressions: [
253
- {
254
- impressionId: 'imp_id_video_instream_0',
255
- adUnitCode: 'ad_unit_video_instream',
256
- bidId: 'imp_id_video_instream'
257
- }
258
- ]
259
- }
260
- },
261
-
262
- serverRequest_video_outstream: {
263
- method: 'POST',
264
- url: 'https://we-are-adot.com/bidrequest',
265
- data: {
266
- id: 'bid_request_id',
267
- imp: [
268
- {
269
- id: 'imp_id_video_outstream_0',
270
- banner: null,
271
- video: {
272
- mimes: ['video/mp4'],
273
- w: 300,
274
- h: 200,
275
- startdelay: null,
276
- minduration: 5,
277
- maxduration: 35,
278
- protocols: [2, 3]
279
- }
98
+ page: bidderRequest.refererInfo.referer,
99
+ domain: 'localhost.com',
100
+ name: 'localhost.com',
101
+ publisher: {
102
+ // id: 'adot'
103
+ id: undefined
280
104
  }
281
- ],
282
- site: {
283
- page: 'https://we-are-adot.com/test',
284
- domain: 'we-are-adot.com',
285
- name: 'we-are-adot.com'
286
105
  },
287
- device: {
288
- ua: '',
289
- language: 'en'
290
- },
291
- user: null,
292
- regs: null,
293
- at: 1,
106
+ device: { ua: navigator.userAgent, language: navigator.language },
107
+ user: { ext: { consent: bidderRequest.gdprConsent.consentString } },
108
+ regs: { ext: { gdpr: bidderRequest.gdprConsent.gdprApplies } },
294
109
  ext: {
295
- adot: {
296
- 'adapter_version': 'v1.0.0'
297
- }
298
- }
299
- },
300
- _adot_internal: {
301
- impressions: [
302
- {
303
- impressionId: 'imp_id_video_outstream_0',
304
- adUnitCode: 'ad_unit_video_outstream',
305
- bidId: 'imp_id_video_outstream'
306
- }
307
- ]
110
+ adot: { adapter_version: 'v2.0.0' },
111
+ should_use_gzip: true
112
+ },
113
+ at: 1
308
114
  }
309
- },
310
115
 
311
- serverRequest_video_instream_outstream: {
312
- method: 'POST',
313
- url: 'https://we-are-adot.com/bidrequest',
314
- data: {
315
- id: 'bid_request_id',
316
- imp: [
317
- {
318
- id: 'imp_id_video_instream_0',
319
- banner: null,
320
- video: {
321
- mimes: ['video/mp4'],
322
- w: 300,
323
- h: 200,
324
- startdelay: 0,
325
- minduration: 5,
326
- maxduration: 35,
327
- protocols: [2, 3]
328
- }
116
+ expect(request).to.deep.equal([{
117
+ method: 'POST',
118
+ url: BIDDER_URL,
119
+ data: buildBidRequestResponse
120
+ }])
121
+ })
122
+
123
+ it('should build request (video)', function () {
124
+ const bidderRequestId = 'bidderRequestId';
125
+ const validBidRequests = [{ bidderRequestId, mediaTypes: {} }, { bidderRequestId, bidId: 'bidId', mediaTypes: { video: { playerSize: [[300, 250]], minduration: 1, maxduration: 2, api: 'api', linearity: 'linearity', mimes: [], placement: 'placement', playbackmethod: 'playbackmethod', protocols: 'protocol', startdelay: 'startdelay' } }, params: { placementId: 'placementId', adUnitCode: 200 } }];
126
+ const bidderRequest = { position: 2, refererInfo: { referer: 'http://localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } };
127
+
128
+ const request = spec.buildRequests(validBidRequests, bidderRequest);
129
+ const buildBidRequestResponse = {
130
+ id: bidderRequestId,
131
+ imp: [{
132
+ id: validBidRequests[1].bidId,
133
+ ext: {
134
+ placementId: validBidRequests[1].params.placementId,
135
+ adUnitCode: validBidRequests[1].adUnitCode,
136
+ container: undefined
329
137
  },
330
- {
331
- id: 'imp_id_video_outstream_0',
332
- banner: null,
333
- video: {
334
- mimes: ['video/mp4'],
335
- w: 300,
336
- h: 200,
337
- startdelay: null,
338
- minduration: 5,
339
- maxduration: 35,
340
- protocols: [2, 3]
341
- }
342
- }
343
- ],
344
- site: {
345
- page: 'https://we-are-adot.com/test',
346
- domain: 'we-are-adot.com',
347
- name: 'we-are-adot.com'
348
- },
349
- device: {
350
- ua: '',
351
- language: 'en'
352
- },
353
- user: null,
354
- regs: null,
355
- at: 1,
356
- ext: {
357
- adot: {
358
- 'adapter_version': 'v1.0.0'
359
- }
360
- }
361
- },
362
- _adot_internal: {
363
- impressions: [
364
- {
365
- impressionId: 'imp_id_video_instream_0',
366
- adUnitCode: 'ad_unit_video_instream',
367
- bidId: 'imp_id_video_instream'
138
+ video: {
139
+ api: 'api',
140
+ h: 250,
141
+ linearity: 'linearity',
142
+ maxduration: 2,
143
+ mimes: [],
144
+ minduration: 1,
145
+ placement: 'placement',
146
+ playbackmethod: 'playbackmethod',
147
+ pos: 0,
148
+ protocols: 'protocol',
149
+ skip: 0,
150
+ startdelay: 'startdelay',
151
+ w: 300
368
152
  },
369
- {
370
- impressionId: 'imp_id_video_outstream_0',
371
- adUnitCode: 'ad_unit_video_outstream',
372
- bidId: 'imp_id_video_outstream'
373
- }
374
- ]
375
- }
376
- },
377
-
378
- serverRequest_position: {
379
- method: 'POST',
380
- url: 'https://we-are-adot.com/bidrequest',
381
- data: {
382
- id: 'bid_request_id',
383
- imp: [
384
- {
385
- id: 'imp_id_banner',
386
- banner: {
387
- format: [{
388
- w: 300,
389
- h: 200
390
- }],
391
- position: 1
392
- },
393
- video: null
394
- }
395
- ],
153
+ bidfloorcur: 'USD',
154
+ bidfloor: 0
155
+ }],
396
156
  site: {
397
- page: 'https://we-are-adot.com/test',
398
- domain: 'we-are-adot.com',
399
- name: 'we-are-adot.com'
400
- },
401
- device: {
402
- ua: '',
403
- language: 'en'
404
- },
405
- user: null,
406
- regs: null,
407
- at: 1,
408
- ext: {
409
- adot: {
410
- 'adapter_version': 'v1.0.0'
411
- }
412
- }
413
- },
414
- _adot_internal: {
415
- impressions: [
416
- {
417
- impressionId: 'imp_id_banner',
418
- adUnitCode: 'ad_unit_position'
419
- }
420
- ]
421
- }
422
- },
423
-
424
- serverRequest_native: {
425
- method: 'POST',
426
- url: 'https://we-are-adot.com/bidrequest',
427
- data: {
428
- id: 'bid_request_id',
429
- imp: [
430
- {
431
- id: 'imp_id_native_0',
432
- native: {
433
- request: {
434
- assets: [
435
- {
436
- id: 1,
437
- required: true,
438
- title: {
439
- len: 140
440
- }
441
- },
442
- {
443
- id: 2,
444
- required: true,
445
- img: {
446
- type: 1,
447
- wmin: 50,
448
- hmin: 50
449
- }
450
- },
451
- {
452
- id: 3,
453
- required: false,
454
- img: {
455
- type: 3,
456
- wmin: 320,
457
- hmin: 200
458
- }
459
- },
460
- {
461
- id: 4,
462
- required: false,
463
- data: {
464
- type: 1
465
- }
466
- },
467
- {
468
- id: 5,
469
- required: false,
470
- data: {
471
- type: 2
472
- }
473
- },
474
- {
475
- id: 6,
476
- required: true,
477
- data: {
478
- type: 12
479
- }
480
- }
481
- ]
482
- }
483
- },
484
- video: null,
485
- banner: null
157
+ page: bidderRequest.refererInfo.referer,
158
+ domain: 'localhost.com',
159
+ name: 'localhost.com',
160
+ publisher: {
161
+ // id: 'adot'
162
+ id: undefined
486
163
  }
487
- ],
488
- site: {
489
- page: 'https://we-are-adot.com/test',
490
- domain: 'we-are-adot.com',
491
- name: 'we-are-adot.com'
492
- },
493
- device: {
494
- ua: '',
495
- language: 'en'
496
164
  },
497
- user: null,
498
- regs: null,
499
- at: 1,
165
+ device: { ua: navigator.userAgent, language: navigator.language },
166
+ user: { ext: { consent: bidderRequest.gdprConsent.consentString } },
167
+ regs: { ext: { gdpr: bidderRequest.gdprConsent.gdprApplies } },
500
168
  ext: {
501
- adot: {
502
- 'adapter_version': 'v1.0.0'
503
- }
504
- }
505
- },
506
- _adot_internal: {
507
- impressions: [
508
- {
509
- impressionId: 'imp_id_native_0',
510
- adUnitCode: 'ad_unit_native',
511
- bidId: 'imp_id_native'
512
- }
513
- ]
514
- }
515
- },
516
-
517
- serverResponse_banner: {
518
- body: {
519
- cur: 'EUR',
520
- seatbid: [
521
- {
522
- bid: [
523
- {
524
- impid: 'imp_id_banner_0_0',
525
- crid: 'creative_id',
526
- adm: 'creative_data_${AUCTION_PRICE}',
527
- nurl: 'win_notice_url_${AUCTION_PRICE}',
528
- price: 1.5,
529
- h: 350,
530
- w: 300,
531
- ext: {
532
- adot: {
533
- media_type: 'banner'
534
- }
535
- }
536
- }
537
- ]
538
- }
539
- ]
540
- }
541
- },
542
-
543
- serverResponse_banner_twoBids: {
544
- body: {
545
- cur: 'EUR',
546
- seatbid: [
547
- {
548
- bid: [
549
- {
550
- impid: 'imp_id_banner_0_0',
551
- crid: 'creative_id',
552
- adm: 'creative_data_${AUCTION_PRICE}',
553
- nurl: 'win_notice_url_${AUCTION_PRICE}',
554
- price: 1.5,
555
- h: 350,
556
- w: 300,
557
- adomain: ['adot'],
558
- ext: {
559
- adot: {
560
- media_type: 'banner'
561
- }
562
- }
563
- },
564
- {
565
- impid: 'imp_id_banner_2_0_0',
566
- crid: 'creative_id_2',
567
- adm: 'creative_data_2_${AUCTION_PRICE}',
568
- nurl: 'win_notice_url_2_${AUCTION_PRICE}',
569
- adomain: ['adot'],
570
- price: 2.5,
571
- h: 400,
572
- w: 350,
573
- ext: {
574
- adot: {
575
- media_type: 'banner'
576
- }
577
- }
578
- }
579
- ]
580
- }
581
- ]
169
+ adot: { adapter_version: 'v2.0.0' },
170
+ should_use_gzip: true
171
+ },
172
+ at: 1
582
173
  }
583
- },
584
174
 
585
- serverResponse_video_instream: {
586
- body: {
587
- cur: 'EUR',
588
- seatbid: [
589
- {
590
- bid: [
591
- {
592
- impid: 'imp_id_video_instream_0',
593
- crid: 'creative_id',
594
- adm: 'creative_data_${AUCTION_PRICE}',
595
- nurl: 'win_notice_url_${AUCTION_PRICE}',
596
- price: 1.5,
597
- ext: {
598
- adot: {
599
- media_type: 'video'
600
- }
601
- }
602
- }
603
- ]
604
- }
605
- ]
606
- }
607
- },
175
+ expect(request).to.deep.equal([{
176
+ method: 'POST',
177
+ url: BIDDER_URL,
178
+ data: buildBidRequestResponse
179
+ }])
180
+ })
181
+ });
608
182
 
609
- serverResponse_video_outstream: {
610
- body: {
611
- cur: 'EUR',
612
- seatbid: [
613
- {
614
- bid: [
615
- {
616
- impid: 'imp_id_video_outstream_0',
617
- crid: 'creative_id',
618
- adm: 'creative_data_${AUCTION_PRICE}',
619
- nurl: 'win_notice_url_${AUCTION_PRICE}',
620
- price: 1.5,
621
- ext: {
622
- adot: {
623
- media_type: 'video'
624
- }
625
- }
626
- }
627
- ]
628
- }
629
- ]
183
+ describe('interpretResponse', function () {
184
+ it('should return [] if !isValidResponse', function () {
185
+ const serverResponse = 'response';
186
+ const request = 'request';
187
+ const interpretedResponse = spec.interpretResponse(serverResponse, request);
188
+ expect(interpretedResponse).to.deep.equal([]);
189
+ })
190
+
191
+ it('should return [] if !isValidRequest', function () {
192
+ const serverResponse = { body: { cur: 'EUR', seatbid: [] } };
193
+ const request = 'request';
194
+ const interpretedResponse = spec.interpretResponse(serverResponse, request);
195
+ expect(interpretedResponse).to.deep.equal([]);
196
+ })
197
+
198
+ it('should return bidResponse with random media type', function () {
199
+ const impId = 'impId';
200
+ const bid = { adm: 'adm', impid: impId, price: 2, crid: 'crid', dealid: 'dealid', adomain: 'adomain', ext: { adot: { media_type: 'media_type', size: { w: 300, h: 250 } } } }
201
+ const serverResponse = { body: { cur: 'EUR', seatbid: [{ bid: {} }, { bid: [bid] }] } };
202
+ const request = { data: { imp: [{ id: impId }] } };
203
+ const bidResponse = {
204
+ requestId: impId,
205
+ cpm: bid.price,
206
+ currency: serverResponse.body.cur,
207
+ ttl: 10,
208
+ creativeId: bid.crid,
209
+ netRevenue: true,
210
+ mediaType: bid.ext.adot.media_type,
211
+ dealId: bid.dealid,
212
+ meta: { advertiserDomains: bid.adomain },
213
+ width: bid.ext.adot.size.w,
214
+ height: bid.ext.adot.size.h,
215
+ ad: bid.adm,
216
+ adUrl: null,
217
+ vastXml: null,
218
+ vastUrl: null,
219
+ renderer: null
630
220
  }
631
- },
632
221
 
633
- serverResponse_video_instream_outstream: {
634
- body: {
635
- cur: 'EUR',
636
- seatbid: [
637
- {
638
- bid: [
639
- {
640
- impid: 'imp_id_video_instream_0',
641
- crid: 'creative_id',
642
- adm: 'creative_data_${AUCTION_PRICE}',
643
- nurl: 'win_notice_url_${AUCTION_PRICE}',
644
- price: 1.5,
645
- ext: {
646
- adot: {
647
- media_type: 'video'
648
- }
649
- }
650
- },
651
- {
652
- impid: 'imp_id_video_outstream_0',
653
- crid: 'creative_id',
654
- adm: 'creative_data_${AUCTION_PRICE}',
655
- nurl: 'win_notice_url_${AUCTION_PRICE}',
656
- price: 1.5,
657
- ext: {
658
- adot: {
659
- media_type: 'video'
660
- }
661
- }
662
- }
663
- ]
664
- }
665
- ]
222
+ const interpretedResponse = spec.interpretResponse(serverResponse, request);
223
+ expect(interpretedResponse).to.deep.equal([bidResponse]);
224
+ })
225
+
226
+ it('should return bidResponse with native', function () {
227
+ const impId = 'impId';
228
+ const bid = { adm: '{"native":{"assets":[{"id":1,"title":{"text":"title"}},{"id":3,"img":{"url":"url","w":300,"h":250}}],"link":{"url":"clickUrl","clicktrackers":"clicktrackers"},"imptrackers":["imptracker"],"jstracker":"jstracker"}}', impid: impId, price: 2, crid: 'crid', dealid: 'dealid', adomain: 'adomain', ext: { adot: { media_type: 'native', size: { width: 300, height: 250 } } } }
229
+ const serverResponse = { body: { cur: 'EUR', seatbid: [{ bid: {} }, { bid: [bid] }] } };
230
+ const request = { data: { imp: [{ id: impId }] } };
231
+ const bidResponse = {
232
+ requestId: impId,
233
+ cpm: bid.price,
234
+ currency: serverResponse.body.cur,
235
+ ttl: 10,
236
+ creativeId: bid.crid,
237
+ netRevenue: true,
238
+ mediaType: bid.ext.adot.media_type,
239
+ dealId: bid.dealid,
240
+ meta: { advertiserDomains: bid.adomain },
241
+ native: {
242
+ title: 'title',
243
+ image: { url: 'url', width: 300, height: 250 },
244
+ clickUrl: 'clickUrl',
245
+ clickTrackers: 'clicktrackers',
246
+ impressionTrackers: ['imptracker'],
247
+ javascriptTrackers: ['jstracker']
248
+ }
666
249
  }
667
- },
668
250
 
669
- serverResponse_native: {
670
- body: {
671
- cur: 'EUR',
672
- seatbid: [
673
- {
674
- bid: [
675
- {
676
- impid: 'imp_id_native_0',
677
- crid: 'creative_id',
678
- adm: '{"native":{"assets":[{"id":1,"title":{"len":140,"text":"Hi everyone"}},{"id":2,"img":{"url":"https://adotmob.com","type":1,"w":50,"h":50}},{"id":3,"img":{"url":"https://adotmob.com","type":3,"w":320,"h":200}},{"id":4,"data":{"type":1,"value":"adotmob"}},{"id":5,"data":{"type":2,"value":"This is a test ad"}},{"id":6,"data":{"type":12,"value":"Click to buy"}}],"link":{"url":"https://adotmob.com?auction=${AUCTION_PRICE}"}}}',
679
- nurl: 'win_notice_url_${AUCTION_PRICE}',
680
- price: 1.5,
681
- ext: {
682
- adot: {
683
- media_type: 'native'
684
- }
685
- }
686
- }
687
- ]
688
- }
689
- ]
251
+ const interpretedResponse = spec.interpretResponse(serverResponse, request);
252
+ expect(interpretedResponse).to.deep.equal([bidResponse]);
253
+ })
254
+
255
+ it('should return bidResponse with video', function () {
256
+ const impId = 'impId';
257
+ const bid = { nurl: 'nurl', impid: impId, price: 2, crid: 'crid', dealid: 'dealid', adomain: 'adomain', ext: { adot: { media_type: 'video', size: { w: 300, h: 250 }, container: {}, adUnitCode: 20, video: { type: 'outstream' } } } }
258
+ const serverResponse = { body: { cur: 'EUR', seatbid: [{ bid: {} }, { bid: [bid] }] } };
259
+ const request = { data: { imp: [{ id: impId }] } };
260
+ const bidResponse = {
261
+ requestId: impId,
262
+ cpm: bid.price,
263
+ currency: serverResponse.body.cur,
264
+ ttl: 10,
265
+ creativeId: bid.crid,
266
+ netRevenue: true,
267
+ mediaType: bid.ext.adot.media_type,
268
+ dealId: bid.dealid,
269
+ meta: { advertiserDomains: bid.adomain },
270
+ w: bid.ext.adot.size.w,
271
+ h: bid.ext.adot.size.h,
272
+ ad: null,
273
+ adUrl: bid.nurl,
274
+ vastXml: null,
275
+ vastUrl: bid.nurl
690
276
  }
691
- }
692
- };
693
-
694
- describe('isBidRequestValid', function () {
695
- describe('General', function () {
696
- it('should return false when not given an ad unit', function () {
697
- const adUnit = undefined;
698
-
699
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
700
- });
701
-
702
- it('should return false when given an invalid ad unit', function () {
703
- const adUnit = 'bad_bid';
704
-
705
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
706
- });
707
-
708
- it('should return false when given an ad unit without bidder code', function () {
709
- const adUnit = utils.deepClone(examples.adUnit_banner);
710
- adUnit.bidder = undefined;
711
-
712
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
713
- });
714
-
715
- it('should return false when given an ad unit with a bad bidder code', function () {
716
- const adUnit = utils.deepClone(examples.adUnit_banner);
717
- adUnit.bidder = 'unknownBidder';
718
-
719
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
720
- });
721
-
722
- it('should return false when given an ad unit without ad unit code', function () {
723
- const adUnit = utils.deepClone(examples.adUnit_banner);
724
- adUnit.adUnitCode = undefined;
725
-
726
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
727
- });
728
-
729
- it('should return false when given an ad unit with an invalid ad unit code', function () {
730
- const adUnit = utils.deepClone(examples.adUnit_banner);
731
- adUnit.adUnitCode = {};
732
-
733
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
734
- });
735
-
736
- it('should return false when given an ad unit without bid request identifier', function () {
737
- const adUnit = utils.deepClone(examples.adUnit_banner);
738
- adUnit.bidderRequestId = undefined;
739
-
740
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
741
- });
742
-
743
- it('should return false when given an ad unit with an invalid bid request identifier', function () {
744
- const adUnit = utils.deepClone(examples.adUnit_banner);
745
- adUnit.bidderRequestId = {};
746
-
747
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
748
- });
749
-
750
- it('should return false when given an ad unit without impression identifier', function () {
751
- const adUnit = utils.deepClone(examples.adUnit_banner);
752
- adUnit.bidId = undefined;
753
-
754
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
755
- });
756
-
757
- it('should return false when given an ad unit with an invalid impression identifier', function () {
758
- const adUnit = utils.deepClone(examples.adUnit_banner);
759
- adUnit.bidId = {};
760
-
761
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
762
- });
763
-
764
- it('should return false when given an ad unit without media types', function () {
765
- const adUnit = utils.deepClone(examples.adUnit_banner);
766
- adUnit.mediaTypes = undefined;
767
-
768
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
769
- });
770
-
771
- it('should return false when given an ad unit with empty media types', function () {
772
- const adUnit = utils.deepClone(examples.adUnit_banner);
773
- adUnit.mediaTypes = {};
774
-
775
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
776
- });
777
-
778
- it('should return false when given an ad unit with invalid media types', function () {
779
- const adUnit = utils.deepClone(examples.adUnit_banner);
780
- adUnit.mediaTypes = 'bad_media_types';
781
-
782
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
783
- });
784
- });
785
-
786
- describe('Banner', function () {
787
- it('should return true when given a valid ad unit', function () {
788
- const adUnit = examples.adUnit_banner;
789
-
790
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
791
- });
792
-
793
- it('should return true when given a valid ad unit without bidder parameters', function () {
794
- const adUnit = utils.deepClone(examples.adUnit_banner);
795
- adUnit.params = undefined;
796
-
797
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
798
- });
799
-
800
- it('should return false when given an ad unit without size', function () {
801
- const adUnit = utils.deepClone(examples.adUnit_banner);
802
- adUnit.mediaTypes.banner.sizes = undefined;
803
-
804
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
805
- });
806
277
 
807
- it('should return false when given an ad unit with an invalid size', function () {
808
- const adUnit = utils.deepClone(examples.adUnit_banner);
809
- adUnit.mediaTypes.banner.sizes = 'bad_banner_size';
810
-
811
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
812
- });
813
-
814
- it('should return false when given an ad unit with an empty size', function () {
815
- const adUnit = utils.deepClone(examples.adUnit_banner);
816
- adUnit.mediaTypes.banner.sizes = [];
817
-
818
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
819
- });
820
-
821
- it('should return false when given an ad unit with an invalid size value', function () {
822
- const adUnit = utils.deepClone(examples.adUnit_banner);
823
- adUnit.mediaTypes.banner.sizes = ['bad_banner_size_value'];
824
-
825
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
826
- });
827
-
828
- it('should return false when given an ad unit with a size value with less than 2 dimensions', function () {
829
- const adUnit = utils.deepClone(examples.adUnit_banner);
830
- adUnit.mediaTypes.banner.sizes = [[300]];
831
-
832
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
833
- });
834
-
835
- it('should return false when given an ad unit with a size value with more than 2 dimensions', function () {
836
- const adUnit = utils.deepClone(examples.adUnit_banner);
837
- adUnit.mediaTypes.banner.sizes = [[300, 250, 30]];
838
-
839
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
840
- });
841
-
842
- it('should return false when given an ad unit with a negative width value', function () {
843
- const adUnit = utils.deepClone(examples.adUnit_banner);
844
- adUnit.mediaTypes.banner.sizes = [[-300, 250]];
845
-
846
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
847
- });
848
-
849
- it('should return false when given an ad unit with a negative height value', function () {
850
- const adUnit = utils.deepClone(examples.adUnit_banner);
851
- adUnit.mediaTypes.banner.sizes = [[300, -250]];
852
-
853
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
854
- });
855
-
856
- it('should return false when given an ad unit with an invalid width value', function () {
857
- const adUnit = utils.deepClone(examples.adUnit_banner);
858
- adUnit.mediaTypes.banner.sizes = [[false, 250]];
859
-
860
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
861
- });
862
-
863
- it('should return false when given an ad unit with an invalid height value', function () {
864
- const adUnit = utils.deepClone(examples.adUnit_banner);
865
- adUnit.mediaTypes.banner.sizes = [[300, {}]];
866
-
867
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
868
- });
869
- });
870
-
871
- describe('Video', function () {
872
- it('should return true when given a valid outstream ad unit', function () {
873
- const adUnit = examples.adUnit_video_outstream;
874
-
875
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
876
- });
877
-
878
- it('should return true when given a valid pre-roll instream ad unit', function () {
879
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
880
- adUnit.params.video.instreamContext = 'pre-roll';
881
-
882
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
883
- });
884
-
885
- it('should return true when given a valid mid-roll instream ad unit', function () {
886
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
887
- adUnit.params.video.instreamContext = 'mid-roll';
888
-
889
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
890
- });
891
-
892
- it('should return true when given a valid post-roll instream ad unit', function () {
893
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
894
- adUnit.params.video.instreamContext = 'post-roll';
895
-
896
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
897
- });
898
-
899
- it('should return true when given an ad unit without size', function () {
900
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
901
- adUnit.mediaTypes.video.playerSize = undefined;
902
-
903
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
904
- });
905
-
906
- it('should return true when given an ad unit with an empty size', function () {
907
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
908
- adUnit.mediaTypes.video.playerSize = [];
909
-
910
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
911
- });
912
-
913
- it('should return true when given an ad unit without minimum duration parameter', function () {
914
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
915
- adUnit.mediaTypes.video.minDuration = undefined;
916
-
917
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
918
- });
919
-
920
- it('should return true when given an ad unit without maximum duration parameter', function () {
921
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
922
- adUnit.mediaTypes.video.maxDuration = undefined;
923
-
924
- expect(spec.isBidRequestValid(adUnit)).to.equal(true);
925
- });
926
-
927
- it('should return false when given an ad unit without bidder parameters', function () {
928
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
929
- adUnit.params = undefined;
930
-
931
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
932
- });
933
-
934
- it('should return false when given an ad unit with invalid bidder parameters', function () {
935
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
936
- adUnit.params = 'bad_bidder_parameters';
937
-
938
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
939
- });
940
-
941
- it('should return false when given an ad unit without video parameters', function () {
942
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
943
- adUnit.mediaTypes.video = undefined;
944
-
945
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
946
- });
947
-
948
- it('should return false when given an ad unit with invalid video parameters', function () {
949
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
950
- adUnit.mediaTypes.video = 'bad_bidder_parameters';
951
-
952
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
953
- });
954
-
955
- it('should return false when given an ad unit without mime types parameter', function () {
956
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
957
- adUnit.mediaTypes.video.mimes = undefined;
958
-
959
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
960
- });
961
-
962
- it('should return false when given an ad unit with an invalid mime types parameter', function () {
963
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
964
- adUnit.mediaTypes.video.mimes = 'bad_mime_types';
965
-
966
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
967
- });
968
-
969
- it('should return false when given an ad unit with an empty mime types parameter', function () {
970
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
971
- adUnit.mediaTypes.video.mimes = [];
972
-
973
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
974
- });
975
-
976
- it('should return false when given an ad unit with an invalid mime types parameter value', function () {
977
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
978
- adUnit.mediaTypes.video.mimes = [200];
979
-
980
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
981
- });
982
-
983
- it('should return false when given an ad unit with an invalid minimum duration parameter', function () {
984
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
985
- adUnit.mediaTypes.video.minDuration = 'bad_min_duration';
986
-
987
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
988
- });
989
-
990
- it('should return false when given an ad unit with an invalid maximum duration parameter', function () {
991
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
992
- adUnit.mediaTypes.video.maxDuration = 'bad_max_duration';
993
-
994
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
995
- });
996
-
997
- it('should return false when given an ad unit without protocols parameter', function () {
998
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
999
- adUnit.mediaTypes.video.protocols = undefined;
1000
-
1001
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1002
- });
1003
-
1004
- it('should return false when given an ad unit with an invalid protocols parameter', function () {
1005
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1006
- adUnit.mediaTypes.video.protocols = 'bad_protocols';
1007
-
1008
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1009
- });
1010
-
1011
- it('should return false when given an ad unit with an empty protocols parameter', function () {
1012
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1013
- adUnit.mediaTypes.video.protocols = [];
1014
-
1015
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1016
- });
1017
-
1018
- it('should return false when given an ad unit with an invalid protocols parameter value', function () {
1019
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1020
- adUnit.mediaTypes.video.protocols = ['bad_protocols_value'];
1021
-
1022
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1023
- });
1024
-
1025
- it('should return false when given an instream ad unit without instream context', function () {
1026
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
1027
- adUnit.params.video.instreamContext = undefined;
1028
-
1029
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1030
- });
1031
-
1032
- it('should return false when given an instream ad unit with an invalid instream context', function () {
1033
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
1034
- adUnit.params.video.instreamContext = 'bad_instream_context';
1035
-
1036
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1037
- });
1038
-
1039
- it('should return false when given an ad unit without context', function () {
1040
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1041
- adUnit.mediaTypes.video.context = undefined;
1042
-
1043
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1044
- });
1045
-
1046
- it('should return false when given an ad unit with an invalid context', function () {
1047
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1048
- adUnit.mediaTypes.video.context = [];
1049
-
1050
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1051
- });
1052
-
1053
- it('should return false when given an adpod ad unit', function () {
1054
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1055
- adUnit.mediaTypes.video.context = 'adpod';
1056
-
1057
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1058
- });
1059
-
1060
- it('should return false when given an ad unit with an unknown context', function () {
1061
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1062
- adUnit.mediaTypes.video.context = 'invalid_context';
1063
-
1064
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1065
- });
1066
-
1067
- it('should return false when given an ad unit with an invalid size', function () {
1068
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1069
- adUnit.mediaTypes.video.playerSize = 'bad_video_size';
1070
-
1071
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1072
- });
1073
-
1074
- it('should return false when given an ad unit with an invalid size value', function () {
1075
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1076
- adUnit.mediaTypes.video.playerSize = ['bad_video_size_value'];
1077
-
1078
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1079
- });
1080
-
1081
- it('should return false when given an ad unit with a size value with less than 2 dimensions', function () {
1082
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1083
- adUnit.mediaTypes.video.playerSize = [[300]];
1084
-
1085
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1086
- });
1087
-
1088
- it('should return false when given an ad unit with a size value with more than 2 dimensions', function () {
1089
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1090
- adUnit.mediaTypes.video.playerSize = [[300, 250, 30]];
1091
-
1092
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1093
- });
1094
-
1095
- it('should return false when given an ad unit with a negative width value', function () {
1096
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1097
- adUnit.mediaTypes.video.playerSize = [[-300, 250]];
1098
-
1099
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1100
- });
1101
-
1102
- it('should return false when given an ad unit with a negative height value', function () {
1103
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1104
- adUnit.mediaTypes.video.playerSize = [[300, -250]];
1105
-
1106
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1107
- });
1108
-
1109
- it('should return false when given an ad unit with an invalid width value', function () {
1110
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1111
- adUnit.mediaTypes.video.playerSize = [[false, 250]];
1112
-
1113
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1114
- });
1115
-
1116
- it('should return false when given an ad unit with an invalid height value', function () {
1117
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1118
- adUnit.mediaTypes.video.playerSize = [[300, {}]];
1119
-
1120
- expect(spec.isBidRequestValid(adUnit)).to.equal(false);
1121
- });
1122
- });
278
+ const interpretedResponse = spec.interpretResponse(serverResponse, request);
279
+ expect(interpretedResponse).to.be.an('array').and.to.have.lengthOf(1)
280
+ expect(interpretedResponse[0].requestId).to.deep.equal(bidResponse.requestId);
281
+ expect(interpretedResponse[0].cpm).to.deep.equal(bidResponse.cpm);
282
+ expect(interpretedResponse[0].currency).to.deep.equal(bidResponse.currency);
283
+ expect(interpretedResponse[0].ttl).to.deep.equal(bidResponse.ttl);
284
+ expect(interpretedResponse[0].creativeId).to.deep.equal(bidResponse.creativeId);
285
+ expect(interpretedResponse[0].netRevenue).to.deep.equal(bidResponse.netRevenue);
286
+ expect(interpretedResponse[0].mediaType).to.deep.equal(bidResponse.mediaType);
287
+ expect(interpretedResponse[0].dealId).to.deep.equal(bidResponse.dealId);
288
+ expect(interpretedResponse[0].meta).to.deep.equal(bidResponse.meta);
289
+ expect(interpretedResponse[0].width).to.deep.equal(bidResponse.w);
290
+ expect(interpretedResponse[0].height).to.deep.equal(bidResponse.h);
291
+ expect(interpretedResponse[0].ad).to.deep.equal(bidResponse.ad);
292
+ expect(interpretedResponse[0].adUrl).to.deep.equal(bidResponse.adUrl);
293
+ expect(interpretedResponse[0].vastXml).to.deep.equal(bidResponse.vastXml);
294
+ expect(interpretedResponse[0].vastUrl).to.deep.equal(bidResponse.vastUrl);
295
+ expect(interpretedResponse[0].renderer).to.be.an('object');
296
+ })
1123
297
  });
1124
298
 
1125
- describe('buildRequests', function () {
1126
- describe('ServerRequest', function () {
1127
- it('should return a server request when given a valid ad unit and a valid ad unit context', function () {
1128
- const adUnits = [examples.adUnit_banner];
1129
-
1130
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1131
-
1132
- expect(serverRequests).to.be.an('array').and.to.have.length(1);
1133
- expect(serverRequests[0].method).to.exist.and.to.be.a('string').and.to.equal('POST');
1134
- expect(serverRequests[0].url).to.exist.and.to.be.a('string').and.to.equal(BIDDER_URL);
1135
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1136
- expect(serverRequests[0]._adot_internal).to.exist.and.to.be.an('object');
1137
- expect(serverRequests[0]._adot_internal.impressions).to.exist.and.to.be.an('array').and.to.have.length(1);
1138
- expect(serverRequests[0]._adot_internal.impressions[0]).to.exist.and.to.be.an('object');
1139
- expect(serverRequests[0]._adot_internal.impressions[0].impressionId).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1140
- expect(serverRequests[0]._adot_internal.impressions[0].adUnitCode).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].adUnitCode);
1141
- });
1142
-
1143
- it('should return a server request containing a position when given a valid ad unit and a valid ad unit context and a position in the bidder params', function () {
1144
- const adUnits = [examples.adUnit_position];
1145
-
1146
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1147
-
1148
- expect(serverRequests).to.be.an('array').and.to.have.length(1);
1149
- expect(serverRequests[0].method).to.exist.and.to.be.a('string').and.to.equal('POST');
1150
- expect(serverRequests[0].url).to.exist.and.to.be.a('string').and.to.equal(BIDDER_URL);
1151
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1152
- expect(serverRequests[0]._adot_internal).to.exist.and.to.be.an('object');
1153
- expect(serverRequests[0]._adot_internal.impressions).to.exist.and.to.be.an('array').and.to.have.length(1);
1154
- expect(serverRequests[0]._adot_internal.impressions[0]).to.exist.and.to.be.an('object');
1155
- expect(serverRequests[0]._adot_internal.impressions[0].impressionId).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1156
- expect(serverRequests[0]._adot_internal.impressions[0].adUnitCode).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].adUnitCode);
1157
- expect(serverRequests[0].data.imp[0].banner.pos).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].params.position);
1158
- });
1159
-
1160
- it('should return a server request when given two valid ad units and a valid ad unit context', function () {
1161
- const adUnits_1 = utils.deepClone(examples.adUnit_banner);
1162
- adUnits_1.bidId = 'bid_id_1';
1163
- adUnits_1.adUnitCode = 'ad_unit_banner_1';
1164
-
1165
- const adUnits_2 = utils.deepClone(examples.adUnit_banner);
1166
- adUnits_2.bidId = 'bid_id_2';
1167
- adUnits_2.adUnitCode = 'ad_unit_banner_2';
1168
-
1169
- const adUnits = [adUnits_1, adUnits_2];
1170
-
1171
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1172
-
1173
- expect(serverRequests).to.be.an('array').and.to.have.length(1);
1174
- expect(serverRequests[0].method).to.exist.and.to.be.a('string').and.to.equal('POST');
1175
- expect(serverRequests[0].url).to.exist.and.to.be.a('string').and.to.equal(BIDDER_URL);
1176
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1177
- expect(serverRequests[0]._adot_internal).to.exist.and.to.be.an('object');
1178
- expect(serverRequests[0]._adot_internal.impressions).to.exist.and.to.be.an('array').and.to.have.length(2);
1179
- expect(serverRequests[0]._adot_internal.impressions[0]).to.exist.and.to.be.an('object');
1180
- expect(serverRequests[0]._adot_internal.impressions[0].impressionId).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1181
- expect(serverRequests[0]._adot_internal.impressions[0].adUnitCode).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].adUnitCode);
1182
- expect(serverRequests[0]._adot_internal.impressions[1]).to.exist.and.to.be.an('object');
1183
- expect(serverRequests[0]._adot_internal.impressions[1].impressionId).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0_0`);
1184
- expect(serverRequests[0]._adot_internal.impressions[1].adUnitCode).to.exist.and.to.be.a('string').and.to.equal(adUnits[1].adUnitCode);
1185
- });
1186
-
1187
- it('should return an empty server request list when given an empty ad unit list and a valid ad unit context', function () {
1188
- const adUnits = [];
1189
-
1190
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1191
-
1192
- expect(serverRequests).to.be.an('array').and.to.have.length(0);
1193
- });
1194
-
1195
- it('should not return a server request when given no ad unit and a valid ad unit context', function () {
1196
- const serverRequests = spec.buildRequests(null, examples.adUnitContext);
1197
-
1198
- expect(serverRequests).to.equal(null);
1199
- });
1200
-
1201
- it('should not return a server request when given a valid ad unit and no ad unit context', function () {
1202
- const adUnits = [examples.adUnit_banner];
1203
-
1204
- const serverRequests = spec.buildRequests(adUnits, null);
1205
-
1206
- expect(serverRequests).to.be.an('array').and.to.have.length(1);
1207
- });
1208
-
1209
- it('should not return a server request when given a valid ad unit and an invalid ad unit context', function () {
1210
- const adUnits = [examples.adUnit_banner];
1211
-
1212
- const serverRequests = spec.buildRequests(adUnits, {});
1213
-
1214
- expect(serverRequests).to.be.an('array').and.to.have.length(1);
1215
- });
1216
- });
1217
-
1218
- describe('BidRequest', function () {
1219
- it('should return a valid server request when given a valid ad unit', function () {
1220
- const adUnits = [examples.adUnit_banner];
1221
-
1222
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1223
-
1224
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1225
- expect(serverRequests[0].data.id).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].bidderRequestId);
1226
- expect(serverRequests[0].data.at).to.exist.and.to.be.a('number').and.to.equal(1);
1227
- expect(serverRequests[0].data.ext).to.exist.and.to.be.an('object');
1228
- expect(serverRequests[0].data.ext.adot).to.exist.and.to.be.an('object');
1229
- expect(serverRequests[0].data.ext.adot.adapter_version).to.exist.and.to.be.a('string').and.to.equal('v1.0.0');
1230
- });
1231
-
1232
- it('should return one server request when given one valid ad unit', function () {
1233
- const adUnits = [examples.adUnit_banner];
1234
-
1235
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1236
-
1237
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1238
- expect(serverRequests[0].data.id).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].bidderRequestId);
1239
- });
1240
-
1241
- it('should return one server request when given two valid ad units with different impression identifiers', function () {
1242
- const adUnit_1 = utils.deepClone(examples.adUnit_banner);
1243
- adUnit_1.bidId = 'bid_id_1';
1244
-
1245
- const adUnit_2 = utils.deepClone(examples.adUnit_banner);
1246
- adUnit_2.bidId = 'bid_id_2';
1247
-
1248
- const adUnits = [adUnit_1, adUnit_2];
1249
-
1250
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1251
-
1252
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1253
- expect(serverRequests[0].data.id).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].bidderRequestId);
1254
- expect(serverRequests[0].data.id).to.exist.and.to.be.a('string').and.to.equal(adUnits[1].bidderRequestId);
1255
- });
1256
-
1257
- it('should return two server requests when given two valid ad units with different bid request identifiers', function () {
1258
- const adUnit_1 = utils.deepClone(examples.adUnit_banner);
1259
- adUnit_1.bidderRequestId = 'bidder_request_id_1';
1260
-
1261
- const adUnit_2 = utils.deepClone(examples.adUnit_banner);
1262
- adUnit_2.bidderRequestId = 'bidder_request_id_2';
1263
-
1264
- const adUnits = [adUnit_1, adUnit_2];
1265
-
1266
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1267
-
1268
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(2);
1269
- expect(serverRequests[0].data.id).to.exist.and.to.be.a('string').and.to.equal(adUnits[0].bidderRequestId);
1270
- expect(serverRequests[1].data.id).to.exist.and.to.be.a('string').and.to.equal(adUnits[1].bidderRequestId);
1271
- });
1272
- });
1273
-
1274
- describe('Impression', function () {
1275
- describe('Banner', function () {
1276
- it('should return a server request with one impression when given a valid ad unit', function () {
1277
- const adUnits = [examples.adUnit_banner];
1278
-
1279
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1280
-
1281
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1282
-
1283
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1284
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1285
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1286
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1287
- expect(serverRequests[0].data.imp[0].banner).to.exist.and.to.be.an('object');
1288
- expect(serverRequests[0].data.imp[0].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[0][0]);
1289
- expect(serverRequests[0].data.imp[0].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[0][1]);
1290
- expect(serverRequests[0].data.imp[0].banner.format).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1291
- expect(serverRequests[0].data.imp[0].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1292
- w: adUnits[0].mediaTypes.banner.sizes[0][0],
1293
- h: adUnits[0].mediaTypes.banner.sizes[0][1]
1294
- });
1295
- });
1296
-
1297
- it('should return a server request with two impressions containing one banner formats when given a valid ad unit with two banner sizes', function () {
1298
- const adUnit = utils.deepClone(examples.adUnit_banner);
1299
- adUnit.mediaTypes.banner.sizes = [
1300
- [300, 250],
1301
- [350, 300]
1302
- ];
1303
-
1304
- const adUnits = [adUnit];
1305
-
1306
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1307
-
1308
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1309
-
1310
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1311
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(2);
1312
-
1313
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1314
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1315
- expect(serverRequests[0].data.imp[0].banner).to.exist.and.to.be.an('object');
1316
- expect(serverRequests[0].data.imp[0].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[0][0]);
1317
- expect(serverRequests[0].data.imp[0].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[0][1]);
1318
- expect(serverRequests[0].data.imp[0].banner.format).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1319
- expect(serverRequests[0].data.imp[0].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1320
- w: adUnits[0].mediaTypes.banner.sizes[0][0],
1321
- h: adUnits[0].mediaTypes.banner.sizes[0][1]
1322
- });
1323
-
1324
- expect(serverRequests[0].data.imp[1]).to.exist.and.to.be.an('object');
1325
- expect(serverRequests[0].data.imp[1].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_1`);
1326
- expect(serverRequests[0].data.imp[1].banner).to.exist.and.to.be.an('object');
1327
- expect(serverRequests[0].data.imp[1].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[1][0]);
1328
- expect(serverRequests[0].data.imp[1].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[1][1]);
1329
- expect(serverRequests[0].data.imp[1].banner.format).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1330
- expect(serverRequests[0].data.imp[1].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1331
- w: adUnits[0].mediaTypes.banner.sizes[1][0],
1332
- h: adUnits[0].mediaTypes.banner.sizes[1][1]
1333
- });
1334
- });
1335
-
1336
- it('should return a server request with two impressions when given two valid ad units with different impression identifiers', function () {
1337
- const adUnit_1 = utils.deepClone(examples.adUnit_banner);
1338
- adUnit_1.bidId = 'bid_id_1';
1339
-
1340
- const adUnit_2 = utils.deepClone(examples.adUnit_banner);
1341
- adUnit_2.bidId = 'bid_id_2';
1342
-
1343
- const adUnits = [adUnit_1, adUnit_2];
1344
-
1345
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1346
-
1347
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1348
-
1349
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1350
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(2);
1351
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1352
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1353
- expect(serverRequests[0].data.imp[0].banner).to.exist.and.to.be.an('object');
1354
- expect(serverRequests[0].data.imp[0].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[0][0]);
1355
- expect(serverRequests[0].data.imp[0].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.banner.sizes[0][1]);
1356
- expect(serverRequests[0].data.imp[0].banner.format).to.exist.and.to.be.an('array');
1357
- expect(serverRequests[0].data.imp[0].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1358
- w: adUnits[0].mediaTypes.banner.sizes[0][0],
1359
- h: adUnits[0].mediaTypes.banner.sizes[0][1]
1360
- });
1361
- expect(serverRequests[0].data.imp[1]).to.exist.and.to.be.an('object');
1362
- expect(serverRequests[0].data.imp[1].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0_0`);
1363
- expect(serverRequests[0].data.imp[1].banner).to.exist.and.to.be.an('object');
1364
- expect(serverRequests[0].data.imp[1].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][0]);
1365
- expect(serverRequests[0].data.imp[1].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][1]);
1366
- expect(serverRequests[0].data.imp[1].banner.format).to.exist.and.to.be.an('array');
1367
- expect(serverRequests[0].data.imp[1].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1368
- w: adUnits[1].mediaTypes.banner.sizes[0][0],
1369
- h: adUnits[1].mediaTypes.banner.sizes[0][1]
1370
- });
1371
- });
1372
-
1373
- it('should return a server request with one overriden impression when given two valid ad units with identical identifiers', function () {
1374
- const adUnit_1 = utils.deepClone(examples.adUnit_banner);
1375
- adUnit_1.mediaTypes.banner.sizes = [[300, 250]];
1376
-
1377
- const adUnit_2 = utils.deepClone(examples.adUnit_banner);
1378
- adUnit_2.mediaTypes.banner.sizes = [[350, 300]];
1379
-
1380
- const adUnits = [adUnit_1, adUnit_2];
1381
-
1382
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1383
-
1384
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1385
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1386
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1387
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1388
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0_0`);
1389
- expect(serverRequests[0].data.imp[0].banner).to.exist.and.to.be.an('object');
1390
- expect(serverRequests[0].data.imp[0].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][0]);
1391
- expect(serverRequests[0].data.imp[0].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][1]);
1392
- expect(serverRequests[0].data.imp[0].banner.format).to.exist.and.to.be.an('array');
1393
- expect(serverRequests[0].data.imp[0].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1394
- w: adUnits[1].mediaTypes.banner.sizes[0][0],
1395
- h: adUnits[1].mediaTypes.banner.sizes[0][1]
1396
- });
1397
- });
1398
-
1399
- it('should return two server requests with one impression when given two valid ad units with different bid request identifiers', function () {
1400
- const adUnit_1 = utils.deepClone(examples.adUnit_banner);
1401
- adUnit_1.bidderRequestId = 'bidder_request_id_1';
1402
-
1403
- const adUnit_2 = utils.deepClone(examples.adUnit_banner);
1404
- adUnit_2.bidderRequestId = 'bidder_request_id_2';
1405
-
1406
- const adUnits = [adUnit_1, adUnit_2];
1407
-
1408
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1409
-
1410
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(2);
1411
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1412
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1413
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1414
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0_0`);
1415
- expect(serverRequests[0].data.imp[0].banner).to.exist.and.to.be.an('object');
1416
- expect(serverRequests[0].data.imp[0].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][0]);
1417
- expect(serverRequests[0].data.imp[0].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][1]);
1418
- expect(serverRequests[0].data.imp[0].banner.format).to.exist.and.to.be.an('array');
1419
- expect(serverRequests[0].data.imp[0].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1420
- w: adUnits[0].mediaTypes.banner.sizes[0][0],
1421
- h: adUnits[0].mediaTypes.banner.sizes[0][1]
1422
- });
1423
- expect(serverRequests[1].data).to.exist.and.to.be.an('object');
1424
- expect(serverRequests[1].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[1].bidderRequestId);
1425
- expect(serverRequests[1].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1426
- expect(serverRequests[1].data.imp[0]).to.exist.and.to.be.an('object');
1427
- expect(serverRequests[1].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0_0`);
1428
- expect(serverRequests[1].data.imp[0].banner).to.exist.and.to.be.an('object');
1429
- expect(serverRequests[1].data.imp[0].banner.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][0]);
1430
- expect(serverRequests[1].data.imp[0].banner.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.banner.sizes[0][1]);
1431
- expect(serverRequests[1].data.imp[0].banner.format).to.exist.and.to.be.an('array');
1432
- expect(serverRequests[1].data.imp[0].banner.format[0]).to.exist.and.to.be.an('object').and.to.deep.equal({
1433
- w: adUnits[1].mediaTypes.banner.sizes[0][0],
1434
- h: adUnits[1].mediaTypes.banner.sizes[0][1]
1435
- });
1436
- });
1437
- });
1438
-
1439
- describe('Video', function () {
1440
- it('should return a server request with one impression when given a valid outstream ad unit', function () {
1441
- const adUnit = examples.adUnit_video_outstream;
1442
-
1443
- const adUnits = [adUnit];
1444
-
1445
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1446
-
1447
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1448
-
1449
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1450
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1451
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1452
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1453
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1454
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1455
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1456
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1457
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1458
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1459
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1460
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1461
- });
1462
-
1463
- it('should return a server request with one impression when given a valid pre-roll instream ad unit', function () {
1464
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
1465
- adUnit.params.video.instreamContext = 'pre-roll';
1466
-
1467
- const adUnits = [adUnit];
1468
-
1469
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1470
-
1471
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1472
-
1473
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1474
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1475
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1476
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1477
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1478
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1479
- expect(serverRequests[0].data.imp[0].video.startdelay).to.exist.and.to.be.a('number').and.to.equal(0);
1480
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1481
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1482
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1483
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1484
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1485
- });
1486
-
1487
- it('should return a server request with one impression when given a valid mid-roll instream ad unit', function () {
1488
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
1489
- adUnit.params.video.instreamContext = 'mid-roll';
1490
-
1491
- const adUnits = [adUnit];
1492
-
1493
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1494
-
1495
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1496
-
1497
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1498
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1499
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1500
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1501
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1502
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1503
- expect(serverRequests[0].data.imp[0].video.startdelay).to.exist.and.to.be.a('number').and.to.equal(-1);
1504
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1505
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1506
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1507
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1508
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1509
- });
1510
-
1511
- it('should return a server request with one impression when given a valid post-roll instream ad unit', function () {
1512
- const adUnit = utils.deepClone(examples.adUnit_video_instream);
1513
- adUnit.params.video.instreamContext = 'post-roll';
1514
-
1515
- const adUnits = [adUnit];
1516
-
1517
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1518
-
1519
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1520
-
1521
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1522
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1523
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1524
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1525
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1526
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1527
- expect(serverRequests[0].data.imp[0].video.startdelay).to.exist.and.to.be.a('number').and.to.equal(-2);
1528
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1529
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1530
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1531
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1532
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1533
- });
1534
-
1535
- it('should return a server request with one impression when given a valid ad unit without player size', function () {
1536
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1537
- adUnit.mediaTypes.video.playerSize = undefined;
1538
-
1539
- const adUnits = [adUnit];
1540
-
1541
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1542
-
1543
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1544
-
1545
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1546
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1547
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1548
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1549
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1550
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1551
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1552
- expect(serverRequests[0].data.imp[0].video.w).to.equal(null);
1553
- expect(serverRequests[0].data.imp[0].video.h).to.equal(null);
1554
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1555
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1556
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1557
- });
1558
-
1559
- it('should return a server request with one impression when given a valid ad unit with an empty player size', function () {
1560
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1561
- adUnit.mediaTypes.video.playerSize = [];
1562
-
1563
- const adUnits = [adUnit];
1564
-
1565
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1566
-
1567
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1568
-
1569
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1570
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1571
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1572
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1573
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1574
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1575
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1576
- expect(serverRequests[0].data.imp[0].video.w).to.equal(null);
1577
- expect(serverRequests[0].data.imp[0].video.h).to.equal(null);
1578
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1579
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1580
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1581
- });
1582
-
1583
- it('should return a server request with one impression when given a valid ad unit with multiple player sizes', function () {
1584
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1585
- adUnit.mediaTypes.video.playerSize = [[350, 300], [400, 350]];
1586
-
1587
- const adUnits = [adUnit];
1588
-
1589
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1590
-
1591
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1592
-
1593
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1594
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1595
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1596
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1597
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1598
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1599
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1600
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1601
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1602
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1603
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1604
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1605
- });
1606
-
1607
- it('should return a server request with one impression when given a valid ad unit without minimum duration', function () {
1608
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1609
- adUnit.mediaTypes.video.minDuration = undefined;
1610
-
1611
- const adUnits = [adUnit];
1612
-
1613
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1614
-
1615
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1616
-
1617
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1618
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1619
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1620
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1621
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1622
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1623
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1624
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1625
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1626
- expect(serverRequests[0].data.imp[0].video.minduration).to.equal(null);
1627
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1628
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1629
- });
1630
-
1631
- it('should return a server request with one impression when given a valid ad unit without maximum duration', function () {
1632
- const adUnit = utils.deepClone(examples.adUnit_video_outstream);
1633
- adUnit.mediaTypes.video.maxDuration = undefined;
1634
-
1635
- const adUnits = [adUnit];
1636
-
1637
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1638
-
1639
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1640
-
1641
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1642
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1643
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1644
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1645
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1646
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1647
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1648
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1649
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1650
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1651
- expect(serverRequests[0].data.imp[0].video.maxduration).to.equal(null);
1652
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1653
- });
1654
-
1655
- it('should return a server request with two impressions when given two valid ad units with different impression identifiers', function () {
1656
- const adUnit_1 = utils.deepClone(examples.adUnit_video_outstream);
1657
- adUnit_1.bidId = 'bid_id_1';
1658
-
1659
- const adUnit_2 = utils.deepClone(examples.adUnit_video_outstream);
1660
- adUnit_2.bidId = 'bid_id_2';
1661
-
1662
- const adUnits = [adUnit_1, adUnit_2];
1663
-
1664
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1665
-
1666
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1667
-
1668
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1669
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(2);
1670
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1671
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1672
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1673
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1674
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1675
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1676
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1677
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1678
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1679
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1680
- expect(serverRequests[0].data.imp[1]).to.exist.and.to.be.an('object');
1681
- expect(serverRequests[0].data.imp[1].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0`);
1682
- expect(serverRequests[0].data.imp[1].video).to.exist.and.to.be.an('object');
1683
- expect(serverRequests[0].data.imp[1].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1684
- expect(serverRequests[0].data.imp[1].video.startdelay).to.equal(null);
1685
- expect(serverRequests[0].data.imp[1].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.playerSize[0][0]);
1686
- expect(serverRequests[0].data.imp[1].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.playerSize[0][1]);
1687
- expect(serverRequests[0].data.imp[1].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.minDuration);
1688
- expect(serverRequests[0].data.imp[1].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.maxDuration);
1689
- expect(serverRequests[0].data.imp[1].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[1].mediaTypes.video.protocols);
1690
- });
1691
-
1692
- it('should return a server request with one overridden impression when given two valid ad units with identical identifiers', function () {
1693
- const adUnit_1 = utils.deepClone(examples.adUnit_video_outstream);
1694
- adUnit_1.mediaTypes.video.minDuration = 10;
1695
-
1696
- const adUnit_2 = utils.deepClone(examples.adUnit_video_outstream);
1697
- adUnit_2.mediaTypes.video.minDuration = 15;
1698
-
1699
- const adUnits = [adUnit_1, adUnit_2];
1700
-
1701
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1702
-
1703
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1704
-
1705
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1706
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1707
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1708
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0`);
1709
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1710
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1711
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1712
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.playerSize[0][0]);
1713
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.playerSize[0][1]);
1714
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.minDuration);
1715
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.maxDuration);
1716
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[1].mediaTypes.video.protocols);
1717
- });
1718
-
1719
- it('should return two server requests with one impression when given two valid ad units with different bid request identifiers', function () {
1720
- const adUnit_1 = utils.deepClone(examples.adUnit_video_outstream);
1721
- adUnit_1.bidderRequestId = 'bidder_request_id_1';
1722
-
1723
- const adUnit_2 = utils.deepClone(examples.adUnit_video_outstream);
1724
- adUnit_2.bidderRequestId = 'bidder_request_id_2';
1725
-
1726
- const adUnits = [adUnit_1, adUnit_2];
1727
-
1728
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1729
-
1730
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(2);
1731
-
1732
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1733
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1734
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1735
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1736
- expect(serverRequests[0].data.imp[0].video).to.exist.and.to.be.an('object');
1737
- expect(serverRequests[0].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1738
- expect(serverRequests[0].data.imp[0].video.startdelay).to.equal(null);
1739
- expect(serverRequests[0].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][0]);
1740
- expect(serverRequests[0].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.playerSize[0][1]);
1741
- expect(serverRequests[0].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.minDuration);
1742
- expect(serverRequests[0].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[0].mediaTypes.video.maxDuration);
1743
- expect(serverRequests[0].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.protocols);
1744
- expect(serverRequests[1].data).to.exist.and.to.be.an('object');
1745
- expect(serverRequests[1].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1746
- expect(serverRequests[1].data.imp[0]).to.exist.and.to.be.an('object');
1747
- expect(serverRequests[1].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[1].bidId}_0`);
1748
- expect(serverRequests[1].data.imp[0].video).to.exist.and.to.be.an('object');
1749
- expect(serverRequests[1].data.imp[0].video.mimes).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[0].mediaTypes.video.mimes);
1750
- expect(serverRequests[1].data.imp[0].video.startdelay).to.equal(null);
1751
- expect(serverRequests[1].data.imp[0].video.w).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.playerSize[0][0]);
1752
- expect(serverRequests[1].data.imp[0].video.h).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.playerSize[0][1]);
1753
- expect(serverRequests[1].data.imp[0].video.minduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.minDuration);
1754
- expect(serverRequests[1].data.imp[0].video.maxduration).to.exist.and.to.be.a('number').and.to.equal(adUnits[1].mediaTypes.video.maxDuration);
1755
- expect(serverRequests[1].data.imp[0].video.protocols).to.exist.and.to.be.an('array').and.to.deep.equal(adUnits[1].mediaTypes.video.protocols);
1756
- });
1757
- });
1758
-
1759
- describe('Native', function () {
1760
- it('should return a server request with one impression when given a valid ad unit', function () {
1761
- const adUnits = [examples.adUnit_native];
1762
-
1763
- const serverRequests = spec.buildRequests(adUnits, examples.adUnit_native);
1764
-
1765
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1766
-
1767
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1768
- expect(serverRequests[0].data.imp).to.exist.and.to.be.an('array').and.to.have.lengthOf(1);
1769
- expect(serverRequests[0].data.imp[0]).to.exist.and.to.be.an('object');
1770
- expect(serverRequests[0].data.imp[0].id).to.exist.and.to.be.a('string').and.to.equal(`${adUnits[0].bidId}_0`);
1771
- expect(serverRequests[0].data.imp[0].native).to.exist.and.to.be.an('object');
1772
- expect(serverRequests[0].data.imp[0].native.request).to.exist.and.to.be.a('string').and.to.equal(JSON.stringify(examples.serverRequest_native.data.imp[0].native.request))
1773
- });
1774
- });
1775
- });
1776
-
1777
- describe('Site', function () {
1778
- it('should return a server request with site information when given a valid ad unit and a valid ad unit context', function () {
1779
- const adUnits = [examples.adUnit_banner];
1780
-
1781
- const adUnitContext = examples.adUnitContext;
1782
-
1783
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1784
-
1785
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1786
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1787
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1788
- expect(serverRequests[0].data.site).to.exist.and.to.be.an('object');
1789
- expect(serverRequests[0].data.site.page).to.exist.and.to.be.an('string').and.to.equal(adUnitContext.refererInfo.referer);
1790
- expect(serverRequests[0].data.site.id).to.equal(undefined);
1791
- expect(serverRequests[0].data.site.domain).to.exist.and.to.be.an('string').and.to.equal('we-are-adot.com');
1792
- expect(serverRequests[0].data.site.name).to.exist.and.to.be.an('string').and.to.equal('we-are-adot.com');
1793
- });
1794
-
1795
- it('should return a server request without site information when not given an ad unit context', function () {
1796
- const adUnits = [examples.adUnit_banner];
1797
-
1798
- const adUnitContext = undefined;
1799
-
1800
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1801
-
1802
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1803
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1804
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1805
- expect(serverRequests[0].data.site).to.equal(null);
1806
- });
1807
-
1808
- it('should return a server request without site information when given an ad unit context without referer information', function () {
1809
- const adUnits = [examples.adUnit_banner];
1810
-
1811
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1812
- adUnitContext.refererInfo = undefined;
1813
-
1814
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1815
-
1816
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1817
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1818
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1819
- expect(serverRequests[0].data.site).to.equal(null);
1820
- });
1821
-
1822
- it('should return a server request without site information when given an ad unit context with invalid referer information', function () {
1823
- const adUnits = [examples.adUnit_banner];
1824
-
1825
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1826
- adUnitContext.refererInfo = 'bad_referer_information';
1827
-
1828
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1829
-
1830
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1831
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1832
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1833
- expect(serverRequests[0].data.site).to.equal(null);
1834
- });
1835
-
1836
- it('should return a server request without site information when given an ad unit context without referer', function () {
1837
- const adUnits = [examples.adUnit_banner];
1838
-
1839
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1840
- adUnitContext.refererInfo.referer = undefined;
1841
-
1842
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1843
-
1844
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1845
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1846
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1847
- expect(serverRequests[0].data.site).to.equal(null);
1848
- });
1849
-
1850
- it('should return a server request without site information when given an ad unit context with an invalid referer', function () {
1851
- const adUnits = [examples.adUnit_banner];
1852
-
1853
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1854
- adUnitContext.refererInfo.referer = {};
1855
-
1856
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1857
-
1858
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1859
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1860
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1861
- expect(serverRequests[0].data.site).to.equal(null);
1862
- });
1863
-
1864
- it('should return a server request without site information when given an ad unit context with a misformatted referer', function () {
1865
- const adUnits = [examples.adUnit_banner];
1866
-
1867
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1868
- adUnitContext.refererInfo.referer = 'we-are-adot';
1869
-
1870
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1871
-
1872
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1873
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1874
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1875
- expect(serverRequests[0].data.site).to.equal(null);
1876
- });
1877
- });
1878
-
1879
- describe('Device', function () {
1880
- it('should return a server request with device information when given a valid ad unit and a valid ad unit context', function () {
1881
- const adUnits = [examples.adUnit_banner];
1882
-
1883
- const serverRequests = spec.buildRequests(adUnits, examples.adUnitContext);
1884
-
1885
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1886
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1887
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1888
- expect(serverRequests[0].data.device).to.exist.and.to.be.an('object');
1889
- expect(serverRequests[0].data.device.ua).to.exist.and.to.be.a('string');
1890
- expect(serverRequests[0].data.device.language).to.exist.and.to.be.a('string');
1891
- });
1892
- });
1893
-
1894
- describe('Regs', function () {
1895
- it('should return a server request with regulations information when given a valid ad unit and a valid ad unit context with GDPR applying', function () {
1896
- const adUnits = [examples.adUnit_banner];
1897
-
1898
- const adUnitContext = examples.adUnitContext;
1899
-
1900
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1901
-
1902
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1903
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1904
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1905
- expect(serverRequests[0].data.regs).to.exist.and.to.be.an('object');
1906
- expect(serverRequests[0].data.regs.ext).to.exist.and.to.be.an('object');
1907
- expect(serverRequests[0].data.regs.ext.gdpr).to.exist.and.to.be.a('boolean').and.to.equal(adUnitContext.gdprConsent.gdprApplies);
1908
- });
1909
-
1910
- it('should return a server request with regulations information when given a valid ad unit and a valid ad unit context with GDPR not applying', function () {
1911
- const adUnits = [examples.adUnit_banner];
1912
-
1913
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1914
- adUnitContext.gdprConsent.gdprApplies = false;
1915
-
1916
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1917
-
1918
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1919
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1920
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1921
- expect(serverRequests[0].data.regs).to.exist.and.to.be.an('object');
1922
- expect(serverRequests[0].data.regs.ext).to.exist.and.to.be.an('object');
1923
- expect(serverRequests[0].data.regs.ext.gdpr).to.exist.and.to.be.a('boolean').and.to.equal(adUnitContext.gdprConsent.gdprApplies);
1924
- });
1925
-
1926
- it('should return a server request without regulations information when not given an ad unit context', function () {
1927
- const adUnits = [examples.adUnit_banner];
1928
-
1929
- const adUnitContext = undefined;
1930
-
1931
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1932
-
1933
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1934
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1935
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1936
- expect(serverRequests[0].data.regs).to.equal(null);
1937
- });
1938
-
1939
- it('should return a server request without regulations information when given an ad unit context without GDPR information', function () {
1940
- const adUnits = [examples.adUnit_banner];
1941
-
1942
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1943
- adUnitContext.gdprConsent = undefined;
1944
-
1945
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1946
-
1947
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1948
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1949
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1950
- expect(serverRequests[0].data.regs).to.equal(null);
1951
- });
1952
-
1953
- it('should return a server request without regulations information when given an ad unit context with invalid GDPR information', function () {
1954
- const adUnits = [examples.adUnit_banner];
1955
-
1956
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1957
- adUnitContext.gdprConsent = 'bad_gdpr_consent';
1958
-
1959
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1960
-
1961
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1962
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1963
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1964
- expect(serverRequests[0].data.regs).to.equal(null);
1965
- });
1966
-
1967
- it('should return a server request without regulations information when given an ad unit context with invalid GDPR application information', function () {
1968
- const adUnits = [examples.adUnit_banner];
1969
-
1970
- const adUnitContext = utils.deepClone(examples.adUnitContext);
1971
- adUnitContext.gdprConsent.gdprApplies = 'bad_gdpr_applies';
1972
-
1973
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1974
-
1975
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1976
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1977
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1978
- expect(serverRequests[0].data.regs).to.equal(null);
1979
- });
1980
- });
1981
-
1982
- describe('User', function () {
1983
- it('should return a server request with user information when given a valid ad unit and a valid ad unit context', function () {
1984
- const adUnits = [examples.adUnit_banner];
1985
-
1986
- const adUnitContext = examples.adUnitContext;
1987
-
1988
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
1989
-
1990
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
1991
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
1992
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
1993
- expect(serverRequests[0].data.user).to.exist.and.to.be.an('object');
1994
- expect(serverRequests[0].data.user.ext).to.exist.and.to.be.an('object');
1995
- expect(serverRequests[0].data.user.ext.consent).to.exist.and.to.be.a('string').and.to.equal(adUnitContext.gdprConsent.consentString);
1996
- });
1997
-
1998
- it('should return a server request without user information when not given an ad unit context', function () {
1999
- const adUnits = [examples.adUnit_banner];
2000
-
2001
- const adUnitContext = undefined;
2002
-
2003
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
2004
-
2005
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
2006
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
2007
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
2008
- expect(serverRequests[0].data.user).to.equal(null);
2009
- });
2010
-
2011
- it('should return a server request without user information when given an ad unit context without GDPR information', function () {
2012
- const adUnits = [examples.adUnit_banner];
2013
-
2014
- const adUnitContext = utils.deepClone(examples.adUnitContext);
2015
- adUnitContext.gdprConsent = undefined;
2016
-
2017
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
2018
-
2019
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
2020
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
2021
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
2022
- expect(serverRequests[0].data.user).to.equal(null);
2023
- });
2024
-
2025
- it('should return a server request without user information when given an ad unit context with invalid GDPR information', function () {
2026
- const adUnits = [examples.adUnit_banner];
2027
-
2028
- const adUnitContext = utils.deepClone(examples.adUnitContext);
2029
- adUnitContext.gdprConsent = 'bad_gdpr_consent';
2030
-
2031
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
2032
-
2033
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
2034
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
2035
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
2036
- expect(serverRequests[0].data.user).to.equal(null);
2037
- });
2038
-
2039
- it('should return a server request without user information when given an ad unit context with an invalid consent string', function () {
2040
- const adUnits = [examples.adUnit_banner];
2041
-
2042
- const adUnitContext = utils.deepClone(examples.adUnitContext);
2043
- adUnitContext.gdprConsent.consentString = true;
2044
-
2045
- const serverRequests = spec.buildRequests(adUnits, adUnitContext);
2046
-
2047
- expect(serverRequests).to.be.an('array').and.to.have.lengthOf(1);
2048
- expect(serverRequests[0].data).to.exist.and.to.be.an('object');
2049
- expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId);
2050
- expect(serverRequests[0].data.user).to.equal(null);
2051
- });
2052
- });
2053
- });
2054
-
2055
- describe('interpretResponse', function () {
2056
- describe('General', function () {
2057
- it('should return an ad when given a valid server response with one bid with USD currency', function () {
2058
- const serverRequest = examples.serverRequest_banner;
2059
-
2060
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2061
- serverResponse.body.cur = 'USD';
2062
-
2063
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2064
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2065
-
2066
- expect(ads).to.be.an('array').and.to.have.length(1);
2067
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2068
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2069
- expect(ads[0].adUrl).to.equal(null);
2070
- expect(ads[0].vastXml).to.equal(null);
2071
- expect(ads[0].vastUrl).to.equal(null);
2072
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2073
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2074
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2075
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2076
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2077
- expect(ads[0].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].h);
2078
- expect(ads[0].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].w);
2079
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2080
- expect(ads[0].renderer).to.equal(null);
2081
- });
2082
-
2083
- it('should return two ads when given a valid server response with two bids', function () {
2084
- const serverRequest = examples.serverRequest_banner_twoImps;
2085
-
2086
- const serverResponse = examples.serverResponse_banner_twoBids;
2087
-
2088
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2089
-
2090
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2091
- const adm2WithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[1].adm, serverResponse.body.seatbid[0].bid[1].price);
2092
-
2093
- expect(ads).to.be.an('array').and.to.have.length(2);
2094
-
2095
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2096
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2097
- expect(ads[0].adUrl).to.equal(null);
2098
- expect(ads[0].vastXml).to.equal(null);
2099
- expect(ads[0].vastUrl).to.equal(null);
2100
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2101
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2102
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2103
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2104
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2105
- expect(ads[0].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].h);
2106
- expect(ads[0].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].w);
2107
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2108
- expect(ads[0].renderer).to.equal(null);
2109
- expect(ads[1].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[1].bidId);
2110
- expect(ads[1].ad).to.exist.and.to.be.a('string').and.to.have.string(adm2WithAuctionPriceReplaced);
2111
- expect(ads[1].adUrl).to.equal(null);
2112
- expect(ads[1].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[1].crid);
2113
- expect(ads[1].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].price);
2114
- expect(ads[1].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2115
- expect(ads[1].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2116
- expect(ads[1].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2117
- expect(ads[1].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].h);
2118
- expect(ads[1].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].w);
2119
- expect(ads[1].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2120
- expect(ads[1].renderer).to.equal(null);
2121
- });
2122
-
2123
- it('should return two ads when given a valid server response with two bids that contains adomain', function () {
2124
- const serverRequest = examples.serverRequest_banner_twoImps;
2125
-
2126
- const serverResponse = examples.serverResponse_banner_twoBids;
2127
-
2128
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2129
-
2130
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2131
- const adm2WithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[1].adm, serverResponse.body.seatbid[0].bid[1].price);
2132
-
2133
- expect(ads).to.be.an('array').and.to.have.length(2);
2134
-
2135
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2136
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2137
- expect(ads[0].adUrl).to.equal(null);
2138
- expect(ads[0].vastXml).to.equal(null);
2139
- expect(ads[0].vastUrl).to.equal(null);
2140
- expect(ads[0].meta.advertiserDomains[0]).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].adomain[0])
2141
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2142
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2143
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2144
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2145
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2146
- expect(ads[0].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].h);
2147
- expect(ads[0].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].w);
2148
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2149
- expect(ads[0].renderer).to.equal(null);
2150
- expect(ads[1].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[1].bidId);
2151
- expect(ads[1].meta.advertiserDomains[0]).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[1].adomain[0])
2152
- expect(ads[1].ad).to.exist.and.to.be.a('string').and.to.have.string(adm2WithAuctionPriceReplaced);
2153
- expect(ads[1].adUrl).to.equal(null);
2154
- expect(ads[1].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[1].crid);
2155
- expect(ads[1].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].price);
2156
- expect(ads[1].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2157
- expect(ads[1].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2158
- expect(ads[1].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2159
- expect(ads[1].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].h);
2160
- expect(ads[1].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].w);
2161
- expect(ads[1].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2162
- expect(ads[1].renderer).to.equal(null);
2163
- });
2164
-
2165
- it('should return no ad when not given a server response', function () {
2166
- const ads = spec.interpretResponse(null);
2167
-
2168
- expect(ads).to.be.an('array').and.to.have.length(0);
2169
- });
2170
-
2171
- it('should return no ad when not given a server response body', function () {
2172
- const serverRequest = examples.serverRequest_banner;
2173
-
2174
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2175
- serverResponse.body = undefined;
2176
-
2177
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2178
-
2179
- expect(ads).to.be.an('array').and.to.have.length(0);
2180
- });
2181
-
2182
- it('should return no ad when given an invalid server response body', function () {
2183
- const serverRequest = examples.serverRequest_banner;
2184
-
2185
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2186
- serverResponse.body = 'invalid_body';
2187
-
2188
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2189
-
2190
- expect(ads).to.be.an('array').and.to.have.length(0);
2191
- });
2192
-
2193
- it('should return no ad when given a server response without seat bids', function () {
2194
- const serverRequest = examples.serverRequest_banner;
2195
-
2196
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2197
- serverResponse.body.seatbid = undefined;
2198
-
2199
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2200
-
2201
- expect(ads).to.be.an('array').and.to.have.length(0);
2202
- });
2203
-
2204
- it('should return no ad when given a server response with invalid seat bids', function () {
2205
- const serverRequest = examples.serverRequest_banner;
2206
-
2207
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2208
- serverResponse.body.seatbid = 'invalid_seat_bids';
2209
-
2210
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2211
-
2212
- expect(ads).to.be.an('array').and.to.have.length(0);
2213
- });
2214
-
2215
- it('should return no ad when given a server response with an empty seat bids array', function () {
2216
- const serverRequest = examples.serverRequest_banner;
2217
-
2218
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2219
- serverResponse.body.seatbid = [];
2220
-
2221
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2222
-
2223
- expect(ads).to.be.an('array').and.to.have.length(0);
2224
- });
2225
-
2226
- it('should return no ad when given a server response with an invalid seat bid', function () {
2227
- const serverRequest = examples.serverRequest_banner;
2228
-
2229
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2230
- serverResponse.body.seatbid[0].bid = 'invalid_bids';
2231
-
2232
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2233
-
2234
- expect(ads).to.be.an('array').and.to.have.length(0);
2235
- });
2236
-
2237
- it('should return no ad when given a server response with an empty bids array', function () {
2238
- const serverRequest = examples.serverRequest_banner;
2239
-
2240
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2241
- serverResponse.body.seatbid[0].bid = [];
2242
-
2243
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2244
-
2245
- expect(ads).to.be.an('array').and.to.have.length(0);
2246
- });
2247
-
2248
- it('should return no ad when given a server response with an invalid bid', function () {
2249
- const serverRequest = examples.serverRequest_banner;
2250
-
2251
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2252
- serverResponse.body.seatbid[0].bid = ['invalid_bid'];
2253
-
2254
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2255
-
2256
- expect(ads).to.be.an('array').and.to.have.length(0);
2257
- });
2258
-
2259
- it('should return no ad when given a server response with a bid without currency', function () {
2260
- const serverRequest = examples.serverRequest_banner;
2261
-
2262
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2263
- serverResponse.body.cur = undefined;
2264
-
2265
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2266
-
2267
- expect(ads).to.be.an('array').and.to.have.length(0);
2268
- });
2269
-
2270
- it('should return no ad when given a server response with a bid with an invalid currency', function () {
2271
- const serverRequest = examples.serverRequest_banner;
2272
-
2273
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2274
- serverResponse.body.cur = {};
2275
-
2276
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2277
-
2278
- expect(ads).to.be.an('array').and.to.have.length(0);
2279
- });
2280
-
2281
- it('should return no ad when given a server response with a bid without impression identifier', function () {
2282
- const serverRequest = examples.serverRequest_banner;
2283
-
2284
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2285
- serverResponse.body.seatbid[0].bid[0].impid = undefined;
2286
-
2287
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2288
-
2289
- expect(ads).to.be.an('array').and.to.have.length(0);
2290
- });
2291
-
2292
- it('should return no ad when given a server response with a bid with an invalid impression identifier', function () {
2293
- const serverRequest = examples.serverRequest_banner;
2294
-
2295
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2296
- serverResponse.body.seatbid[0].bid[0].impid = {};
2297
-
2298
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2299
-
2300
- expect(ads).to.be.an('array').and.to.have.length(0);
2301
- });
2302
-
2303
- it('should return no ad when given a server response with a bid without creative identifier', function () {
2304
- const serverRequest = examples.serverRequest_banner;
2305
-
2306
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2307
- serverResponse.body.seatbid[0].bid[0].crid = undefined;
2308
-
2309
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2310
-
2311
- expect(ads).to.be.an('array').and.to.have.length(0);
2312
- });
2313
-
2314
- it('should return no ad when given a server response with a bid with an invalid creative identifier', function () {
2315
- const serverRequest = examples.serverRequest_banner;
2316
-
2317
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2318
- serverResponse.body.seatbid[0].bid[0].crid = {};
2319
-
2320
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2321
-
2322
- expect(ads).to.be.an('array').and.to.have.length(0);
2323
- });
2324
-
2325
- it('should return no ad when given a server response with a bid without ad markup and ad serving URL', function () {
2326
- const serverRequest = examples.serverRequest_banner;
2327
-
2328
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2329
- serverResponse.body.seatbid[0].bid[0].adm = undefined;
2330
- serverResponse.body.seatbid[0].bid[0].nurl = undefined;
2331
-
2332
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2333
-
2334
- expect(ads).to.be.an('array').and.to.have.length(0);
2335
- });
2336
-
2337
- it('should return no ad when given a server response with a bid with an invalid ad markup', function () {
2338
- const serverRequest = examples.serverRequest_banner;
2339
-
2340
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2341
- serverResponse.body.seatbid[0].bid[0].adm = {};
2342
-
2343
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2344
-
2345
- expect(ads).to.be.an('array').and.to.have.length(0);
2346
- });
2347
-
2348
- it('should return no ad when given a server response with a bid with an ad markup without auction price macro', function () {
2349
- const serverRequest = examples.serverRequest_banner;
2350
-
2351
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2352
- serverResponse.body.seatbid[0].bid[0].adm = 'creative_data';
2353
-
2354
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2355
-
2356
- expect(ads).to.be.an('array').and.to.have.length(0);
2357
- });
2358
-
2359
- it('should return no ad when given a server response with a bid with an invalid ad serving URL', function () {
2360
- const serverRequest = examples.serverRequest_banner;
2361
-
2362
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2363
- serverResponse.body.seatbid[0].bid[0].nurl = {};
2364
-
2365
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2366
-
2367
- expect(ads).to.be.an('array').and.to.have.length(0);
2368
- });
2369
-
2370
- it('should return no ad when given a server response with a bid with an ad serving URL without auction price macro', function () {
2371
- const serverRequest = examples.serverRequest_banner;
2372
-
2373
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2374
- serverResponse.body.seatbid[0].bid[0].nurl = 'win_notice_url';
2375
-
2376
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2377
-
2378
- expect(ads).to.be.an('array').and.to.have.length(0);
2379
- });
2380
-
2381
- it('should return no ad when given a server response with a bid without bid price', function () {
2382
- const serverRequest = examples.serverRequest_banner;
2383
-
2384
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2385
- serverResponse.body.seatbid[0].bid[0].price = undefined;
2386
-
2387
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2388
-
2389
- expect(ads).to.be.an('array').and.to.have.length(0);
2390
- });
2391
-
2392
- it('should return no ad when given a server response with a bid with an invalid bid price', function () {
2393
- const serverRequest = examples.serverRequest_banner;
2394
-
2395
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2396
- serverResponse.body.seatbid[0].bid[0].price = {};
2397
-
2398
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2399
-
2400
- expect(ads).to.be.an('array').and.to.have.length(0);
2401
- });
2402
-
2403
- it('should return no ad when given a server response with a bid without extension', function () {
2404
- const serverRequest = examples.serverRequest_banner;
2405
-
2406
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2407
- serverResponse.body.seatbid[0].bid[0].ext = undefined;
2408
-
2409
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2410
-
2411
- expect(ads).to.be.an('array').and.to.have.length(0);
2412
- });
2413
-
2414
- it('should return no ad when given a server response with a bid with an invalid extension', function () {
2415
- const serverRequest = examples.serverRequest_banner;
2416
-
2417
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2418
- serverResponse.body.seatbid[0].bid[0].ext = 'bad_ext';
2419
-
2420
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2421
-
2422
- expect(ads).to.be.an('array').and.to.have.length(0);
2423
- });
2424
-
2425
- it('should return no ad when given a server response with a bid without adot extension', function () {
2426
- const serverRequest = examples.serverRequest_banner;
2427
-
2428
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2429
- serverResponse.body.seatbid[0].bid[0].ext.adot = undefined;
2430
-
2431
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2432
-
2433
- expect(ads).to.be.an('array').and.to.have.length(0);
2434
- });
2435
-
2436
- it('should return no ad when given a server response with a bid with an invalid adot extension', function () {
2437
- const serverRequest = examples.serverRequest_banner;
2438
-
2439
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2440
- serverResponse.body.seatbid[0].bid[0].ext.adot = 'bad_adot_ext';
2441
-
2442
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2443
-
2444
- expect(ads).to.be.an('array').and.to.have.length(0);
2445
- });
2446
-
2447
- it('should return no ad when given a server response with a bid without media type', function () {
2448
- const serverRequest = examples.serverRequest_banner;
2449
-
2450
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2451
- serverResponse.body.seatbid[0].bid[0].ext.adot.media_type = undefined;
2452
-
2453
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2454
-
2455
- expect(ads).to.be.an('array').and.to.have.length(0);
2456
- });
2457
-
2458
- it('should return no ad when given a server response with a bid with an invalid media type', function () {
2459
- const serverRequest = examples.serverRequest_banner;
2460
-
2461
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2462
- serverResponse.body.seatbid[0].bid[0].ext.adot.media_type = {};
2463
-
2464
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2465
-
2466
- expect(ads).to.be.an('array').and.to.have.length(0);
2467
- });
2468
-
2469
- it('should return no ad when given a server response with a bid with an unknown media type', function () {
2470
- const serverRequest = examples.serverRequest_banner;
2471
-
2472
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2473
- serverResponse.body.seatbid[0].bid[0].ext.adot.media_type = 'unknown_media_type';
2474
-
2475
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2476
-
2477
- expect(ads).to.be.an('array').and.to.have.length(0);
2478
- });
2479
-
2480
- it('should return no ad when given a valid server response and no server request', function () {
2481
- const serverRequest = undefined;
2482
-
2483
- const serverResponse = examples.serverResponse_banner;
2484
-
2485
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2486
-
2487
- expect(ads).to.be.an('array').and.to.have.length(0);
2488
- });
2489
-
2490
- it('should return no ad when given a valid server response and an invalid server request', function () {
2491
- const serverRequest = 'bad_server_request';
2492
-
2493
- const serverResponse = examples.serverResponse_banner;
2494
-
2495
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2496
-
2497
- expect(ads).to.be.an('array').and.to.have.length(0);
2498
- });
2499
-
2500
- it('should return no ad when given a valid server response and a server request without bid request', function () {
2501
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2502
- serverRequest.data = undefined;
2503
-
2504
- const serverResponse = examples.serverResponse_banner;
2505
-
2506
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2507
-
2508
- expect(ads).to.be.an('array').and.to.have.length(0);
2509
- });
2510
-
2511
- it('should return no ad when given a valid server response and a server request with an invalid bid request', function () {
2512
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2513
- serverRequest.data = 'bad_bid_request';
2514
-
2515
- const serverResponse = examples.serverResponse_banner;
2516
-
2517
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2518
-
2519
- expect(ads).to.be.an('array').and.to.have.length(0);
2520
- });
2521
-
2522
- it('should return no ad when given a valid server response and a server request without impression', function () {
2523
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2524
- serverRequest.data.imp = undefined;
2525
-
2526
- const serverResponse = examples.serverResponse_banner;
2527
-
2528
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2529
-
2530
- expect(ads).to.be.an('array').and.to.have.length(0);
2531
- });
2532
-
2533
- it('should return no ad when given a valid server response and a server request with an invalid impression field', function () {
2534
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2535
- serverRequest.data.imp = 'invalid_impressions';
2536
-
2537
- const serverResponse = examples.serverResponse_banner;
2538
-
2539
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2540
-
2541
- expect(ads).to.be.an('array').and.to.have.length(0);
2542
- });
2543
-
2544
- it('should return no ad when given a valid server response and a server request without matching impression', function () {
2545
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2546
- serverRequest.data.imp[0].id = 'unknown_imp_id';
2547
-
2548
- const serverResponse = examples.serverResponse_banner;
2549
-
2550
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2551
-
2552
- expect(ads).to.be.an('array').and.to.have.length(0);
2553
- });
2554
-
2555
- it('should return no ad when given a valid server response and a server request without internal data', function () {
2556
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2557
- serverRequest._adot_internal = undefined;
2558
-
2559
- const serverResponse = examples.serverResponse_banner;
2560
-
2561
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2562
-
2563
- expect(ads).to.be.an('array').and.to.have.length(0);
2564
- });
2565
-
2566
- it('should return no ad when given a valid server response and a server request with invalid internal data', function () {
2567
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2568
- serverRequest._adot_internal = 'bad_internal_data';
2569
-
2570
- const serverResponse = examples.serverResponse_banner;
2571
-
2572
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2573
-
2574
- expect(ads).to.be.an('array').and.to.have.length(0);
2575
- });
2576
-
2577
- it('should return no ad when given a valid server response and a server request without internal impression data', function () {
2578
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2579
- serverRequest._adot_internal.impressions = undefined;
2580
-
2581
- const serverResponse = examples.serverResponse_banner;
2582
-
2583
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2584
-
2585
- expect(ads).to.be.an('array').and.to.have.length(0);
2586
- });
2587
-
2588
- it('should return no ad when given a valid server response and a server request with invalid internal impression data', function () {
2589
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2590
- serverRequest._adot_internal.impressions = 'bad_internal_impression_data';
2591
-
2592
- const serverResponse = examples.serverResponse_banner;
2593
-
2594
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2595
-
2596
- expect(ads).to.be.an('array').and.to.have.length(0);
2597
- });
2598
-
2599
- it('should return no ad when given a valid server response and a server request without matching internal impression', function () {
2600
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2601
- serverRequest._adot_internal.impressions[0].impressionId = 'unknown_imp_id';
2602
-
2603
- const serverResponse = examples.serverResponse_banner;
2604
-
2605
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2606
-
2607
- expect(ads).to.be.an('array').and.to.have.length(0);
2608
- });
2609
-
2610
- it('should return no ad when given a valid server response and a server request without internal impression ad unit code', function () {
2611
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2612
- serverRequest._adot_internal.impressions[0].adUnitCode = undefined;
2613
-
2614
- const serverResponse = examples.serverResponse_banner;
2615
-
2616
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2617
-
2618
- expect(ads).to.be.an('array').and.to.have.length(0);
2619
- });
2620
-
2621
- it('should return no ad when given a valid server response and a server request with an invalid internal impression ad unit code', function () {
2622
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2623
- serverRequest._adot_internal.impressions[0].adUnitCode = {};
2624
-
2625
- const serverResponse = examples.serverResponse_banner;
2626
-
2627
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2628
-
2629
- expect(ads).to.be.an('array').and.to.have.length(0);
2630
- });
2631
- });
2632
-
2633
- describe('Banner', function () {
2634
- it('should return an ad when given a valid server response with one bid', function () {
2635
- const serverRequest = examples.serverRequest_banner;
2636
-
2637
- const serverResponse = examples.serverResponse_banner;
2638
-
2639
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2640
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2641
-
2642
- expect(ads).to.be.an('array').and.to.have.length(1);
2643
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2644
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2645
- expect(ads[0].adUrl).to.equal(null);
2646
- expect(ads[0].vastXml).to.equal(null);
2647
- expect(ads[0].vastUrl).to.equal(null);
2648
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2649
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2650
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2651
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2652
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2653
- expect(ads[0].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].h);
2654
- expect(ads[0].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].w);
2655
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2656
- expect(ads[0].renderer).to.equal(null);
2657
- });
2658
-
2659
- it('should return an ad when given a valid server response with one bid without a win notice URL', function () {
2660
- const serverRequest = examples.serverRequest_banner;
2661
-
2662
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2663
- serverResponse.body.seatbid[0].bid[0].nurl = undefined;
2664
-
2665
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2666
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2667
-
2668
- expect(ads).to.be.an('array').and.to.have.length(1);
2669
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2670
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.equal(admWithAuctionPriceReplaced);
2671
- expect(ads[0].adUrl).to.equal(null);
2672
- expect(ads[0].vastXml).to.equal(null);
2673
- expect(ads[0].vastUrl).to.equal(null);
2674
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2675
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2676
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2677
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2678
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2679
- expect(ads[0].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].h);
2680
- expect(ads[0].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].w);
2681
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2682
- expect(ads[0].renderer).to.equal(null);
2683
- });
2684
-
2685
- it('should return an ad when given a valid server response with one bid using an ad serving URL', function () {
2686
- const serverRequest = examples.serverRequest_banner;
2687
-
2688
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2689
- serverResponse.body.seatbid[0].bid[0].adm = undefined;
2690
-
2691
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2692
- const nurlWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].nurl, serverResponse.body.seatbid[0].bid[0].price);
2693
-
2694
- expect(ads).to.be.an('array').and.to.have.length(1);
2695
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2696
- expect(ads[0].ad).to.equal(null);
2697
- expect(ads[0].adUrl).to.exist.and.to.be.a('string').and.to.equal(nurlWithAuctionPriceReplaced);
2698
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2699
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2700
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2701
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2702
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2703
- expect(ads[0].height).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].h);
2704
- expect(ads[0].width).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].w);
2705
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('banner');
2706
- expect(ads[0].renderer).to.equal(null);
2707
- });
2708
-
2709
- it('should return no ad when given a server response with a bid without height', function () {
2710
- const serverRequest = examples.serverRequest_banner;
2711
-
2712
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2713
- serverResponse.body.seatbid[0].bid[0].h = undefined;
2714
-
2715
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2716
-
2717
- expect(ads).to.be.an('array').and.to.have.length(0);
2718
- });
2719
-
2720
- it('should return no ad when given a server response with a bid with an invalid height', function () {
2721
- const serverRequest = examples.serverRequest_banner;
2722
-
2723
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2724
- serverResponse.body.seatbid[0].bid[0].h = {};
2725
-
2726
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2727
-
2728
- expect(ads).to.be.an('array').and.to.have.length(0);
2729
- });
2730
-
2731
- it('should return no ad when given a server response with a bid without width', function () {
2732
- const serverRequest = examples.serverRequest_banner;
2733
-
2734
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2735
- serverResponse.body.seatbid[0].bid[0].w = undefined;
2736
-
2737
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2738
-
2739
- expect(ads).to.be.an('array').and.to.have.length(0);
2740
- });
2741
-
2742
- it('should return no ad when given a server response with a bid with an invalid width', function () {
2743
- const serverRequest = examples.serverRequest_banner;
2744
-
2745
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2746
- serverResponse.body.seatbid[0].bid[0].w = {};
2747
-
2748
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2749
-
2750
- expect(ads).to.be.an('array').and.to.have.length(0);
2751
- });
2752
-
2753
- it('should return no ad when given a valid server response and a server request without banner impression', function () {
2754
- const serverRequest = utils.deepClone(examples.serverRequest_banner);
2755
- serverRequest.data.imp[0].banner = undefined;
2756
-
2757
- const serverResponse = utils.deepClone(examples.serverResponse_banner);
2758
-
2759
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2760
-
2761
- expect(ads).to.be.an('array').and.to.have.length(0);
2762
- });
2763
- });
2764
-
2765
- describe('Video', function () {
2766
- it('should return an ad when given a valid server response with one bid on an instream impression', function () {
2767
- const serverRequest = examples.serverRequest_video_instream;
2768
-
2769
- const serverResponse = examples.serverResponse_video_instream;
2770
-
2771
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2772
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2773
-
2774
- expect(ads).to.be.an('array').and.to.have.length(1);
2775
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2776
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2777
- expect(ads[0].adUrl).to.equal(null);
2778
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2779
- expect(ads[0].vastUrl).to.equal(null);
2780
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2781
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2782
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2783
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2784
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2785
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2786
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2787
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2788
- expect(ads[0].renderer).to.equal(null);
2789
- });
2790
-
2791
- it('should return an ad when given a valid server response with one bid on an outstream impression', function () {
2792
- const serverRequest = examples.serverRequest_video_outstream;
2793
-
2794
- const serverResponse = examples.serverResponse_video_outstream;
2795
-
2796
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2797
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2798
-
2799
- expect(ads).to.be.an('array').and.to.have.length(1);
2800
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2801
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2802
- expect(ads[0].adUrl).to.equal(null);
2803
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2804
- expect(ads[0].vastUrl).to.equal(null);
2805
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2806
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2807
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2808
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2809
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2810
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2811
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2812
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2813
- expect(ads[0].renderer).to.be.an('object');
2814
- });
2815
-
2816
- it('should return two ads when given a valid server response with two bids on both instream and outstream impressions', function () {
2817
- const serverRequest = examples.serverRequest_video_instream_outstream;
2818
-
2819
- const serverResponse = examples.serverResponse_video_instream_outstream;
2820
-
2821
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2822
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2823
- const adm2WithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[1].adm, serverResponse.body.seatbid[0].bid[1].price);
2824
-
2825
- expect(ads).to.be.an('array').and.to.have.length(2);
2826
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2827
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2828
- expect(ads[0].adUrl).to.equal(null);
2829
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2830
- expect(ads[0].vastUrl).to.equal(null);
2831
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2832
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2833
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2834
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2835
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2836
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2837
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2838
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2839
- expect(ads[0].renderer).to.equal(null);
2840
- expect(ads[1].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[1].bidId);
2841
- expect(ads[1].ad).to.exist.and.to.be.a('string').and.to.have.string(adm2WithAuctionPriceReplaced);
2842
- expect(ads[1].adUrl).to.equal(null);
2843
- expect(ads[1].vastXml).to.equal(adm2WithAuctionPriceReplaced);
2844
- expect(ads[1].vastUrl).to.equal(null);
2845
- expect(ads[1].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[1].crid);
2846
- expect(ads[1].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[1].price);
2847
- expect(ads[1].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2848
- expect(ads[1].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2849
- expect(ads[1].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2850
- expect(ads[0].height).to.equal(serverRequest.data.imp[1].video.h);
2851
- expect(ads[0].width).to.equal(serverRequest.data.imp[1].video.w);
2852
- expect(ads[1].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2853
- expect(ads[1].renderer).to.be.an('object');
2854
- });
2855
-
2856
- it('should return an ad when given a valid server response with one bid without a win notice URL', function () {
2857
- const serverRequest = examples.serverRequest_video_instream;
2858
-
2859
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
2860
- serverResponse.body.seatbid[0].bid[0].nurl = undefined;
2861
-
2862
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2863
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2864
-
2865
- expect(ads).to.be.an('array').and.to.have.length(1);
2866
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2867
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2868
- expect(ads[0].adUrl).to.equal(null);
2869
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2870
- expect(ads[0].vastUrl).to.equal(null);
2871
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2872
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2873
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2874
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2875
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2876
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2877
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2878
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2879
- expect(ads[0].renderer).to.equal(null);
2880
- });
2881
-
2882
- it('should return an ad when given a valid server response with one bid using an ad serving URL', function () {
2883
- const serverRequest = examples.serverRequest_video_instream;
2884
-
2885
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
2886
- serverResponse.body.seatbid[0].bid[0].adm = undefined;
2887
-
2888
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2889
- const nurlWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].nurl, serverResponse.body.seatbid[0].bid[0].price);
2890
-
2891
- expect(ads).to.be.an('array').and.to.have.length(1);
2892
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2893
- expect(ads[0].ad).to.equal(null);
2894
- expect(ads[0].adUrl).to.exist.and.to.be.a('string').and.to.have.string(nurlWithAuctionPriceReplaced);
2895
- expect(ads[0].vastXml).to.equal(null);
2896
- expect(ads[0].vastUrl).to.equal(nurlWithAuctionPriceReplaced);
2897
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2898
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2899
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2900
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2901
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2902
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2903
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2904
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2905
- expect(ads[0].renderer).to.equal(null);
2906
- });
2907
-
2908
- it('should return an ad when given a valid server response with a bid with a video height', function () {
2909
- const serverRequest = examples.serverRequest_video_instream;
2910
-
2911
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
2912
- serverResponse.body.seatbid[0].bid[0].h = 500;
2913
-
2914
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2915
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2916
-
2917
- expect(ads).to.be.an('array').and.to.have.length(1);
2918
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2919
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2920
- expect(ads[0].adUrl).to.equal(null);
2921
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2922
- expect(ads[0].vastUrl).to.equal(null);
2923
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2924
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2925
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2926
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2927
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2928
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2929
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2930
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2931
- expect(ads[0].renderer).to.equal(null);
2932
- });
2933
-
2934
- it('should return an ad when given a valid server response with a bid with a video width', function () {
2935
- const serverRequest = examples.serverRequest_video_instream;
2936
-
2937
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
2938
- serverResponse.body.seatbid[0].bid[0].w = 500;
2939
-
2940
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2941
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2942
-
2943
- expect(ads).to.be.an('array').and.to.have.length(1);
2944
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2945
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2946
- expect(ads[0].adUrl).to.equal(null);
2947
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2948
- expect(ads[0].vastUrl).to.equal(null);
2949
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2950
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2951
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2952
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2953
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2954
- expect(ads[0].height).to.equal(serverRequest.data.imp[0].video.h);
2955
- expect(ads[0].width).to.equal(serverRequest.data.imp[0].video.w);
2956
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2957
- expect(ads[0].renderer).to.equal(null);
2958
- });
2959
-
2960
- it('should return an ad when given a valid server response with a bid with a video width and height', function () {
2961
- const serverRequest = examples.serverRequest_video_instream;
2962
-
2963
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
2964
- serverResponse.body.seatbid[0].bid[0].w = 500;
2965
- serverResponse.body.seatbid[0].bid[0].h = 400;
2966
-
2967
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2968
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2969
-
2970
- expect(ads).to.be.an('array').and.to.have.length(1);
2971
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2972
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2973
- expect(ads[0].adUrl).to.equal(null);
2974
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
2975
- expect(ads[0].vastUrl).to.equal(null);
2976
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
2977
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
2978
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
2979
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
2980
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
2981
- expect(ads[0].height).to.equal(serverResponse.body.seatbid[0].bid[0].h);
2982
- expect(ads[0].width).to.equal(serverResponse.body.seatbid[0].bid[0].w);
2983
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
2984
- expect(ads[0].renderer).to.equal(null);
2985
- });
2986
-
2987
- it('should return an ad when given a valid server response and server request with a video impression without width', function () {
2988
- const serverRequest = utils.deepClone(examples.serverRequest_video_instream);
2989
- serverRequest.data.imp[0].video.w = null;
2990
-
2991
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
2992
-
2993
- const ads = spec.interpretResponse(serverResponse, serverRequest);
2994
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
2995
-
2996
- expect(ads).to.be.an('array').and.to.have.length(1);
2997
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
2998
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
2999
- expect(ads[0].adUrl).to.equal(null);
3000
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
3001
- expect(ads[0].vastUrl).to.equal(null);
3002
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
3003
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
3004
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
3005
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
3006
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
3007
- expect(ads[0].height).to.equal(null);
3008
- expect(ads[0].width).to.equal(null);
3009
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
3010
- expect(ads[0].renderer).to.equal(null);
3011
- });
3012
-
3013
- it('should return an ad when given a valid server response and server request with a video impression without height', function () {
3014
- const serverRequest = utils.deepClone(examples.serverRequest_video_instream);
3015
- serverRequest.data.imp[0].video.h = null;
3016
-
3017
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
3018
-
3019
- const ads = spec.interpretResponse(serverResponse, serverRequest);
3020
- const admWithAuctionPriceReplaced = utils.replaceAuctionPrice(serverResponse.body.seatbid[0].bid[0].adm, serverResponse.body.seatbid[0].bid[0].price);
3021
-
3022
- expect(ads).to.be.an('array').and.to.have.length(1);
3023
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
3024
- expect(ads[0].ad).to.exist.and.to.be.a('string').and.to.have.string(admWithAuctionPriceReplaced);
3025
- expect(ads[0].adUrl).to.equal(null);
3026
- expect(ads[0].vastXml).to.equal(admWithAuctionPriceReplaced);
3027
- expect(ads[0].vastUrl).to.equal(null);
3028
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
3029
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
3030
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
3031
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
3032
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
3033
- expect(ads[0].height).to.equal(null);
3034
- expect(ads[0].width).to.equal(null);
3035
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('video');
3036
- expect(ads[0].renderer).to.equal(null);
3037
- });
3038
-
3039
- it('should return no ad when given a server response with a bid with an invalid height', function () {
3040
- const serverRequest = examples.serverRequest_video_instream;
3041
-
3042
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
3043
- serverResponse.body.seatbid[0].bid[0].h = {};
3044
-
3045
- const ads = spec.interpretResponse(serverResponse, serverRequest);
3046
-
3047
- expect(ads).to.be.an('array').and.to.have.length(0);
3048
- });
3049
-
3050
- it('should return no ad when given a server response with a bid with an invalid width', function () {
3051
- const serverRequest = examples.serverRequest_video_instream;
3052
-
3053
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
3054
- serverResponse.body.seatbid[0].bid[0].w = {};
3055
-
3056
- const ads = spec.interpretResponse(serverResponse, serverRequest);
3057
-
3058
- expect(ads).to.be.an('array').and.to.have.length(0);
3059
- });
3060
-
3061
- it('should return no ad when given a valid server response and a server request without video impression', function () {
3062
- const serverRequest = utils.deepClone(examples.serverRequest_video_instream);
3063
- serverRequest.data.imp[0].video = undefined;
3064
-
3065
- const serverResponse = utils.deepClone(examples.serverResponse_video_instream);
3066
-
3067
- const ads = spec.interpretResponse(serverResponse, serverRequest);
3068
-
3069
- expect(ads).to.be.an('array').and.to.have.length(0);
3070
- });
3071
-
3072
- describe('Outstream renderer', function () {
3073
- function spyAdRenderingQueue(ad) {
3074
- const spy = sinon.spy(ad.renderer, 'push');
3075
-
3076
- this.sinonSpies.push(spy);
3077
- }
3078
-
3079
- function executeAdRenderer(ad, onRendererExecution, done) {
3080
- executeRenderer(ad.renderer, ad);
3081
-
3082
- setTimeout(() => {
3083
- try {
3084
- onRendererExecution();
3085
- } catch (err) {
3086
- done(err);
3087
- }
3088
-
3089
- done()
3090
- }, 100);
3091
- }
3092
-
3093
- before('Bind helper functions to the Mocha context', function () {
3094
- this.spyAdRenderingQueue = spyAdRenderingQueue.bind(this);
3095
-
3096
- window.VASTPlayer = function VASTPlayer() {};
3097
- window.VASTPlayer.prototype.loadXml = function loadXml() {
3098
- return new Promise((resolve, reject) => resolve())
3099
- };
3100
- window.VASTPlayer.prototype.load = function load() {
3101
- return new Promise((resolve, reject) => resolve())
3102
- };
3103
- window.VASTPlayer.prototype.on = function on(event, callback) {};
3104
- window.VASTPlayer.prototype.startAd = function startAd() {};
3105
- });
3106
-
3107
- beforeEach('Initialize the Sinon spies list', function () {
3108
- this.sinonSpies = [];
3109
- });
3110
-
3111
- afterEach('Clear the registered Sinon spies', function () {
3112
- this.sinonSpies.forEach(spy => spy.restore());
3113
- });
3114
-
3115
- after('clear data', () => {
3116
- window.VASTPlayer = null;
3117
- });
3118
-
3119
- it('should return an ad with valid renderer', function () {
3120
- const serverRequest = examples.serverRequest_video_outstream;
3121
- const serverResponse = examples.serverResponse_video_outstream;
3122
-
3123
- const ads = spec.interpretResponse(serverResponse, serverRequest);
3124
-
3125
- expect(ads).to.be.an('array').and.to.have.length(1);
3126
- expect(ads[0].renderer).to.be.an('object');
3127
- });
3128
- });
3129
- });
3130
-
3131
- describe('Native', function () {
3132
- it('should return an ad when given a valid server response with one bid', function () {
3133
- const serverRequest = examples.serverRequest_native;
3134
- const serverResponse = examples.serverResponse_native;
3135
- const native = JSON.parse(serverResponse.body.seatbid[0].bid[0].adm).native;
3136
- const {link, assets} = native;
3137
- const ads = spec.interpretResponse(serverResponse, serverRequest);
3138
-
3139
- expect(ads).to.be.an('array').and.to.have.length(1);
3140
- expect(ads[0].requestId).to.exist.and.to.be.a('string').and.to.equal(serverRequest._adot_internal.impressions[0].bidId);
3141
- expect(ads[0].creativeId).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].crid);
3142
- expect(ads[0].cpm).to.exist.and.to.be.a('number').and.to.equal(serverResponse.body.seatbid[0].bid[0].price);
3143
- expect(ads[0].currency).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.cur);
3144
- expect(ads[0].netRevenue).to.exist.and.to.be.a('boolean').and.to.equal(true);
3145
- expect(ads[0].ttl).to.exist.and.to.be.a('number').and.to.equal(10);
3146
- expect(ads[0].mediaType).to.exist.and.to.be.a('string').and.to.equal('native');
3147
- expect(ads[0].native).to.exist.and.to.be.an('object');
3148
- expect(Object.keys(ads[0].native)).to.have.length(10);
3149
- expect(ads[0].native.title).to.equal(assets[0].title.text);
3150
- expect(ads[0].native.icon.url).to.equal(assets[1].img.url);
3151
- expect(ads[0].native.icon.width).to.equal(assets[1].img.w);
3152
- expect(ads[0].native.icon.height).to.equal(assets[1].img.h);
3153
- expect(ads[0].native.image.url).to.equal(assets[2].img.url);
3154
- expect(ads[0].native.image.width).to.equal(assets[2].img.w);
3155
- expect(ads[0].native.image.height).to.equal(assets[2].img.h);
3156
- expect(ads[0].native.sponsoredBy).to.equal(assets[3].data.value);
3157
- expect(ads[0].native.body).to.equal(assets[4].data.value);
3158
- expect(ads[0].native.cta).to.equal(assets[5].data.value);
3159
- expect(ads[0].native.clickUrl).to.equal(link.url);
3160
- });
3161
- });
299
+ describe('getFloor', function () {
300
+ it('should return 0 if getFloor is not a function', function () {
301
+ const floor = spec.getFloor({ getFloor: 0 });
302
+ expect(floor).to.deep.equal(0);
303
+ })
304
+
305
+ it('should return floor result if currency are correct', function () {
306
+ const currency = 'EUR';
307
+ const floorResult = 2;
308
+ const fn = sinon.stub().callsFake(() => ({ currency, floor: floorResult }))
309
+ const adUnit = { getFloor: fn };
310
+ const size = {};
311
+ const mediaType = {};
312
+
313
+ const floor = spec.getFloor(adUnit, size, mediaType, currency);
314
+ expect(floor).to.deep.equal(floorResult);
315
+ expect(fn.calledOnce).to.equal(true);
316
+ expect(fn.calledWithExactly({ currency, mediaType, size })).to.equal(true);
317
+ })
318
+
319
+ it('should return floor result if currency are not correct', function () {
320
+ const currency = 'EUR';
321
+ const floorResult = 2;
322
+ const fn = sinon.stub().callsFake(() => ({ currency: 'wrong_currency', floor: floorResult }))
323
+ const adUnit = { getFloor: fn };
324
+ const size = {};
325
+ const mediaType = {};
326
+
327
+ const floor = spec.getFloor(adUnit, size, mediaType, currency);
328
+ expect(floor).to.deep.equal(0);
329
+ expect(fn.calledOnce).to.equal(true);
330
+ expect(fn.calledWithExactly({ currency, mediaType, size })).to.equal(true);
331
+ })
3162
332
  });
3163
333
  });