prebid.js 8.26.0 → 8.28.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 (228) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adqueryBidAdapter.js +1 -1
  10. package/dist/adrelevantisBidAdapter.js +1 -1
  11. package/dist/adstirBidAdapter.js +1 -1
  12. package/dist/adtrgtmeBidAdapter.js +1 -1
  13. package/dist/adxcgBidAdapter.js +1 -1
  14. package/dist/adyoulikeBidAdapter.js +1 -1
  15. package/dist/agmaAnalyticsAdapter.js +1 -1
  16. package/dist/ajaBidAdapter.js +1 -1
  17. package/dist/amxBidAdapter.js +1 -1
  18. package/dist/amxIdSystem.js +1 -1
  19. package/dist/appierAnalyticsAdapter.js +1 -1
  20. package/dist/appnexusBidAdapter.js +1 -1
  21. package/dist/asoBidAdapter.js +1 -1
  22. package/dist/axonixBidAdapter.js +1 -1
  23. package/dist/bidglassBidAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/bizzclickBidAdapter.js +1 -1
  26. package/dist/bridBidAdapter.js +1 -1
  27. package/dist/bridgewellBidAdapter.js +1 -1
  28. package/dist/brightMountainMediaBidAdapter.js +1 -1
  29. package/dist/browsiRtdProvider.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/concertBidAdapter.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consumableBidAdapter.js +1 -1
  35. package/dist/conversantAnalyticsAdapter.js +1 -1
  36. package/dist/conversantBidAdapter.js +1 -1
  37. package/dist/craftBidAdapter.js +1 -1
  38. package/dist/criteoBidAdapter.js +1 -1
  39. package/dist/cwireBidAdapter.js +1 -1
  40. package/dist/deepintentBidAdapter.js +1 -1
  41. package/dist/dependencies.json +3 -0
  42. package/dist/dspxBidAdapter.js +1 -1
  43. package/dist/dxkultureBidAdapter.js +1 -1
  44. package/dist/eplanningBidAdapter.js +1 -1
  45. package/dist/euidIdSystem.js +1 -1
  46. package/dist/feedadBidAdapter.js +1 -1
  47. package/dist/finativeBidAdapter.js +1 -1
  48. package/dist/flippBidAdapter.js +1 -1
  49. package/dist/freewheel-sspBidAdapter.js +1 -1
  50. package/dist/geoedgeRtdProvider.js +1 -1
  51. package/dist/gmosspBidAdapter.js +1 -1
  52. package/dist/goldbachBidAdapter.js +1 -1
  53. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  54. package/dist/greenbidsRtdProvider.js +1 -1
  55. package/dist/gridBidAdapter.js +1 -1
  56. package/dist/growthCodeRtdProvider.js +1 -1
  57. package/dist/gumgumBidAdapter.js +1 -1
  58. package/dist/h12mediaBidAdapter.js +1 -1
  59. package/dist/hypelabBidAdapter.js +1 -1
  60. package/dist/id5IdSystem.js +1 -1
  61. package/dist/identityLinkIdSystem.js +1 -1
  62. package/dist/illuminBidAdapter.js +1 -1
  63. package/dist/imdsBidAdapter.js +1 -1
  64. package/dist/improvedigitalBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/invibesBidAdapter.js +1 -1
  67. package/dist/ixBidAdapter.js +1 -1
  68. package/dist/jixieBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/kargoBidAdapter.js +1 -1
  71. package/dist/konduitAnalyticsAdapter.js +1 -1
  72. package/dist/kueezBidAdapter.js +1 -1
  73. package/dist/kueezRtbBidAdapter.js +1 -1
  74. package/dist/lassoBidAdapter.js +1 -1
  75. package/dist/lifestreetBidAdapter.js +1 -1
  76. package/dist/liveIntentIdSystem.js +1 -1
  77. package/dist/logicadBidAdapter.js +1 -1
  78. package/dist/loglyliftBidAdapter.js +1 -1
  79. package/dist/magniteAnalyticsAdapter.js +1 -1
  80. package/dist/malltvAnalyticsAdapter.js +1 -1
  81. package/dist/marsmediaBidAdapter.js +1 -1
  82. package/dist/mediafuseBidAdapter.js +1 -1
  83. package/dist/mediagoBidAdapter.js +1 -1
  84. package/dist/mediasquareBidAdapter.js +1 -1
  85. package/dist/mgidBidAdapter.js +1 -1
  86. package/dist/mgidXBidAdapter.js +1 -1
  87. package/dist/minutemediaBidAdapter.js +1 -1
  88. package/dist/minutemediaplusBidAdapter.js +1 -1
  89. package/dist/nextMillenniumBidAdapter.js +1 -1
  90. package/dist/nexx360BidAdapter.js +1 -1
  91. package/dist/not-for-prod/prebid.js +156 -156
  92. package/dist/oguryBidAdapter.js +1 -1
  93. package/dist/onetagBidAdapter.js +1 -1
  94. package/dist/ooloAnalyticsAdapter.js +1 -1
  95. package/dist/openxBidAdapter.js +1 -1
  96. package/dist/optidigitalBidAdapter.js +1 -1
  97. package/dist/outbrainBidAdapter.js +1 -1
  98. package/dist/parrableIdSystem.js +1 -1
  99. package/dist/pgamsspBidAdapter.js +1 -1
  100. package/dist/pixfutureBidAdapter.js +1 -1
  101. package/dist/prebid-core.js +2 -2
  102. package/dist/publinkIdSystem.js +1 -1
  103. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  104. package/dist/pubmaticBidAdapter.js +1 -1
  105. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  106. package/dist/pxyzBidAdapter.js +1 -1
  107. package/dist/quantcastBidAdapter.js +1 -1
  108. package/dist/readpeakBidAdapter.js +1 -1
  109. package/dist/relaidoBidAdapter.js +1 -1
  110. package/dist/retailspotBidAdapter.js +1 -1
  111. package/dist/rhythmoneBidAdapter.js +1 -1
  112. package/dist/riseBidAdapter.js +1 -1
  113. package/dist/rtdModule.js +1 -1
  114. package/dist/rubiconBidAdapter.js +1 -1
  115. package/dist/seedingAllianceBidAdapter.js +1 -1
  116. package/dist/seedtagBidAdapter.js +1 -1
  117. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  118. package/dist/sharethroughBidAdapter.js +1 -1
  119. package/dist/shinezBidAdapter.js +1 -1
  120. package/dist/shinezRtbBidAdapter.js +1 -1
  121. package/dist/smaatoBidAdapter.js +1 -1
  122. package/dist/smartadserverBidAdapter.js +1 -1
  123. package/dist/smartxBidAdapter.js +1 -1
  124. package/dist/smilewantedBidAdapter.js +1 -1
  125. package/dist/sonobiBidAdapter.js +1 -1
  126. package/dist/sovrnAnalyticsAdapter.js +1 -1
  127. package/dist/sovrnBidAdapter.js +1 -1
  128. package/dist/sparteoBidAdapter.js +1 -1
  129. package/dist/sspBCBidAdapter.js +1 -1
  130. package/dist/stvBidAdapter.js +1 -1
  131. package/dist/sublimeBidAdapter.js +1 -1
  132. package/dist/taboolaBidAdapter.js +1 -1
  133. package/dist/targetVideoBidAdapter.js +1 -1
  134. package/dist/teadsBidAdapter.js +1 -1
  135. package/dist/theAdxBidAdapter.js +1 -1
  136. package/dist/trionBidAdapter.js +1 -1
  137. package/dist/tripleliftBidAdapter.js +1 -1
  138. package/dist/ttdBidAdapter.js +1 -1
  139. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  140. package/dist/uid2IdSystem.js +1 -1
  141. package/dist/underdogmediaBidAdapter.js +1 -1
  142. package/dist/undertoneBidAdapter.js +1 -1
  143. package/dist/unrulyBidAdapter.js +1 -1
  144. package/dist/userId.js +1 -1
  145. package/dist/viantOrtbBidAdapter.js +1 -1
  146. package/dist/vidazooBidAdapter.js +1 -1
  147. package/dist/videobyteBidAdapter.js +1 -1
  148. package/dist/visxBidAdapter.js +1 -1
  149. package/dist/voxBidAdapter.js +1 -1
  150. package/dist/vuukleBidAdapter.js +1 -1
  151. package/dist/widespaceBidAdapter.js +1 -1
  152. package/dist/winrBidAdapter.js +1 -1
  153. package/dist/yahoosspBidAdapter.js +1 -1
  154. package/dist/yieldmoBidAdapter.js +1 -1
  155. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  156. package/modules/adagioAnalyticsAdapter.js +52 -6
  157. package/modules/adagioBidAdapter.js +25 -16
  158. package/modules/adnuntiusBidAdapter.js +25 -21
  159. package/modules/bizzclickBidAdapter.js +55 -300
  160. package/modules/bizzclickBidAdapter.md +94 -89
  161. package/modules/browsiRtdProvider.js +2 -2
  162. package/modules/criteoBidAdapter.js +1 -0
  163. package/modules/deepintentBidAdapter.js +2 -0
  164. package/modules/flippBidAdapter.js +1 -1
  165. package/modules/geoedgeRtdProvider.js +4 -2
  166. package/modules/growthCodeRtdProvider.js +2 -2
  167. package/modules/gumgumBidAdapter.js +3 -3
  168. package/modules/identityLinkIdSystem.js +1 -2
  169. package/modules/invibesBidAdapter.js +50 -6
  170. package/modules/liveIntentIdSystem.js +17 -1
  171. package/modules/mediagoBidAdapter.js +106 -34
  172. package/modules/mgidXBidAdapter.js +6 -1
  173. package/modules/minutemediaBidAdapter.js +9 -7
  174. package/modules/minutemediaBidAdapter.md +1 -0
  175. package/modules/nextMillenniumBidAdapter.js +170 -113
  176. package/modules/pgamsspBidAdapter.js +18 -1
  177. package/modules/pubmaticAnalyticsAdapter.js +30 -9
  178. package/modules/pubmaticBidAdapter.js +3 -1
  179. package/modules/riseBidAdapter.js +11 -8
  180. package/modules/riseBidAdapter.md +1 -0
  181. package/modules/rtdModule/index.js +2 -1
  182. package/modules/sovrnBidAdapter.js +5 -0
  183. package/modules/sparteoBidAdapter.js +10 -5
  184. package/modules/taboolaBidAdapter.js +8 -0
  185. package/modules/teadsBidAdapter.js +7 -0
  186. package/modules/theAdxBidAdapter.js +10 -2
  187. package/modules/theAdxBidAdapter.md +10 -9
  188. package/modules/unrulyBidAdapter.js +8 -1
  189. package/modules/userId/eids.js +2 -2
  190. package/modules/viantOrtbBidAdapter.js +1 -1
  191. package/modules/visxBidAdapter.js +23 -0
  192. package/modules/voxBidAdapter.js +2 -0
  193. package/package.json +1 -1
  194. package/src/auction.js +1 -1
  195. package/src/constants.json +5 -2
  196. package/src/events.js +1 -1
  197. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +83 -26
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -11
  199. package/test/spec/modules/adnuntiusBidAdapter_spec.js +1 -1
  200. package/test/spec/modules/bizzclickBidAdapter_spec.js +229 -340
  201. package/test/spec/modules/browsiRtdProvider_spec.js +0 -6
  202. package/test/spec/modules/criteoBidAdapter_spec.js +24 -0
  203. package/test/spec/modules/eids_spec.js +35 -2
  204. package/test/spec/modules/geoedgeRtdProvider_spec.js +10 -0
  205. package/test/spec/modules/gumgumBidAdapter_spec.js +8 -0
  206. package/test/spec/modules/identityLinkIdSystem_spec.js +0 -18
  207. package/test/spec/modules/invibesBidAdapter_spec.js +99 -0
  208. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
  209. package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
  210. package/test/spec/modules/mediagoBidAdapter_spec.js +107 -23
  211. package/test/spec/modules/mgidXBidAdapter_spec.js +9 -4
  212. package/test/spec/modules/minutemediaBidAdapter_spec.js +10 -0
  213. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +503 -80
  214. package/test/spec/modules/pgamsspBidAdapter_spec.js +1 -0
  215. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +51 -0
  216. package/test/spec/modules/pubmaticBidAdapter_spec.js +8 -0
  217. package/test/spec/modules/riseBidAdapter_spec.js +11 -1
  218. package/test/spec/modules/sovrnBidAdapter_spec.js +35 -0
  219. package/test/spec/modules/sparteoBidAdapter_spec.js +8 -2
  220. package/test/spec/modules/taboolaBidAdapter_spec.js +45 -1
  221. package/test/spec/modules/teadsBidAdapter_spec.js +58 -0
  222. package/test/spec/modules/theAdxBidAdapter_spec.js +72 -0
  223. package/test/spec/modules/unrulyBidAdapter_spec.js +7 -4
  224. package/test/spec/modules/userId_spec.js +19 -1
  225. package/test/spec/modules/viantOrtbBidAdapter_spec.js +1 -1
  226. package/test/spec/modules/visxBidAdapter_spec.js +39 -1
  227. package/test/spec/unit/core/events_spec.js +17 -2
  228. package/test/spec/unit/pbjs_api_spec.js +7 -0
