prebid.js 6.0.0 → 6.4.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 (201) hide show
  1. package/.babelrc.js +1 -7
  2. package/.circleci/config.yml +1 -1
  3. package/README.md +1 -1
  4. package/browsers.json +13 -29
  5. package/gulpfile.js +88 -82
  6. package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
  7. package/karma.conf.maker.js +2 -2
  8. package/modules/33acrossBidAdapter.js +189 -102
  9. package/modules/adagioBidAdapter.js +1 -1
  10. package/modules/addefendBidAdapter.js +1 -0
  11. package/modules/adheseBidAdapter.js +7 -2
  12. package/modules/adkernelBidAdapter.js +147 -61
  13. package/modules/adlivetechBidAdapter.md +61 -0
  14. package/modules/adlooxAdServerVideo.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +4 -4
  16. package/modules/admanBidAdapter.js +1 -0
  17. package/modules/admixerBidAdapter.js +3 -2
  18. package/modules/adnuntiusBidAdapter.js +5 -2
  19. package/modules/adomikAnalyticsAdapter.js +16 -4
  20. package/modules/adplusBidAdapter.js +203 -0
  21. package/modules/adplusBidAdapter.md +39 -0
  22. package/modules/adxcgBidAdapter.js +311 -359
  23. package/modules/adxcgBidAdapter.md +22 -21
  24. package/modules/adyoulikeBidAdapter.js +7 -2
  25. package/modules/aniviewBidAdapter.js +1 -1
  26. package/modules/appnexusBidAdapter.js +23 -3
  27. package/modules/beachfrontBidAdapter.js +14 -17
  28. package/modules/beopBidAdapter.js +6 -4
  29. package/modules/bidViewability.js +3 -3
  30. package/modules/bidViewabilityIO.js +3 -3
  31. package/modules/codefuelBidAdapter.js +1 -3
  32. package/modules/codefuelBidAdapter.md +3 -3
  33. package/modules/colossussspBidAdapter.js +7 -0
  34. package/modules/compassBidAdapter.js +201 -0
  35. package/modules/compassBidAdapter.md +79 -0
  36. package/modules/craftBidAdapter.js +5 -3
  37. package/modules/criteoBidAdapter.js +1 -1
  38. package/modules/currency.js +2 -2
  39. package/modules/cwireBidAdapter.js +3 -0
  40. package/modules/dailyhuntBidAdapter.js +435 -0
  41. package/modules/dailyhuntBidAdapter.md +4 -0
  42. package/modules/datablocksBidAdapter.js +3 -3
  43. package/modules/dchain.js +149 -0
  44. package/modules/dchain.md +45 -0
  45. package/modules/deepintentBidAdapter.js +1 -1
  46. package/modules/dspxBidAdapter.js +1 -1
  47. package/modules/emx_digitalBidAdapter.js +9 -1
  48. package/modules/engageyaBidAdapter.js +68 -54
  49. package/modules/feedadBidAdapter.js +2 -2
  50. package/modules/feedadBidAdapter.md +4 -2
  51. package/modules/freewheel-sspBidAdapter.js +6 -0
  52. package/modules/futureads.md +48 -0
  53. package/modules/glimpseBidAdapter.js +44 -16
  54. package/modules/goldbachBidAdapter.js +1176 -0
  55. package/modules/goldbachBidAdapter.md +151 -0
  56. package/modules/gptPreAuction.js +11 -5
  57. package/modules/gridBidAdapter.js +5 -4
  58. package/modules/gumgumBidAdapter.js +7 -3
  59. package/modules/id5IdSystem.md +6 -6
  60. package/modules/imRtdProvider.js +31 -0
  61. package/modules/improvedigitalBidAdapter.js +19 -3
  62. package/modules/instreamTracking.js +4 -4
  63. package/modules/intersectionRtdProvider.js +114 -0
  64. package/modules/invibesBidAdapter.js +64 -14
  65. package/modules/invibesBidAdapter.md +2 -1
  66. package/modules/ipromBidAdapter.js +79 -0
  67. package/modules/ixBidAdapter.js +185 -22
  68. package/modules/kinessoIdSystem.js +1 -1
  69. package/modules/limelightDigitalBidAdapter.js +2 -1
  70. package/modules/livewrappedBidAdapter.js +8 -2
  71. package/modules/lotamePanoramaIdSystem.js +80 -8
  72. package/modules/luponmediaBidAdapter.js +570 -0
  73. package/modules/mediasquareBidAdapter.js +1 -9
  74. package/modules/merkleIdSystem.js +5 -0
  75. package/modules/missenaBidAdapter.js +89 -0
  76. package/modules/nativoBidAdapter.js +27 -1
  77. package/modules/nextMillenniumBidAdapter.js +37 -7
  78. package/modules/oguryBidAdapter.js +2 -1
  79. package/modules/openxBidAdapter.js +6 -1
  80. package/modules/prebidServerBidAdapter/index.js +19 -15
  81. package/modules/pubgeniusBidAdapter.js +1 -1
  82. package/modules/pubmaticBidAdapter.js +5 -3
  83. package/modules/pubxaiAnalyticsAdapter.js +17 -0
  84. package/modules/relaidoBidAdapter.js +86 -65
  85. package/modules/richaudienceBidAdapter.js +2 -3
  86. package/modules/rtdModule/index.js +48 -18
  87. package/modules/rubiconBidAdapter.js +31 -19
  88. package/modules/saambaaBidAdapter.js +420 -0
  89. package/modules/saambaaBidAdapter.md +65 -68
  90. package/modules/seedtagBidAdapter.js +6 -0
  91. package/modules/sharedIdSystem.js +27 -1
  92. package/modules/smaatoBidAdapter.js +9 -1
  93. package/modules/smartxBidAdapter.js +17 -1
  94. package/modules/sspBCBidAdapter.js +34 -3
  95. package/modules/tappxBidAdapter.js +3 -1
  96. package/modules/targetVideoBidAdapter.js +187 -0
  97. package/modules/targetVideoBidAdapter.md +34 -0
  98. package/modules/telariaBidAdapter.js +2 -2
  99. package/modules/trustxBidAdapter.js +18 -17
  100. package/modules/undertoneBidAdapter.js +8 -1
  101. package/modules/userId/index.js +27 -2
  102. package/modules/ventes.md +71 -0
  103. package/modules/ventesBidAdapter.js +104 -64
  104. package/modules/ventesBidAdapter.md +0 -1
  105. package/modules/vidoomyBidAdapter.js +65 -108
  106. package/modules/visxBidAdapter.js +20 -3
  107. package/modules/visxBidAdapter.md +4 -6
  108. package/modules/weboramaRtdProvider.js +288 -73
  109. package/modules/weboramaRtdProvider.md +27 -10
  110. package/modules/yahoosspBidAdapter.js +5 -1
  111. package/modules/yahoosspBidAdapter.md +1 -1
  112. package/modules/yieldlabBidAdapter.js +41 -10
  113. package/modules/yieldlabBidAdapter.md +91 -48
  114. package/modules/yieldoneBidAdapter.js +115 -11
  115. package/modules/zetaSspBidAdapter.md +33 -1
  116. package/modules/zeta_global_sspBidAdapter.js +22 -1
  117. package/package.json +6 -1
  118. package/plugins/pbjsGlobals.js +28 -1
  119. package/src/adapterManager.js +14 -8
  120. package/src/auction.js +5 -4
  121. package/src/prebid.js +1 -2
  122. package/src/targeting.js +24 -3
  123. package/src/utils.js +41 -7
  124. package/test/helpers/prebidGlobal.js +1 -0
  125. package/test/spec/integration/faker/googletag.js +6 -0
  126. package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
  127. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  128. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  129. package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
  130. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
  131. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  132. package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
  133. package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
  134. package/test/spec/modules/appnexusBidAdapter_spec.js +63 -1
  135. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  136. package/test/spec/modules/beopBidAdapter_spec.js +1 -1
  137. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  138. package/test/spec/modules/bidViewability_spec.js +4 -4
  139. package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
  140. package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
  141. package/test/spec/modules/compassBidAdapter_spec.js +397 -0
  142. package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
  143. package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
  144. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  145. package/test/spec/modules/dchain_spec.js +329 -0
  146. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  147. package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
  148. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  149. package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
  150. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  151. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  152. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  153. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  154. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  155. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  156. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
  157. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  158. package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
  159. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  160. package/test/spec/modules/ixBidAdapter_spec.js +293 -2
  161. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  162. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
  163. package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
  164. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
  165. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  166. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
  167. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  168. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  169. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  170. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
  171. package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
  172. package/test/spec/modules/openxBidAdapter_spec.js +5 -0
  173. package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
  174. package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
  175. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  176. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
  177. package/test/spec/modules/realTimeDataModule_spec.js +135 -49
  178. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  179. package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
  180. package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
  181. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  182. package/test/spec/modules/sharedIdSystem_spec.js +52 -6
  183. package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
  184. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  185. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  186. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  187. package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
  188. package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
  189. package/test/spec/modules/userId_spec.js +51 -0
  190. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  191. package/test/spec/modules/visxBidAdapter_spec.js +121 -5
  192. package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
  193. package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
  194. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  195. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  196. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
  197. package/test/spec/unit/core/adapterManager_spec.js +24 -6
  198. package/test/spec/unit/core/targeting_spec.js +116 -0
  199. package/test/spec/utils_spec.js +38 -0
  200. package/test/test_deps.js +3 -0
  201. package/test/test_index.js +1 -3
