prebid.js 5.17.0 → 6.0.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 (145) hide show
  1. package/.babelrc.js +3 -6
  2. package/README.md +3 -1
  3. package/browsers.json +1 -8
  4. package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
  5. package/modules/.submodules.json +1 -0
  6. package/modules/adfBidAdapter.js +21 -16
  7. package/modules/adgenerationBidAdapter.js +28 -4
  8. package/modules/adkernelBidAdapter.js +2 -1
  9. package/modules/admixerBidAdapter.js +11 -0
  10. package/modules/adtelligentBidAdapter.js +2 -1
  11. package/modules/airgridRtdProvider.js +1 -1
  12. package/modules/akamaiDapRtdProvider.js +474 -0
  13. package/modules/akamaiDapRtdProvider.md +47 -0
  14. package/modules/aolBidAdapter.js +2 -1
  15. package/modules/appnexusBidAdapter.js +5 -3
  16. package/modules/atsAnalyticsAdapter.js +67 -46
  17. package/modules/atsAnalyticsAdapter.md +1 -0
  18. package/modules/betweenBidAdapter.js +20 -3
  19. package/modules/bliinkBidAdapter.js +58 -32
  20. package/modules/bliinkBidAdapter.md +29 -6
  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 +183 -0
  25. package/modules/codefuelBidAdapter.md +111 -0
  26. package/modules/connectIdSystem.js +104 -0
  27. package/modules/connectIdSystem.md +33 -0
  28. package/modules/cwireBidAdapter.js +272 -0
  29. package/modules/cwireBidAdapter.md +43 -0
  30. package/modules/deepintentBidAdapter.js +106 -9
  31. package/modules/deepintentBidAdapter.md +36 -1
  32. package/modules/deltaprojectsBidAdapter.js +252 -0
  33. package/modules/deltaprojectsBidAdapter.md +32 -0
  34. package/modules/dgkeywordRtdProvider.js +0 -1
  35. package/modules/engageyaBidAdapter.js +157 -0
  36. package/modules/gridBidAdapter.js +1 -0
  37. package/modules/gumgumBidAdapter.js +8 -0
  38. package/modules/inskinBidAdapter.js +7 -3
  39. package/modules/ixBidAdapter.js +8 -1
  40. package/modules/jixieBidAdapter.js +8 -2
  41. package/modules/justpremiumBidAdapter.js +6 -1
  42. package/modules/limelightDigitalBidAdapter.js +22 -2
  43. package/modules/livewrappedAnalyticsAdapter.js +53 -3
  44. package/modules/mediakeysBidAdapter.js +2 -1
  45. package/modules/multibid/index.js +3 -3
  46. package/modules/nativoBidAdapter.js +6 -2
  47. package/modules/nextMillenniumBidAdapter.js +12 -3
  48. package/modules/oguryBidAdapter.js +36 -7
  49. package/modules/openxBidAdapter.js +34 -22
  50. package/modules/operaadsBidAdapter.js +21 -1
  51. package/modules/otmBidAdapter.js +146 -0
  52. package/modules/otmBidAdapter.md +27 -26
  53. package/modules/outbrainBidAdapter.js +5 -0
  54. package/modules/pixfutureBidAdapter.js +24 -4
  55. package/modules/pixfutureBidAdapter.md +127 -0
  56. package/modules/playwireBidAdapter.md +61 -0
  57. package/modules/prebidServerBidAdapter/index.js +1 -1
  58. package/modules/proxistoreBidAdapter.js +4 -6
  59. package/modules/publinkIdSystem.js +11 -6
  60. package/modules/pubmaticBidAdapter.js +9 -0
  61. package/modules/pubmaticBidAdapter.md +1 -1
  62. package/modules/rtdModule/index.js +2 -2
  63. package/modules/sonobiBidAdapter.js +7 -0
  64. package/modules/sortableBidAdapter.js +1 -0
  65. package/modules/talkadsBidAdapter.js +129 -0
  66. package/modules/talkadsBidAdapter.md +60 -0
  67. package/modules/teadsBidAdapter.js +3 -0
  68. package/modules/tripleliftBidAdapter.js +22 -5
  69. package/modules/trustxBidAdapter.js +8 -6
  70. package/modules/undertoneBidAdapter.js +9 -5
  71. package/modules/undertoneBidAdapter.md +5 -1
  72. package/modules/unicornBidAdapter.js +3 -3
  73. package/modules/userId/eids.js +18 -0
  74. package/modules/userId/eids.md +7 -0
  75. package/modules/userId/userId.md +12 -0
  76. package/modules/ventesBidAdapter.js +370 -0
  77. package/modules/ventesBidAdapter.md +94 -0
  78. package/modules/videobyteBidAdapter.js +13 -6
  79. package/modules/videobyteBidAdapter.md +49 -0
  80. package/modules/visxBidAdapter.js +15 -22
  81. package/modules/yahoosspBidAdapter.js +637 -0
  82. package/modules/yahoosspBidAdapter.md +795 -0
  83. package/modules/yieldlabBidAdapter.js +48 -3
  84. package/modules/yieldlabBidAdapter.md +16 -1
  85. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  86. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  87. package/package.json +1 -1
  88. package/src/adapterManager.js +5 -0
  89. package/src/adapters/bidderFactory.js +4 -3
  90. package/src/auction.js +11 -11
  91. package/src/constants.json +1 -0
  92. package/src/secureCreatives.js +6 -7
  93. package/src/targeting.js +11 -9
  94. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  95. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  96. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  97. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  98. package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
  99. package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
  100. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  101. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  102. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  103. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  104. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  105. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  106. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  107. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  108. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  109. package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
  110. package/test/spec/modules/gumgumBidAdapter_spec.js +5 -1
  111. package/test/spec/modules/ixBidAdapter_spec.js +13 -3
  112. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  113. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  114. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  115. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
  116. package/test/spec/modules/multibid_spec.js +31 -31
  117. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  118. package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
  119. package/test/spec/modules/openxBidAdapter_spec.js +85 -13
  120. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  121. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  122. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  123. package/test/spec/modules/publinkIdSystem_spec.js +6 -6
  124. package/test/spec/modules/pubmaticBidAdapter_spec.js +39 -1
  125. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  126. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  127. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  128. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  129. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  130. package/test/spec/modules/trustxBidAdapter_spec.js +3 -3
  131. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  132. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  133. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  134. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  135. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  136. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  137. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  138. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  139. package/test/spec/unit/core/adapterManager_spec.js +32 -0
  140. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  141. package/test/spec/unit/pbjs_api_spec.js +37 -2
  142. package/test/spec/unit/secureCreatives_spec.js +54 -25
  143. package/wdio.conf.js +1 -1
  144. package/modules/turktelekomBidAdapter.md +0 -49
  145. package/yarn.lock +0 -13122
