prebid.js 5.19.0 → 6.2.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 (161) hide show
  1. package/.babelrc.js +1 -10
  2. package/README.md +4 -2
  3. package/browsers.json +13 -37
  4. package/gulpfile.js +1 -0
  5. package/karma.conf.maker.js +1 -1
  6. package/modules/adheseBidAdapter.js +7 -2
  7. package/modules/adkernelBidAdapter.js +1 -0
  8. package/modules/adlivetechBidAdapter.md +61 -0
  9. package/modules/admixerBidAdapter.js +2 -1
  10. package/modules/adnuntiusBidAdapter.js +2 -1
  11. package/modules/adomikAnalyticsAdapter.js +10 -4
  12. package/modules/adplusBidAdapter.js +203 -0
  13. package/modules/adplusBidAdapter.md +39 -0
  14. package/modules/adyoulikeBidAdapter.js +7 -2
  15. package/modules/airgridRtdProvider.js +1 -1
  16. package/modules/appnexusBidAdapter.js +28 -5
  17. package/modules/atsAnalyticsAdapter.js +67 -46
  18. package/modules/atsAnalyticsAdapter.md +1 -0
  19. package/modules/beachfrontBidAdapter.js +14 -17
  20. package/modules/betweenBidAdapter.js +2 -1
  21. package/modules/browsiRtdProvider.js +106 -18
  22. package/modules/cleanioRtdProvider.js +192 -0
  23. package/modules/cleanioRtdProvider.md +59 -0
  24. package/modules/codefuelBidAdapter.js +1 -3
  25. package/modules/codefuelBidAdapter.md +3 -3
  26. package/modules/craftBidAdapter.js +5 -3
  27. package/modules/datablocksBidAdapter.js +3 -3
  28. package/modules/dchain.js +149 -0
  29. package/modules/dchain.md +45 -0
  30. package/modules/deepintentBidAdapter.js +1 -1
  31. package/modules/deltaprojectsBidAdapter.js +252 -0
  32. package/modules/deltaprojectsBidAdapter.md +32 -0
  33. package/modules/emx_digitalBidAdapter.js +9 -1
  34. package/modules/engageyaBidAdapter.js +68 -54
  35. package/modules/freewheel-sspBidAdapter.js +6 -0
  36. package/modules/glimpseBidAdapter.js +31 -16
  37. package/modules/goldbachBidAdapter.js +1176 -0
  38. package/modules/goldbachBidAdapter.md +151 -0
  39. package/modules/gptPreAuction.js +11 -5
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gumgumBidAdapter.js +5 -1
  42. package/modules/id5IdSystem.md +6 -6
  43. package/modules/imRtdProvider.js +31 -0
  44. package/modules/intersectionRtdProvider.js +114 -0
  45. package/modules/invibesBidAdapter.js +15 -9
  46. package/modules/ipromBidAdapter.js +79 -0
  47. package/modules/ixBidAdapter.js +173 -22
  48. package/modules/jixieBidAdapter.js +8 -2
  49. package/modules/justpremiumBidAdapter.js +6 -1
  50. package/modules/limelightDigitalBidAdapter.js +2 -1
  51. package/modules/livewrappedAnalyticsAdapter.js +5 -0
  52. package/modules/luponmediaBidAdapter.js +570 -0
  53. package/modules/merkleIdSystem.js +5 -0
  54. package/modules/missenaBidAdapter.js +89 -0
  55. package/modules/multibid/index.js +3 -3
  56. package/modules/nativoBidAdapter.js +32 -2
  57. package/modules/oguryBidAdapter.js +2 -1
  58. package/modules/openxBidAdapter.js +7 -2
  59. package/modules/operaadsBidAdapter.js +21 -1
  60. package/modules/otmBidAdapter.js +146 -0
  61. package/modules/otmBidAdapter.md +27 -26
  62. package/modules/outbrainBidAdapter.js +5 -0
  63. package/modules/playwireBidAdapter.md +61 -0
  64. package/modules/prebidServerBidAdapter/index.js +3 -3
  65. package/modules/pubmaticBidAdapter.js +5 -3
  66. package/modules/relaidoBidAdapter.js +86 -65
  67. package/modules/richaudienceBidAdapter.js +1 -1
  68. package/modules/rtdModule/index.js +2 -2
  69. package/modules/saambaaBidAdapter.js +420 -0
  70. package/modules/saambaaBidAdapter.md +65 -68
  71. package/modules/seedtagBidAdapter.js +6 -0
  72. package/modules/smaatoBidAdapter.js +9 -1
  73. package/modules/smartxBidAdapter.js +17 -1
  74. package/modules/sonobiBidAdapter.js +7 -0
  75. package/modules/sortableBidAdapter.js +1 -0
  76. package/modules/sspBCBidAdapter.js +34 -3
  77. package/modules/tappxBidAdapter.js +3 -1
  78. package/modules/teadsBidAdapter.js +3 -0
  79. package/modules/trustxBidAdapter.js +18 -7
  80. package/modules/undertoneBidAdapter.js +8 -1
  81. package/modules/userId/index.js +27 -2
  82. package/modules/ventes.md +71 -0
  83. package/modules/ventesBidAdapter.js +410 -0
  84. package/modules/ventesBidAdapter.md +93 -0
  85. package/modules/vidoomyBidAdapter.js +51 -100
  86. package/modules/visxBidAdapter.js +20 -3
  87. package/modules/visxBidAdapter.md +4 -6
  88. package/modules/yahoosspBidAdapter.js +6 -6
  89. package/modules/yahoosspBidAdapter.md +1 -1
  90. package/modules/yieldlabBidAdapter.js +41 -10
  91. package/modules/yieldlabBidAdapter.md +91 -48
  92. package/modules/yieldoneBidAdapter.js +115 -11
  93. package/package.json +6 -1
  94. package/src/adapterManager.js +14 -8
  95. package/src/auction.js +14 -13
  96. package/src/targeting.js +2 -2
  97. package/src/utils.js +7 -0
  98. package/test/spec/integration/faker/googletag.js +6 -0
  99. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  100. package/test/spec/modules/adnuntiusBidAdapter_spec.js +18 -0
  101. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
  102. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  103. package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
  104. package/test/spec/modules/appnexusBidAdapter_spec.js +65 -2
  105. package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
  106. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  107. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  108. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  109. package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
  110. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  111. package/test/spec/modules/dchain_spec.js +329 -0
  112. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  113. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  114. package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
  115. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  116. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  117. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  118. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  119. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  120. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  121. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  122. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  123. package/test/spec/modules/invibesBidAdapter_spec.js +29 -4
  124. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  125. package/test/spec/modules/ixBidAdapter_spec.js +288 -5
  126. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  127. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  128. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  129. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
  130. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +23 -4
  131. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  132. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  133. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  134. package/test/spec/modules/multibid_spec.js +31 -31
  135. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  136. package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
  137. package/test/spec/modules/openxBidAdapter_spec.js +5 -26
  138. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  139. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  140. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  141. package/test/spec/modules/prebidServerBidAdapter_spec.js +19 -2
  142. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  143. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  144. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  145. package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
  146. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  147. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  148. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  149. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  150. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  151. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  152. package/test/spec/modules/trustxBidAdapter_spec.js +45 -3
  153. package/test/spec/modules/userId_spec.js +51 -0
  154. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  155. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  156. package/test/spec/modules/visxBidAdapter_spec.js +121 -5
  157. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  158. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  159. package/test/spec/unit/core/adapterManager_spec.js +26 -7
  160. package/test/spec/unit/core/targeting_spec.js +44 -0
  161. package/wdio.conf.js +1 -1
