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
@@ -51,7 +51,8 @@ describe('imRtdProvider', function () {
51
51
  describe('getBidderFunction', function () {
52
52
  const assumedBidder = [
53
53
  'ix',
54
- 'pubmatic'
54
+ 'pubmatic',
55
+ 'fluct'
55
56
  ];
56
57
  assumedBidder.forEach(bidderName => {
57
58
  it(`should return bidderFunction with assumed bidder: ${bidderName}`, function () {
@@ -70,6 +71,34 @@ describe('imRtdProvider', function () {
70
71
  it(`should return null with unexpected bidder`, function () {
71
72
  expect(getBidderFunction('test')).to.equal(null);
72
73
  });
74
+ describe('fluct bidder function', function () {
75
+ it('should return a bid w/o im_segments if not any exists', function () {
76
+ const bid = {bidder: 'fluct'};
77
+ expect(getBidderFunction('fluct')(bid, '')).to.eql(bid);
78
+ });
79
+ it('should return a bid w/ im_segments if any exists', function () {
80
+ const bid = {
81
+ bidder: 'fluct',
82
+ params: {
83
+ kv: {
84
+ foo: ['foo1']
85
+ }
86
+ }
87
+ };
88
+ expect(getBidderFunction('fluct')(bid, {im_segments: ['12345', '67890']}))
89
+ .to.eql(
90
+ {
91
+ bidder: 'fluct',
92
+ params: {
93
+ kv: {
94
+ foo: ['foo1'],
95
+ imsids: ['12345', '67890']
96
+ }
97
+ }
98
+ }
99
+ );
100
+ });
101
+ });
73
102
  })
74
103
 
75
104
  describe('getCustomBidderFunction', function () {
@@ -557,6 +557,25 @@ describe('Improve Digital Adapter Tests', function () {
557
557
  ]
558
558
  );
559
559
  });
560
+
561
+ it('should set coppa', function() {
562
+ sinon.stub(config, 'getConfig')
563
+ .withArgs('coppa')
564
+ .returns(true);
565
+ const bidRequest = Object.assign({}, simpleBidRequest);
566
+ const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
567
+ const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
568
+ expect(params.bid_request.coppa).to.equal(1);
569
+
570
+ config.getConfig.restore();
571
+ });
572
+
573
+ it('should undefined coppa', function() {
574
+ const bidRequest = Object.assign({}, simpleBidRequest);
575
+ const request = spec.buildRequests([bidRequest], bidderRequestReferrer)[0];
576
+ const params = JSON.parse(decodeURIComponent(request.data.substring(PARAM_PREFIX.length)));
577
+ expect(params.bid_request.coppa).to.equal(undefined);
578
+ });
560
579
  });
561
580
 
562
581
  const serverResponse = {
@@ -143,6 +143,7 @@ describe('IQZoneBidAdapter', function () {
143
143
  expect(placement.bidId).to.be.a('string');
144
144
  expect(placement.schain).to.be.an('object');
145
145
  expect(placement.bidfloor).to.exist.and.to.equal(0);
146
+ expect(placement.type).to.exist.and.to.equal('publisher');
146
147
 
147
148
  if (placement.adFormat === BANNER) {
148
149
  expect(placement.sizes).to.be.an('array');
@@ -1230,7 +1230,7 @@ describe('IndexexchangeAdapter', function () {
1230
1230
  const r = JSON.parse(request.data.r);
1231
1231
 
1232
1232
  expect(r.ext.ixdiag.userIds).to.be.an('array');
1233
- expect(r.ext.ixdiag.userIds.should.include('lotamePanoramaId'));
1233
+ expect(r.ext.ixdiag.userIds.should.not.include('lotamePanoramaId'));
1234
1234
  expect(r.ext.ixdiag.userIds.should.not.include('merkleId'));
1235
1235
  expect(r.ext.ixdiag.userIds.should.not.include('parrableId'));
1236
1236
  });
@@ -1,6 +1,13 @@
1
1
  import { expect, assert } from 'chai';
2
2
  import { spec } from 'modules/kubientBidAdapter.js';
3
3
  import { BANNER, VIDEO } from '../../../src/mediaTypes.js';
4
+ import {config} from '../../../src/config';
5
+
6
+ function encodeQueryData(data) {
7
+ return Object.keys(data).map(function(key) {
8
+ return [key, data[key]].map(encodeURIComponent).join('=');
9
+ }).join('&');
10
+ }
4
11
 
5
12
  describe('KubientAdapter', function () {
6
13
  let bidBanner = {
@@ -94,24 +101,20 @@ describe('KubientAdapter', function () {
94
101
  uspConsent: uspConsentData
95
102
  };
96
103
  describe('buildRequestBanner', function () {
97
- let serverRequests = spec.buildRequests([bidBanner], Object.assign({}, bidderRequest, {bids: [bidBanner]}));
98
- it('Creates a ServerRequest object with method, URL and data', function () {
99
- expect(serverRequests).to.be.an('array');
104
+ beforeEach(function () {
105
+ config.resetConfig();
100
106
  });
101
- for (let i = 0; i < serverRequests.length; i++) {
102
- let serverRequest = serverRequests[i];
103
- it('Creates a ServerRequest object with method, URL and data', function () {
107
+ it('Creates Banner 1 ServerRequest object with method, URL and data', function () {
108
+ config.setConfig({'coppa': false});
109
+ let serverRequests = spec.buildRequests([bidBanner], Object.assign({}, bidderRequest, {bids: [bidBanner]}));
110
+ expect(serverRequests).to.be.an('array');
111
+ for (let i = 0; i < serverRequests.length; i++) {
112
+ let serverRequest = serverRequests[i];
104
113
  expect(serverRequest.method).to.be.a('string');
105
114
  expect(serverRequest.url).to.be.a('string');
106
115
  expect(serverRequest.data).to.be.a('string');
107
- });
108
- it('Returns POST method', function () {
109
116
  expect(serverRequest.method).to.equal('POST');
110
- });
111
- it('Returns valid URL', function () {
112
117
  expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
113
- });
114
- it('Returns valid data if array of bids is valid', function () {
115
118
  let data = JSON.parse(serverRequest.data);
116
119
  expect(data).to.be.an('object');
117
120
  expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
@@ -131,28 +134,24 @@ describe('KubientAdapter', function () {
131
134
  expect(adSlot.schain).to.be.an('object');
132
135
  expect(adSlot.banner).to.be.an('object');
133
136
  }
134
- });
135
- }
137
+ }
138
+ });
136
139
  });
137
140
  describe('buildRequestVideo', function () {
138
- let serverRequests = spec.buildRequests([bidVideo], Object.assign({}, bidderRequest, {bids: [bidVideo]}));
139
- it('Creates a ServerRequest object with method, URL and data', function () {
140
- expect(serverRequests).to.be.an('array');
141
+ beforeEach(function () {
142
+ config.resetConfig();
141
143
  });
142
- for (let i = 0; i < serverRequests.length; i++) {
143
- let serverRequest = serverRequests[i];
144
- it('Creates a ServerRequest object with method, URL and data', function () {
144
+ it('Creates Video 1 ServerRequest object with method, URL and data', function () {
145
+ config.setConfig({'coppa': false});
146
+ let serverRequests = spec.buildRequests([bidVideo], Object.assign({}, bidderRequest, {bids: [bidVideo]}));
147
+ expect(serverRequests).to.be.an('array');
148
+ for (let i = 0; i < serverRequests.length; i++) {
149
+ let serverRequest = serverRequests[i];
145
150
  expect(serverRequest.method).to.be.a('string');
146
151
  expect(serverRequest.url).to.be.a('string');
147
152
  expect(serverRequest.data).to.be.a('string');
148
- });
149
- it('Returns POST method', function () {
150
153
  expect(serverRequest.method).to.equal('POST');
151
- });
152
- it('Returns valid URL', function () {
153
154
  expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
154
- });
155
- it('Returns valid data if array of bids is valid', function () {
156
155
  let data = JSON.parse(serverRequest.data);
157
156
  expect(data).to.be.an('object');
158
157
  expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
@@ -172,11 +171,89 @@ describe('KubientAdapter', function () {
172
171
  expect(adSlot.schain).to.be.an('object');
173
172
  expect(adSlot.video).to.be.an('object');
174
173
  }
175
- });
176
- }
174
+ }
175
+ });
176
+ });
177
+ describe('buildRequestBanner', function () {
178
+ beforeEach(function () {
179
+ config.resetConfig();
180
+ });
181
+ it('Creates Banner 2 ServerRequest object with method, URL and data with bidBanner', function () {
182
+ config.setConfig({'coppa': true});
183
+ let serverRequests = spec.buildRequests([bidBanner], Object.assign({}, bidderRequest, {bids: [bidBanner]}));
184
+ expect(serverRequests).to.be.an('array');
185
+ for (let i = 0; i < serverRequests.length; i++) {
186
+ let serverRequest = serverRequests[i];
187
+ expect(serverRequest.method).to.be.a('string');
188
+ expect(serverRequest.url).to.be.a('string');
189
+ expect(serverRequest.data).to.be.a('string');
190
+ expect(serverRequest.method).to.equal('POST');
191
+ expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
192
+ let data = JSON.parse(serverRequest.data);
193
+ expect(data).to.be.an('object');
194
+ expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'coppa', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
195
+ expect(data.v).to.exist.and.to.be.a('string');
196
+ expect(data.requestId).to.exist.and.to.be.a('string');
197
+ expect(data.coppa).to.be.a('number').and.to.equal(1);
198
+ expect(data.referer).to.be.a('string');
199
+ expect(data.tmax).to.exist.and.to.be.a('number');
200
+ expect(data.gdpr).to.exist.and.to.be.within(0, 1);
201
+ expect(data.consent).to.equal(consentString);
202
+ expect(data.uspConsent).to.exist.and.to.equal(uspConsentData);
203
+ for (let j = 0; j < data['adSlots'].length; j++) {
204
+ let adSlot = data['adSlots'][i];
205
+ expect(adSlot).to.have.all.keys('bidId', 'zoneId', 'floor', 'banner', 'schain');
206
+ expect(adSlot.bidId).to.be.a('string').and.to.equal(bidBanner.bidId);
207
+ expect(adSlot.zoneId).to.be.a('string').and.to.equal(bidBanner.params.zoneid);
208
+ expect(adSlot.floor).to.be.a('number');
209
+ expect(adSlot.schain).to.be.an('object');
210
+ expect(adSlot.banner).to.be.an('object');
211
+ }
212
+ }
213
+ });
214
+ });
215
+ describe('buildRequestVideo', function () {
216
+ beforeEach(function () {
217
+ config.resetConfig();
218
+ });
219
+ it('Creates Video 2 ServerRequest object with method, URL and data', function () {
220
+ config.setConfig({'coppa': true});
221
+ let serverRequests = spec.buildRequests([bidVideo], Object.assign({}, bidderRequest, {bids: [bidVideo]}));
222
+ expect(serverRequests).to.be.an('array');
223
+ for (let i = 0; i < serverRequests.length; i++) {
224
+ let serverRequest = serverRequests[i];
225
+ expect(serverRequest.method).to.be.a('string');
226
+ expect(serverRequest.url).to.be.a('string');
227
+ expect(serverRequest.data).to.be.a('string');
228
+ expect(serverRequest.method).to.equal('POST');
229
+ expect(serverRequest.url).to.equal('https://kssp.kbntx.ch/kubprebidjs');
230
+ let data = JSON.parse(serverRequest.data);
231
+ expect(data).to.be.an('object');
232
+ expect(data).to.have.all.keys('v', 'requestId', 'adSlots', 'gdpr', 'coppa', 'referer', 'tmax', 'consent', 'consentGiven', 'uspConsent');
233
+ expect(data.v).to.exist.and.to.be.a('string');
234
+ expect(data.requestId).to.exist.and.to.be.a('string');
235
+ expect(data.coppa).to.be.a('number').and.to.equal(1);
236
+ expect(data.referer).to.be.a('string');
237
+ expect(data.tmax).to.exist.and.to.be.a('number');
238
+ expect(data.gdpr).to.exist.and.to.be.within(0, 1);
239
+ expect(data.consent).to.equal(consentString);
240
+ expect(data.uspConsent).to.exist.and.to.equal(uspConsentData);
241
+ for (let j = 0; j < data['adSlots'].length; j++) {
242
+ let adSlot = data['adSlots'][i];
243
+ expect(adSlot).to.have.all.keys('bidId', 'zoneId', 'floor', 'video', 'schain');
244
+ expect(adSlot.bidId).to.be.a('string').and.to.equal(bidVideo.bidId);
245
+ expect(adSlot.zoneId).to.be.a('string').and.to.equal(bidVideo.params.zoneid);
246
+ expect(adSlot.floor).to.be.a('number');
247
+ expect(adSlot.schain).to.be.an('object');
248
+ expect(adSlot.video).to.be.an('object');
249
+ }
250
+ }
251
+ });
177
252
  });
178
-
179
253
  describe('isBidRequestValid', function () {
254
+ beforeEach(function () {
255
+ config.resetConfig();
256
+ });
180
257
  it('Should return true when required params are found', function () {
181
258
  expect(spec.isBidRequestValid(bidBanner)).to.be.true;
182
259
  expect(spec.isBidRequestValid(bidVideo)).to.be.true;
@@ -192,8 +269,10 @@ describe('KubientAdapter', function () {
192
269
  expect(spec.isBidRequestValid(bidVideo)).to.be.false;
193
270
  });
194
271
  });
195
-
196
272
  describe('interpretResponse', function () {
273
+ beforeEach(function () {
274
+ config.resetConfig();
275
+ });
197
276
  it('Should interpret response', function () {
198
277
  const serverResponse = {
199
278
  body:
@@ -234,7 +313,6 @@ describe('KubientAdapter', function () {
234
313
  expect(dataItem.meta).to.exist.and.to.be.a('object');
235
314
  expect(dataItem.meta.advertiserDomains).to.exist.and.to.be.a('array').and.to.equal(serverResponse.body.seatbid[0].bid[0].meta.adomain);
236
315
  });
237
-
238
316
  it('Should return no ad when not given a server response', function () {
239
317
  const ads = spec.interpretResponse(null);
240
318
  expect(ads).to.be.an('array').and.to.have.length(0);
@@ -242,6 +320,9 @@ describe('KubientAdapter', function () {
242
320
  });
243
321
 
244
322
  describe('interpretResponse Video', function () {
323
+ beforeEach(function () {
324
+ config.resetConfig();
325
+ });
245
326
  it('Should interpret response', function () {
246
327
  const serverResponse = {
247
328
  body:
@@ -285,7 +366,6 @@ describe('KubientAdapter', function () {
285
366
  expect(dataItem.mediaType).to.exist.and.to.equal(VIDEO);
286
367
  expect(dataItem.vastXml).to.exist.and.to.be.a('string').and.to.equal(serverResponse.body.seatbid[0].bid[0].adm);
287
368
  });
288
-
289
369
  it('Should return no ad when not given a server response', function () {
290
370
  const ads = spec.interpretResponse(null);
291
371
  expect(ads).to.be.an('array').and.to.have.length(0);
@@ -293,89 +373,68 @@ describe('KubientAdapter', function () {
293
373
  });
294
374
 
295
375
  describe('getUserSyncs', function () {
296
- it('should register the sync iframe without gdpr', function () {
297
- let syncOptions = {
298
- iframeEnabled: true
299
- };
300
- let serverResponses = null;
301
- let gdprConsent = {
302
- consentString: consentString
303
- };
304
- let uspConsent = null;
305
- let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
306
- expect(syncs).to.be.an('array').and.to.have.length(1);
307
- expect(syncs[0].type).to.equal('iframe');
308
- expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.html?consent_str=' + consentString + '&consent_given=0');
309
- });
310
- it('should register the sync iframe with gdpr', function () {
311
- let syncOptions = {
312
- iframeEnabled: true
313
- };
314
- let serverResponses = null;
315
- let gdprConsent = {
316
- gdprApplies: true,
317
- consentString: consentString
318
- };
319
- let uspConsent = null;
320
- let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
321
- expect(syncs).to.be.an('array').and.to.have.length(1);
322
- expect(syncs[0].type).to.equal('iframe');
323
- expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.html?consent_str=' + consentString + '&gdpr=1&consent_given=0');
324
- });
325
- it('should register the sync iframe with gdpr vendor', function () {
326
- let syncOptions = {
327
- iframeEnabled: true
328
- };
329
- let serverResponses = null;
330
- let gdprConsent = {
331
- gdprApplies: true,
332
- consentString: consentString,
333
- apiVersion: 1,
334
- vendorData: {
335
- vendorConsents: {
336
- 794: 1
337
- }
338
- }
339
- };
340
- let uspConsent = null;
341
- let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
342
- expect(syncs).to.be.an('array').and.to.have.length(1);
343
- expect(syncs[0].type).to.equal('iframe');
344
- expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.html?consent_str=' + consentString + '&gdpr=1&consent_given=1');
376
+ beforeEach(function () {
377
+ config.resetConfig();
345
378
  });
346
379
  it('should register the sync image without gdpr', function () {
347
380
  let syncOptions = {
348
381
  pixelEnabled: true
349
382
  };
383
+ let values = {};
350
384
  let serverResponses = null;
351
385
  let gdprConsent = {
352
386
  consentString: consentString
353
387
  };
354
388
  let uspConsent = null;
389
+ config.setConfig({
390
+ userSync: {
391
+ filterSettings: {
392
+ image: {
393
+ bidders: '*',
394
+ filter: 'include'
395
+ }
396
+ }
397
+ }
398
+ });
355
399
  let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
400
+ values['consent'] = consentString;
356
401
  expect(syncs).to.be.an('array').and.to.have.length(1);
357
402
  expect(syncs[0].type).to.equal('image');
358
- expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.png?consent_str=' + consentString + '&consent_given=0');
403
+ expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
359
404
  });
360
405
  it('should register the sync image with gdpr', function () {
361
406
  let syncOptions = {
362
407
  pixelEnabled: true
363
408
  };
409
+ let values = {};
364
410
  let serverResponses = null;
365
411
  let gdprConsent = {
366
412
  gdprApplies: true,
367
413
  consentString: consentString
368
414
  };
369
415
  let uspConsent = null;
416
+ config.setConfig({
417
+ userSync: {
418
+ filterSettings: {
419
+ image: {
420
+ bidders: '*',
421
+ filter: 'include'
422
+ }
423
+ }
424
+ }
425
+ });
370
426
  let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
427
+ values['gdpr'] = 1;
428
+ values['consent'] = consentString;
371
429
  expect(syncs).to.be.an('array').and.to.have.length(1);
372
430
  expect(syncs[0].type).to.equal('image');
373
- expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.png?consent_str=' + consentString + '&gdpr=1&consent_given=0');
431
+ expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
374
432
  });
375
433
  it('should register the sync image with gdpr vendor', function () {
376
434
  let syncOptions = {
377
435
  pixelEnabled: true
378
436
  };
437
+ let values = {};
379
438
  let serverResponses = null;
380
439
  let gdprConsent = {
381
440
  gdprApplies: true,
@@ -390,10 +449,49 @@ describe('KubientAdapter', function () {
390
449
  }
391
450
  };
392
451
  let uspConsent = null;
452
+ config.setConfig({
453
+ userSync: {
454
+ filterSettings: {
455
+ image: {
456
+ bidders: '*',
457
+ filter: 'include'
458
+ }
459
+ }
460
+ }
461
+ });
462
+ let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
463
+ values['gdpr'] = 1;
464
+ values['consent'] = consentString;
465
+ expect(syncs).to.be.an('array').and.to.have.length(1);
466
+ expect(syncs[0].type).to.equal('image');
467
+ expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
468
+ });
469
+ it('should register the sync image without gdpr and with uspConsent', function () {
470
+ let syncOptions = {
471
+ pixelEnabled: true
472
+ };
473
+ let values = {};
474
+ let serverResponses = null;
475
+ let gdprConsent = {
476
+ consentString: consentString
477
+ };
478
+ let uspConsent = '1YNN';
479
+ config.setConfig({
480
+ userSync: {
481
+ filterSettings: {
482
+ image: {
483
+ bidders: '*',
484
+ filter: 'include'
485
+ }
486
+ }
487
+ }
488
+ });
393
489
  let syncs = spec.getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent);
490
+ values['consent'] = consentString;
491
+ values['usp'] = uspConsent;
394
492
  expect(syncs).to.be.an('array').and.to.have.length(1);
395
493
  expect(syncs[0].type).to.equal('image');
396
- expect(syncs[0].url).to.equal('https://kdmp.kbntx.ch/init.png?consent_str=' + consentString + '&gdpr=1&consent_given=1');
494
+ expect(syncs[0].url).to.equal('https://matching.kubient.net/match/sp?' + encodeQueryData(values));
397
495
  });
398
496
  })
399
497
  });
@@ -80,7 +80,7 @@ describe('LunamediaHBBidAdapter', function () {
80
80
  expect(data).to.be.an('object');
81
81
  let placement = data['placements'][0];
82
82
  expect(placement).to.be.an('object');
83
- expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'wPlayer', 'hPlayer', 'schain');
83
+ expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'wPlayer', 'hPlayer', 'schain', 'videoContext');
84
84
  expect(placement.traffic).to.equal(VIDEO);
85
85
  expect(placement.wPlayer).to.equal(playerSize[0]);
86
86
  expect(placement.hPlayer).to.equal(playerSize[1]);
@@ -301,4 +301,30 @@ describe('LunamediaHBBidAdapter', function () {
301
301
  expect(serverResponses).to.be.an('array').that.is.empty;
302
302
  });
303
303
  });
304
+
305
+ describe('getUserSyncs', function() {
306
+ it('Should return array of objects with proper sync config , include GDPR', function() {
307
+ const syncData = spec.getUserSyncs({}, {}, {
308
+ consentString: 'ALL',
309
+ gdprApplies: true,
310
+ }, {});
311
+ expect(syncData).to.be.an('array').which.is.not.empty;
312
+ expect(syncData[0]).to.be.an('object')
313
+ expect(syncData[0].type).to.be.a('string')
314
+ expect(syncData[0].type).to.equal('image')
315
+ expect(syncData[0].url).to.be.a('string')
316
+ expect(syncData[0].url).to.equal('https://cookie.lmgssp.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
317
+ });
318
+ it('Should return array of objects with proper sync config , include CCPA', function() {
319
+ const syncData = spec.getUserSyncs({}, {}, {}, {
320
+ consentString: '1---'
321
+ });
322
+ expect(syncData).to.be.an('array').which.is.not.empty;
323
+ expect(syncData[0]).to.be.an('object')
324
+ expect(syncData[0].type).to.be.a('string')
325
+ expect(syncData[0].type).to.equal('image')
326
+ expect(syncData[0].url).to.be.a('string')
327
+ expect(syncData[0].url).to.equal('https://cookie.lmgssp.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
328
+ });
329
+ });
304
330
  });
@@ -60,17 +60,9 @@ const mockedNonMassBids = [
60
60
  },
61
61
  ];
62
62
 
63
- // mock bidder request:
64
- const mockedBidderRequest = {
65
- bidderCode: 'ix',
66
- bidderRequestId: 'bidder-request-id-1'
67
- };
68
-
69
63
  const noop = function() {};
70
64
 
71
65
  describe('MASS Module', function() {
72
- let bidderRequest = Object.assign({}, mockedBidderRequest);
73
-
74
66
  it('should be enabled by default', function() {
75
67
  expect(isEnabled).to.equal(true);
76
68
  });
@@ -86,9 +78,7 @@ describe('MASS Module', function() {
86
78
  const originalBid = Object.assign({}, mockedBid);
87
79
  const bid = Object.assign({}, originalBid);
88
80
 
89
- bidderRequest.bids = [bid];
90
-
91
- addBidResponseHook.call({bidderRequest}, noop, 'ad-code-id', bid);
81
+ addBidResponseHook(noop, 'ad-code-id', bid);
92
82
 
93
83
  expect(bid).to.deep.equal(originalBid);
94
84
  });
@@ -100,9 +90,7 @@ describe('MASS Module', function() {
100
90
  const originalBid = Object.assign({}, mockedBid);
101
91
  const bid = Object.assign({}, originalBid);
102
92
 
103
- bidderRequest.bids = [bid];
104
-
105
- addBidResponseHook.call({bidderRequest}, noop, 'ad-code-id', bid);
93
+ addBidResponseHook(noop, 'ad-code-id', bid);
106
94
 
107
95
  expect(bid.ad).to.not.equal(originalBid.ad);
108
96
 
@@ -575,12 +575,15 @@ describe('mediakeysBidAdapter', function () {
575
575
  },
576
576
  user: {
577
577
  yob: 1985,
578
- gender: 'm'
579
- },
580
- device: {
578
+ gender: 'm',
581
579
  geo: {
582
580
  country: 'FR',
583
581
  city: 'Marseille'
582
+ },
583
+ ext: {
584
+ data: {
585
+ registered: true
586
+ }
584
587
  }
585
588
  }
586
589
  }
@@ -596,8 +599,9 @@ describe('mediakeysBidAdapter', function () {
596
599
  expect(data.site.ext.data.category).to.equal('sport');
597
600
  expect(data.user.yob).to.equal(1985);
598
601
  expect(data.user.gender).to.equal('m');
599
- expect(data.device.geo.country).to.equal('FR');
600
- expect(data.device.geo.city).to.equal('Marseille');
602
+ expect(data.user.geo.country).to.equal('FR');
603
+ expect(data.user.geo.city).to.equal('Marseille');
604
+ expect(data.user.ext.data.registered).to.be.true;
601
605
  });
602
606
  });
603
607
 
@@ -61,7 +61,25 @@ describe('MediaSquare bid adapter tests', function () {
61
61
  code: 'publishername_atf_desktop_rg_pave'
62
62
  },
63
63
  }];
64
-
64
+ var FLOORS_PARAMS = [{
65
+ adUnitCode: 'banner-div',
66
+ bidId: 'aaaa1234',
67
+ auctionId: 'bbbb1234',
68
+ transactionId: 'cccc1234',
69
+ mediaTypes: {
70
+ banner: {
71
+ sizes: [
72
+ [300, 250]
73
+ ]
74
+ }
75
+ },
76
+ bidder: 'mediasquare',
77
+ params: {
78
+ owner: 'test',
79
+ code: 'publishername_atf_desktop_rg_pave'
80
+ },
81
+ getFloor: function (a) { return { currency: 'EUR', floor: 1.0 }; },
82
+ }];
65
83
  var BID_RESPONSE = {'body': {
66
84
  'responses': [{
67
85
  'transaction_id': 'cccc1234',
@@ -117,6 +135,12 @@ describe('MediaSquare bid adapter tests', function () {
117
135
  expect(requestContent.codes[0]).to.have.property('auctionId').and.to.equal('bbbb1234');
118
136
  expect(requestContent.codes[0]).to.have.property('transactionId').and.to.equal('cccc1234');
119
137
  expect(requestContent.codes[0]).to.have.property('mediatypes').exist;
138
+ expect(requestContent.codes[0]).to.have.property('floor').exist;
139
+ expect(requestContent.codes[0].floor).to.deep.equal({});
140
+ const requestfloor = spec.buildRequests(FLOORS_PARAMS, DEFAULT_OPTIONS);
141
+ const responsefloor = JSON.parse(requestfloor.data);
142
+ expect(responsefloor.codes[0]).to.have.property('floor').exist;
143
+ expect(responsefloor.codes[0].floor).to.have.property('floor').and.to.equal(1.0);
120
144
  });
121
145
 
122
146
  it('Verify parse response', function () {