prebid.js 6.25.0 → 6.26.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 (132) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/adagioBidAdapter.js +1 -1
  3. package/dist/adbookpspBidAdapter.js +1 -1
  4. package/dist/adgenerationBidAdapter.js +1 -1
  5. package/dist/adrelevantisBidAdapter.js +1 -1
  6. package/dist/adxcgBidAdapter.js +1 -1
  7. package/dist/adyoulikeBidAdapter.js +1 -1
  8. package/dist/ajaBidAdapter.js +1 -1
  9. package/dist/amxBidAdapter.js +1 -1
  10. package/dist/amxIdSystem.js +1 -1
  11. package/dist/appierAnalyticsAdapter.js +1 -1
  12. package/dist/appnexusBidAdapter.js +1 -1
  13. package/dist/asoBidAdapter.js +1 -1
  14. package/dist/audiencerunBidAdapter.js +1 -1
  15. package/dist/axonixBidAdapter.js +1 -1
  16. package/dist/bidglassBidAdapter.js +1 -1
  17. package/dist/big-richmediaBidAdapter.js +1 -1
  18. package/dist/bluebillywigBidAdapter.js +1 -1
  19. package/dist/bridgewellBidAdapter.js +1 -1
  20. package/dist/brightMountainMediaBidAdapter.js +1 -1
  21. package/dist/concertBidAdapter.js +1 -1
  22. package/dist/connectadBidAdapter.js +1 -1
  23. package/dist/consumableBidAdapter.js +1 -1
  24. package/dist/conversantBidAdapter.js +1 -1
  25. package/dist/cpexIdSystem.js +1 -1
  26. package/dist/craftBidAdapter.js +1 -1
  27. package/dist/criteoBidAdapter.js +1 -1
  28. package/dist/dspxBidAdapter.js +1 -1
  29. package/dist/eplanningBidAdapter.js +1 -1
  30. package/dist/glimpseBidAdapter.js +1 -1
  31. package/dist/gmosspBidAdapter.js +1 -1
  32. package/dist/goldbachBidAdapter.js +1 -1
  33. package/dist/gravitoIdSystem.js +1 -0
  34. package/dist/gridBidAdapter.js +1 -1
  35. package/dist/gridNMBidAdapter.js +1 -1
  36. package/dist/gumgumBidAdapter.js +1 -1
  37. package/dist/h12mediaBidAdapter.js +1 -1
  38. package/dist/id5IdSystem.js +1 -1
  39. package/dist/impactifyBidAdapter.js +1 -1
  40. package/dist/improvedigitalBidAdapter.js +1 -1
  41. package/dist/inmarBidAdapter.js +1 -1
  42. package/dist/insticatorBidAdapter.js +1 -1
  43. package/dist/ixBidAdapter.js +1 -1
  44. package/dist/jixieBidAdapter.js +1 -1
  45. package/dist/justpremiumBidAdapter.js +1 -1
  46. package/dist/konduitAnalyticsAdapter.js +1 -1
  47. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  48. package/dist/logicadBidAdapter.js +1 -1
  49. package/dist/loglyliftBidAdapter.js +1 -1
  50. package/dist/malltvAnalyticsAdapter.js +1 -1
  51. package/dist/marsmediaBidAdapter.js +1 -1
  52. package/dist/mediafuseBidAdapter.js +1 -1
  53. package/dist/mediakeysBidAdapter.js +1 -1
  54. package/dist/mediasquareBidAdapter.js +1 -1
  55. package/dist/mgidBidAdapter.js +1 -1
  56. package/dist/minutemediaBidAdapter.js +1 -1
  57. package/dist/not-for-prod/prebid.js +113 -111
  58. package/dist/oguryBidAdapter.js +1 -1
  59. package/dist/oneVideoBidAdapter.js +1 -1
  60. package/dist/onetagBidAdapter.js +1 -1
  61. package/dist/ooloAnalyticsAdapter.js +1 -1
  62. package/dist/outbrainBidAdapter.js +1 -1
  63. package/dist/parrableIdSystem.js +1 -1
  64. package/dist/pixfutureBidAdapter.js +1 -1
  65. package/dist/prebid-core.js +3 -3
  66. package/dist/publinkIdSystem.js +1 -1
  67. package/dist/pubmaticBidAdapter.js +1 -1
  68. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  69. package/dist/pxyzBidAdapter.js +1 -1
  70. package/dist/quantcastBidAdapter.js +1 -1
  71. package/dist/readpeakBidAdapter.js +1 -1
  72. package/dist/relaidoBidAdapter.js +1 -1
  73. package/dist/rhythmoneBidAdapter.js +1 -1
  74. package/dist/riseBidAdapter.js +1 -1
  75. package/dist/rubiconAnalyticsAdapter.js +1 -1
  76. package/dist/rubiconBidAdapter.js +1 -1
  77. package/dist/seedingAllianceBidAdapter.js +1 -1
  78. package/dist/seedtagBidAdapter.js +1 -1
  79. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  80. package/dist/sharethroughBidAdapter.js +1 -1
  81. package/dist/smaatoBidAdapter.js +1 -1
  82. package/dist/smartadserverBidAdapter.js +1 -1
  83. package/dist/smartxBidAdapter.js +1 -1
  84. package/dist/smilewantedBidAdapter.js +1 -1
  85. package/dist/sonobiBidAdapter.js +1 -1
  86. package/dist/sortableBidAdapter.js +1 -1
  87. package/dist/sovrnAnalyticsAdapter.js +1 -1
  88. package/dist/sovrnBidAdapter.js +1 -1
  89. package/dist/sspBCBidAdapter.js +1 -1
  90. package/dist/sublimeBidAdapter.js +1 -1
  91. package/dist/synacormediaBidAdapter.js +1 -1
  92. package/dist/targetVideoBidAdapter.js +1 -1
  93. package/dist/teadsBidAdapter.js +1 -1
  94. package/dist/trionBidAdapter.js +1 -1
  95. package/dist/tripleliftBidAdapter.js +1 -1
  96. package/dist/trustxBidAdapter.js +1 -1
  97. package/dist/ttdBidAdapter.js +1 -1
  98. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  99. package/dist/underdogmediaBidAdapter.js +1 -1
  100. package/dist/undertoneBidAdapter.js +1 -1
  101. package/dist/userId.js +1 -1
  102. package/dist/vidazooBidAdapter.js +1 -1
  103. package/dist/videobyteBidAdapter.js +1 -1
  104. package/dist/videoheroesBidAdapter.js +1 -0
  105. package/dist/visxBidAdapter.js +1 -1
  106. package/dist/vuukleBidAdapter.js +1 -1
  107. package/dist/widespaceBidAdapter.js +1 -1
  108. package/dist/winrBidAdapter.js +1 -1
  109. package/dist/yahoosspBidAdapter.js +1 -1
  110. package/dist/yieldmoBidAdapter.js +1 -1
  111. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  112. package/dist/zeta_global_sspBidAdapter.js +1 -1
  113. package/integrationExamples/gpt/userId_example.html +3 -0
  114. package/modules/.submodules.json +2 -1
  115. package/modules/cpexIdSystem.js +1 -2
  116. package/modules/dacIdSystem.md +4 -4
  117. package/modules/gravitoIdSystem.js +57 -0
  118. package/modules/gravitoIdSystem.md +28 -0
  119. package/modules/jixieBidAdapter.js +2 -0
  120. package/modules/oguryBidAdapter.js +27 -1
  121. package/modules/userId/eids.js +6 -0
  122. package/modules/userId/userId.md +3 -0
  123. package/modules/videoheroesBidAdapter.js +267 -0
  124. package/modules/videoheroesBidAdapter.md +134 -0
  125. package/modules/zeta_global_sspBidAdapter.js +1 -1
  126. package/package.json +1 -1
  127. package/test/spec/modules/gravitoIdSystem_spec.js +51 -0
  128. package/test/spec/modules/jixieBidAdapter_spec.js +17 -0
  129. package/test/spec/modules/oguryBidAdapter_spec.js +181 -3
  130. package/test/spec/modules/videoheroesBidAdapter_spec.js +363 -0
  131. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +37 -24
  132. package/test/spec/modules/medianetRtdProvider_spec.js +0 -146