@@ -1,6 +1,102 @@
1
1
  import { expect } from 'chai';
2
- import { spec } from 'modules/bizzclickBidAdapter.js';
3
- import {config} from 'src/config.js';
2
+ import { spec } from 'modules/bizzclickBidAdapter';
3
+ import 'modules/priceFloors.js';
4
+ import { newBidder } from 'src/adapters/bidderFactory';
5
+ import { config } from '../../../src/config.js';
6
+ import { syncAddFPDToBidderRequest } from '../../helpers/fpd.js';
7
+
8
+ // load modules that register ORTB processors
9
+ import 'src/prebid.js';
10
+ import 'modules/currency.js';
11
+ import 'modules/userId/index.js';
12
+ import 'modules/multibid/index.js';
13
+ import 'modules/priceFloors.js';
14
+ import 'modules/consentManagement.js';
15
+ import 'modules/consentManagementUsp.js';
16
+ import 'modules/schain.js';
17
+
18
+ const SIMPLE_BID_REQUEST = {
19
+ bidder: 'bizzclick',
20
+ params: {
21
+ accountId: 'testAccountId',
22
+ sourceId: 'testSourceId',
23
+ host: 'USE',
24
+ },
25
+ mediaTypes: {
26
+ banner: {
27
+ sizes: [
28
+ [320, 250],
29
+ [300, 600],
30
+ ],
31
+ },
32
+ },
33
+ adUnitCode: 'div-gpt-ad-1499748733608-0',
34
+ transactionId: 'f183e871-fbed-45f0-a427-c8a63c4c01eb',
35
+ bidId: '33e9500b21129f',
36
+ bidderRequestId: '2772c1e566670b',
37
+ auctionId: '192721e36a0239',
38
+ sizes: [[300, 250], [160, 600]],
39
+ gdprConsent: {
40
+ apiVersion: 2,
41
+ consentString: 'CONSENT',
42
+ vendorData: { purpose: { consents: { 1: true } } },
43
+ gdprApplies: true,
44
+ addtlConsent: '1~1.35.41.101',
45
+ },
46
+ }
47
+
48
+ const BANNER_BID_REQUEST = {
49
+ bidder: 'bizzclick',
50
+ params: {
51
+ accountId: 'testAccountId',
52
+ sourceId: 'testSourceId',
53
+ host: 'USE',
54
+ },
55
+ mediaTypes: {
56
+ banner: {
57
+ sizes: [
58
+ [300, 250],
59
+ [300, 600],
60
+ ],
61
+ },
62
+ },
63
+ adUnitCode: '/adunit-code/test-path',
64
+ bidId: 'test-bid-id-1',
65
+ bidderRequestId: 'test-bid-request-1',
66
+ auctionId: 'test-auction-1',
67
+ transactionId: 'test-transactionId-1',
68
+ code: 'banner_example',
69
+ timeout: 1000,
70
+ }
71
+
72
+ const VIDEO_BID_REQUEST = {
73
+ placementCode: '/DfpAccount1/slotVideo',
74
+ bidId: 'test-bid-id-2',
75
+ mediaTypes: {
76
+ video: {
77
+ playerSize: [400, 300],
78
+ w: 400,
79
+ h: 300,
80
+ minduration: 5,
81
+ maxduration: 10,
82
+ startdelay: 0,
83
+ skip: 1,
84
+ minbitrate: 200,
85
+ protocols: [1, 2, 4]
86
+ }
87
+ },
88
+ bidder: 'bizzclick',
89
+ params: {
90
+ accountId: '123',
91
+ sourceId: '123',
92
+ host: 'USE',
93
+ },
94
+ adUnitCode: '/adunit-code/test-path',
95
+ bidderRequestId: 'test-bid-request-1',
96
+ auctionId: 'test-auction-1',
97
+ transactionId: 'test-transactionId-1',
98
+ timeout: 1000,
99
+ }
4
100
 