@@ -0,0 +1,96 @@
1
+ import { spec } from '../../../modules/targetVideoBidAdapter.js'
2
+
3
+ describe('TargetVideo Bid Adapter', function() {
4
+ const bannerRequest = [{
5
+ bidder: 'targetVideo',
6
+ mediaTypes: {
7
+ banner: {
8
+ sizes: [[300, 250]],
9
+ }
10
+ },
11
+ params: {
12
+ placementId: 12345,
13
+ }
14
+ }];
15
+
16
+ it('Test the bid validation function', function() {
17
+ const validBid = spec.isBidRequestValid(bannerRequest[0]);
18
+ const invalidBid = spec.isBidRequestValid(null);
19
+
20
+ expect(validBid).to.be.true;
21
+ expect(invalidBid).to.be.false;
22
+ });
23
+
24
+ it('Test the request processing function', function () {
25
+ const request = spec.buildRequests(bannerRequest, bannerRequest[0]);
26
+ expect(request).to.not.be.empty;
27
+
28
+ const payload = JSON.parse(request.data);
29
+ expect(payload).to.not.be.empty;
30
+ expect(payload.sdk).to.deep.equal({
31
+ source: 'pbjs',
32
+ version: '$prebid.version$'
33
+ });
34
+ expect(payload.tags[0].id).to.equal(12345);
35
+ expect(payload.tags[0].gpid).to.equal('targetVideo');
36
+ expect(payload.tags[0].ad_types[0]).to.equal('video');
37
+ });
38
+
39
+ it('Handle nobid responses', function () {
40
+ const responseBody = {
41
+ 'version': '0.0.1',
42
+ 'tags': [{
43
+ 'uuid': '84ab500420319d',
44
+ 'tag_id': 5976557,
45
+ 'auction_id': '297492697822162468',
46
+ 'nobid': true
47
+ }]
48
+ };
49
+ const bidderRequest = null;
50
+
51
+ const bidResponse = spec.interpretResponse({ body: responseBody }, {bidderRequest});
52
+ expect(bidResponse.length).to.equal(0);
53
+ });
54
+
55
+ it('Test the response parsing function', function () {
56
+ const responseBody = {
57
+ 'tags': [{
58
+ 'uuid': '84ab500420319d',
59
+ 'ads': [{
60
+ 'ad_type': 'video',
61
+ 'cpm': 0.500000,
62
+ 'notify_url': 'https://www.target-video.com/',
63
+ 'rtb': {
64
+ 'video': {
65
+ 'player_width': 640,
66
+ 'player_height': 360,
67
+ 'asset_url': 'https://www.target-video.com/'
68
+ }
69
+ }
70
+ }]
71
+ }]
72
+ };
73
+ const bidderRequest = {
74
+ bids: [{
75
+ bidId: '84ab500420319d',
76
+ adUnitCode: 'code',
77
+ mediaTypes: {
78
+ banner: {
79
+ sizes: [[300, 250]]
80
+ }
81
+ }
82
+ }]
83
+ };
84
+
85
+ const bidResponse = spec.interpretResponse({ body: responseBody }, {bidderRequest});
86
+ expect(bidResponse).to.not.be.empty;
87
+
88
+ const bid = bidResponse[0];
89
+ expect(bid).to.not.be.empty;
90
+ expect(bid.cpm).to.equal(0.675);
91
+ expect(bid.width).to.equal(300);
92
+ expect(bid.height).to.equal(250);
93
+ expect(bid.ad).to.include('<script src="https://player.target-video.com/custom/targetvideo-banner.js"></script>')
94
+ expect(bid.ad).to.include('initPlayer')
95
+ });
96
+ });
@@ -519,6 +519,48 @@ describe('TrustXAdapter', function () {
519
519
  expect(payload.tmax).to.equal(3000);
520
520
  getConfigStub.restore();
521
521
  });
