prebid.js 9.0.0 → 9.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 (307) hide show
  1. package/.nvmrc +1 -1
  2. package/browsers.json +3 -3
  3. package/dist/33acrossAnalyticsAdapter.js +1 -1
  4. package/dist/33acrossBidAdapter.js +1 -1
  5. package/dist/33acrossIdSystem.js +1 -1
  6. package/dist/BTBidAdapter.js +1 -1
  7. package/dist/acuityadsBidAdapter.js +1 -1
  8. package/dist/adagioAnalyticsAdapter.js +1 -1
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adagioRtdProvider.js +1 -1
  11. package/dist/adagioUtils.js +1 -0
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/admanBidAdapter.js +1 -1
  14. package/dist/adpod.js +1 -1
  15. package/dist/adprimeBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgBidAdapter.js +1 -1
  21. package/dist/adyoulikeBidAdapter.js +1 -1
  22. package/dist/agmaAnalyticsAdapter.js +1 -1
  23. package/dist/ajaBidAdapter.js +1 -1
  24. package/dist/amxBidAdapter.js +1 -1
  25. package/dist/amxIdSystem.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/appnexusUtils.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/autoplayDetection.js +1 -1
  31. package/dist/axisBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/beyondmediaBidAdapter.js +1 -1
  34. package/dist/bidglassBidAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bliinkBidAdapter.js +1 -1
  37. package/dist/boldwinBidAdapter.js +1 -1
  38. package/dist/bridBidAdapter.js +1 -1
  39. package/dist/bridgewellBidAdapter.js +1 -1
  40. package/dist/brightMountainMediaBidAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/chunk-core.js +1 -1
  44. package/dist/compassBidAdapter.js +1 -1
  45. package/dist/concertBidAdapter.js +1 -1
  46. package/dist/connectadBidAdapter.js +1 -1
  47. package/dist/consumableBidAdapter.js +1 -1
  48. package/dist/contentexchangeBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/cwireBidAdapter.js +1 -1
  54. package/dist/dailymotionBidAdapter.js +1 -1
  55. package/dist/dependencies.json +83 -4
  56. package/dist/dspxBidAdapter.js +1 -1
  57. package/dist/dxkultureBidAdapter.js +1 -1
  58. package/dist/e_volutionBidAdapter.js +1 -1
  59. package/dist/emtvBidAdapter.js +1 -1
  60. package/dist/eplanningBidAdapter.js +1 -1
  61. package/dist/euidIdSystem.js +1 -1
  62. package/dist/exadsBidAdapter.js +1 -1
  63. package/dist/feedadBidAdapter.js +1 -1
  64. package/dist/finativeBidAdapter.js +1 -1
  65. package/dist/freewheel-sspBidAdapter.js +1 -1
  66. package/dist/globalsunBidAdapter.js +1 -1
  67. package/dist/gmosspBidAdapter.js +1 -1
  68. package/dist/goldbachBidAdapter.js +1 -1
  69. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  70. package/dist/greenbidsRtdProvider.js +1 -1
  71. package/dist/gridBidAdapter.js +1 -1
  72. package/dist/gumgumBidAdapter.js +1 -1
  73. package/dist/h12mediaBidAdapter.js +1 -1
  74. package/dist/hypelabBidAdapter.js +1 -1
  75. package/dist/id5IdSystem.js +1 -1
  76. package/dist/illuminBidAdapter.js +1 -1
  77. package/dist/imdsBidAdapter.js +1 -1
  78. package/dist/improvedigitalBidAdapter.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/iqzoneBidAdapter.js +1 -1
  81. package/dist/ixBidAdapter.js +1 -1
  82. package/dist/jixieBidAdapter.js +1 -1
  83. package/dist/justpremiumBidAdapter.js +1 -1
  84. package/dist/kargoBidAdapter.js +1 -1
  85. package/dist/kimberliteBidAdapter.js +1 -1
  86. package/dist/kiviadsBidAdapter.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/krushmediaBidAdapter.js +1 -1
  89. package/dist/kueezBidAdapter.js +1 -1
  90. package/dist/kueezRtbBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/liveIntentIdSystem.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/loyalBidAdapter.js +1 -1
  97. package/dist/luceadBidAdapter.js +1 -1
  98. package/dist/lunamediahbBidAdapter.js +1 -1
  99. package/dist/magniteAnalyticsAdapter.js +1 -1
  100. package/dist/malltvAnalyticsAdapter.js +1 -1
  101. package/dist/marsmediaBidAdapter.js +1 -1
  102. package/dist/mathildeadsBidAdapter.js +1 -1
  103. package/dist/mediafuseBidAdapter.js +1 -1
  104. package/dist/mediasquareBidAdapter.js +1 -1
  105. package/dist/mgidBidAdapter.js +1 -1
  106. package/dist/mgidXBidAdapter.js +1 -1
  107. package/dist/minutemediaBidAdapter.js +1 -1
  108. package/dist/missenaBidAdapter.js +1 -1
  109. package/dist/mobfoxpbBidAdapter.js +1 -1
  110. package/dist/mobianRtdProvider.js +1 -0
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/nobidAnalyticsAdapter.js +1 -1
  113. package/dist/nobidBidAdapter.js +1 -1
  114. package/dist/not-for-prod/prebid.js +190 -186
  115. package/dist/oguryBidAdapter.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/openwebBidAdapter.js +1 -1
  119. package/dist/openxBidAdapter.js +1 -1
  120. package/dist/optidigitalBidAdapter.js +1 -1
  121. package/dist/ortbConverter.js +1 -1
  122. package/dist/outbrainBidAdapter.js +1 -1
  123. package/dist/ozoneBidAdapter.js +1 -1
  124. package/dist/paapi.js +1 -1
  125. package/dist/pgamsspBidAdapter.js +1 -1
  126. package/dist/pixfutureBidAdapter.js +1 -1
  127. package/dist/playdigoBidAdapter.js +1 -1
  128. package/dist/prebidServerBidAdapter.js +1 -1
  129. package/dist/pubCircleBidAdapter.js +1 -1
  130. package/dist/publinkIdSystem.js +1 -1
  131. package/dist/publirBidAdapter.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  135. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/qtBidAdapter.js +1 -1
  138. package/dist/quantcastBidAdapter.js +1 -1
  139. package/dist/raynRtdProvider.js +1 -1
  140. package/dist/readpeakBidAdapter.js +1 -1
  141. package/dist/relaidoBidAdapter.js +1 -1
  142. package/dist/retailspotBidAdapter.js +1 -1
  143. package/dist/rhythmoneBidAdapter.js +1 -1
  144. package/dist/richaudienceBidAdapter.js +1 -0
  145. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  146. package/dist/riseBidAdapter.js +1 -1
  147. package/dist/rubiconBidAdapter.js +1 -1
  148. package/dist/seedingAllianceBidAdapter.js +1 -1
  149. package/dist/seedtagBidAdapter.js +1 -1
  150. package/dist/setupadBidAdapter.js +1 -1
  151. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  152. package/dist/sharethroughBidAdapter.js +1 -1
  153. package/dist/shinezBidAdapter.js +1 -1
  154. package/dist/shinezRtbBidAdapter.js +1 -1
  155. package/dist/smaatoBidAdapter.js +1 -1
  156. package/dist/smartadserverBidAdapter.js +1 -1
  157. package/dist/smartxBidAdapter.js +1 -1
  158. package/dist/smartytechBidAdapter.js +1 -1
  159. package/dist/smilewantedBidAdapter.js +1 -1
  160. package/dist/sonobiBidAdapter.js +1 -1
  161. package/dist/sovrnBidAdapter.js +1 -1
  162. package/dist/sspBCBidAdapter.js +1 -1
  163. package/dist/stnBidAdapter.js +1 -1
  164. package/dist/stvBidAdapter.js +1 -1
  165. package/dist/sublimeBidAdapter.js +1 -1
  166. package/dist/taboolaBidAdapter.js +1 -1
  167. package/dist/tagorasBidAdapter.js +1 -1
  168. package/dist/targetVideoBidAdapter.js +1 -1
  169. package/dist/teadsBidAdapter.js +1 -1
  170. package/dist/teqblazeUtils.js +1 -0
  171. package/dist/themoneytizerBidAdapter.js +1 -1
  172. package/dist/topicsFpdModule.js +1 -1
  173. package/dist/trionBidAdapter.js +1 -1
  174. package/dist/tripleliftBidAdapter.js +1 -1
  175. package/dist/ttdBidAdapter.js +1 -1
  176. package/dist/twistDigitalBidAdapter.js +1 -1
  177. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  178. package/dist/uid2IdSystem.js +1 -1
  179. package/dist/underdogmediaBidAdapter.js +1 -1
  180. package/dist/undertoneBidAdapter.js +1 -1
  181. package/dist/unrulyBidAdapter.js +1 -1
  182. package/dist/vidazooBidAdapter.js +1 -1
  183. package/dist/videobyteBidAdapter.js +1 -1
  184. package/dist/visiblemeasuresBidAdapter.js +1 -1
  185. package/dist/visxBidAdapter.js +1 -1
  186. package/dist/vuukleBidAdapter.js +1 -1
  187. package/dist/widespaceBidAdapter.js +1 -1
  188. package/dist/winrBidAdapter.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yieldmoBidAdapter.js +1 -1
  191. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  192. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  193. package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
  194. package/libraries/adagioUtils/adagioUtils.js +35 -0
  195. package/libraries/appnexusUtils/anUtils.js +1 -0
  196. package/libraries/autoplayDetection/autoplay.js +8 -1
  197. package/libraries/ortbConverter/converter.js +1 -1
  198. package/libraries/teqblazeUtils/bidderUtils.js +253 -0
  199. package/modules/.submodules.json +1 -0
  200. package/modules/acuityadsBidAdapter.js +5 -203
  201. package/modules/adagioBidAdapter.js +1 -17
  202. package/modules/adagioRtdProvider.js +41 -51
  203. package/modules/adagioRtdProvider.md +1 -0
  204. package/modules/admanBidAdapter.js +31 -188
  205. package/modules/adprimeBidAdapter.js +28 -165
  206. package/modules/axisBidAdapter.js +33 -165
  207. package/modules/beyondmediaBidAdapter.js +5 -189
  208. package/modules/bliinkBidAdapter.js +3 -31
  209. package/modules/boldwinBidAdapter.js +21 -159
  210. package/modules/ceeIdSystem.js +1 -1
  211. package/modules/compassBidAdapter.js +5 -198
  212. package/modules/contentexchangeBidAdapter.js +5 -200
  213. package/modules/conversantBidAdapter.js +1 -0
  214. package/modules/dailymotionBidAdapter.js +1 -1
  215. package/modules/e_volutionBidAdapter.js +4 -186
  216. package/modules/emtvBidAdapter.js +5 -198
  217. package/modules/globalsunBidAdapter.js +5 -199
  218. package/modules/id5IdSystem.js +31 -2
  219. package/modules/id5IdSystem.md +67 -2
  220. package/modules/iqzoneBidAdapter.js +5 -224
  221. package/modules/kiviadsBidAdapter.js +5 -199
  222. package/modules/krushmediaBidAdapter.js +25 -143
  223. package/modules/loyalBidAdapter.js +4 -178
  224. package/modules/lunamediahbBidAdapter.js +5 -118
  225. package/modules/mathildeadsBidAdapter.js +5 -198
  226. package/modules/mgidXBidAdapter.js +14 -209
  227. package/modules/mobfoxpbBidAdapter.js +4 -135
  228. package/modules/mobianRtdProvider.js +52 -0
  229. package/modules/mobianRtdProvider.md +11 -0
  230. package/modules/nobidAnalyticsAdapter.js +2 -3
  231. package/modules/novatiqIdSystem.md +2 -3
  232. package/modules/ozoneBidAdapter.js +117 -58
  233. package/modules/paapi.js +2 -1
  234. package/modules/pgamsspBidAdapter.js +5 -240
  235. package/modules/playdigoBidAdapter.js +4 -186
  236. package/modules/prebidServerBidAdapter/index.js +9 -2
  237. package/modules/pubCircleBidAdapter.js +5 -218
  238. package/modules/pubmaticAnalyticsAdapter.js +21 -8
  239. package/modules/pubxaiAnalyticsAdapter.js +1 -5
  240. package/modules/qtBidAdapter.js +5 -224
  241. package/modules/raynRtdProvider.js +36 -3
  242. package/modules/richaudienceBidAdapter.js +375 -0
  243. package/modules/richaudienceBidAdapter.md +1 -1
  244. package/modules/seedtagBidAdapter.js +1 -0
  245. package/modules/setupadBidAdapter.js +76 -153
  246. package/modules/setupadBidAdapter.md +1 -1
  247. package/modules/smaatoBidAdapter.js +17 -6
  248. package/modules/smartytechBidAdapter.js +7 -2
  249. package/modules/topicsFpdModule.js +1 -1
  250. package/modules/uid2IdSystem.js +0 -1
  251. package/modules/uid2IdSystem_shared.js +0 -1
  252. package/modules/visiblemeasuresBidAdapter.js +5 -199
  253. package/modules/zeta_global_sspAnalyticsAdapter.js +8 -4
  254. package/package.json +1 -1
  255. package/src/auction.js +5 -63
  256. package/src/utils/focusTimeout.js +41 -0
  257. package/src/utils/ttlCollection.js +2 -1
  258. package/src/utils.js +42 -0
  259. package/src/videoCache.js +72 -0
  260. package/test/mocks/videoCacheStub.js +1 -1
  261. package/test/spec/auctionmanager_spec.js +16 -1
  262. package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
  263. package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
  264. package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
  265. package/test/spec/modules/admanBidAdapter_spec.js +370 -247
  266. package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
  267. package/test/spec/modules/axisBidAdapter_spec.js +78 -14
  268. package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
  269. package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
  270. package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
  271. package/test/spec/modules/compassBidAdapter_spec.js +130 -16
  272. package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
  273. package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
  274. package/test/spec/modules/dailymotionBidAdapter_spec.js +3 -3
  275. package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
  276. package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
  277. package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
  278. package/test/spec/modules/id5IdSystem_spec.js +79 -3
  279. package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
  280. package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
  281. package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
  282. package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
  283. package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
  284. package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
  285. package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
  286. package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
  287. package/test/spec/modules/mobianRtdProvider_spec.js +107 -0
  288. package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
  289. package/test/spec/modules/paapi_spec.js +5 -5
  290. package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
  291. package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
  292. package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
  293. package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
  294. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
  295. package/test/spec/modules/qtBidAdapter_spec.js +15 -3
  296. package/test/spec/modules/raynRtdProvider_spec.js +25 -0
  297. package/test/spec/modules/richaudienceBidAdapter_spec.js +1304 -0
  298. package/test/spec/modules/seedtagBidAdapter_spec.js +2 -0
  299. package/test/spec/modules/setupadBidAdapter_spec.js +139 -97
  300. package/test/spec/modules/smaatoBidAdapter_spec.js +27 -0
  301. package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
  302. package/test/spec/modules/topicsFpdModule_spec.js +43 -59
  303. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
  304. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +4 -0
  305. package/test/spec/ortbConverter/converter_spec.js +7 -3
  306. package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
  307. package/test/spec/videoCache_spec.js +56 -53