@@ -0,0 +1,246 @@
1
+ import { expect } from 'chai';
2
+ import * as utils from '../../../src/utils.js';
3
+ import {
4
+ spec,
5
+ CW_PAGE_VIEW_ID,
6
+ ENDPOINT_URL,
7
+ RENDERER_URL,
8
+ } from '../../../modules/cwireBidAdapter.js';
9
+ import * as prebidGlobal from 'src/prebidGlobal.js';
10
+
11
+ // ------------------------------------
12
+ // Bid Request Builder
13
+ // ------------------------------------
14
+
15
+ const BID_DEFAULTS = {
16
+ request: {
17
+ bidder: 'cwire',
18
+ auctionId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
19
+ transactionId: 'txaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
20
+ bidId: 'bid123445',
21
+ bidderRequestId: 'brid12345',
22
+ code: 'original-div',
23
+ },
24
+ params: {
25
+ placementId: 123456,
26
+ pageId: 777,
27
+ adUnitElementId: 'target-div'
28
+ },
29
+ sizes: [[300, 250], [1, 1]],
30
+ };
31
+
32
+ const BidderRequestBuilder = function BidderRequestBuilder(options) {
33
+ const defaults = {
34
+ bidderCode: 'cwire',
35
+ auctionId: BID_DEFAULTS.request.auctionId,
36
+ bidderRequestId: BID_DEFAULTS.request.bidderRequestId,
37
+ transactionId: BID_DEFAULTS.request.transactionId,
38
+ timeout: 3000,
39
+ refererInfo: {
40
+ numIframes: 0,
41
+ reachedTop: true,
42
+ referer: 'http://test.io/index.html?pbjs_debug=true'
43
+ }
44
+ };
45
+
46
+ const request = {
47
+ ...defaults,
48
+ ...options
49
+ };
50
+
51
+ this.build = () => request;
52
+ };
53
+
54
+ const BidRequestBuilder = function BidRequestBuilder(options, deleteKeys) {
55
+ const defaults = JSON.parse(JSON.stringify(BID_DEFAULTS));
56
+
57
+ const request = {
58
+ ...defaults.request,
59
+ ...options
60
+ };
61
+
62
+ if (request && utils.isArray(deleteKeys)) {
63
+ deleteKeys.forEach((k) => {
64
+ delete request[k];
65
+ })
66
+ }
67
+
68
+ this.withParams = (options, deleteKeys) => {
69
+ request.params = {
70
+ ...defaults.params,
71
+ ...options
72
+ };
73
+ if (request && utils.isArray(deleteKeys)) {
74
+ deleteKeys.forEach((k) => {
75
+ delete request.params[k];
76
+ })
77
+ }
78
+ return this;
79
+ };
80
+
81
+ this.build = () => request;
82
+ };
83
+
84
+ describe('C-WIRE bid adapter', () => {
85
+ let utilsMock;
86
+ let sandbox;
87
+
88
+ beforeEach(() => {
89
+ utilsMock = sinon.mock(utils);
90
+ sandbox = sinon.createSandbox();
91
+ });
92
+
93
+ afterEach(() => {
94
+ utilsMock.restore();
95
+ sandbox.restore();
96
+ });
97
+
98
+ // START TESTING
99
+ describe('C-WIRE - isBidRequestValid', function () {
100
+ it('should return true when required params found', function () {
101
+ const bid01 = new BidRequestBuilder().withParams().build();
102
+ expect(spec.isBidRequestValid(bid01)).to.equal(true);
103
+ });
104
+
105
+ it('should fail if there is no placementId', function () {
106
+ const bid01 = new BidRequestBuilder().withParams().build();
107
+ delete bid01.params.placementId
108
+ expect(spec.isBidRequestValid(bid01)).to.equal(false);
109
+ });
110
+
111
+ it('should fail if invalid placementId type', function () {
112
+ const bid01 = new BidRequestBuilder().withParams().build();
113
+ delete bid01.params.placementId;
114
+ bid01.placementId = '322';
115
+ expect(spec.isBidRequestValid(bid01)).to.equal(false);
116
+ });
117
+
118
+ it('should fail if there is no pageId', function () {
119
+ const bid01 = new BidRequestBuilder().withParams().build();
120
+ delete bid01.params.pageId
121
+ expect(spec.isBidRequestValid(bid01)).to.equal(false);
122
+ });
123
+
124
+ it('should fail if invalid pageId type', function () {
125
+ const bid01 = new BidRequestBuilder().withParams().build();
126
+ delete bid01.params.pageId;
127
+ bid01.params.pageId = '3320';
128
+ expect(spec.isBidRequestValid(bid01)).to.equal(false);
129
+ });
130
+
131
+ it('should use params.adUnitElementId if provided', function () {
132
+ const bid01 = new BidRequestBuilder().withParams().build();
133
+
134
+ expect(spec.isBidRequestValid(bid01)).to.equal(true);
135
+ expect(bid01.params.adUnitElementId).to.exist;
136
+ expect(bid01.params.adUnitElementId).to.equal('target-div');
137
+ });
138
+
139
+ it('should use default adUnitCode if no adUnitElementId provided', function () {
140
+ const bid01 = new BidRequestBuilder().withParams({}, ['adUnitElementId']).build();
141
+ expect(spec.isBidRequestValid(bid01)).to.equal(true);
142
+ expect(bid01.params.adUnitElementId).to.exist;
143
+ expect(bid01.params.adUnitElementId).to.equal('original-div');
144
+ });
145
+ });
146
+
147
+ describe('C-WIRE - buildRequests()', function () {
148
+ it('creates a valid request', function () {
149
+ const bid01 = new BidRequestBuilder({
150
+ mediaTypes: {
151
+ banner: {
152
+ sizes: [[1, 1]],
153
+ }
154
+ }
155
+ }).withParams().build();
156
+ const bidderRequest01 = new BidderRequestBuilder().build();
157
+
158
+ const requests = spec.buildRequests([bid01], bidderRequest01);
159
+ expect(requests.data.slots.length).to.equal(1);
160
+ expect(requests.data.cwid).to.be.null;
161
+ expect(requests.data.slots[0].sizes[0]).to.equal('1x1');
162
+ });
163
+ });
164
+
165
+ describe('C-WIRE - interpretResponse()', function () {
166
+ const serverResponse = {
167
+ body: {
168
+ bids: [{
169
+ html: '<div><h2>AD CONTENT</h2></div>',
170
+ currency: 'CHF',
171
+ cpm: 43.37,
172
+ dimensions: [1, 1],
173
+ netRevenue: true,
174
+ creativeId: '1337',
175
+ requestId: BID_DEFAULTS.request.bidId,
176
+ ttl: 3500,
177
+ }],
178
+ }
179
+ };
180
+
181
+ const expectedResponse = [{
182
+ ad: JSON.parse(JSON.stringify(serverResponse.body.bids[0].html)),
183
+ bidderCode: BID_DEFAULTS.request.bidder,
184
+ cpm: JSON.parse(JSON.stringify(serverResponse.body.bids[0].cpm)),
185
+ creativeId: JSON.parse(JSON.stringify(serverResponse.body.bids[0].creativeId)),
186
+ currency: JSON.parse(JSON.stringify(serverResponse.body.bids[0].currency)),
187
+ height: JSON.parse(JSON.stringify(serverResponse.body.bids[0].dimensions[0])),
188
+ width: JSON.parse(JSON.stringify(serverResponse.body.bids[0].dimensions[1])),
189
+ netRevenue: JSON.parse(JSON.stringify(serverResponse.body.bids[0].netRevenue)),
190
+ requestId: JSON.parse(JSON.stringify(serverResponse.body.bids[0].requestId)),
191
+ ttl: JSON.parse(JSON.stringify(serverResponse.body.bids[0].ttl)),
192
+ meta: {
193
+ advertiserDomains: [],
194
+ },
195
+ mediaType: 'banner',
196
+ }]
197
+
198
+ it('correctly parses response', function () {
199
+ const bid01 = new BidRequestBuilder({
200
+ mediaTypes: {
201
+ banner: {
202
+ sizes: [[1, 1]],
203
+ }
204
+ }
205
+ }).withParams().build();
206
+
207
+ const bidderRequest01 = new BidderRequestBuilder().build();
208
+ const requests = spec.buildRequests([bid01], bidderRequest01);
209
+
210
+ const response = spec.interpretResponse(serverResponse, requests);
211
+ expect(response).to.deep.equal(expectedResponse);
212
+ });
213
+
214
+ it('attaches renderer', function () {
215
+ const bid01 = new BidRequestBuilder({
216
+ mediaTypes: {
217
+ video: {
218
+ playerSize: [[640, 480]],
219
+ context: 'outstream',
220
+ }
221
+ }
222
+ }).withParams().build();
223
+ const bidderRequest01 = new BidderRequestBuilder().build();
224
+
225
+ const _serverResponse = utils.deepClone(serverResponse);
226
+ _serverResponse.body.bids[0].vastXml = '<xml></xml>';
227
+
228
+ const _expectedResponse = utils.deepClone(expectedResponse);
229
+ _expectedResponse[0].mediaType = 'video';
230
+ _expectedResponse[0].videoScript = JSON.parse(JSON.stringify(_serverResponse.body.bids[0].html));
231
+ _expectedResponse[0].vastXml = JSON.parse(JSON.stringify(_serverResponse.body.bids[0].vastXml));
232
+ delete _expectedResponse[0].ad;
233
+
234
+ const requests = spec.buildRequests([bid01], bidderRequest01);
235
+ expect(requests.data.slots[0].sizes).to.deep.equal(['640x480']);
236
+
237
+ const response = spec.interpretResponse(_serverResponse, requests);
238
+ expect(response[0].renderer).to.exist;
239
+ expect(response[0].renderer.url).to.equals(RENDERER_URL);
240
+ expect(response[0].renderer.loaded).to.equals(false);
241
+
242
+ delete response[0].renderer;
243
+ expect(response).to.deep.equal(_expectedResponse);
244
+ });
245
+ });
246
+ });
@@ -3,8 +3,8 @@ import {spec} from 'modules/deepintentBidAdapter.js';
3
3
  import * as utils from '../../../src/utils.js';