@@ -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
 
@@ -73,6 +73,12 @@ const VIDEO_REQUEST = Object.assign({}, REQUEST, {
73
73
  }
74
74
  })
75
75
 
76
+ const NATIVE_REQUEST = Object.assign({}, REQUEST, {
77
+ 'mediaTypes': {
78
+ 'native': { }
79
+ }
80
+ })
81
+
76
82
  const RESPONSE = {
77
83
  advertiser: 'yieldlab',
78
84
  curl: 'https://www.yieldlab.de',
@@ -84,6 +90,42 @@ const RESPONSE = {
84
90
  adtype: 'BANNER'
85
91
  }
86
92
 
93
+ const NATIVE_RESPONSE = Object.assign({}, RESPONSE, {
94
+ 'adtype': 'NATIVE',
95
+ 'native': {
96
+ 'link': {
97
+ 'url': 'https://www.yieldlab.de'
98
+ },
99
+ 'assets': [
100
+ {
101
+ 'id': 1,
102
+ 'title': {
103
+ 'text': 'This is a great headline'
104
+ }
105
+ },
106
+ {
107
+ 'id': 2,
108
+ 'img': {
109
+ 'url': 'https://localhost:8080/yl-logo100x100.jpg',
110
+ 'w': 100,
111
+ 'h': 100
112
+ }
113
+ },
114
+ {
115
+ 'id': 3,
116
+ 'data': {
117
+ 'value': 'Native body value'
118
+ }
119
+ }
120
+ ],
121
+ 'imptrackers': [
122
+ 'http://localhost:8080/ve?d=ODE9ZSY2MTI1MjAzNjMzMzYxPXN0JjA0NWUwZDk0NTY5Yi05M2FiLWUwZTQtOWFjNy1hYWY0MzFiZj1kaXQmMj12',
123
+ 'http://localhost:8080/md/1111/9efa4e76-2030-4f04-bb9f-322541f8d611?mdata=false&pvid=false&ids=x:1',
124
+ 'http://localhost:8080/imp?s=13216&d=2171514&a=12548955&ts=1633363025216&tid=fb134faa-7ca9-4e0e-ba39-b96549d0e540&l=0'
125
+ ]
126
+ }
127
+ })
128
+
87
129
  const VIDEO_RESPONSE = Object.assign({}, RESPONSE, {
88
130
  'adtype': 'VIDEO'
89
131
  })
@@ -297,6 +339,45 @@ describe('yieldlabBidAdapter', function () {
297
339
  expect(result[0].vastUrl).to.include('&id=abc')
298
340
  })
299
341
 
342
+ it('should add adUrl and native assets when type is Native', function () {
343
+ const result = spec.interpretResponse({body: [NATIVE_RESPONSE]}, {validBidRequests: [NATIVE_REQUEST], queryParams: REQPARAMS})
344
+
345
+ expect(result[0].requestId).to.equal('2d925f27f5079f')
346
+ expect(result[0].cpm).to.equal(0.01)
347
+ expect(result[0].mediaType).to.equal('native')
348
+ expect(result[0].adUrl).to.include('https://ad.yieldlab.net/d/1111/2222/?ts=')
349
+ expect(result[0].native.title).to.equal('This is a great headline')
350
+ expect(result[0].native.body).to.equal('Native body value')
351
+ expect(result[0].native.image.url).to.equal('https://localhost:8080/yl-logo100x100.jpg')
352
+ expect(result[0].native.image.width).to.equal(100)
353
+ expect(result[0].native.image.height).to.equal(100)
354
+ expect(result[0].native.clickUrl).to.equal('https://www.yieldlab.de')
355
+ expect(result[0].native.impressionTrackers.length).to.equal(3)
356
+ })
357
+
358
+ it('should add adUrl and default native assets when type is Native', function () {
359
+ const NATIVE_RESPONSE_2 = Object.assign({}, NATIVE_RESPONSE, {
360
+ 'native': {
361
+ 'link': {
362
+ 'url': 'https://www.yieldlab.de'
363
+ },
364
+ 'assets': [],
365
+ 'imptrackers': []
366
+ }
367
+ })
368
+ const result = spec.interpretResponse({body: [NATIVE_RESPONSE_2]}, {validBidRequests: [NATIVE_REQUEST], queryParams: REQPARAMS})
369
+
370
+ expect(result[0].requestId).to.equal('2d925f27f5079f')
371
+ expect(result[0].cpm).to.equal(0.01)
372
+ expect(result[0].mediaType).to.equal('native')
373
+ expect(result[0].adUrl).to.include('https://ad.yieldlab.net/d/1111/2222/?ts=')
374
+ expect(result[0].native.title).to.equal('')
375
+ expect(result[0].native.body).to.equal('')
376
+ expect(result[0].native.image.url).to.equal('')
377
+ expect(result[0].native.image.width).to.equal(0)
378
+ expect(result[0].native.image.height).to.equal(0)
379
+ })
380
+
300
381
  it('should append gdpr parameters to vastUrl', function () {
301
382
  const result = spec.interpretResponse({body: [VIDEO_RESPONSE]}, {validBidRequests: [VIDEO_REQUEST], queryParams: REQPARAMS_GDPR})
302
383