@@ -1,343 +1,466 @@
1
- import {expect} from 'chai';
2
- import {spec} from '../../../modules/admanBidAdapter.js';
3
- import {deepClone} from '../../../src/utils'
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/admanBidAdapter.js';
3
+ import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
4
5
 
5
- describe('AdmanAdapter', function () {
6
- let bidBanner = {
7
- bidId: '2dd581a2b6281d',
8
- bidder: 'adman',
9
- bidderRequestId: '145e1d6a7837c9',
10
- params: {
11
- placementId: 0
12
- },
13
- placementCode: 'placementid_0',
14
- auctionId: '74f78609-a92d-4cf1-869f-1b244bbfb5d2',
15
- mediaTypes: {
16
- banner: {
17
- sizes: [[300, 250]]
6
+ const bidder = 'adman';
7
+
8
+ describe('AdmanBidAdapter', function () {
9
+ const userIdAsEids = [{
10
+ source: 'test.org',
11
+ uids: [{
12
+ id: '01**********',
13
+ atype: 1,
14
+ ext: {
15
+ third: '01***********'
18
16
  }
17
+ }]
18
+ }];
19
+ const bids = [
20
+ {
21
+ bidId: getUniqueIdentifierStr(),
22
+ bidder: bidder,
23
+ mediaTypes: {
24
+ [BANNER]: {
25
+ sizes: [[300, 250]]
26
+ }
27
+ },
28
+ params: {
29
+ placementId: 'testBanner'
30
+ },
31
+ userIdAsEids
19
32
  },
20
- transactionId: '3bb2f6da-87a6-4029-aeb0-bfe951372e62',
21
- schain: {
22
- ver: '1.0',
23
- complete: 1,
24
- nodes: [
25
- {
26
- asi: 'example.com',
27
- sid: '0',
28
- hp: 1,
29
- rid: 'bidrequestid',
30
- // name: 'alladsallthetime',
31
- domain: 'example.com'
33
+ {
34
+ bidId: getUniqueIdentifierStr(),
35
+ bidder: bidder,
36
+ mediaTypes: {
37
+ [VIDEO]: {
38
+ playerSize: [[300, 300]],
39
+ minduration: 5,
40
+ maxduration: 60
32
41
  }
33
- ]
42
+ },
43
+ params: {
44
+ placementId: 'testVideo'
45
+ },
46
+ userIdAsEids
47
+ },
48
+ {
49
+ bidId: getUniqueIdentifierStr(),
50
+ bidder: bidder,
51
+ mediaTypes: {
52
+ [NATIVE]: {
53
+ native: {
54
+ title: {
55
+ required: true
56
+ },
57
+ body: {
58
+ required: true
59
+ },
60
+ icon: {
61
+ required: true,
62
+ size: [64, 64]
63
+ }
64
+ }
65
+ }
66
+ },
67
+ params: {
68
+ placementId: 'testNative'
69
+ },
70
+ userIdAsEids
34
71
  }
35
- };
72
+ ];
36
73
 
37
- let bidVideo = deepClone({
38
- ...bidBanner,
39
- params: {
40
- placementId: 0,
41
- traffic: 'video'
42
- },
74
+ const invalidBid = {
75
+ bidId: getUniqueIdentifierStr(),
76
+ bidder: bidder,
43
77
  mediaTypes: {
44
- video: {
45
- playerSize: [300, 250]
78
+ [BANNER]: {
79
+ sizes: [[300, 250]]
46
80
  }
81
+ },
82
+ params: {
83
+
47
84
  }
48
- });
85
+ }
49
86
 
50
- let bidderRequest = {
51
- bidderCode: 'adman',
52
- auctionId: 'fffffff-ffff-ffff-ffff-ffffffffffff',
53
- bidderRequestId: 'ffffffffffffff',
54
- start: 1472239426002,
55
- auctionStart: 1472239426000,
56
- timeout: 5000,
57
- uspConsent: '1YN-',
58
- gdprConsent: 'gdprConsent',
87
+ const bidderRequest = {
88
+ uspConsent: '1---',
89
+ gdprConsent: {
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
92
+ },
59
93
  refererInfo: {
60
- referer: 'http://www.example.com',
61
- reachedTop: true,
94
+ referer: 'https://test.com',
95
+ page: 'https://test.com'
62
96
  },
63
- bids: [bidBanner, bidVideo]
64
- }
97
+ ortb2: {
98
+ device: {
99
+ w: 1512,
100
+ h: 982,
101
+ language: 'en-UK'
102
+ }
103
+ },
104
+ timeout: 500
105
+ };
65
106
 
66
107
  describe('isBidRequestValid', function () {
67
- it('Should return true when placementId can be cast to a number', function () {
68
- expect(spec.isBidRequestValid(bidBanner)).to.be.true;
108
+ it('Should return true if there are bidId, params and key parameters present', function () {
109
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
69
110
  });
70
- it('Should return false when placementId is not a number', function () {
71
- bidBanner.params.placementId = 'aaa';
72
- expect(spec.isBidRequestValid(bidBanner)).to.be.false;
73
- bidBanner.params.placementId = 0;
111
+ it('Should return false if at least one of parameters is not present', function () {
112
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
74
113
  });
75
114
  });
76
115
 
77
116
  describe('buildRequests', function () {
78
- let serverRequest = spec.buildRequests([bidBanner], bidderRequest);
117
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
118
+
79
119
  it('Creates a ServerRequest object with method, URL and data', function () {
80
120
  expect(serverRequest).to.exist;
81
121
  expect(serverRequest.method).to.exist;
82
122
  expect(serverRequest.url).to.exist;
83
123
  expect(serverRequest.data).to.exist;
84
124
  });
125
+
85
126
  it('Returns POST method', function () {
86
127
  expect(serverRequest.method).to.equal('POST');
87
128
  });
129
+
88
130
  it('Returns valid URL', function () {
89
131
  expect(serverRequest.url).to.equal('https://pub.admanmedia.com/?c=o&m=multi');
90
132
  });
91
- it('Should contain ccpa', function() {
92
- expect(serverRequest.data.ccpa).to.be.an('string')
93
- })
94
133
 
95
- it('Returns valid BANNER data if array of bids is valid', function () {
96
- serverRequest = spec.buildRequests([bidBanner], bidderRequest);
134
+ it('Returns general data valid', function () {
97
135
  let data = serverRequest.data;
98
136
  expect(data).to.be.an('object');
99
- expect(data).to.have.all.keys('deviceWidth', 'deviceHeight', 'language', 'secure', 'host', 'page', 'placements', 'ccpa', 'gdpr');
137
+ expect(data).to.have.all.keys('deviceWidth',
138
+ 'deviceHeight',
139
+ 'language',
140
+ 'secure',
141
+ 'host',
142
+ 'page',
143
+ 'placements',
144
+ 'coppa',
145
+ 'ccpa',
146
+ 'gdpr',
147
+ 'tmax'
148
+ );
100
149
  expect(data.deviceWidth).to.be.a('number');
101
150
  expect(data.deviceHeight).to.be.a('number');
102
151
  expect(data.language).to.be.a('string');
103
152
  expect(data.secure).to.be.within(0, 1);
104
153
  expect(data.host).to.be.a('string');
105
154
  expect(data.page).to.be.a('string');
106
- let placements = data['placements'];
107
- for (let i = 0; i < placements.length; i++) {
108
- let placement = placements[i];
109
- expect(placement).to.have.all.keys('placementId', 'eids', 'bidId', 'traffic', 'sizes', 'schain', 'bidFloor', 'ext');
110
- expect(placement.schain).to.be.an('object')
111
- expect(placement.ext).to.be.an('object')
112
- expect(placement.ext).to.have.key('tid')
113
- expect(placement.ext.tid).to.equal(bidBanner.transactionId);
114
- expect(placement.placementId).to.be.a('number');
155
+ expect(data.coppa).to.be.a('number');
156
+ expect(data.gdpr).to.be.a('object');
157
+ expect(data.ccpa).to.be.a('string');
158
+ expect(data.tmax).to.be.a('number');
159
+ expect(data.placements).to.have.lengthOf(3);
160
+ });
161
+
162
+ it('Returns valid placements', function () {
163
+ const { placements } = serverRequest.data;
164
+
165
+ for (let i = 0, len = placements.length; i < len; i++) {
166
+ const placement = placements[i];
167
+ expect(placement.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
168
+ expect(placement.traffic).to.be.oneOf([BANNER, VIDEO, NATIVE]);
115
169
  expect(placement.bidId).to.be.a('string');
116
- expect(placement.traffic).to.be.a('string');
117
- expect(placement.sizes).to.be.an('array');
118
- expect(placement.bidFloor).to.be.an('number');
170
+ expect(placement.schain).to.be.an('object');
171
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
172
+ expect(placement.type).to.exist.and.to.equal('publisher');
173
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
174
+
175
+ if (placement.traffic === BANNER) {
176
+ expect(placement.sizes).to.be.an('array');
177
+ }
178
+ switch (placement.traffic) {
179
+ case BANNER:
180
+ expect(placement.sizes).to.be.an('array');
181
+ break;
182
+ case VIDEO:
183
+ expect(placement.wPlayer).to.be.an('number');
184
+ expect(placement.hPlayer).to.be.an('number');
185
+ expect(placement.minduration).to.be.an('number');
186
+ expect(placement.maxduration).to.be.an('number');
187
+ break;
188
+ case NATIVE:
189
+ expect(placement.native).to.be.an('object');
190
+ break;
191
+ }
119
192
  }
120
193
  });
121
194
 
122
- it('Returns valid VIDEO data if array of bids is valid', function () {
123
- serverRequest = spec.buildRequests([bidVideo], bidderRequest);
195
+ it('Returns data with gdprConsent and without uspConsent', function () {
196
+ delete bidderRequest.uspConsent;
197
+ serverRequest = spec.buildRequests(bids, bidderRequest);
124
198
  let data = serverRequest.data;
125
- expect(data).to.be.an('object');
126
- expect(data).to.have.all.keys('deviceWidth', 'deviceHeight', 'language', 'secure', 'host', 'page', 'placements', 'ccpa', 'gdpr');
127
- expect(data.deviceWidth).to.be.a('number');
128
- expect(data.deviceHeight).to.be.a('number');
129
- expect(data.language).to.be.a('string');
130
- expect(data.secure).to.be.within(0, 1);
131
- expect(data.host).to.be.a('string');
132
- expect(data.page).to.be.a('string');
133
- let placements = data['placements'];
134
- for (let i = 0; i < placements.length; i++) {
135
- let placement = placements[i];
136
- expect(placement).to.have.all.keys('placementId', 'eids', 'bidId', 'traffic', 'schain', 'bidFloor',
137
- 'playerSize', 'minduration', 'maxduration', 'mimes', 'protocols', 'startdelay', 'placement', 'plcmt', 'skip',
138
- 'skipafter', 'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity', 'ext');
139
- expect(placement.ext).to.be.an('object')
140
- expect(placement.ext).to.have.key('tid')
141
- expect(placement.ext.tid).to.equal(bidBanner.transactionId);
142
- expect(placement.schain).to.be.an('object')
143
- expect(placement.placementId).to.be.a('number');
144
- expect(placement.bidId).to.be.a('string');
145
- expect(placement.traffic).to.be.a('string');
146
- expect(placement.bidFloor).to.be.an('number');
147
- }
199
+ expect(data.gdpr).to.exist;
200
+ expect(data.gdpr).to.be.a('object');
201
+ expect(data.gdpr).to.have.property('consentString');
202
+ expect(data.gdpr).to.not.have.property('vendorData');
203
+ expect(data.gdpr.consentString).to.equal(bidderRequest.gdprConsent.consentString);
204
+ expect(data.ccpa).to.not.exist;
205
+ delete bidderRequest.gdprConsent;
148
206
  });
149
207
 
150
- it('Returns empty data if no valid requests are passed', function () {
151
- serverRequest = spec.buildRequests([]);
208
+ it('Returns data with uspConsent and without gdprConsent', function () {
209
+ bidderRequest.uspConsent = '1---';
210
+ delete bidderRequest.gdprConsent;
211
+ serverRequest = spec.buildRequests(bids, bidderRequest);
152
212
  let data = serverRequest.data;
153
- expect(data.placements).to.be.an('array').that.is.empty;
213
+ expect(data.ccpa).to.exist;
214
+ expect(data.ccpa).to.be.a('string');
215
+ expect(data.ccpa).to.equal(bidderRequest.uspConsent);
216
+ expect(data.gdpr).to.not.exist;
154
217
  });
155
218
  });
156
219
 
157
- describe('buildRequests with user ids', function () {
158
- bidBanner.userId = {}
159
- bidBanner.userId.uid2 = { id: 'uid2id123' };
160
- let serverRequest = spec.buildRequests([bidBanner], bidderRequest);
161
- it('Returns valid data if array of bids is valid', function () {
220
+ describe('gpp consent', function () {
221
+ it('bidderRequest.gppConsent', () => {
222
+ bidderRequest.gppConsent = {
223
+ gppString: 'abc123',
224
+ applicableSections: [8]
225
+ };
226
+
227
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
162
228
  let data = serverRequest.data;
163
- let placements = data['placements'];
164
229
  expect(data).to.be.an('object');
165
- for (let i = 0; i < placements.length; i++) {
166
- let placement = placements[i];
167
- expect(placement).to.have.property('eids')
168
- expect(placement.eids).to.be.an('array')
169
- expect(placement.eids.length).to.be.equal(1)
170
- for (let index in placement.eids) {
171
- let v = placement.eids[index];
172
- expect(v).to.have.all.keys('source', 'uids')
173
- expect(v.source).to.be.oneOf(['uidapi.com'])
174
- expect(v.uids).to.be.an('array');
175
- expect(v.uids.length).to.be.equal(1)
176
- expect(v.uids[0]).to.have.property('id')
177
- }
178
- }
179
- });
230
+ expect(data).to.have.property('gpp');
231
+ expect(data).to.have.property('gpp_sid');
232
+
233
+ delete bidderRequest.gppConsent;
234
+ })
235
+
236
+ it('bidderRequest.ortb2.regs.gpp', () => {
237
+ bidderRequest.ortb2 = bidderRequest.ortb2 || {};
238
+ bidderRequest.ortb2.regs = bidderRequest.ortb2.regs || {};
239
+ bidderRequest.ortb2.regs.gpp = 'abc123';
240
+ bidderRequest.ortb2.regs.gpp_sid = [8];
241
+
242
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
243
+ let data = serverRequest.data;
244
+ expect(data).to.be.an('object');
245
+ expect(data).to.have.property('gpp');
246
+ expect(data).to.have.property('gpp_sid');
247
+
248
+ bidderRequest.ortb2;
249
+ })
180
250
  });
181
251
 
182
252
  describe('interpretResponse', function () {
183
- it('(BANNER) Returns an array of valid server responses if response object is valid', function () {
184
- const resBannerObject = {
185
- body: [ {
186
- requestId: '123',
253
+ it('Should interpret banner response', function () {
254
+ const banner = {
255
+ body: [{
187
256
  mediaType: 'banner',
188
- cpm: 0.3,
189
- width: 320,
190
- height: 50,
191
- ad: '<h1>Hello ad</h1>',
192
- ttl: 1000,
193
- creativeId: '123asd',
257
+ width: 300,
258
+ height: 250,
259
+ cpm: 0.4,
260
+ ad: 'Test',
261
+ requestId: '23fhj33i987f',
262
+ ttl: 120,
263
+ creativeId: '2',
194
264
  netRevenue: true,
195
265
  currency: 'USD',
196
- adomain: ['example.com'],
266
+ dealId: '1',
197
267
  meta: {
198
268
  advertiserDomains: ['google.com'],
199
269
  advertiserId: 1234
200
270
  }
201
- } ]
271
+ }]
202
272
  };
203
-
204
- const serverResponses = spec.interpretResponse(resBannerObject);
205
-
206
- expect(serverResponses).to.be.an('array').that.is.not.empty;
207
- for (let i = 0; i < serverResponses.length; i++) {
208
- let dataItem = serverResponses[i];
209
- expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
210
- 'netRevenue', 'currency', 'mediaType', 'meta', 'adomain');
211
- expect(dataItem.requestId).to.be.a('string');
212
- expect(dataItem.cpm).to.be.a('number');
213
- expect(dataItem.width).to.be.a('number');
214
- expect(dataItem.height).to.be.a('number');
215
- expect(dataItem.ad).to.be.a('string');
216
- expect(dataItem.ttl).to.be.a('number');
217
- expect(dataItem.creativeId).to.be.a('string');
218
- expect(dataItem.netRevenue).to.be.a('boolean');
219
- expect(dataItem.currency).to.be.a('string');
220
- expect(dataItem.mediaType).to.be.a('string');
221
- expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
222
- }
273
+ let bannerResponses = spec.interpretResponse(banner);
274
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
275
+ let dataItem = bannerResponses[0];
276
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
277
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
278
+ expect(dataItem.requestId).to.equal(banner.body[0].requestId);
279
+ expect(dataItem.cpm).to.equal(banner.body[0].cpm);
280
+ expect(dataItem.width).to.equal(banner.body[0].width);
281
+ expect(dataItem.height).to.equal(banner.body[0].height);
282
+ expect(dataItem.ad).to.equal(banner.body[0].ad);
283
+ expect(dataItem.ttl).to.equal(banner.body[0].ttl);
284
+ expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
285
+ expect(dataItem.netRevenue).to.be.true;
286
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
287
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
223
288
  });
224
-
225
- it('(VIDEO) Returns an array of valid server responses if response object is valid', function () {
226
- const resVideoObject = {
227
- body: [ {
228
- requestId: '123',
289
+ it('Should interpret video response', function () {
290
+ const video = {
291
+ body: [{
292
+ vastUrl: 'test.com',
229
293
  mediaType: 'video',
230
- cpm: 0.3,
231
- width: 320,
232
- height: 50,
233
- vastUrl: 'https://',
234
- ttl: 1000,
235
- creativeId: '123asd',
294
+ cpm: 0.5,
295
+ requestId: '23fhj33i987f',
296
+ ttl: 120,
297
+ creativeId: '2',
236
298
  netRevenue: true,
237
299
  currency: 'USD',
238
- adomain: ['example.com'],
300
+ dealId: '1',
239
301
  meta: {
240
302
  advertiserDomains: ['google.com'],
241
303
  advertiserId: 1234
242
304
  }
243
- } ]
305
+ }]
244
306
  };
307
+ let videoResponses = spec.interpretResponse(video);
308
+ expect(videoResponses).to.be.an('array').that.is.not.empty;
245
309
 
246
- const serverResponses = spec.interpretResponse(resVideoObject);
247
-
248
- expect(serverResponses).to.be.an('array').that.is.not.empty;
249
- for (let i = 0; i < serverResponses.length; i++) {
250
- let dataItem = serverResponses[i];
251
- expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'vastUrl', 'ttl', 'creativeId',
252
- 'netRevenue', 'currency', 'mediaType', 'meta', 'adomain');
253
- expect(dataItem.requestId).to.be.a('string');
254
- expect(dataItem.cpm).to.be.a('number');
255
- expect(dataItem.width).to.be.a('number');
256
- expect(dataItem.height).to.be.a('number');
257
- expect(dataItem.vastUrl).to.be.a('string');
258
- expect(dataItem.ttl).to.be.a('number');
259
- expect(dataItem.creativeId).to.be.a('string');
260
- expect(dataItem.netRevenue).to.be.a('boolean');
261
- expect(dataItem.currency).to.be.a('string');
262
- expect(dataItem.mediaType).to.be.a('string');
263
- expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
264
- }
310
+ let dataItem = videoResponses[0];
311
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
312
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
313
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
314
+ expect(dataItem.cpm).to.equal(0.5);
315
+ expect(dataItem.vastUrl).to.equal('test.com');
316
+ expect(dataItem.ttl).to.equal(120);
317
+ expect(dataItem.creativeId).to.equal('2');
318
+ expect(dataItem.netRevenue).to.be.true;
319
+ expect(dataItem.currency).to.equal('USD');
320
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
265
321
  });
266
-
267
- it('(NATIVE) Returns an array of valid server responses if response object is valid', function () {
268
- const resNativeObject = {
269
- body: [ {
270
- requestId: '123',
322
+ it('Should interpret native response', function () {
323
+ const native = {
324
+ body: [{
271
325
  mediaType: 'native',
272
- cpm: 0.3,
273
- width: 320,
274
- height: 50,
275
326
  native: {
276
- title: 'title',
277
- image: 'image',
278
- impressionTrackers: [ 'https://' ]
327
+ clickUrl: 'test.com',
328
+ title: 'Test',
329
+ image: 'test.com',
330
+ impressionTrackers: ['test.com'],
279
331
  },
280
- ttl: 1000,
281
- creativeId: '123asd',
332
+ ttl: 120,
333
+ cpm: 0.4,
334
+ requestId: '23fhj33i987f',
335
+ creativeId: '2',
282
336
  netRevenue: true,
283
337
  currency: 'USD',
284
- adomain: ['example.com'],
285
338
  meta: {
286
339
  advertiserDomains: ['google.com'],
287
340
  advertiserId: 1234
288
341
  }
289
- } ]
342
+ }]
290
343
  };
344
+ let nativeResponses = spec.interpretResponse(native);
345
+ expect(nativeResponses).to.be.an('array').that.is.not.empty;
291
346
 
292
- const serverResponses = spec.interpretResponse(resNativeObject);
293
-
294
- expect(serverResponses).to.be.an('array').that.is.not.empty;
295
- for (let i = 0; i < serverResponses.length; i++) {
296
- let dataItem = serverResponses[i];
297
- expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'native', 'ttl', 'creativeId',
298
- 'netRevenue', 'currency', 'mediaType', 'meta', 'adomain');
299
- expect(dataItem.requestId).to.be.a('string');
300
- expect(dataItem.cpm).to.be.a('number');
301
- expect(dataItem.width).to.be.a('number');
302
- expect(dataItem.height).to.be.a('number');
303
- expect(dataItem.native).to.be.an('object');
304
- expect(dataItem.ttl).to.be.a('number');
305
- expect(dataItem.creativeId).to.be.a('string');
306
- expect(dataItem.netRevenue).to.be.a('boolean');
307
- expect(dataItem.currency).to.be.a('string');
308
- expect(dataItem.mediaType).to.be.a('string');
309
- expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
310
- }
347
+ let dataItem = nativeResponses[0];
348
+ expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
349
+ expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
350
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
351
+ expect(dataItem.cpm).to.equal(0.4);
352
+ expect(dataItem.native.clickUrl).to.equal('test.com');
353
+ expect(dataItem.native.title).to.equal('Test');
354
+ expect(dataItem.native.image).to.equal('test.com');
355
+ expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
356
+ expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
357
+ expect(dataItem.ttl).to.equal(120);
358
+ expect(dataItem.creativeId).to.equal('2');
359
+ expect(dataItem.netRevenue).to.be.true;
360
+ expect(dataItem.currency).to.equal('USD');
361
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
311
362
  });
312
-
313
- it('Invalid mediaType in response', function () {
314
- const resBadObject = {
315
- body: [ {
316
- mediaType: 'other',
317
- requestId: '123',
318
- cpm: 0.3,
319
- ttl: 1000,
320
- creativeId: '123asd',
321
- currency: 'USD'
322
- } ]
363
+ it('Should return an empty array if invalid banner response is passed', function () {
364
+ const invBanner = {
365
+ body: [{
366
+ width: 300,
367
+ cpm: 0.4,
368
+ ad: 'Test',
369
+ requestId: '23fhj33i987f',
370
+ ttl: 120,
371
+ creativeId: '2',
372
+ netRevenue: true,
373
+ currency: 'USD',
374
+ dealId: '1'
375
+ }]
323
376
  };
324
377
 
325
- const serverResponses = spec.interpretResponse(resBadObject);
326
-
378
+ let serverResponses = spec.interpretResponse(invBanner);
379
+ expect(serverResponses).to.be.an('array').that.is.empty;
380
+ });
381
+ it('Should return an empty array if invalid video response is passed', function () {
382
+ const invVideo = {
383
+ body: [{
384
+ mediaType: 'video',
385
+ cpm: 0.5,
386
+ requestId: '23fhj33i987f',
387
+ ttl: 120,
388
+ creativeId: '2',
389
+ netRevenue: true,
390
+ currency: 'USD',
391
+ dealId: '1'
392
+ }]
393
+ };
394
+ let serverResponses = spec.interpretResponse(invVideo);
395
+ expect(serverResponses).to.be.an('array').that.is.empty;
396
+ });
397
+ it('Should return an empty array if invalid native response is passed', function () {
398
+ const invNative = {
399
+ body: [{
400
+ mediaType: 'native',
401
+ clickUrl: 'test.com',
402
+ title: 'Test',
403
+ impressionTrackers: ['test.com'],
404
+ ttl: 120,
405
+ requestId: '23fhj33i987f',
406
+ creativeId: '2',
407
+ netRevenue: true,
408
+ currency: 'USD',
409
+ }]
410
+ };
411
+ let serverResponses = spec.interpretResponse(invNative);
412
+ expect(serverResponses).to.be.an('array').that.is.empty;
413
+ });
414
+ it('Should return an empty array if invalid response is passed', function () {
415
+ const invalid = {
416
+ body: [{
417
+ ttl: 120,
418
+ creativeId: '2',
419
+ netRevenue: true,
420
+ currency: 'USD',
421
+ dealId: '1'
422
+ }]
423
+ };
424
+ let serverResponses = spec.interpretResponse(invalid);
327
425
  expect(serverResponses).to.be.an('array').that.is.empty;
328
426
  });
329
427
  });
330
428
 
331
- describe('getUserSyncs', function () {
332
- const gdprConsent = { consentString: 'consentString', gdprApplies: 1 };
333
- const consentString = { consentString: 'consentString' }
334
- let userSync = spec.getUserSyncs({}, {}, gdprConsent, consentString);
335
- it('Returns valid URL and type', function () {
336
- expect(userSync).to.be.an('array').with.lengthOf(1);
337
- expect(userSync[0].type).to.exist;
338
- expect(userSync[0].url).to.exist;
339
- expect(userSync[0].type).to.be.equal('image');
340
- expect(userSync[0].url).to.be.equal('https://sync.admanmedia.com/image?pbjs=1&gdpr=0&gdpr_consent=consentString&ccpa_consent=consentString&coppa=0');
429
+ describe('getUserSyncs', function() {
430
+ it('Should return array of objects with proper sync config , include GDPR', function() {
431
+ const syncData = spec.getUserSyncs({}, {}, {
432
+ consentString: 'ALL',
433
+ gdprApplies: true,
434
+ }, {});
435
+ expect(syncData).to.be.an('array').which.is.not.empty;
436
+ expect(syncData[0]).to.be.an('object')
437
+ expect(syncData[0].type).to.be.a('string')
438
+ expect(syncData[0].type).to.equal('image')
439
+ expect(syncData[0].url).to.be.a('string')
440
+ expect(syncData[0].url).to.equal('https://sync.admanmedia.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
441
+ });
442
+ it('Should return array of objects with proper sync config , include CCPA', function() {
443
+ const syncData = spec.getUserSyncs({}, {}, {}, {
444
+ consentString: '1---'
445
+ });
446
+ expect(syncData).to.be.an('array').which.is.not.empty;
447
+ expect(syncData[0]).to.be.an('object')
448
+ expect(syncData[0].type).to.be.a('string')
449
+ expect(syncData[0].type).to.equal('image')
450
+ expect(syncData[0].url).to.be.a('string')
451
+ expect(syncData[0].url).to.equal('https://sync.admanmedia.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
452
+ });
453
+ it('Should return array of objects with proper sync config , include GPP', function() {
454
+ const syncData = spec.getUserSyncs({}, {}, {}, {}, {
455
+ gppString: 'abc123',
456
+ applicableSections: [8]
457
+ });
458
+ expect(syncData).to.be.an('array').which.is.not.empty;
459
+ expect(syncData[0]).to.be.an('object')
460
+ expect(syncData[0].type).to.be.a('string')
461
+ expect(syncData[0].type).to.equal('image')
462
+ expect(syncData[0].url).to.be.a('string')
463
+ expect(syncData[0].url).to.equal('https://sync.admanmedia.com/image?pbjs=1&gpp=abc123&gpp_sid=8&coppa=0')
341
464
  });
342
465
  });
343
466
  });