4
4
 
5
5
  describe('Deepintent adapter', function () {
6
- let request;
7
- let bannerResponse;
6
+ let request, videoBidRequests;
7
+ let bannerResponse, videoBidResponse, invalidResponse;
8
8
 
9
9
  beforeEach(function () {
10
10
  request = [
@@ -32,6 +32,38 @@ describe('Deepintent adapter', function () {
32
32
  }
33
33
  }
34
34
  ];
35
+ videoBidRequests =
36
+ [
37
+ {
38
+ code: 'video1',
39
+ mediaTypes: {
40
+ video: {
41
+ playerSize: [640, 480],
42
+ context: 'instream'
43
+ }
44
+ },
45
+ bidder: 'deepintent',
46
+ bidId: '22bddb28db77d',
47
+ params: {
48
+ tagId: '100013',
49
+ video: {
50
+ mimes: ['video/mp4', 'video/x-flv'],
51
+ skippable: true,
52
+ testwrongparam: 3,
53
+ testwrongparam1: 'wrong',
54
+ minduration: 5,
55
+ maxduration: 30,
56
+ startdelay: 5,
57
+ playbackmethod: [1, 3],
58
+ api: [1, 2],
59
+ protocols: [2, 3],
60
+ battr: [13, 14],
61
+ minbitrate: 10,
62
+ maxbitrate: 10
63
+ }
64
+ }
65
+ }
66
+ ];
35
67
  bannerResponse = {
36
68
  'body': {
37
69
  'id': '303e1fae-9677-41e2-9a92-15a23445363f',
@@ -53,7 +85,47 @@ describe('Deepintent adapter', function () {
53
85
  }],
54
86
  'bidid': '0b08b09f-aaa1-4c14-b1c8-7debb1a7c1cd'
55
87
  }
56
- }
88
+ };
89
+ invalidResponse = {
90
+ 'body': {
91
+ 'id': '303e1fae-9677-41e2-9a92-15a23445363f',
92
+ 'seatbid': [{
93
+ 'bid': [{
94
+ 'id': '11447bb1-a266-470d-b0d7-8810f5b1b75f',
95
+ 'impid': 'a7e92b9b-d9db-4de8-9c3f-f90737335445',
96
+ 'price': 0.6,
97
+ 'adid': '10001',
98
+ 'adm': 'invalid response',
99
+ 'adomain': ['deepintent.com'],
100
+ 'cid': '103389',
101
+ 'crid': '13665',
102
+ 'w': 300,
103
+ 'h': 250,
104
+ 'dealId': 'dee_12312stdszzsx'
105
+ }],
106
+ 'seat': '10000'
107
+ }],
108
+ 'bidid': '0b08b09f-aaa1-4c14-b1c8-7debb1a7c1cd'
109
+ }
110
+ };
111
+ videoBidResponse = {
112
+ 'body': {
113
+ 'id': '93D3BAD6-E2E2-49FB-9D89-920B1761C865',
114
+ 'seatbid': [{
115
+ 'bid': [{
116
+ 'id': '74858439-49D7-4169-BA5D-44A046315B2F',
117
+ 'impid': '22bddb28db77d',
118
+ 'price': 1.3,
119
+ 'adm': '<VAST version="3.0"><Ad id="601364"><InLine><AdSystem>Acudeo Compatible</AdSystem><AdTitle>VAST 2.0 Instream Test 1</AdTitle><Description>VAST 2.0 Instream Test 1</Description><Impression><![CDATA[http://172.16.4.213/AdServer/AdDisplayTrackerServlet?operId=1&pubId=5890&siteId=47163&adId=1405268&adType=13&adServerId=243&kefact=70.000000&kaxefact=70.000000&kadNetFrequecy=0&kadwidth=0&kadheight=0&kadsizeid=97&kltstamp=1529929473&indirectAdId=0&adServerOptimizerId=2&ranreq=0.1&kpbmtpfact=100.000000&dcId=1&tldId=0&passback=0&svr=MADS1107&ekefact=Ad8wW91TCwCmdG0jlfjXn7Tyzh20hnTVx-m5DoNSep-RXGDr&ekaxefact=Ad8wWwRUCwAGir4Zzl1eF0bKiC-qrCV0D0yp_eE7YizB_BQk&ekpbmtpfact=Ad8wWxRUCwD7qgzwwPE2LnS5-Ou19uO5amJl1YT6-XVFvQ41&imprId=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&oid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&crID=creative-1_1_2&ucrid=160175026529250297&campaignId=17050&creativeId=0&pctr=0.000000&wDSPByrId=511&wDspId=6&wbId=0&wrId=0&wAdvID=3170&isRTB=1&rtbId=EBCA079F-8D7C-45B8-B733-92951F670AA1&pmZoneId=zone1&pageURL=www.yahoo.com&lpu=ae.com]]></Impression><Impression>https://dsptracker.com/{PSPM}</Impression><Error><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&er=[ERRORCODE]]]></Error><Error><![CDATA[https://Errortrack.com?p=1234&er=[ERRORCODE]]]></Error><Creatives><Creative AdID="601364"><Linear skipoffset="20%"><TrackingEvents><Tracking event="close"><![CDATA[https://mytracking.com/linear/close]]></Tracking><Tracking event="skip"><![CDATA[https://mytracking.com/linear/skip]]></Tracking><Tracking event="creativeView"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=1]]></Tracking><Tracking event="start"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=2]]></Tracking><Tracking event="midpoint"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=3]]></Tracking><Tracking event="firstQuartile"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=4]]></Tracking><Tracking event="thirdQuartile"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=5]]></Tracking><Tracking event="complete"><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=6]]></Tracking></TrackingEvents><Duration>00:00:04</Duration><VideoClicks><ClickTracking><![CDATA[http://172.16.4.213/track?operId=7&p=5890&s=47163&a=1405268&wa=243&ts=1529929473&wc=17050&crId=creative-1_1_2&ucrid=160175026529250297&impid=48F73E1A-7F23-443D-A53C-30EE6BBF5F7F&advertiser_id=3170&ecpm=70.000000&e=99]]></ClickTracking><ClickThrough>https://www.deepintent.com</ClickThrough></VideoClicks><MediaFiles><MediaFile delivery="progressive" type="video/mp4" bitrate="500" width="400" height="300" scalable="true" maintainAspectRatio="true"><![CDATA[https://staging.deepintent.com:8443/video/Shashank/mediaFileHost/media/mp4-sample-2.mp4]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>',
120
+ 'h': 250,
121
+ 'w': 300,
122
+ 'ext': {
123
+ 'deal_channel': 6
124
+ }
125
+ }]
126
+ }]
127
+ }
128
+ };
57
129
  });
58
130
 
59
131
  describe('validations', function () {
@@ -88,6 +160,45 @@ describe('Deepintent adapter', function () {
88
160
  isValid = spec.isBidRequestValid(bid);
89
161
  expect(isValid).to.equals(false);
90
162
  });
163
+ it('should check for context if video is present', function() {
164
+ let bid = {
165
+ bidder: 'deepintent',
166
+ params: {
167
+ tagId: '12345',
168
+ video: {
169
+ mimes: ['video/mp4', 'video/x-flv'],
170
+ skippable: true,
171
+ }
172
+ },
173
+ mediaTypes: {
174
+ video: {
175
+ playerSize: [640, 480],
176
+ context: 'instream'
177
+ }
178
+ },
179
+ },
180
+ isValid = spec.isBidRequestValid(bid);
181
+ expect(isValid).to.equal(true);
182
+ });
183
+ it('should error out if context is not present and is Video', function() {
184
+ let bid = {
185
+ bidder: 'deepintent',
186
+ params: {
187
+ tagId: '12345',
188
+ video: {
189
+ mimes: ['video/mp4', 'video/x-flv'],
190
+ skippable: true,
191
+ }
192
+ },
193
+ mediaTypes: {
194
+ video: {
195
+ playerSize: [640, 480]
196
+ }
197
+ },
198
+ },
199
+ isValid = spec.isBidRequestValid(bid);
200
+ expect(isValid).to.equal(false);
201
+ })
91
202
  });
92
203
  describe('request check', function () {
93
204
  it('unmutaable bid request check', function () {
@@ -179,6 +290,28 @@ describe('Deepintent adapter', function () {
179
290
  expect(data2.regs).to.equal(undefined);
180
291
  expect(data2.user.ext).to.equal(undefined);
181
292
  });
293
+ it('bid request check: Video params check ', function() {
294
+ let bRequest = spec.buildRequests(videoBidRequests);
295
+ let data = JSON.parse(bRequest.data);
296
+ expect(data.imp[0].video).to.be.a('object');
297
+ expect(data.imp[0].video.minduration).to.be.a('number');
298
+ expect(data.imp[0].video.maxduration).to.be.a('number');
299
+ expect(data.imp[0].video.startdelay).to.be.a('number');
300
+ expect(data.imp[0].video.playbackmethod).to.be.an('array');
301
+ expect(data.imp[0].video.api).to.be.an('array');
302
+ expect(data.imp[0].video.protocols).to.be.an('array');
303
+ expect(data.imp[0].video.battr).to.be.an('array');
304
+ expect(data.imp[0].video.minbitrate).to.be.a('number');
305
+ expect(data.imp[0].video.maxbitrate).to.be.a('number');
306
+ expect(data.imp[0].video.w).to.be.a('number');
307
+ });
308
+ it('bid request param check : invalid video params', function() {
309
+ let bRequest = spec.buildRequests(videoBidRequests);
310
+ let data = JSON.parse(bRequest.data);
311
+ expect(data.imp[0].video).to.be.a('object');
312
+ expect(data.imp[0].video.testwrongparam).to.equal(undefined);
313
+ expect(data.imp[0].video.testwrongparam1).to.equal(undefined);
314
+ });
182
315
  });
183
316
  describe('user sync check', function () {
184
317
  it('user sync url check', function () {
@@ -202,10 +335,27 @@ describe('Deepintent adapter', function () {
202
335
  expect(bResponse[0].height).to.equal(bannerResponse.body.seatbid[0].bid[0].h);
203
336
  expect(bResponse[0].currency).to.equal('USD');
204
337
  expect(bResponse[0].netRevenue).to.equal(false);
338
+ expect(bResponse[0].mediaType).to.equal('banner');
205
339
  expect(bResponse[0].meta.advertiserDomains).to.deep.equal(['deepintent.com']);
206
340
  expect(bResponse[0].ttl).to.equal(300);
207
341
  expect(bResponse[0].creativeId).to.equal(bannerResponse.body.seatbid[0].bid[0].crid);
208
342
  expect(bResponse[0].dealId).to.equal(bannerResponse.body.seatbid[0].bid[0].dealId);
209
343
  });
344
+ it('bid response check: valid video bid response', function() {
345
+ let request = spec.buildRequests(videoBidRequests);
346
+ let response = spec.interpretResponse(videoBidResponse, request);
347
+ expect(response[0].mediaType).to.equal('video');
348
+ expect(response[0].vastXml).to.not.equal(undefined);
349
+ });
350
+ it('invalid bid response check ', function() {
351
+ let bRequest = spec.buildRequests(request);
352
+ let response = spec.interpretResponse(invalidResponse, bRequest);
353
+ expect(response[0].mediaType).to.equal(undefined);
354
+ });
355
+ it('invalid bid response check ', function() {
356
+ let bRequest = spec.buildRequests(videoBidRequests);
357
+ let response = spec.interpretResponse(invalidResponse, bRequest);
358
+ expect(response[0].mediaType).to.equal(undefined);
359
+ });
210
360
  })
211
361
  });