522
+ it('should contain imp[].ext.data.adserver if available', function() {
523
+ const ortb2Imp = [{
524
+ ext: {
525
+ data: {
526
+ adserver: {
527
+ name: 'ad_server_name',
528
+ adslot: '/111111/slot'
529
+ },
530
+ pbadslot: '/111111/slot'
531
+ }
532
+ }
533
+ }, {
534
+ ext: {
535
+ data: {
536
+ adserver: {
537
+ name: 'ad_server_name',
538
+ adslot: '/222222/slot'
539
+ },
540
+ pbadslot: '/222222/slot'
541
+ }
542
+ }
543
+ }];
544
+ const bidRequestsWithOrtb2Imp = bidRequests.slice(0, 3).map((bid, ind) => {
545
+ return Object.assign(ortb2Imp[ind] ? { ortb2Imp: ortb2Imp[ind] } : {}, bid);
546
+ });
547
+ const request = spec.buildRequests(bidRequestsWithOrtb2Imp, bidderRequest);
548
+ expect(request.data).to.be.an('string');
549
+ const payload = parseRequest(request.data);
550
+ expect(payload.imp[0].ext).to.deep.equal({
551
+ divid: bidRequests[0].adUnitCode,
552
+ data: ortb2Imp[0].ext.data,
553
+ gpid: ortb2Imp[0].ext.data.adserver.adslot
554
+ });
555
+ expect(payload.imp[1].ext).to.deep.equal({
556
+ divid: bidRequests[1].adUnitCode,
557
+ data: ortb2Imp[1].ext.data,
558
+ gpid: ortb2Imp[1].ext.data.adserver.adslot
559
+ });
560
+ expect(payload.imp[2].ext).to.deep.equal({
561
+ divid: bidRequests[2].adUnitCode
562
+ });
563
+ });
522
564
  it('all id like request fields must be a string', function () {
523
565
  const bidderRequestWithNumId = Object.assign({}, bidderRequest, { bidderRequestId: 123123, auctionId: 345345543 });
524
566
 
@@ -49,6 +49,7 @@ import {flocIdSubmodule} from 'modules/flocIdSystem.js'
49
49
  import {amxIdSubmodule} from '../../../modules/amxIdSystem.js';
50
50
  import {akamaiDAPIdSubmodule} from 'modules/akamaiDAPIdSystem.js'
51
51
  import {kinessoIdSubmodule} from 'modules/kinessoIdSystem.js'
52
+ import * as mockGpt from '../integration/faker/googletag.js';
52
53
 
53
54
  let assert = require('chai').assert;
54
55
  let expect = require('chai').expect;
@@ -114,15 +115,21 @@ describe('User ID', function () {
114
115
 
115
116
  describe('Decorate Ad Units', function () {
116
117
  beforeEach(function () {
118
+ // reset mockGpt so nothing else interferes
119
+ mockGpt.disable();
120
+ mockGpt.enable();
117
121
  coreStorage.setCookie('pubcid', '', EXPIRED_COOKIE_DATE);
118
122
  coreStorage.setCookie('pubcid_alt', 'altpubcid200000', (new Date(Date.now() + 5000).toUTCString()));
119
123
  sinon.spy(coreStorage, 'setCookie');
124
+ sinon.stub(utils, 'logWarn');
120
125
  });
121
126
 
122
127
  afterEach(function () {
128
+ mockGpt.enable();
123
129
  $$PREBID_GLOBAL$$.requestBids.removeAll();
124
130
  config.resetConfig();
125
131
  coreStorage.setCookie.restore();
132
+ utils.logWarn.restore();
126
133
  });
127
134
 
128
135
  after(function () {
@@ -321,6 +328,50 @@ describe('User ID', function () {
321
328
  expect((getGlobal()).getUserIdsAsEids()).to.deep.equal(createEidsArray((getGlobal()).getUserIds()));
322
329
  });
323
330
 
331
+ it('should set googletag ppid correctly', function () {
332
+ let adUnits = [getAdUnitMock()];
333
+ setSubmoduleRegistry([amxIdSubmodule, sharedIdSystemSubmodule, identityLinkSubmodule]);
334
+ init(config);
335
+
336
+ config.setConfig({
337
+ userSync: {
338
+ ppid: 'pubcid.org',
339
+ userIds: [
340
+ { name: 'amxId', value: {'amxId': 'amx-id-value-amx-id-value-amx-id-value'} },
341
+ { name: 'pubCommonId', value: {'pubcid': 'pubCommon-id-value-pubCommon-id-value'} },
342
+ { name: 'identityLink', value: {'idl_env': 'identityLink-id-value-identityLink-id-value'} },
343
+ ]
344
+ }
345
+ });
346
+ // before ppid should not be set
347
+ expect(window.googletag._ppid).to.equal(undefined);
348
+ requestBidsHook(() => {}, {adUnits});
349
+ // ppid should have been set without dashes and stuff
350
+ expect(window.googletag._ppid).to.equal('pubCommonidvaluepubCommonidvalue');
351
+ });
352
+
353
+ it('should log a warning if PPID too big or small', function () {
354
+ let adUnits = [getAdUnitMock()];
355
+ setSubmoduleRegistry([sharedIdSystemSubmodule]);
356
+ init(config);
357
+
358
+ config.setConfig({
359
+ userSync: {
360
+ ppid: 'pubcid.org',
361
+ userIds: [
362
+ { name: 'pubCommonId', value: {'pubcid': 'pubcommonIdValue'} },
363
+ ]
364
+ }
365
+ });
366
+ // before ppid should not be set
367
+ expect(window.googletag._ppid).to.equal(undefined);
368
+ requestBidsHook(() => {}, {adUnits});
369
+ // ppid should NOT have been set
370
+ expect(window.googletag._ppid).to.equal(undefined);
371
+ // a warning should have been emmited
372
+ expect(utils.logWarn.args[0][0]).to.exist.and.to.contain('User ID - Googletag Publisher Provided ID for pubcid.org is not between 32 and 150 characters - pubcommonIdValue');
373
+ });
374
+
324
375
  it('pbjs.refreshUserIds refreshes', function() {
325
376
  let sandbox = sinon.createSandbox();
326
377
 
@@ -4,6 +4,7 @@ import { newBidder } from 'src/adapters/bidderFactory.js';
4
4
  import { INSTREAM } from '../../../src/video';
5
5
 
6
6
  const ENDPOINT = `https://d.vidoomy.com/api/rtbserver/prebid/`;
7
+ const PIXELS = ['/test.png', '/test2.png?gdpr={{GDPR}}&gdpr_consent={{GDPR_CONSENT}}']
7
8
 
8
9
  describe('vidoomyBidAdapter', function() {
9
10
  const adapter = newBidder(spec);
@@ -101,24 +102,24 @@ describe('vidoomyBidAdapter', function() {
101
102
  });
102
103
 
103
104
  it('attaches source and version to endpoint URL as query params', function () {
104
- expect(request[0].url).to.include(ENDPOINT);
105
- expect(request[1].url).to.include(ENDPOINT);
105
+ expect(request[0].url).to.equal(ENDPOINT);
106
+ expect(request[1].url).to.equal(ENDPOINT);
106
107
  });
107
108
 
108
109
  it('only accepts first width and height sizes', function () {
109
- expect(request[0].url).to.include('w=300');
110
- expect(request[0].url).to.include('h=250');
111
- expect(request[0].url).to.not.include('w=200');
112
- expect(request[0].url).to.not.include('h=100');
113
- expect(request[1].url).to.include('w=400');
114
- expect(request[1].url).to.include('h=225');
110
+ expect('' + request[0].data.w).to.equal('300');
111
+ expect('' + request[0].data.h).to.equal('250');
112
+ expect('' + request[0].data.w).to.not.equal('200');
113
+ expect('' + request[0].data.h).to.not.equal('100');
114
+ expect('' + request[1].data.w).to.equal('400');
115
+ expect('' + request[1].data.h).to.equal('225');
115
116
  });
116
117
 
117
118
  it('should send id and pid parameters', function () {
118
- expect(request[0].url).to.include('id=123123');
119
- expect(request[0].url).to.include('pid=123123');
120
- expect(request[1].url).to.include('id=456456');
121
- expect(request[1].url).to.include('pid=456456');
119
+ expect('' + request[0].data.id).to.equal('123123');
120
+ expect('' + request[0].data.pid).to.equal('123123');
121
+ expect('' + request[1].data.id).to.equal('456456');
122
+ expect('' + request[1].data.pid).to.equal('456456');
122
123
  });
123
124
  });
124
125
 
@@ -182,7 +183,8 @@ describe('vidoomyBidAdapter', function() {
182
183
  'networkName': null,
183
184
  'primaryCatId': 'IAB3-1',
184
185
  'secondaryCatIds': null
185
- }
186
+ },
187
+ 'pixels': PIXELS
186
188
  }
187
189
  }
188
190
 
@@ -206,5 +208,22 @@ describe('vidoomyBidAdapter', function() {
206
208
 
207
209
  expect(result[0].requestId).to.equal(serverResponseBanner.body.requestId);
208
210
  });
211
+
212
+ it('should sync user cookies', function () {
213
+ const GDPR_CONSENT = 'GDPR_TEST'
214
+ const result = spec.getUserSyncs({
215
+ pixelEnabled: true
216
+ }, [serverResponseBanner], { consentString: GDPR_CONSENT, gdprApplies: 1 }, null)
217
+ expect(result).to.eql([
218
+ {
219
+ type: 'image',
220
+ url: PIXELS[0]
221
+ },
222
+ {
223
+ type: 'image',
224
+ url: `/test2.png?gdpr=1&gdpr_consent=${GDPR_CONSENT}`
225
+ }
226
+ ])
227
+ });
209
228
  });
210
229
  });
@@ -3,6 +3,7 @@ import { spec } from 'modules/visxBidAdapter.js';
3
3
  import { config } from 'src/config.js';
4
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
5
5
  import * as utils from 'src/utils.js';
6
+ import { makeSlot } from '../integration/faker/googletag.js';
6
7
 
7
8
  describe('VisxAdapter', function () {
8
9
  const adapter = newBidder(spec);
@@ -145,17 +146,17 @@ describe('VisxAdapter', function () {
145
146
  const expectedFullImps = [{
146
147
  'id': '30b31c1838de1e',
147
148
  'banner': {'format': [{'w': 300, 'h': 250}, {'w': 300, 'h': 600}]},
148
- 'ext': {'bidder': {'uid': 903535}}
149
+ 'ext': {'bidder': {'uid': 903535, 'adslotExists': false}}
149
150
  },
150
151
  {
151
152
  'id': '3150ccb55da321',
152
153
  'banner': {'format': [{'w': 728, 'h': 90}, {'w': 300, 'h': 250}]},
153
- 'ext': {'bidder': {'uid': 903535}}
154
+ 'ext': {'bidder': {'uid': 903535, 'adslotExists': false}}
154
155
  },
155
156
  {
156
157
  'id': '42dbe3a7168a6a',
157
158
  'banner': {'format': [{'w': 300, 'h': 250}, {'w': 300, 'h': 600}]},
158
- 'ext': {'bidder': {'uid': 903536}}
159
+ 'ext': {'bidder': {'uid': 903536, 'adslotExists': false}}
159
160
  },
160
161
  {
161
162
  'id': '39a4e3a7168a6a',
@@ -452,7 +453,122 @@ describe('VisxAdapter', function () {
452
453
  'imp': [{
453
454
  'id': '39aff3a7169a6a',
454
455
  'banner': {'format': [{'w': 300, 'h': 250}, {'w': 300, 'h': 600}]},
455
- 'ext': {'bidder': {'uid': 903538}}
456
+ 'ext': {'bidder': {'uid': 903538, 'adslotExists': false}}
457
+ }],
458
+ 'tmax': 3000,
459
+ 'cur': ['EUR'],
460
+ 'source': {
461
+ 'ext': {
462
+ 'wrapperType': 'Prebid_js',
463
+ 'wrapperVersion': '$prebid.version$'
464
+ }
465
+ },
466
+ 'site': {'page': referrer}
467
+ });
468
+ });
469
+ });
470
+
471
+ describe('buildRequests (check ad slot exists)', function () {
472
+ function parseRequest(url) {
473
+ const res = {};
474
+ (url.split('?')[1] || '').split('&').forEach((it) => {
475
+ const couple = it.split('=');
476
+ res[couple[0]] = decodeURIComponent(couple[1]);
477
+ });
478
+ return res;
479
+ }
480
+ const bidderRequest = {
481
+ timeout: 3000,
482
+ refererInfo: {
483
+ referer: 'https://example.com'
484
+ }
485
+ };
486
+ const referrer = bidderRequest.refererInfo.referer;
487
+ const bidRequests = [
488
+ {
489
+ 'bidder': 'visx',
490
+ 'params': {
491
+ 'uid': 903535
492
+ },
493
+ 'adUnitCode': 'visx-adunit-code-1',
494
+ 'sizes': [[300, 250], [300, 600]],
495
+ 'bidId': '30b31c1838de1e',
496
+ 'bidderRequestId': '22edbae2733bf6',
497
+ 'auctionId': '1d1a030790a475',
498
+ },
499
+ {
500
+ 'bidder': 'visx',
501
+ 'params': {
502
+ 'uid': 903535
503
+ },
504
+ 'adUnitCode': 'visx-adunit-code-2',
505
+ 'sizes': [[300, 250], [300, 600]],
506
+ 'bidId': '30b31c1838de1e',
507
+ 'bidderRequestId': '22edbae2733bf6',
508
+ 'auctionId': '1d1a030790a475',
509
+ }
510
+ ];
511
+ let sandbox;
512
+ let documentStub;
513
+
514
+ before(function() {
515
+ sandbox = sinon.sandbox.create();
516
+ documentStub = sandbox.stub(document, 'getElementById');
517
+ documentStub.withArgs('visx-adunit-code-1').returns({
518
+ id: 'visx-adunit-code-1'
519
+ });
520
+ documentStub.withArgs('visx-adunit-element-2').returns({
521
+ id: 'visx-adunit-element-2'
522
+ });
523
+ });
524
+
525
+ after(function() {
526
+ sandbox.restore();
527
+ });
528
+
529
+ it('should find ad slot by ad unit code as element id', function () {
530
+ const request = spec.buildRequests([bidRequests[0]], bidderRequest);
531
+ const payload = parseRequest(request.url);
532
+ expect(payload).to.be.an('object');
533
+ expect(payload).to.have.property('auids', '903535');
534
+
535
+ const postData = request.data;
536
+ expect(postData).to.be.an('object');
537
+ expect(postData).to.deep.equal({
538
+ 'id': '22edbae2733bf6',
539
+ 'imp': [{
540
+ 'id': '30b31c1838de1e',
541
+ 'banner': {'format': [{'w': 300, 'h': 250}, {'w': 300, 'h': 600}]},
542
+ 'ext': {'bidder': {'uid': 903535, 'adslotExists': true}}
543
+ }],
544
+ 'tmax': 3000,
545
+ 'cur': ['EUR'],
546
+ 'source': {
547
+ 'ext': {
548
+ 'wrapperType': 'Prebid_js',
549
+ 'wrapperVersion': '$prebid.version$'
550
+ }
551
+ },
552
+ 'site': {'page': referrer}
553
+ });
554
+ });
555
+
556
+ it('should find ad slot by ad unit code as adUnitPath', function () {
557
+ makeSlot({code: 'visx-adunit-code-2', divId: 'visx-adunit-element-2'});
558
+
559
+ const request = spec.buildRequests([bidRequests[1]], bidderRequest);
560
+ const payload = parseRequest(request.url);
561
+ expect(payload).to.be.an('object');
562
+ expect(payload).to.have.property('auids', '903535');
563
+
564
+ const postData = request.data;
565
+ expect(postData).to.be.an('object');
566
+ expect(postData).to.deep.equal({
567
+ 'id': '22edbae2733bf6',
568
+ 'imp': [{
569
+ 'id': '30b31c1838de1e',
570
+ 'banner': {'format': [{'w': 300, 'h': 250}, {'w': 300, 'h': 600}]},
571
+ 'ext': {'bidder': {'uid': 903535, 'adslotExists': true}}
456
572
  }],
457
573
  'tmax': 3000,
458
574
  'cur': ['EUR'],
@@ -1149,7 +1265,7 @@ describe('VisxAdapter', function () {
1149
1265
  it('onTimeout', function () {
1150
1266
  const data = { timeout: 3000, bidId: '23423', params: { uid: 1 } };
1151
1267
  spec.onTimeout(data);
1152
- expect(utils.triggerPixel.calledOnceWith('https://t.visx.net/track/bid_timeout?data=' + JSON.stringify(data))).to.equal(true);
1268
+ expect(utils.triggerPixel.calledOnceWith('https://t.visx.net/track/bid_timeout//' + JSON.stringify(data))).to.equal(true);
1153
1269
  });
1154
1270
  });
1155
1271