@@ -314,6 +314,12 @@ export const USER_IDS_CONFIG = {
314
314
  return data.envelope;
315
315
  }
316
316
  },
317
+
318
+ // Gravito MP ID
319
+ 'gravitompId': {
320
+ source: 'gravito.net',
321
+ atype: 1
322
+ },
317
323
  };
318
324
 
319
325
  // this function will create an eid object for the given UserId sub-module
@@ -166,6 +166,9 @@ pbjs.setConfig({
166
166
  },
167
167
  {
168
168
  name: "dacId"
169
+ },
170
+ {
171
+ name: "gravitompId"
169
172
  }
170
173
  ],
171
174
  syncDelay: 5000,
@@ -0,0 +1,267 @@
1
+ import { isEmpty, parseUrl, isStr, triggerPixel } from '../src/utils.js';
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
4
+ import { config } from '../src/config.js';
5
+
6
+ const BIDDER_CODE = 'videoheroes';
7
+ const DEFAULT_CUR = 'USD';
8
+ const ENDPOINT_URL = `https://point.contextualadv.com/?t=2&partner=hash`;
9
+
10
+ const NATIVE_ASSETS_IDS = { 1: 'title', 2: 'icon', 3: 'image', 4: 'body', 5: 'sponsoredBy', 6: 'cta' };
11
+ const NATIVE_ASSETS = {
12
+ title: { id: 1, name: 'title' },
13
+ icon: { id: 2, type: 1, name: 'img' },
14
+ image: { id: 3, type: 3, name: 'img' },
15
+ body: { id: 4, type: 2, name: 'data' },
16
+ sponsoredBy: { id: 5, type: 1, name: 'data' },
17
+ cta: { id: 6, type: 12, name: 'data' }
18
+ };
19
+
20
+ export const spec = {
21
+ code: BIDDER_CODE,
22
+ supportedMediaTypes: [BANNER, VIDEO, NATIVE],
23
+
24
+ /**
25
+ * Determines whether or not the given bid request is valid.
26
+ *
27
+ * @param {object} bid The bid to validate.
28
+ * @return boolean True if this is a valid bid, and false otherwise.
29
+ */
30
+ isBidRequestValid: (bid) => {
31
+ return !!(bid.params.placementId && bid.params.placementId.toString().length === 32);
32
+ },
33
+
34
+ /**
35
+ * Make a server request from the list of BidRequests.
36
+ *
37
+ * @param {BidRequest[]} validBidRequests A non-empty list of valid bid requests that should be sent to the Server.
38
+ * @return ServerRequest Info describing the request to the server.
39
+ */
40
+ buildRequests: (validBidRequests, bidderRequest) => {
41
+ if (validBidRequests.length === 0 || !bidderRequest) return [];
42
+
43
+ const endpointURL = ENDPOINT_URL.replace('hash', validBidRequests[0].params.placementId);
44
+
45
+ let imp = validBidRequests.map(br => {
46
+ let impObject = {
47
+ id: br.bidId,
48
+ secure: 1
49
+ };
50
+
51
+ if (br.mediaTypes.banner) {
52
+ impObject.banner = createBannerRequest(br);
53
+ } else if (br.mediaTypes.video) {
54
+ impObject.video = createVideoRequest(br);
55
+ } else if (br.mediaTypes.native) {
56
+ impObject.native = {
57
+ id: br.transactionId,
58
+ ver: '1.2',
59
+ request: createNativeRequest(br)
60
+ };
61
+ }
62
+ return impObject;
63
+ });
64
+
65
+ let w = window;
66
+ let l = w.document.location.href;
67
+ let r = w.document.referrer;
68
+
69
+ let loopChecker = 0;
70
+ while (w !== w.parent) {
71
+ if (++loopChecker == 10) break;
72
+ try {
73
+ w = w.parent;
74
+ l = w.location.href;
75
+ r = w.document.referrer;
76
+ } catch (e) {
77
+ break;
78
+ }
79
+ }
80
+
81
+ let page = l || bidderRequest.refererInfo.referer;
82
+
83
+ let data = {
84
+ id: bidderRequest.bidderRequestId,
85
+ cur: [ DEFAULT_CUR ],
86
+ device: {
87
+ w: screen.width,
88
+ h: screen.height,
89
+ language: (navigator && navigator.language) ? navigator.language.indexOf('-') != -1 ? navigator.language.split('-')[0] : navigator.language : '',
90
+ ua: navigator.userAgent,
91
+ },
92
+ site: {
93
+ domain: parseUrl(page).hostname,
94
+ page: page,
95
+ },
96
+ tmax: bidderRequest.timeout || config.getConfig('bidderTimeout') || 500,
97
+ imp
98
+ };
99
+
100
+ if (r) {
101
+ data.site.ref = r;
102
+ }
103
+
104
+ if (bidderRequest.gdprConsent) {
105
+ data['regs'] = {'ext': {'gdpr': bidderRequest.gdprConsent.gdprApplies ? 1 : 0}};
106
+ data['user'] = {'ext': {'consent': bidderRequest.gdprConsent.consentString ? bidderRequest.gdprConsent.consentString : ''}};
107
+ }
108
+
109
+ if (bidderRequest.uspConsent !== undefined) {
110
+ if (!data['regs'])data['regs'] = {'ext': {}};
111
+ data['regs']['ext']['us_privacy'] = bidderRequest.uspConsent;
112
+ }
113
+
114
+ if (config.getConfig('coppa') === true) {
115
+ if (!data['regs'])data['regs'] = {'coppa': 1};
116
+ else data['regs']['coppa'] = 1;
117
+ }
118
+
119
+ if (validBidRequests[0].schain) {
120
+ data['source'] = {'ext': {'schain': validBidRequests[0].schain}};
121
+ }
122
+
123
+ return {
124
+ method: 'POST',
125
+ url: endpointURL,
126
+ data: data
127
+ };
128
+ },
129
+
130
+ /**
131
+ * Unpack the response from the server into a list of bids.
132
+ *
133
+ * @param {*} serverResponse A successful response from the server.
134
+ * @return {Bid[]} An array of bids which were nested inside the server.
135
+ */
136
+ interpretResponse: (serverResponse) => {
137
+ if (!serverResponse || isEmpty(serverResponse.body)) return [];
138
+
139
+ let bids = [];
140
+ serverResponse.body.seatbid.forEach(response => {
141
+ response.bid.forEach(bid => {
142
+ let mediaType = bid.ext && bid.ext.mediaType ? bid.ext.mediaType : 'banner';
143
+
144
+ let bidObj = {
145
+ requestId: bid.impid,
146
+ cpm: bid.price,
147
+ width: bid.w,
148
+ height: bid.h,
149
+ ttl: 1200,
150
+ currency: DEFAULT_CUR,
151
+ netRevenue: true,
152
+ creativeId: bid.crid,
153
+ dealId: bid.dealid || null,
154
+ mediaType: mediaType
155
+ };
156
+
157
+ switch (mediaType) {
158
+ case 'video':
159
+ bidObj.vastUrl = bid.adm;
160
+ break;
161
+ case 'native':
162
+ bidObj.native = parseNative(bid.adm);
163
+ break;
164
+ default:
165
+ bidObj.ad = bid.adm;
166
+ }
167
+
168
+ bids.push(bidObj);
169
+ });
170
+ });
171
+
172
+ return bids;
173
+ },
174
+
175
+ onBidWon: (bid) => {
176
+ if (isStr(bid.nurl) && bid.nurl !== '') {
177
+ triggerPixel(bid.nurl);
178
+ }
179
+ }
180
+ };
181
+
182
+ const parseNative = adm => {
183
+ let bid = {
184
+ clickUrl: adm.native.link && adm.native.link.url,
185
+ impressionTrackers: adm.native.imptrackers || [],
186
+ clickTrackers: (adm.native.link && adm.native.link.clicktrackers) || [],
187
+ jstracker: adm.native.jstracker || []
188
+ };
189
+ adm.native.assets.forEach(asset => {
190
+ let kind = NATIVE_ASSETS_IDS[asset.id];
191
+ let content = kind && asset[NATIVE_ASSETS[kind].name];
192
+ if (content) {
193
+ bid[kind] = content.text || content.value || { url: content.url, width: content.w, height: content.h };
194
+ }
195
+ });
196
+
197
+ return bid;
198
+ }
199
+
200
+ const createNativeRequest = br => {
201
+ let impObject = {
202
+ ver: '1.2',
203
+ assets: []
204
+ };
205
+
206
+ let keys = Object.keys(br.mediaTypes.native);
207
+
208
+ for (let key of keys) {
209
+ const props = NATIVE_ASSETS[key];
210
+ if (props) {
211
+ const asset = {
212
+ required: br.mediaTypes.native[key].required ? 1 : 0,
213
+ id: props.id,
214
+ [props.name]: {}
215
+ };
216
+
217
+ if (props.type) asset[props.name]['type'] = props.type;
218
+ if (br.mediaTypes.native[key].len) asset[props.name]['len'] = br.mediaTypes.native[key].len;
219
+ if (br.mediaTypes.native[key].sizes && br.mediaTypes.native[key].sizes[0]) {
220
+ asset[props.name]['w'] = br.mediaTypes.native[key].sizes[0];
221
+ asset[props.name]['h'] = br.mediaTypes.native[key].sizes[1];
222
+ }
223
+
224
+ impObject.assets.push(asset);
225
+ }
226
+ }
227
+
228
+ return impObject;
229
+ }
230
+
231
+ const createBannerRequest = br => {
232
+ let size = [];
233
+
234
+ if (br.mediaTypes.banner.sizes && Array.isArray(br.mediaTypes.banner.sizes)) {
235
+ if (Array.isArray(br.mediaTypes.banner.sizes[0])) { size = br.mediaTypes.banner.sizes[0]; } else { size = br.mediaTypes.banner.sizes; }
236
+ } else size = [300, 250];
237
+
238
+ return { id: br.transactionId, w: size[0], h: size[1] };
239
+ };
240
+
241
+ const createVideoRequest = br => {
242
+ let videoObj = {id: br.transactionId};
243
+ let supportParamsList = ['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'skip', 'minbitrate', 'maxbitrate', 'api', 'linearity'];
244
+
245
+ for (let param of supportParamsList) {
246
+ if (br.mediaTypes.video[param] !== undefined) {
247
+ videoObj[param] = br.mediaTypes.video[param];
248
+ }
249
+ }
250
+
251
+ if (br.mediaTypes.video.playerSize && Array.isArray(br.mediaTypes.video.playerSize)) {
252
+ if (Array.isArray(br.mediaTypes.video.playerSize[0])) {
253
+ videoObj.w = br.mediaTypes.video.playerSize[0][0];
254
+ videoObj.h = br.mediaTypes.video.playerSize[0][1];
255
+ } else {
256
+ videoObj.w = br.mediaTypes.video.playerSize[0];
257
+ videoObj.h = br.mediaTypes.video.playerSize[1];
258
+ }
259
+ } else {
260
+ videoObj.w = 640;
261
+ videoObj.h = 480;
262
+ }
263
+
264
+ return videoObj;
265
+ }
266
+
267
+ registerBidder(spec);
@@ -0,0 +1,134 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: Video Heroes Bidder Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: support@videoheroes.tv
7
+ ```
8
+
9
+ # Description
10
+
11
+ Module which connects to VideoHeroes SSP demand sources
12
+
13
+ # Test Parameters
14
+
15
+ 250x300 banner test
16
+ ```
17
+ var adUnits = [{
18
+ code: 'videoheroes-prebid',
19
+ mediaTypes: {
20
+ banner: {
21
+ sizes: [[300, 250]]
22
+ }
23
+ },
24
+ bids: [{
25
+ bidder: 'videoheroes',
26
+ params : {
27
+ placementId : "1a8d9c22db19906cb8a5fd4518d05f62" // test placementId, please replace after test
28
+ }
29
+ }]
30
+ }];
31
+ ```
32
+
33
+ native test
34
+ ```
35
+ var adUnits = [{
36
+ code: 'videoheroes-native-prebid',
37
+ mediaTypes: {
38
+ native: {
39
+ title: {
40
+ required: true,
41
+ len: 800
42
+ },
43
+ image: {
44
+ required: true,
45
+ len: 80
46
+ },
47
+ sponsoredBy: {
48
+ required: true
49
+ },
50
+ clickUrl: {
51
+ required: true
52
+ },
53
+ privacyLink: {
54
+ required: false
55
+ },
56
+ body: {
57
+ required: true
58
+ },
59
+ icon: {
60
+ required: true,
61
+ sizes: [50, 50]
62
+ }
63
+ }
64
+ },
65
+ bids: [{
66
+ bidder: 'videoheroes',
67
+ params: {
68
+ placementId : "1a8d9c22db19906cb8a5fd4518d05f62" // test placementId, please replace after test
69
+ }
70
+ }]
71
+ }];
72
+ ```
73
+
74
+ video test
75
+ ```
76
+ var adUnits = [{
77
+ code: 'videoheroes-video-prebid',
78
+ mediaTypes: {
79
+ video: {
80
+ minduration:1,
81
+ maxduration:999,
82
+ boxingallowed:1,
83
+ skip:0,
84
+ mimes:[
85
+ 'application/javascript',
86
+ 'video/mp4'
87
+ ],
88
+ playerSize: [[768, 1024]],
89
+ protocols:[
90
+ 2,3
91
+ ],
92
+ linearity:1,
93
+ api:[
94
+ 1,
95
+ 2
96
+ ]
97
+ }
98
+ },
99
+ bids: [{
100
+ bidder: 'videoheroes',
101
+ params: {
102
+ placementId : "1a8d9c22db19906cb8a5fd4518d05f62" // test placementId, please replace after test
103
+ }
104
+ }]
105
+ }];
106
+ ```
107
+
108
+ # Bid Parameters
109
+ ## Banner
110
+
111
+ | Name | Scope | Type | Description | Example
112
+ | ---- | ----- | ---- | ----------- | -------
113
+ | `placementId` | required | String | The placement ID from Video Heroes | "1a8d9c22db19906cb8a5fd4518d05f62"
114
+
115
+
116
+ # Ad Unit and page Setup:
117
+
118
+ ```html
119
+ <!-- Prebid Config section -->
120
+ <script>
121
+ var PREBID_TIMEOUT = 700;
122
+ var adUnits = [{
123
+ code: 'videoheroes-prebid',
124
+ sizes: [[300, 250]],
125
+ bids: [{
126
+ bidder: 'videoheroes'
127
+ placementId : "PUT_YOUR_videoheroes_placementId",
128
+ }]
129
+ }];
130
+ var pbjs = pbjs || {};
131
+ pbjs.que = pbjs.que || [];
132
+ </script>
133
+ <!-- End Prebid Config section -->
134
+ ```
@@ -99,7 +99,7 @@ export const spec = {
99
99
  user: params.user ? params.user : {},
100
100
  app: params.app ? params.app : {},
101
101
  ext: {
102
- tags: params.tags ? params.tags : {},
102
+ tags: {...params.tags, shortname: params.shortname},
103
103
  sid: params.sid ? params.sid : undefined
104
104
  }
105
105
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "6.25.0",
3
+ "version": "6.26.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.js",
6
6
  "scripts": {
@@ -0,0 +1,51 @@
1
+ import { gravitoIdSystemSubmodule, storage, cookieKey } from 'modules/gravitoIdSystem.js';
2
+
3
+ const GRAVITOID_TEST_VALUE = 'gravitompIdTest';
4
+ const GRAVITOID_TEST_OBJ = {
5
+ gravitompId: GRAVITOID_TEST_VALUE
6
+ };
7
+
8
+ describe('gravitompId module', function () {
9
+ let getCookieStub;
10
+
11
+ beforeEach(function (done) {
12
+ getCookieStub = sinon.stub(storage, 'getCookie');
13
+ done();
14
+ });
15
+
16
+ afterEach(function () {
17
+ getCookieStub.restore();
18
+ });
19
+
20
+ const cookieTestCasesForEmpty = [
21
+ undefined,
22
+ null,
23
+ ''
24
+ ]
25
+
26
+ describe('getId()', function () {
27
+ it('should return the gravitompId when it exists in cookie', function () {
28
+ getCookieStub.withArgs(cookieKey).returns(GRAVITOID_TEST_VALUE);
29
+ const id = gravitoIdSystemSubmodule.getId();
30
+ expect(id).to.be.deep.equal({id: {gravitompId: GRAVITOID_TEST_VALUE}});
31
+ });
32
+
33
+ cookieTestCasesForEmpty.forEach(testCase => it('should return the gravitompId when it not exists in cookie', function () {
34
+ getCookieStub.withArgs(cookieKey).returns(testCase);
35
+ const id = gravitoIdSystemSubmodule.getId();
36
+ expect(id).to.be.deep.equal(undefined);
37
+ }));
38
+ });
39
+
40
+ describe('decode()', function () {
41
+ it('should return the gravitompId when it exists in cookie', function () {
42
+ const decoded = gravitoIdSystemSubmodule.decode(GRAVITOID_TEST_OBJ);
43
+ expect(decoded).to.be.deep.equal({gravitompId: {id: GRAVITOID_TEST_VALUE}});
44
+ });
45
+
46
+ it('should return the undefined when decode id is not "string"', function () {
47
+ const decoded = gravitoIdSystemSubmodule.decode(1);
48
+ expect(decoded).to.equal(undefined);
49
+ });
50
+ });
51
+ });
@@ -285,6 +285,23 @@ describe('jixie Adapter', function () {
285
285
  expect(payload.device).to.deep.include(content);
286
286
  });
287
287
 
288
+ it('schain info should be accessible when available', function () {
289
+ const schain = {
290
+ ver: '1.0',
291
+ complete: 1,
292
+ nodes: [{
293
+ asi: 'ssp.test',
294
+ sid: '00001',
295
+ hp: 1
296
+ }]
297
+ };
298
+ const oneSpecialBidReq = Object.assign({}, bidRequests_[0], { schain: schain });
299
+ const request = spec.buildRequests([oneSpecialBidReq], bidderRequest_);
300
+ const payload = JSON.parse(request.data);
301
+ expect(payload.schain).to.deep.equal(schain);
302
+ expect(payload.schain).to.deep.include(schain);
303
+ });
304
+
288
305
  it('should populate eids when supported userIds are available', function () {
289
306
  const oneSpecialBidReq = Object.assign({}, bidRequests_[0], {
290
307
  userId: {