5
101
  const NATIVE_BID_REQUEST = {
6
102
  code: 'native_example',
@@ -34,386 +130,179 @@ const NATIVE_BID_REQUEST = {
34
130
  },
35
131
  bidder: 'bizzclick',
36
132
  params: {
37
- placementId: 'hash',
38
- accountId: 'accountId'
39
- },
40
- timeout: 1000
41
-
42
- };
43
-
44
- const BANNER_BID_REQUEST = {
45
- code: 'banner_example',
46
- mediaTypes: {
47
- banner: {
48
- sizes: [[300, 250], [300, 600]]
49
- }
50
- },
51
- schain: {
52
- ver: '1.0',
53
- complete: 1,
54
- nodes: [
55
- {
56
- asi: 'example.com',
57
- sid: '164',
58
- hp: 1
59
- }
60
- ]
61
- },
62
- bidder: 'bizzclick',
63
- params: {
64
- placementId: 'hash',
65
- accountId: 'accountId'
133
+ accountId: 'testAccountId',
134
+ sourceId: 'testSourceId',
135
+ host: 'USE',
66
136
  },
137
+ adUnitCode: '/adunit-code/test-path',
138
+ bidId: 'test-bid-id-1',
139
+ bidderRequestId: 'test-bid-request-1',
140
+ auctionId: 'test-auction-1',
141
+ transactionId: 'test-transactionId-1',
67
142
  timeout: 1000,
68
- gdprConsent: {
69
- consentString: 'BOEFEAyOEFEAyAHABDENAI4AAAB9vABAASA',
70
- gdprApplies: 1,
71
- },
72
143
  uspConsent: 'uspConsent'
73
- }
144
+ };
74
145
 
75
- const bidRequest = {
146
+ const bidderRequest = {
76
147
  refererInfo: {
77
- referer: 'test.com'
78
- }
79
- }
80
-
81
- const VIDEO_BID_REQUEST = {
82
- code: 'video1',
83
- sizes: [640, 480],
84
- mediaTypes: { video: {
85
- minduration: 0,
86
- maxduration: 999,
87
- boxingallowed: 1,
88
- skip: 0,
89
- mimes: [
90
- 'application/javascript',
91
- 'video/mp4'
92
- ],
93
- w: 1920,
94
- h: 1080,
95
- protocols: [
96
- 2
97
- ],
98
- linearity: 1,
99
- api: [
100
- 1,
101
- 2
102
- ]
148
+ page: 'https://publisher.com/home',
149
+ ref: 'https://referrer'
103
150
  }
104
- },
105
-
106
- bidder: 'bizzclick',
107
- params: {
108
- placementId: 'hash',
109
- accountId: 'accountId'
110
- },
111
- timeout: 1000
112
-
113
- }
114
-
115
- const BANNER_BID_RESPONSE = {
116
- id: 'request_id',
117
- bidid: 'request_imp_id',
118
- seatbid: [{
119
- bid: [{
120
- id: 'bid_id',
121
- impid: 'request_imp_id',
122
- price: 5,
123
- adomain: ['example.com'],
124
- adm: 'admcode',
125
- crid: 'crid',
126
- ext: {
127
- mediaType: 'banner'
128
- }
129
- }],
130
- }],
131
- };
132
-
133
- const VIDEO_BID_RESPONSE = {
134
- id: 'request_id',
135
- bidid: 'request_imp_id',
136
- seatbid: [{
137
- bid: [{
138
- id: 'bid_id',
139
- impid: 'request_imp_id',
140
- price: 5,
141
- adomain: ['example.com'],
142
- adm: 'admcode',
143
- crid: 'crid',
144
- ext: {
145
- mediaType: 'video',
146
- vastUrl: 'http://example.vast',
147
- }
148
- }],
149
- }],
150
151
  };
151
152
 
152
- let imgData = {
153
- url: `https://example.com/image`,
154
- w: 1200,
155
- h: 627
156
- };
153
+ const gdprConsent = {
154
+ apiVersion: 2,
155
+ consentString: 'CONSENT',
156
+ vendorData: { purpose: { consents: { 1: true } } },
157
+ gdprApplies: true,
158
+ addtlConsent: '1~1.35.41.101',
159
+ }
157
160
 
158
- const NATIVE_BID_RESPONSE = {
159
- id: 'request_id',
160
- bidid: 'request_imp_id',
161
- seatbid: [{
162
- bid: [{
163
- id: 'bid_id',
164
- impid: 'request_imp_id',
165
- price: 5,
166
- adomain: ['example.com'],
167
- adm: { native:
168
- {
169
- assets: [
170
- {id: 0, title: 'dummyText'},
171
- {id: 3, image: imgData},
172
- {
173
- id: 5,
174
- data: {value: 'organization.name'}
175
- }
176
- ],
177
- link: {url: 'example.com'},
178
- imptrackers: ['tracker1.com', 'tracker2.com', 'tracker3.com'],
179
- jstracker: 'tracker1.com'
180
- }
181
- },
182
- crid: 'crid',
183
- ext: {
184
- mediaType: 'native'
185
- }
186
- }],
187
- }],
188
- };
161
+ describe('bizzclickAdapter', function () {
162
+ const adapter = newBidder(spec);
163
+ describe('inherited functions', function () {
164
+ it('exists and is a function', function () {
165
+ expect(adapter.callBids).to.exist.and.to.be.a('function');
166
+ });
167
+ });
189
168
 
190
- describe('BizzclickAdapter', function() {
191
- describe('with COPPA', function() {
192
- beforeEach(function() {
169
+ describe('with user privacy regulations', function () {
170
+ it('should send the Coppa "required" flag set to "1" in the request', function () {
193
171
  sinon.stub(config, 'getConfig')
194
172
  .withArgs('coppa')
195
173
  .returns(true);
196
- });
197
- afterEach(function() {
174
+ const serverRequest = spec.buildRequests([SIMPLE_BID_REQUEST], syncAddFPDToBidderRequest(bidderRequest));
175
+ expect(serverRequest.data.regs.coppa).to.equal(1);
198
176
  config.getConfig.restore();
199
177
  });
200
178
 
201
- it('should send the Coppa "required" flag set to "1" in the request', function () {
202
- let serverRequest = spec.buildRequests([BANNER_BID_REQUEST]);
203
- expect(serverRequest.data[0].regs.coppa).to.equal(1);
179
+ it('should send the GDPR Consent data in the request', function () {
180
+ const serverRequest = spec.buildRequests([SIMPLE_BID_REQUEST], syncAddFPDToBidderRequest({ ...bidderRequest, gdprConsent }));
181
+ expect(serverRequest.data.regs.ext.gdpr).to.exist.and.to.equal(1);
182
+ expect(serverRequest.data.user.ext.consent).to.equal('CONSENT');
204
183
  });
205
- });
206
184
 
207
- describe('isBidRequestValid', function() {
208
- it('should return true when required params found', function () {
209
- expect(spec.isBidRequestValid(NATIVE_BID_REQUEST)).to.equal(true);
210
- });
211
-
212
- it('should return false when required params are not passed', function () {
213
- let bid = Object.assign({}, NATIVE_BID_REQUEST);
214
- delete bid.params;
215
- bid.params = {
216
- 'IncorrectParam': 0
217
- };
218
- expect(spec.isBidRequestValid(bid)).to.equal(false);
185
+ it('should send the CCPA data in the request', function () {
186
+ const serverRequest = spec.buildRequests([SIMPLE_BID_REQUEST], syncAddFPDToBidderRequest({...bidderRequest, ...{ uspConsent: '1YYY' }}));
187
+ expect(serverRequest.data.regs.ext.us_privacy).to.equal('1YYY');
219
188
  });
220
189
  });
221
190
 
222
- describe('build Native Request', function () {
223
- const request = spec.buildRequests([NATIVE_BID_REQUEST], bidRequest);
224
-
225
- it('Creates a ServerRequest object with method, URL and data', function () {
226
- expect(request).to.exist;
227
- expect(request.method).to.exist;
228
- expect(request.url).to.exist;
229
- expect(request.data).to.exist;
230
- });
231
-
232
- it('sends bid request to our endpoint via POST', function () {
233
- expect(request.method).to.equal('POST');
234
- });
235
-
236
- it('Returns valid URL', function () {
237
- expect(request.url).to.equal('https://us-e-node1.bizzclick.com/bid?rtb_seat_id=prebidjs&secret_key=accountId');
191
+ describe('isBidRequestValid', function () {
192
+ it('should return true when required params found', function () {
193
+ expect(spec.isBidRequestValid(BANNER_BID_REQUEST)).to.equal(true);
238
194
  });
239
195
 
240
- it('Returns empty data if no valid requests are passed', function () {
241
- let serverRequest = spec.buildRequests([]);
242
- expect(serverRequest).to.be.an('array').that.is.empty;
196
+ it('should return false when accountID/sourceId is missing', function () {
197
+ let localbid = Object.assign({}, BANNER_BID_REQUEST);
198
+ delete localbid.params.accountId;
199
+ delete localbid.params.sourceId;
200
+ expect(spec.isBidRequestValid(BANNER_BID_REQUEST)).to.equal(false);
243
201
  });
244
202
  });
245
203
 
246
- describe('build Banner Request', function () {
247
- const request = spec.buildRequests([BANNER_BID_REQUEST]);
248
-
249
- it('Creates a ServerRequest object with method, URL and data', function () {
250
- expect(request).to.exist;
251
- expect(request.method).to.exist;
252
- expect(request.url).to.exist;
253
- expect(request.data).to.exist;
204
+ describe('build request', function () {
205
+ it('should return an empty array when no bid requests', function () {
206
+ const bidRequest = spec.buildRequests([], syncAddFPDToBidderRequest(bidderRequest));
207
+ expect(bidRequest).to.be.an('array');
208
+ expect(bidRequest.length).to.equal(0);
254
209
  });
255
210
 
256
- it('sends bid request to our endpoint via POST', function () {
211
+ it('should return a valid bid request object', function () {
212
+ const request = spec.buildRequests([SIMPLE_BID_REQUEST], syncAddFPDToBidderRequest(bidderRequest));
213
+ expect(request).to.not.equal('array');
214
+ expect(request.data).to.be.an('object');
257
215
  expect(request.method).to.equal('POST');
216
+ expect(request.url).to.not.equal('');
217
+ expect(request.url).to.not.equal(undefined);
218
+ expect(request.url).to.not.equal(null);
219
+
220
+ expect(request.data.site).to.have.property('page');
221
+ expect(request.data.site).to.have.property('domain');
222
+ expect(request.data).to.have.property('id');
223
+ expect(request.data).to.have.property('imp');
224
+ expect(request.data).to.have.property('device');
258
225
  });
259
226
 
260
- it('check consent and ccpa string is set properly', function() {
261
- expect(request.data[0].regs.ext.gdpr).to.equal(1);
262
- expect(request.data[0].user.ext.consent).to.equal(BANNER_BID_REQUEST.gdprConsent.consentString);
263
- expect(request.data[0].regs.ext.us_privacy).to.equal(BANNER_BID_REQUEST.uspConsent);
264
- })
265
-
266
- it('check schain is set properly', function() {
267
- expect(request.data[0].source.ext.schain.complete).to.equal(1);
268
- expect(request.data[0].source.ext.schain.ver).to.equal('1.0');
269
- })
270
-
271
- it('Returns valid URL', function () {
272
- expect(request.url).to.equal('https://us-e-node1.bizzclick.com/bid?rtb_seat_id=prebidjs&secret_key=accountId');
227
+ it('should return a valid bid BANNER request object', function () {
228
+ const request = spec.buildRequests([BANNER_BID_REQUEST], syncAddFPDToBidderRequest(bidderRequest));
229
+ expect(request.data.imp[0].banner).to.exist;
230
+ expect(request.data.imp[0].banner.format[0].w).to.be.an('number');
231
+ expect(request.data.imp[0].banner.format[0].h).to.be.an('number');
273
232
  });
274
- });
275
233
 
276
- describe('build Video Request', function () {
277
- const request = spec.buildRequests([VIDEO_BID_REQUEST]);
278
-
279
- it('Creates a ServerRequest object with method, URL and data', function () {
280
- expect(request).to.exist;
281
- expect(request.method).to.exist;
282
- expect(request.url).to.exist;
283
- expect(request.data).to.exist;
284
- });
234
+ if (FEATURES.VIDEO) {
235
+ it('should return a valid bid VIDEO request object', function () {
236
+ const request = spec.buildRequests([VIDEO_BID_REQUEST], syncAddFPDToBidderRequest(bidderRequest));
237
+ expect(request.data.imp[0].video).to.exist;
238
+ expect(request.data.imp[0].video.w).to.be.an('number');
239
+ expect(request.data.imp[0].video.h).to.be.an('number');
240
+ });
241
+ }
285
242
 
286
- it('sends bid request to our endpoint via POST', function () {
287
- expect(request.method).to.equal('POST');
243
+ it('should return a valid bid NATIVE request object', function () {
244
+ const request = spec.buildRequests([NATIVE_BID_REQUEST], syncAddFPDToBidderRequest(bidderRequest));
245
+ expect(request.data.imp[0]).to.be.an('object');
288
246
  });
247
+ })
289
248
 
290
- it('Returns valid URL', function () {
291
- expect(request.url).to.equal('https://us-e-node1.bizzclick.com/bid?rtb_seat_id=prebidjs&secret_key=accountId');
249
+ describe('interpretResponse', function () {
250
+ let bidRequests, bidderRequest;
251
+ beforeEach(function () {
252
+ bidRequests = [{
253
+ 'bidId': '28ffdk2B952532',
254
+ 'bidder': 'bizzclick',
255
+ 'userId': {
256
+ 'freepassId': {
257
+ 'userIp': '172.21.0.1',
258
+ 'userId': '123',
259
+ 'commonId': 'commonIdValue'
260
+ }
261
+ },
262
+ 'adUnitCode': 'adunit-code',
263
+ 'params': {
264
+ 'publisherId': 'publisherIdValue'
265
+ }
266
+ }];
267
+ bidderRequest = {};
292
268
  });
293
- });
294
269
 
295
- describe('interpretResponse', function () {
296
- it('Empty response must return empty array', function() {
270
+ it('Empty response must return empty array', function () {
297
271
  const emptyResponse = null;
298
- let response = spec.interpretResponse(emptyResponse);
272
+ let response = spec.interpretResponse(emptyResponse, BANNER_BID_REQUEST);
299
273
 
300
274
  expect(response).to.be.an('array').that.is.empty;
301
275
  })
302
276
 
303
277
  it('Should interpret banner response', function () {
304
- const bannerResponse = {
305
- body: [BANNER_BID_RESPONSE]
306
- }
307
-
308
- const expectedBidResponse = {
309
- requestId: BANNER_BID_RESPONSE.id,
310
- cpm: BANNER_BID_RESPONSE.seatbid[0].bid[0].price,
311
- width: BANNER_BID_RESPONSE.seatbid[0].bid[0].w,
312
- height: BANNER_BID_RESPONSE.seatbid[0].bid[0].h,
313
- ttl: BANNER_BID_RESPONSE.ttl || 1200,
314
- currency: BANNER_BID_RESPONSE.cur || 'USD',
315
- netRevenue: true,
316
- creativeId: BANNER_BID_RESPONSE.seatbid[0].bid[0].crid,
317
- dealId: BANNER_BID_RESPONSE.seatbid[0].bid[0].dealid,
318
-
319
- meta: {advertiserDomains: BANNER_BID_RESPONSE.seatbid[0].bid[0].adomain},
320
- mediaType: 'banner',
321
- ad: BANNER_BID_RESPONSE.seatbid[0].bid[0].adm
322
- }
323
-
324
- let bannerResponses = spec.interpretResponse(bannerResponse);
325
-
326
- expect(bannerResponses).to.be.an('array').that.is.not.empty;
327
- let dataItem = bannerResponses[0];
328
- expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
329
- 'netRevenue', 'currency', 'dealId', 'meta', 'mediaType');
330
- expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
331
- expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
332
- expect(dataItem.ad).to.equal(expectedBidResponse.ad);
333
- expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
334
- expect(dataItem.meta.advertiserDomains).to.equal(expectedBidResponse.meta.advertiserDomains);
335
- expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
336
- expect(dataItem.netRevenue).to.be.true;
337
- expect(dataItem.currency).to.equal(expectedBidResponse.currency);
338
- expect(dataItem.width).to.equal(expectedBidResponse.width);
339
- expect(dataItem.height).to.equal(expectedBidResponse.height);
340
- });
341
-
342
- it('Should interpret video response', function () {
343
- const videoResponse = {
344
- body: [VIDEO_BID_RESPONSE]
345
- }
346
-
347
- const expectedBidResponse = {
348
- requestId: VIDEO_BID_RESPONSE.id,
349
- cpm: VIDEO_BID_RESPONSE.seatbid[0].bid[0].price,
350
- width: VIDEO_BID_RESPONSE.seatbid[0].bid[0].w,
351
- height: VIDEO_BID_RESPONSE.seatbid[0].bid[0].h,
352
- ttl: VIDEO_BID_RESPONSE.ttl || 1200,
353
- currency: VIDEO_BID_RESPONSE.cur || 'USD',
354
- netRevenue: true,
355
- creativeId: VIDEO_BID_RESPONSE.seatbid[0].bid[0].crid,
356
- dealId: VIDEO_BID_RESPONSE.seatbid[0].bid[0].dealid,
357
- mediaType: 'video',
358
- vastXml: VIDEO_BID_RESPONSE.seatbid[0].bid[0].adm,
359
- meta: {advertiserDomains: VIDEO_BID_RESPONSE.seatbid[0].bid[0].adomain},
360
- vastUrl: VIDEO_BID_RESPONSE.seatbid[0].bid[0].ext.vastUrl
361
- }
362
-
363
- let videoResponses = spec.interpretResponse(videoResponse);
364
-
365
- expect(videoResponses).to.be.an('array').that.is.not.empty;
366
- let dataItem = videoResponses[0];
367
- expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'vastXml', 'vastUrl', 'ttl', 'creativeId',
368
- 'netRevenue', 'currency', 'dealId', 'meta', 'mediaType');
369
- expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
370
- expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
371
- expect(dataItem.vastXml).to.equal(expectedBidResponse.vastXml)
372
- expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
373
- expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
374
- expect(dataItem.meta.advertiserDomains).to.equal(expectedBidResponse.meta.advertiserDomains);
375
- expect(dataItem.netRevenue).to.be.true;
376
- expect(dataItem.currency).to.equal(expectedBidResponse.currency);
377
- expect(dataItem.width).to.equal(expectedBidResponse.width);
378
- expect(dataItem.height).to.equal(expectedBidResponse.height);
379
- });
380
-
381
- it('Should interpret native response', function () {
382
- const nativeResponse = {
383
- body: [NATIVE_BID_RESPONSE]
384
- }
385
-
386
- const expectedBidResponse = {
387
- requestId: NATIVE_BID_RESPONSE.id,
388
- cpm: NATIVE_BID_RESPONSE.seatbid[0].bid[0].price,
389
- width: NATIVE_BID_RESPONSE.seatbid[0].bid[0].w,
390
- height: NATIVE_BID_RESPONSE.seatbid[0].bid[0].h,
391
- ttl: NATIVE_BID_RESPONSE.ttl || 1200,
392
- currency: NATIVE_BID_RESPONSE.cur || 'USD',
393
- netRevenue: true,
394
- creativeId: NATIVE_BID_RESPONSE.seatbid[0].bid[0].crid,
395
- dealId: NATIVE_BID_RESPONSE.seatbid[0].bid[0].dealid,
396
- mediaType: 'native',
397
- meta: {advertiserDomains: NATIVE_BID_RESPONSE.seatbid[0].bid[0].adomain},
398
- native: {clickUrl: NATIVE_BID_RESPONSE.seatbid[0].bid[0].adm.native.link.url}
399
- }
400
-
401
- let nativeResponses = spec.interpretResponse(nativeResponse);
402
-
403
- expect(nativeResponses).to.be.an('array').that.is.not.empty;
404
- let dataItem = nativeResponses[0];
405
- expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'native', 'ttl', 'creativeId',
406
- 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
407
- expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
408
- expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
409
- expect(dataItem.meta.advertiserDomains).to.equal(expectedBidResponse.meta.advertiserDomains);
410
- expect(dataItem.native.clickUrl).to.equal(expectedBidResponse.native.clickUrl)
411
- expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
412
- expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
413
- expect(dataItem.netRevenue).to.be.true;
414
- expect(dataItem.currency).to.equal(expectedBidResponse.currency);
415
- expect(dataItem.width).to.equal(expectedBidResponse.width);
416
- expect(dataItem.height).to.equal(expectedBidResponse.height);
417
- });
278
+ const serverResponse = {
279
+ body: {
280
+ 'cur': 'USD',
281
+ 'seatbid': [{
282
+ 'bid': [{
283
+ 'impid': '28ffdk2B952532',
284
+ 'price': 97,
285
+ 'adm': '<iframe src=\'http://127.0.0.1:8081/banner.html?w=300&h=250&cr=0\' width=\'300\' height=\'250\' style=\'border:none;\'></iframe>',
286
+ 'w': 300,
287
+ 'h': 250,
288
+ 'crid': 'creative0'
289
+ }]
290
+ }]
291
+ }
292
+ };
293
+ it('should interpret server response', function () {
294
+ const bidRequest = spec.buildRequests(bidRequests, syncAddFPDToBidderRequest(bidderRequest));
295
+ const bids = spec.interpretResponse(serverResponse, bidRequest);
296
+ expect(bids).to.be.an('array');
297
+ const bid = bids[0];
298
+ expect(bid).to.be.an('object');
299
+ expect(bid.currency).to.equal('USD');
300
+ expect(bid.cpm).to.equal(97);
301
+ expect(bid.ad).to.equal(ad)
302
+ expect(bid.width).to.equal(300);
303
+ expect(bid.height).to.equal(250);
304
+ expect(bid.creativeId).to.equal('creative0');
305
+ });
306
+ })
418
307
  });
419
- })
308
+ });
@@ -89,12 +89,6 @@ describe('browsi Real time data sub module', function () {
89
89
  expect(browsiRTD.browsiSubmodule.getTargetingData([], null, null, auction)).to.eql({});
90
90
  });
91
91
 
92
- it('should return NA if no prediction for ad unit', function () {
93
- makeSlot({code: 'adMock', divId: 'browsiAd_2'});
94
- browsiRTD.setData({});
95
- expect(browsiRTD.browsiSubmodule.getTargetingData(['adMock'], null, null, auction)).to.eql({adMock: {bv: 'NA'}});
96
- });
97
-
98
92
  it('should return prediction from server', function () {
99
93
  makeSlot({code: 'hasPrediction', divId: 'hasPrediction'});
100
94
  const data = {
@@ -1122,6 +1122,30 @@ describe('The Criteo bidding adapter', function () {
1122
1122
  expect(request.data.user.uspIab).to.equal('1YNY');
1123
1123
  });
1124
1124
 
1125
+ it('should properly build a request with site and app ortb fields', function () {
1126
+ const bidRequests = [];
1127
+ let app = {
1128
+ publisher: {
1129
+ id: 'appPublisherId'
1130
+ }
1131
+ };
1132
+ let site = {
1133
+ publisher: {
1134
+ id: 'sitePublisherId'
1135
+ }
1136
+ };
1137
+ const bidderRequest = {
1138
+ ortb2: {
1139
+ app: app,
1140
+ site: site
1141
+ }
1142
+ };
1143
+ const request = spec.buildRequests(bidRequests, bidderRequest);
1144
+
1145
+ expect(request.data.app).to.equal(app);
1146
+ expect(request.data.site).to.equal(site);
1147
+ });
1148
+
1125
1149
  it('should properly build a request with device sua field', function () {
1126
1150
  const sua = {}
1127
1151
  const bidRequests = [