prebid.js 5.14.0 → 5.18.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.
- package/.devcontainer/Dockerfile +11 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.devcontainer/postCreate.sh +6 -0
- package/allowedModules.js +2 -1
- package/integrationExamples/gpt/afpExample.html +242 -0
- package/integrationExamples/gpt/afpGamExample.html +152 -0
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +126 -0
- package/modules/.submodules.json +29 -27
- package/modules/33acrossBidAdapter.js +23 -20
- package/modules/a4gBidAdapter.js +3 -3
- package/modules/ablidaBidAdapter.js +2 -2
- package/modules/adWMGBidAdapter.js +4 -4
- package/modules/adagioAnalyticsAdapter.js +4 -4
- package/modules/adagioBidAdapter.js +85 -82
- package/modules/adbookpspBidAdapter.js +56 -54
- package/modules/adfBidAdapter.js +24 -16
- package/modules/adgenerationBidAdapter.js +42 -18
- package/modules/adhashBidAdapter.js +105 -0
- package/modules/adhashBidAdapter.md +1 -1
- package/modules/adkernelAdnAnalyticsAdapter.js +6 -6
- package/modules/adkernelAdnBidAdapter.js +23 -23
- package/modules/adkernelBidAdapter.js +49 -44
- package/modules/adlooxAdServerVideo.js +26 -26
- package/modules/adlooxAnalyticsAdapter.js +38 -35
- package/modules/adlooxRtdProvider.js +49 -46
- package/modules/admanBidAdapter.js +4 -4
- package/modules/admixerBidAdapter.js +13 -2
- package/modules/admixerIdSystem.js +4 -4
- package/modules/adnowBidAdapter.js +4 -4
- package/modules/adnuntiusBidAdapter.js +6 -5
- package/modules/adoceanBidAdapter.js +10 -10
- package/modules/adpartnerBidAdapter.js +3 -3
- package/modules/adpod.js +45 -42
- package/modules/adprimeBidAdapter.js +4 -4
- package/modules/adqueryBidAdapter.js +204 -0
- package/modules/adqueryBidAdapter.md +32 -0
- package/modules/adrelevantisBidAdapter.js +30 -27
- package/modules/adriverBidAdapter.js +13 -13
- package/modules/adtargetBidAdapter.js +24 -24
- package/modules/adtelligentBidAdapter.js +29 -29
- package/modules/adtrueBidAdapter.js +35 -35
- package/modules/aduptechBidAdapter.js +10 -10
- package/modules/advangelistsBidAdapter.js +14 -14
- package/modules/adxcgAnalyticsAdapter.js +5 -5
- package/modules/adxcgBidAdapter.js +56 -56
- package/modules/adxpremiumAnalyticsAdapter.js +17 -17
- package/modules/adyoulikeBidAdapter.js +11 -11
- package/modules/afpBidAdapter.js +166 -0
- package/modules/afpBidAdapter.md +348 -0
- package/modules/ajaBidAdapter.js +12 -12
- package/modules/akamaiDAPIdSystem.js +9 -9
- package/modules/aniviewBidAdapter.js +2 -2
- package/modules/aolBidAdapter.js +15 -14
- package/modules/apacdexBidAdapter.js +16 -16
- package/modules/appnexusBidAdapter.js +59 -59
- package/modules/apstreamBidAdapter.js +5 -5
- package/modules/asoBidAdapter.js +30 -30
- package/modules/astraoneBidAdapter.js +2 -2
- package/modules/atsAnalyticsAdapter.js +35 -30
- package/modules/audiencerunBidAdapter.js +15 -15
- package/modules/automatadBidAdapter.js +2 -2
- package/modules/axonixBidAdapter.js +7 -7
- package/modules/beachfrontBidAdapter.js +23 -23
- package/modules/beopBidAdapter.js +22 -22
- package/modules/bidViewabilityIO.js +7 -7
- package/modules/bidglassBidAdapter.js +8 -8
- package/modules/bidscubeBidAdapter.js +3 -3
- package/modules/bizzclickBidAdapter.js +10 -10
- package/modules/bliinkBidAdapter.js +58 -32
- package/modules/bliinkBidAdapter.md +29 -6
- package/modules/bluebillywigBidAdapter.js +30 -30
- package/modules/boldwinBidAdapter.js +4 -4
- package/modules/braveBidAdapter.js +5 -5
- package/modules/bridgewellBidAdapter.js +5 -5
- package/modules/brightMountainMediaBidAdapter.js +10 -10
- package/modules/brightcomBidAdapter.js +18 -18
- package/modules/britepoolIdSystem.js +7 -7
- package/modules/browsiRtdProvider.js +8 -8
- package/modules/bucksenseBidAdapter.js +9 -9
- package/modules/buzzoolaBidAdapter.js +4 -4
- package/modules/byDataAnalyticsAdapter.js +12 -12
- package/modules/ccxBidAdapter.js +38 -38
- package/modules/cleanmedianetBidAdapter.js +9 -9
- package/modules/clickforceBidAdapter.js +4 -4
- package/modules/cointrafficBidAdapter.js +4 -4
- package/modules/coinzillaBidAdapter.js +2 -2
- package/modules/colossussspBidAdapter.js +7 -3
- package/modules/concertAnalyticsAdapter.js +3 -3
- package/modules/concertBidAdapter.js +16 -17
- package/modules/connectadBidAdapter.js +13 -13
- package/modules/consentManagement.js +29 -28
- package/modules/consentManagementUsp.js +14 -14
- package/modules/consumableBidAdapter.js +3 -3
- package/modules/contentexchangeBidAdapter.js +5 -5
- package/modules/conversantBidAdapter.js +32 -31
- package/modules/cpmstarBidAdapter.js +8 -9
- package/modules/craftBidAdapter.js +10 -10
- package/modules/criteoBidAdapter.js +16 -16
- package/modules/criteoIdSystem.js +5 -5
- package/modules/currency.js +18 -18
- package/modules/cwireBidAdapter.js +272 -0
- package/modules/cwireBidAdapter.md +43 -0
- package/modules/datablocksBidAdapter.js +12 -12
- package/modules/deepintentBidAdapter.js +13 -13
- package/modules/dgkeywordRtdProvider.js +10 -11
- package/modules/districtmDMXBidAdapter.js +15 -15
- package/modules/dmdIdSystem.js +5 -5
- package/modules/docereeBidAdapter.js +9 -9
- package/modules/dspxBidAdapter.js +5 -5
- package/modules/ebdrBidAdapter.js +9 -9
- package/modules/emx_digitalBidAdapter.js +23 -23
- package/modules/enrichmentFpdModule.js +10 -9
- package/modules/eplanningAnalyticsAdapter.js +2 -2
- package/modules/eplanningBidAdapter.js +10 -10
- package/modules/etargetBidAdapter.js +4 -4
- package/modules/express.js +9 -10
- package/modules/fabrickIdSystem.js +6 -6
- package/modules/feedadBidAdapter.js +5 -5
- package/modules/fintezaAnalyticsAdapter.js +4 -4
- package/modules/flocIdSystem.js +5 -5
- package/modules/fluctBidAdapter.js +6 -5
- package/modules/freewheel-sspBidAdapter.js +6 -6
- package/modules/gamoshiBidAdapter.js +22 -22
- package/modules/gdprEnforcement.js +13 -14
- package/modules/getintentBidAdapter.js +3 -4
- package/modules/glimpseBidAdapter.js +160 -48
- package/modules/glimpseBidAdapter.md +11 -74
- package/modules/gmosspBidAdapter.js +17 -17
- package/modules/gnetBidAdapter.js +5 -5
- package/modules/googleAnalyticsAdapter.js +6 -6
- package/modules/gothamadsBidAdapter.js +9 -9
- package/modules/gptPreAuction.js +7 -7
- package/modules/gridBidAdapter.js +15 -16
- package/modules/gridNMBidAdapter.js +214 -63
- package/modules/growadvertisingBidAdapter.js +7 -8
- package/modules/gumgumBidAdapter.js +19 -13
- package/modules/h12mediaBidAdapter.js +12 -12
- package/modules/haloIdSystem.js +8 -8
- package/modules/hybridBidAdapter.js +7 -7
- package/modules/iasRtdProvider.js +79 -63
- package/modules/id5IdSystem.js +24 -24
- package/modules/idImportLibrary.js +35 -35
- package/modules/idxIdSystem.js +3 -3
- package/modules/impactifyBidAdapter.js +10 -10
- package/modules/improvedigitalBidAdapter.js +36 -36
- package/modules/imuIdSystem.js +6 -6
- package/modules/inmarBidAdapter.js +2 -2
- package/modules/innityBidAdapter.js +3 -3
- package/modules/inskinBidAdapter.js +14 -2
- package/modules/inskinBidAdapter.md +5 -4
- package/modules/instreamTracking.js +5 -5
- package/modules/integr8BidAdapter.js +4 -4
- package/modules/intentIqIdSystem.js +7 -7
- package/modules/interactiveOffersBidAdapter.js +5 -5
- package/modules/invibesBidAdapter.js +53 -19
- package/modules/invisiblyAnalyticsAdapter.js +5 -5
- package/modules/iqmBidAdapter.js +19 -19
- package/modules/iqzoneBidAdapter.js +5 -5
- package/modules/ixBidAdapter.js +73 -73
- package/modules/jixieBidAdapter.js +6 -6
- package/modules/justpremiumBidAdapter.js +5 -1
- package/modules/kargoBidAdapter.js +16 -9
- package/modules/kargoBidAdapter.md +20 -0
- package/modules/kinessoIdSystem.js +8 -8
- package/modules/koblerBidAdapter.js +12 -12
- package/modules/konduitAnalyticsAdapter.js +4 -4
- package/modules/konduitWrapper.js +14 -14
- package/modules/krushmediaBidAdapter.js +4 -4
- package/modules/kubientBidAdapter.js +5 -5
- package/modules/limelightDigitalBidAdapter.js +4 -4
- package/modules/liveIntentIdSystem.js +4 -5
- package/modules/livewrappedAnalyticsAdapter.js +27 -15
- package/modules/livewrappedBidAdapter.js +7 -7
- package/modules/liveyieldAnalyticsAdapter.js +13 -13
- package/modules/lockerdomeBidAdapter.js +2 -2
- package/modules/loganBidAdapter.js +4 -4
- package/modules/lotamePanoramaIdSystem.js +13 -13
- package/modules/lunamediahbBidAdapter.js +2 -2
- package/modules/madvertiseBidAdapter.js +3 -3
- package/modules/marsmediaBidAdapter.js +26 -26
- package/modules/mathildeadsBidAdapter.js +5 -5
- package/modules/mediaforceBidAdapter.js +11 -11
- package/modules/mediakeysBidAdapter.js +444 -53
- package/modules/mediakeysBidAdapter.md +108 -0
- package/modules/medianetAnalyticsAdapter.js +48 -125
- package/modules/medianetBidAdapter.js +38 -33
- package/modules/medianetRtdProvider.js +7 -7
- package/modules/merkleIdSystem.js +19 -19
- package/modules/mgidBidAdapter.js +50 -50
- package/modules/microadBidAdapter.js +3 -3
- package/modules/multibid/index.js +15 -13
- package/modules/mwOpenLinkIdSystem.js +7 -7
- package/modules/mytargetBidAdapter.js +112 -0
- package/modules/nativoBidAdapter.js +46 -31
- package/modules/nativoBidAdapter.md +0 -1
- package/modules/naveggIdSystem.js +3 -3
- package/modules/nextMillenniumBidAdapter.js +6 -6
- package/modules/nextrollBidAdapter.js +375 -0
- package/modules/nobidBidAdapter.js +12 -11
- package/modules/novatiqIdSystem.js +8 -8
- package/modules/oguryBidAdapter.js +22 -6
- package/modules/oneVideoBidAdapter.js +20 -20
- package/modules/onomagicBidAdapter.js +16 -16
- package/modules/ooloAnalyticsAdapter.js +13 -13
- package/modules/openwebBidAdapter.js +26 -26
- package/modules/openxAnalyticsAdapter.js +33 -33
- package/modules/openxBidAdapter.js +29 -29
- package/modules/operaadsBidAdapter.js +53 -53
- package/modules/optimeraRtdProvider.js +9 -9
- package/modules/optoutBidAdapter.js +3 -3
- package/modules/orbidderBidAdapter.js +3 -3
- package/modules/outbrainBidAdapter.js +13 -13
- package/modules/ozoneBidAdapter.js +131 -131
- package/modules/padsquadBidAdapter.js +4 -4
- package/modules/parrableIdSystem.js +17 -17
- package/modules/pixfutureBidAdapter.js +45 -25
- package/modules/pixfutureBidAdapter.md +127 -0
- package/modules/prebidServerBidAdapter/index.js +109 -105
- package/modules/prebidmanagerAnalyticsAdapter.js +7 -7
- package/modules/priceFloors.js +47 -47
- package/modules/proxistoreBidAdapter.js +6 -8
- package/modules/pubCommonId.js +11 -11
- package/modules/pubProvidedIdSystem.js +3 -3
- package/modules/publinkIdSystem.js +23 -7
- package/modules/publinkIdSystem.md +7 -2
- package/modules/pubmaticAnalyticsAdapter.js +16 -16
- package/modules/pubmaticBidAdapter.js +109 -93
- package/modules/pubmaticBidAdapter.md +1 -1
- package/modules/pubperfAnalyticsAdapter.js +3 -3
- package/modules/pubwiseAnalyticsAdapter.js +6 -6
- package/modules/pubwiseBidAdapter.js +23 -23
- package/modules/pubxBidAdapter.js +2 -2
- package/modules/pubxaiAnalyticsAdapter.js +7 -7
- package/modules/pulsepointBidAdapter.js +13 -13
- package/modules/pxyzBidAdapter.js +7 -7
- package/modules/quantcastBidAdapter.js +16 -16
- package/modules/radsBidAdapter.js +5 -5
- package/modules/realvuAnalyticsAdapter.js +5 -7
- package/modules/reconciliationRtdProvider.js +6 -6
- package/modules/relaidoBidAdapter.js +44 -38
- package/modules/resetdigitalBidAdapter.js +3 -4
- package/modules/revcontentBidAdapter.js +9 -9
- package/modules/rhythmoneBidAdapter.js +17 -16
- package/modules/richaudienceBidAdapter.js +9 -9
- package/modules/riseBidAdapter.js +26 -26
- package/modules/riseBidAdapter.md +1 -3
- package/modules/roxotAnalyticsAdapter.js +14 -14
- package/modules/rtbhouseBidAdapter.js +7 -7
- package/modules/rtbsapeBidAdapter.js +3 -4
- package/modules/rtdModule/index.js +3 -3
- package/modules/rubiconAnalyticsAdapter.js +82 -82
- package/modules/rubiconBidAdapter.js +72 -68
- package/modules/scaleableAnalyticsAdapter.js +2 -2
- package/modules/seedingAllianceBidAdapter.js +231 -0
- package/modules/seedtagBidAdapter.js +10 -10
- package/modules/sharedIdSystem.js +11 -11
- package/modules/sharethroughAnalyticsAdapter.js +8 -8
- package/modules/sharethroughBidAdapter.js +20 -27
- package/modules/showheroes-bsBidAdapter.js +23 -23
- package/modules/sigmoidAnalyticsAdapter.js +4 -5
- package/modules/sirdataRtdProvider.js +34 -34
- package/modules/sizeMappingV2.js +39 -39
- package/modules/slimcutBidAdapter.js +121 -0
- package/modules/smaatoBidAdapter.js +44 -44
- package/modules/smartadserverBidAdapter.js +7 -7
- package/modules/smartxBidAdapter.js +72 -72
- package/modules/smartyadsBidAdapter.js +2 -2
- package/modules/smilewantedBidAdapter.js +6 -6
- package/modules/sonobiAnalyticsAdapter.js +23 -23
- package/modules/sortableAnalyticsAdapter.js +5 -5
- package/modules/sortableBidAdapter.js +28 -28
- package/modules/sovrnAnalyticsAdapter.js +5 -5
- package/modules/sovrnBidAdapter.js +22 -22
- package/modules/spotxBidAdapter.js +97 -83
- package/modules/sspBCBidAdapter.js +216 -21
- package/modules/sspBCBidAdapter.md +1 -1
- package/modules/staqAnalyticsAdapter.js +9 -9
- package/modules/stroeerCoreBidAdapter.js +16 -16
- package/modules/sublimeBidAdapter.js +6 -6
- package/modules/talkadsBidAdapter.js +129 -0
- package/modules/talkadsBidAdapter.md +60 -0
- package/modules/tapadIdSystem.js +3 -3
- package/modules/tappxBidAdapter.js +63 -64
- package/modules/teadsBidAdapter.js +20 -20
- package/modules/telariaBidAdapter.js +17 -17
- package/modules/temedyaBidAdapter.js +4 -4
- package/modules/terceptAnalyticsAdapter.js +4 -4
- package/modules/theAdxBidAdapter.js +16 -16
- package/modules/timeoutRtdProvider.js +15 -15
- package/modules/tpmnBidAdapter.js +3 -3
- package/modules/trionBidAdapter.js +15 -15
- package/modules/tripleliftBidAdapter.js +27 -24
- package/modules/truereachBidAdapter.js +4 -4
- package/modules/trustxBidAdapter.js +22 -18
- package/modules/ucfunnelBidAdapter.js +3 -3
- package/modules/uid2IdSystem.js +6 -6
- package/modules/underdogmediaBidAdapter.js +4 -4
- package/modules/unicornBidAdapter.js +15 -15
- package/modules/unifiedIdSystem.js +4 -4
- package/modules/unrulyBidAdapter.js +16 -16
- package/modules/userId/eids.js +9 -9
- package/modules/userId/index.js +37 -35
- package/modules/validationFpdModule/index.js +15 -15
- package/modules/vdoaiBidAdapter.js +2 -2
- package/modules/verizonMediaIdSystem.js +5 -5
- package/modules/vidazooBidAdapter.js +5 -5
- package/modules/videobyteBidAdapter.js +24 -24
- package/modules/videoreachBidAdapter.js +7 -7
- package/modules/vidoomyBidAdapter.js +105 -22
- package/modules/viewdeosDXBidAdapter.js +17 -17
- package/modules/visxBidAdapter.js +21 -29
- package/modules/voxBidAdapter.js +7 -7
- package/modules/vuukleBidAdapter.js +2 -2
- package/modules/waardexBidAdapter.js +26 -26
- package/modules/weboramaRtdProvider.js +174 -0
- package/modules/weboramaRtdProvider.md +70 -0
- package/modules/winrBidAdapter.js +27 -27
- package/modules/wipesBidAdapter.js +2 -2
- package/modules/yahoosspBidAdapter.js +637 -0
- package/modules/yahoosspBidAdapter.md +795 -0
- package/modules/yieldlabBidAdapter.js +57 -12
- package/modules/yieldlabBidAdapter.md +16 -1
- package/modules/yieldliftBidAdapter.js +9 -9
- package/modules/yieldmoBidAdapter.js +64 -50
- package/modules/yieldoneAnalyticsAdapter.js +6 -6
- package/modules/yieldoneBidAdapter.js +11 -11
- package/modules/yuktamediaAnalyticsAdapter.js +15 -15
- package/modules/zeotapIdPlusIdSystem.js +2 -2
- package/modules/zetaBidAdapter.js +6 -6
- package/modules/zeta_global_sspBidAdapter.js +14 -14
- package/package.json +1 -1
- package/src/AnalyticsAdapter.js +6 -6
- package/src/Renderer.js +10 -8
- package/src/adapterManager.js +45 -42
- package/src/adloader.js +6 -6
- package/src/ajax.js +8 -9
- package/src/auction.js +26 -23
- package/src/bidfactory.js +2 -2
- package/src/config.js +52 -50
- package/src/cpmBucketManager.js +2 -2
- package/src/prebid.js +85 -81
- package/src/storageManager.js +5 -5
- package/src/targeting.js +25 -26
- package/src/userSync.js +35 -22
- package/src/videoCache.js +2 -2
- package/test/.eslintrc.js +2 -1
- package/test/spec/modules/adfBidAdapter_spec.js +55 -0
- package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
- package/test/spec/modules/adhashBidAdapter_spec.js +155 -0
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
- package/test/spec/modules/adqueryBidAdapter_spec.js +185 -0
- package/test/spec/modules/afpBidAdapter_spec.js +306 -0
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +37 -2
- package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
- package/test/spec/modules/colossussspBidAdapter_spec.js +14 -6
- package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
- package/test/spec/modules/eplanningBidAdapter_spec.js +3 -3
- package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
- package/test/spec/modules/gridBidAdapter_spec.js +38 -2
- package/test/spec/modules/gridNMBidAdapter_spec.js +121 -47
- package/test/spec/modules/gumgumBidAdapter_spec.js +27 -6
- package/test/spec/modules/iasRtdProvider_spec.js +71 -6
- package/test/spec/modules/inskinBidAdapter_spec.js +10 -1
- package/test/spec/modules/invibesBidAdapter_spec.js +114 -2
- package/test/spec/modules/justpremiumBidAdapter_spec.js +16 -2
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +33 -7
- package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +39 -7
- package/test/spec/modules/medianetBidAdapter_spec.js +62 -1
- package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
- package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
- package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +120 -7
- package/test/spec/modules/publinkIdSystem_spec.js +42 -12
- package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +100 -81
- package/test/spec/modules/rubiconAnalyticsSchema.json +5 -2
- package/test/spec/modules/seedingAllianceAdapter_spec.js +186 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
- package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
- package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
- package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
- package/test/spec/modules/tappxBidAdapter_spec.js +39 -3
- package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +35 -2
- package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
- package/test/spec/modules/visxBidAdapter_spec.js +48 -4
- package/test/spec/modules/weboramaRtdProvider_spec.js +288 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
- package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
- package/test/spec/unit/pbjs_api_spec.js +4 -0
- package/test/spec/userSync_spec.js +30 -2
- package/modules/turktelekomBidAdapter.md +0 -49
|
@@ -168,8 +168,8 @@ const floorMinRequest = {
|
|
|
168
168
|
'zoneId': '335918',
|
|
169
169
|
'userId': '12346',
|
|
170
170
|
'keywords': ['a', 'b', 'c'],
|
|
171
|
-
'inventory': {'rating': '4-star', 'prodtype': 'tech'},
|
|
172
|
-
'visitor': {'ucat': 'new', 'lastsearch': 'iphone'},
|
|
171
|
+
'inventory': { 'rating': '4-star', 'prodtype': 'tech' },
|
|
172
|
+
'visitor': { 'ucat': 'new', 'lastsearch': 'iphone' },
|
|
173
173
|
'position': 'atf'
|
|
174
174
|
},
|
|
175
175
|
'mediaTypes': {
|
|
@@ -195,24 +195,24 @@ const MOCK = {
|
|
|
195
195
|
'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa',
|
|
196
196
|
'timestamp': 1519767010567,
|
|
197
197
|
'auctionStatus': 'inProgress',
|
|
198
|
-
'adUnits': [
|
|
198
|
+
'adUnits': [{
|
|
199
199
|
'code': '/19968336/header-bid-tag1',
|
|
200
200
|
'sizes': [[640, 480]],
|
|
201
|
-
'bids': [
|
|
201
|
+
'bids': [{
|
|
202
202
|
'bidder': 'rubicon',
|
|
203
203
|
'params': {
|
|
204
204
|
'accountId': 1001, 'siteId': 113932, 'zoneId': 535512
|
|
205
205
|
}
|
|
206
|
-
}
|
|
206
|
+
}],
|
|
207
207
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014'
|
|
208
208
|
}
|
|
209
209
|
],
|
|
210
210
|
'adUnitCodes': ['/19968336/header-bid-tag1'],
|
|
211
|
-
'bidderRequests': [
|
|
211
|
+
'bidderRequests': [{
|
|
212
212
|
'bidderCode': 'rubicon',
|
|
213
213
|
'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa',
|
|
214
214
|
'bidderRequestId': '1be65d7958826a',
|
|
215
|
-
'bids': [
|
|
215
|
+
'bids': [{
|
|
216
216
|
'bidder': 'rubicon',
|
|
217
217
|
'params': {
|
|
218
218
|
'accountId': 1001, 'siteId': 113932, 'zoneId': 535512
|
|
@@ -259,7 +259,7 @@ const MOCK = {
|
|
|
259
259
|
'userId': '12346',
|
|
260
260
|
'keywords': ['a', 'b', 'c'],
|
|
261
261
|
'inventory': 'test',
|
|
262
|
-
'visitor': {'ucat': 'new', 'lastsearch': 'iphone'},
|
|
262
|
+
'visitor': { 'ucat': 'new', 'lastsearch': 'iphone' },
|
|
263
263
|
'position': 'btf',
|
|
264
264
|
'video': {
|
|
265
265
|
'language': 'en',
|
|
@@ -296,8 +296,8 @@ const MOCK = {
|
|
|
296
296
|
'zoneId': '335918',
|
|
297
297
|
'userId': '12346',
|
|
298
298
|
'keywords': ['a', 'b', 'c'],
|
|
299
|
-
'inventory': {'rating': '4-star', 'prodtype': 'tech'},
|
|
300
|
-
'visitor': {'ucat': 'new', 'lastsearch': 'iphone'},
|
|
299
|
+
'inventory': { 'rating': '4-star', 'prodtype': 'tech' },
|
|
300
|
+
'visitor': { 'ucat': 'new', 'lastsearch': 'iphone' },
|
|
301
301
|
'position': 'atf'
|
|
302
302
|
},
|
|
303
303
|
'mediaTypes': {
|
|
@@ -655,10 +655,10 @@ describe('rubicon analytics adapter', function () {
|
|
|
655
655
|
expect(utils.logError.called).to.equal(true);
|
|
656
656
|
});
|
|
657
657
|
|
|
658
|
-
describe('config subscribe', function() {
|
|
658
|
+
describe('config subscribe', function () {
|
|
659
659
|
it('should update the pvid if user asks', function () {
|
|
660
660
|
expect(utils.generateUUID.called).to.equal(false);
|
|
661
|
-
config.setConfig({rubicon: {updatePageView: true}});
|
|
661
|
+
config.setConfig({ rubicon: { updatePageView: true } });
|
|
662
662
|
expect(utils.generateUUID.called).to.equal(true);
|
|
663
663
|
});
|
|
664
664
|
it('should merge in and preserve older set configs', function () {
|
|
@@ -859,7 +859,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
859
859
|
criteoId: 'sadfe4334',
|
|
860
860
|
lotamePanoramaId: 'asdf3gf4eg',
|
|
861
861
|
pubcid: 'dsfa4545-svgdfs5',
|
|
862
|
-
sharedId: {id1: 'asdf', id2: 'sadf4344'}
|
|
862
|
+
sharedId: { id1: 'asdf', id2: 'sadf4344' }
|
|
863
863
|
};
|
|
864
864
|
|
|
865
865
|
events.emit(AUCTION_INIT, auctionInit);
|
|
@@ -881,10 +881,10 @@ describe('rubicon analytics adapter', function () {
|
|
|
881
881
|
|
|
882
882
|
expect(message.auctions[0].user).to.deep.equal({
|
|
883
883
|
ids: [
|
|
884
|
-
{provider: 'criteoId', 'hasId': true},
|
|
885
|
-
{provider: 'lotamePanoramaId', 'hasId': true},
|
|
886
|
-
{provider: 'pubcid', 'hasId': true},
|
|
887
|
-
{provider: 'sharedId', 'hasId': true},
|
|
884
|
+
{ provider: 'criteoId', 'hasId': true },
|
|
885
|
+
{ provider: 'lotamePanoramaId', 'hasId': true },
|
|
886
|
+
{ provider: 'pubcid', 'hasId': true },
|
|
887
|
+
{ provider: 'sharedId', 'hasId': true },
|
|
888
888
|
]
|
|
889
889
|
});
|
|
890
890
|
});
|
|
@@ -1206,7 +1206,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1206
1206
|
describe('with session handling', function () {
|
|
1207
1207
|
const expectedPvid = STUBBED_UUID.slice(0, 8);
|
|
1208
1208
|
beforeEach(function () {
|
|
1209
|
-
config.setConfig({rubicon: {updatePageView: true}});
|
|
1209
|
+
config.setConfig({ rubicon: { updatePageView: true } });
|
|
1210
1210
|
});
|
|
1211
1211
|
|
|
1212
1212
|
it('should not log any session data if local storage is not enabled', function () {
|
|
@@ -1230,12 +1230,14 @@ describe('rubicon analytics adapter', function () {
|
|
|
1230
1230
|
});
|
|
1231
1231
|
|
|
1232
1232
|
it('should should pass along custom rubicon kv and pvid when defined', function () {
|
|
1233
|
-
config.setConfig({
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1233
|
+
config.setConfig({
|
|
1234
|
+
rubicon: {
|
|
1235
|
+
fpkvs: {
|
|
1236
|
+
source: 'fb',
|
|
1237
|
+
link: 'email'
|
|
1238
|
+
}
|
|
1237
1239
|
}
|
|
1238
|
-
}
|
|
1240
|
+
});
|
|
1239
1241
|
performStandardAuction();
|
|
1240
1242
|
expect(server.requests.length).to.equal(1);
|
|
1241
1243
|
let request = server.requests[0];
|
|
@@ -1245,22 +1247,24 @@ describe('rubicon analytics adapter', function () {
|
|
|
1245
1247
|
let expectedMessage = utils.deepClone(ANALYTICS_MESSAGE);
|
|
1246
1248
|
expectedMessage.session.pvid = STUBBED_UUID.slice(0, 8);
|
|
1247
1249
|
expectedMessage.fpkvs = [
|
|
1248
|
-
{key: 'source', value: 'fb'},
|
|
1249
|
-
{key: 'link', value: 'email'}
|
|
1250
|
+
{ key: 'source', value: 'fb' },
|
|
1251
|
+
{ key: 'link', value: 'email' }
|
|
1250
1252
|
]
|
|
1251
1253
|
expect(message).to.deep.equal(expectedMessage);
|
|
1252
1254
|
});
|
|
1253
1255
|
|
|
1254
1256
|
it('should convert kvs to strings before sending', function () {
|
|
1255
|
-
config.setConfig({
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1257
|
+
config.setConfig({
|
|
1258
|
+
rubicon: {
|
|
1259
|
+
fpkvs: {
|
|
1260
|
+
number: 24,
|
|
1261
|
+
boolean: false,
|
|
1262
|
+
string: 'hello',
|
|
1263
|
+
array: ['one', 2, 'three'],
|
|
1264
|
+
object: { one: 'two' }
|
|
1265
|
+
}
|
|
1262
1266
|
}
|
|
1263
|
-
}
|
|
1267
|
+
});
|
|
1264
1268
|
performStandardAuction();
|
|
1265
1269
|
expect(server.requests.length).to.equal(1);
|
|
1266
1270
|
let request = server.requests[0];
|
|
@@ -1270,24 +1274,26 @@ describe('rubicon analytics adapter', function () {
|
|
|
1270
1274
|
let expectedMessage = utils.deepClone(ANALYTICS_MESSAGE);
|
|
1271
1275
|
expectedMessage.session.pvid = STUBBED_UUID.slice(0, 8);
|
|
1272
1276
|
expectedMessage.fpkvs = [
|
|
1273
|
-
{key: 'number', value: '24'},
|
|
1274
|
-
{key: 'boolean', value: 'false'},
|
|
1275
|
-
{key: 'string', value: 'hello'},
|
|
1276
|
-
{key: 'array', value: 'one,2,three'},
|
|
1277
|
-
{key: 'object', value: '[object Object]'}
|
|
1277
|
+
{ key: 'number', value: '24' },
|
|
1278
|
+
{ key: 'boolean', value: 'false' },
|
|
1279
|
+
{ key: 'string', value: 'hello' },
|
|
1280
|
+
{ key: 'array', value: 'one,2,three' },
|
|
1281
|
+
{ key: 'object', value: '[object Object]' }
|
|
1278
1282
|
]
|
|
1279
1283
|
expect(message).to.deep.equal(expectedMessage);
|
|
1280
1284
|
});
|
|
1281
1285
|
|
|
1282
1286
|
it('should use the query utm param rubicon kv value and pass updated kv and pvid when defined', function () {
|
|
1283
|
-
sandbox.stub(utils, 'getWindowLocation').returns({'search': '?utm_source=other', 'pbjs_debug': 'true'});
|
|
1287
|
+
sandbox.stub(utils, 'getWindowLocation').returns({ 'search': '?utm_source=other', 'pbjs_debug': 'true' });
|
|
1284
1288
|
|
|
1285
|
-
config.setConfig({
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
+
config.setConfig({
|
|
1290
|
+
rubicon: {
|
|
1291
|
+
fpkvs: {
|
|
1292
|
+
source: 'fb',
|
|
1293
|
+
link: 'email'
|
|
1294
|
+
}
|
|
1289
1295
|
}
|
|
1290
|
-
}
|
|
1296
|
+
});
|
|
1291
1297
|
performStandardAuction();
|
|
1292
1298
|
expect(server.requests.length).to.equal(1);
|
|
1293
1299
|
let request = server.requests[0];
|
|
@@ -1297,8 +1303,8 @@ describe('rubicon analytics adapter', function () {
|
|
|
1297
1303
|
let expectedMessage = utils.deepClone(ANALYTICS_MESSAGE);
|
|
1298
1304
|
expectedMessage.session.pvid = STUBBED_UUID.slice(0, 8);
|
|
1299
1305
|
expectedMessage.fpkvs = [
|
|
1300
|
-
{key: 'source', value: 'other'},
|
|
1301
|
-
{key: 'link', value: 'email'}
|
|
1306
|
+
{ key: 'source', value: 'other' },
|
|
1307
|
+
{ key: 'link', value: 'email' }
|
|
1302
1308
|
]
|
|
1303
1309
|
|
|
1304
1310
|
message.fpkvs.sort((left, right) => left.key < right.key);
|
|
@@ -1318,11 +1324,13 @@ describe('rubicon analytics adapter', function () {
|
|
|
1318
1324
|
};
|
|
1319
1325
|
getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
|
|
1320
1326
|
|
|
1321
|
-
config.setConfig({
|
|
1322
|
-
|
|
1323
|
-
|
|
1327
|
+
config.setConfig({
|
|
1328
|
+
rubicon: {
|
|
1329
|
+
fpkvs: {
|
|
1330
|
+
link: 'email' // should merge this with what is in the localStorage!
|
|
1331
|
+
}
|
|
1324
1332
|
}
|
|
1325
|
-
}
|
|
1333
|
+
});
|
|
1326
1334
|
performStandardAuction();
|
|
1327
1335
|
expect(server.requests.length).to.equal(1);
|
|
1328
1336
|
let request = server.requests[0];
|
|
@@ -1337,8 +1345,8 @@ describe('rubicon analytics adapter', function () {
|
|
|
1337
1345
|
pvid: expectedPvid
|
|
1338
1346
|
}
|
|
1339
1347
|
expectedMessage.fpkvs = [
|
|
1340
|
-
{key: 'source', value: 'tw'},
|
|
1341
|
-
{key: 'link', value: 'email'}
|
|
1348
|
+
{ key: 'source', value: 'tw' },
|
|
1349
|
+
{ key: 'link', value: 'email' }
|
|
1342
1350
|
]
|
|
1343
1351
|
expect(message).to.deep.equal(expectedMessage);
|
|
1344
1352
|
|
|
@@ -1360,7 +1368,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1360
1368
|
});
|
|
1361
1369
|
|
|
1362
1370
|
it('should overwrite matching localstorge value and use its remaining values', function () {
|
|
1363
|
-
sandbox.stub(utils, 'getWindowLocation').returns({'search': '?utm_source=fb&utm_click=dog'});
|
|
1371
|
+
sandbox.stub(utils, 'getWindowLocation').returns({ 'search': '?utm_source=fb&utm_click=dog' });
|
|
1364
1372
|
|
|
1365
1373
|
// set some localStorage
|
|
1366
1374
|
let inputlocalStorage = {
|
|
@@ -1372,11 +1380,13 @@ describe('rubicon analytics adapter', function () {
|
|
|
1372
1380
|
};
|
|
1373
1381
|
getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
|
|
1374
1382
|
|
|
1375
|
-
config.setConfig({
|
|
1376
|
-
|
|
1377
|
-
|
|
1383
|
+
config.setConfig({
|
|
1384
|
+
rubicon: {
|
|
1385
|
+
fpkvs: {
|
|
1386
|
+
link: 'email' // should merge this with what is in the localStorage!
|
|
1387
|
+
}
|
|
1378
1388
|
}
|
|
1379
|
-
}
|
|
1389
|
+
});
|
|
1380
1390
|
performStandardAuction();
|
|
1381
1391
|
expect(server.requests.length).to.equal(1);
|
|
1382
1392
|
let request = server.requests[0];
|
|
@@ -1391,9 +1401,9 @@ describe('rubicon analytics adapter', function () {
|
|
|
1391
1401
|
pvid: expectedPvid
|
|
1392
1402
|
}
|
|
1393
1403
|
expectedMessage.fpkvs = [
|
|
1394
|
-
{key: 'source', value: 'fb'},
|
|
1395
|
-
{key: 'link', value: 'email'},
|
|
1396
|
-
{key: 'click', value: 'dog'}
|
|
1404
|
+
{ key: 'source', value: 'fb' },
|
|
1405
|
+
{ key: 'link', value: 'email' },
|
|
1406
|
+
{ key: 'click', value: 'dog' }
|
|
1397
1407
|
]
|
|
1398
1408
|
|
|
1399
1409
|
message.fpkvs.sort((left, right) => left.key < right.key);
|
|
@@ -1429,11 +1439,13 @@ describe('rubicon analytics adapter', function () {
|
|
|
1429
1439
|
};
|
|
1430
1440
|
getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
|
|
1431
1441
|
|
|
1432
|
-
config.setConfig({
|
|
1433
|
-
|
|
1434
|
-
|
|
1442
|
+
config.setConfig({
|
|
1443
|
+
rubicon: {
|
|
1444
|
+
fpkvs: {
|
|
1445
|
+
link: 'email' // should merge this with what is in the localStorage!
|
|
1446
|
+
}
|
|
1435
1447
|
}
|
|
1436
|
-
}
|
|
1448
|
+
});
|
|
1437
1449
|
|
|
1438
1450
|
performStandardAuction();
|
|
1439
1451
|
expect(server.requests.length).to.equal(1);
|
|
@@ -1447,7 +1459,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1447
1459
|
|
|
1448
1460
|
// the saved fpkvs should have been thrown out since session expired
|
|
1449
1461
|
expectedMessage.fpkvs = [
|
|
1450
|
-
{key: 'link', value: 'email'}
|
|
1462
|
+
{ key: 'link', value: 'email' }
|
|
1451
1463
|
]
|
|
1452
1464
|
expect(message).to.deep.equal(expectedMessage);
|
|
1453
1465
|
|
|
@@ -1479,11 +1491,13 @@ describe('rubicon analytics adapter', function () {
|
|
|
1479
1491
|
};
|
|
1480
1492
|
getDataFromLocalStorageStub.withArgs('rpaSession').returns(btoa(JSON.stringify(inputlocalStorage)));
|
|
1481
1493
|
|
|
1482
|
-
config.setConfig({
|
|
1483
|
-
|
|
1484
|
-
|
|
1494
|
+
config.setConfig({
|
|
1495
|
+
rubicon: {
|
|
1496
|
+
fpkvs: {
|
|
1497
|
+
link: 'email' // should merge this with what is in the localStorage!
|
|
1498
|
+
}
|
|
1485
1499
|
}
|
|
1486
|
-
}
|
|
1500
|
+
});
|
|
1487
1501
|
|
|
1488
1502
|
performStandardAuction();
|
|
1489
1503
|
expect(server.requests.length).to.equal(1);
|
|
@@ -1497,7 +1511,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1497
1511
|
|
|
1498
1512
|
// the saved fpkvs should have been thrown out since session expired
|
|
1499
1513
|
expectedMessage.fpkvs = [
|
|
1500
|
-
{key: 'link', value: 'email'}
|
|
1514
|
+
{ key: 'link', value: 'email' }
|
|
1501
1515
|
]
|
|
1502
1516
|
expect(message).to.deep.equal(expectedMessage);
|
|
1503
1517
|
|
|
@@ -1523,7 +1537,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1523
1537
|
let gptSlotRenderEnded0, gptSlotRenderEnded1;
|
|
1524
1538
|
beforeEach(function () {
|
|
1525
1539
|
mockGpt.enable();
|
|
1526
|
-
gptSlot0 = mockGpt.makeSlot({code: '/19968336/header-bid-tag-0'});
|
|
1540
|
+
gptSlot0 = mockGpt.makeSlot({ code: '/19968336/header-bid-tag-0' });
|
|
1527
1541
|
gptSlotRenderEnded0 = {
|
|
1528
1542
|
eventName: 'slotRenderEnded',
|
|
1529
1543
|
params: {
|
|
@@ -1535,7 +1549,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1535
1549
|
}
|
|
1536
1550
|
};
|
|
1537
1551
|
|
|
1538
|
-
gptSlot1 = mockGpt.makeSlot({code: '/19968336/header-bid-tag1'});
|
|
1552
|
+
gptSlot1 = mockGpt.makeSlot({ code: '/19968336/header-bid-tag1' });
|
|
1539
1553
|
gptSlotRenderEnded1 = {
|
|
1540
1554
|
eventName: 'slotRenderEnded',
|
|
1541
1555
|
params: {
|
|
@@ -1971,6 +1985,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
1971
1985
|
let timedOutBid = message.auctions[0].adUnits[0].bids[0];
|
|
1972
1986
|
expect(timedOutBid.status).to.equal('error');
|
|
1973
1987
|
expect(timedOutBid.error.code).to.equal('timeout-error');
|
|
1988
|
+
expect(timedOutBid.error.description).to.equal('prebid.js timeout');
|
|
1974
1989
|
expect(timedOutBid).to.not.have.property('bidResponse');
|
|
1975
1990
|
});
|
|
1976
1991
|
|
|
@@ -2051,7 +2066,7 @@ describe('rubicon analytics adapter', function () {
|
|
|
2051
2066
|
|
|
2052
2067
|
// Now add the bidResponse hook which hooks on the currenct conversion function onto the bid response
|
|
2053
2068
|
let innerBid;
|
|
2054
|
-
addBidResponseHook(function(adCodeId, bid) {
|
|
2069
|
+
addBidResponseHook(function (adCodeId, bid) {
|
|
2055
2070
|
innerBid = bid;
|
|
2056
2071
|
}, 'elementId', bidCopy);
|
|
2057
2072
|
|
|
@@ -2064,9 +2079,11 @@ describe('rubicon analytics adapter', function () {
|
|
|
2064
2079
|
|
|
2065
2080
|
describe('config with integration type', () => {
|
|
2066
2081
|
it('should use the integration type provided in the config instead of the default', () => {
|
|
2067
|
-
config.setConfig({
|
|
2068
|
-
|
|
2069
|
-
|
|
2082
|
+
config.setConfig({
|
|
2083
|
+
rubicon: {
|
|
2084
|
+
int_type: 'testType'
|
|
2085
|
+
}
|
|
2086
|
+
})
|
|
2070
2087
|
|
|
2071
2088
|
rubiconAnalyticsAdapter.enableAnalytics({
|
|
2072
2089
|
options: {
|
|
@@ -2088,11 +2105,13 @@ describe('rubicon analytics adapter', function () {
|
|
|
2088
2105
|
|
|
2089
2106
|
describe('wrapper details passed in', () => {
|
|
2090
2107
|
it('should correctly pass in the wrapper details if provided', () => {
|
|
2091
|
-
config.setConfig({
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2108
|
+
config.setConfig({
|
|
2109
|
+
rubicon: {
|
|
2110
|
+
wrapperName: '1001_wrapperName_exp.4',
|
|
2111
|
+
wrapperFamily: '1001_wrapperName',
|
|
2112
|
+
rule_name: 'na-mobile'
|
|
2113
|
+
}
|
|
2114
|
+
});
|
|
2096
2115
|
|
|
2097
2116
|
rubiconAnalyticsAdapter.enableAnalytics({
|
|
2098
2117
|
options: {
|
|
@@ -263,7 +263,9 @@
|
|
|
263
263
|
},
|
|
264
264
|
"isSlotEmpty": {
|
|
265
265
|
"type": "boolean",
|
|
266
|
-
"enum": [
|
|
266
|
+
"enum": [
|
|
267
|
+
true
|
|
268
|
+
]
|
|
267
269
|
}
|
|
268
270
|
}
|
|
269
271
|
},
|
|
@@ -369,6 +371,7 @@
|
|
|
369
371
|
},
|
|
370
372
|
"error": {
|
|
371
373
|
"type": "object",
|
|
374
|
+
"additionalProperties": false,
|
|
372
375
|
"required": [
|
|
373
376
|
"code"
|
|
374
377
|
],
|
|
@@ -448,4 +451,4 @@
|
|
|
448
451
|
}
|
|
449
452
|
}
|
|
450
453
|
}
|
|
451
|
-
}
|
|
454
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// jshint esversion: 6, es3: false, node: true
|
|
2
|
+
import {assert, expect} from 'chai';
|
|
3
|
+
import {spec} from 'modules/seedingAllianceBidAdapter.js';
|
|
4
|
+
import { NATIVE } from 'src/mediaTypes.js';
|
|
5
|
+
import { config } from 'src/config.js';
|
|
6
|
+
|
|
7
|
+
describe('SeedingAlliance adapter', function () {
|
|
8
|
+
let serverResponse, bidRequest, bidResponses;
|
|
9
|
+
let bid = {
|
|
10
|
+
'bidder': 'seedingAlliance',
|
|
11
|
+
'params': {
|
|
12
|
+
'adUnitId': '1hq8'
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
describe('isBidRequestValid', function () {
|
|
17
|
+
it('should return true when required params found', function () {
|
|
18
|
+
assert(spec.isBidRequestValid(bid));
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('should return false when AdUnitId is not set', function () {
|
|
22
|
+
delete bid.params.adUnitId;
|
|
23
|
+
assert.isFalse(spec.isBidRequestValid(bid));
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('buildRequests', function () {
|
|
28
|
+
it('should send request with correct structure', function () {
|
|
29
|
+
let validBidRequests = [{
|
|
30
|
+
bidId: 'bidId',
|
|
31
|
+
params: {}
|
|
32
|
+
}];
|
|
33
|
+
|
|
34
|
+
let request = spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } });
|
|
35
|
+
|
|
36
|
+
assert.equal(request.method, 'POST');
|
|
37
|
+
assert.ok(request.data);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('should have default request structure', function () {
|
|
41
|
+
let keys = 'site,device,cur,imp,user,regs'.split(',');
|
|
42
|
+
let validBidRequests = [{
|
|
43
|
+
bidId: 'bidId',
|
|
44
|
+
params: {}
|
|
45
|
+
}];
|
|
46
|
+
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
|
|
47
|
+
let data = Object.keys(request);
|
|
48
|
+
|
|
49
|
+
assert.deepEqual(keys, data);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('Verify the auction ID', function () {
|
|
53
|
+
let validBidRequests = [{
|
|
54
|
+
bidId: 'bidId',
|
|
55
|
+
params: {},
|
|
56
|
+
auctionId: 'auctionId'
|
|
57
|
+
}];
|
|
58
|
+
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' }, auctionId: validBidRequests[0].auctionId }).data);
|
|
59
|
+
|
|
60
|
+
assert.equal(request.id, validBidRequests[0].auctionId);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('Verify the device', function () {
|
|
64
|
+
let validBidRequests = [{
|
|
65
|
+
bidId: 'bidId',
|
|
66
|
+
params: {}
|
|
67
|
+
}];
|
|
68
|
+
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
|
|
69
|
+
|
|
70
|
+
assert.equal(request.device.ua, navigator.userAgent);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('Verify native asset ids', function () {
|
|
74
|
+
let validBidRequests = [{
|
|
75
|
+
bidId: 'bidId',
|
|
76
|
+
params: {},
|
|
77
|
+
nativeParams: {
|
|
78
|
+
body: {
|
|
79
|
+
required: true,
|
|
80
|
+
len: 350
|
|
81
|
+
},
|
|
82
|
+
image: {
|
|
83
|
+
required: true
|
|
84
|
+
},
|
|
85
|
+
title: {
|
|
86
|
+
required: true
|
|
87
|
+
},
|
|
88
|
+
sponsoredBy: {
|
|
89
|
+
required: true
|
|
90
|
+
},
|
|
91
|
+
cta: {
|
|
92
|
+
required: true
|
|
93
|
+
},
|
|
94
|
+
icon: {
|
|
95
|
+
required: true
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}];
|
|
99
|
+
|
|
100
|
+
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
|
|
101
|
+
|
|
102
|
+
assert.equal(assets[0].id, 1);
|
|
103
|
+
assert.equal(assets[1].id, 3);
|
|
104
|
+
assert.equal(assets[2].id, 0);
|
|
105
|
+
assert.equal(assets[3].id, 2);
|
|
106
|
+
assert.equal(assets[4].id, 4);
|
|
107
|
+
assert.equal(assets[5].id, 5);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
describe('interpretResponse', function () {
|
|
112
|
+
const goodResponse = {
|
|
113
|
+
body: {
|
|
114
|
+
cur: 'EUR',
|
|
115
|
+
id: '4b516b80-886e-4ec0-82ae-9209e6d625fb',
|
|
116
|
+
seatbid: [
|
|
117
|
+
{
|
|
118
|
+
seat: 'seedingAlliance',
|
|
119
|
+
bid: [{
|
|
120
|
+
adm: {
|
|
121
|
+
native: {
|
|
122
|
+
assets: [
|
|
123
|
+
{id: 0, title: {text: 'this is a title'}}
|
|
124
|
+
],
|
|
125
|
+
imptrackers: ['https://domain.for/imp/tracker?price=${AUCTION_PRICE}'],
|
|
126
|
+
link: {
|
|
127
|
+
clicktrackers: ['https://domain.for/imp/tracker?price=${AUCTION_PRICE}'],
|
|
128
|
+
url: 'https://domain.for/ad/'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
impid: 1,
|
|
133
|
+
price: 0.55
|
|
134
|
+
}]
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const badResponse = { body: {
|
|
140
|
+
cur: 'EUR',
|
|
141
|
+
id: '4b516b80-886e-4ec0-82ae-9209e6d625fb',
|
|
142
|
+
seatbid: []
|
|
143
|
+
}};
|
|
144
|
+
|
|
145
|
+
const bidRequest = {
|
|
146
|
+
data: {},
|
|
147
|
+
bids: [{ bidId: 'bidId1' }]
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
it('should return null if body is missing or empty', function () {
|
|
151
|
+
const result = spec.interpretResponse(badResponse, bidRequest);
|
|
152
|
+
assert.equal(result.length, 0);
|
|
153
|
+
|
|
154
|
+
delete badResponse.body
|
|
155
|
+
|
|
156
|
+
const result1 = spec.interpretResponse(badResponse, bidRequest);
|
|
157
|
+
assert.equal(result.length, 0);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it('should return the correct params', function () {
|
|
161
|
+
const result = spec.interpretResponse(goodResponse, bidRequest);
|
|
162
|
+
const bid = goodResponse.body.seatbid[0].bid[0];
|
|
163
|
+
|
|
164
|
+
assert.deepEqual(result[0].currency, goodResponse.body.cur);
|
|
165
|
+
assert.deepEqual(result[0].requestId, bidRequest.bids[0].bidId);
|
|
166
|
+
assert.deepEqual(result[0].cpm, bid.price);
|
|
167
|
+
assert.deepEqual(result[0].creativeId, bid.crid);
|
|
168
|
+
assert.deepEqual(result[0].mediaType, 'native');
|
|
169
|
+
assert.deepEqual(result[0].bidderCode, 'seedingAlliance');
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('should return the correct tracking links', function () {
|
|
173
|
+
const result = spec.interpretResponse(goodResponse, bidRequest);
|
|
174
|
+
const bid = goodResponse.body.seatbid[0].bid[0];
|
|
175
|
+
const regExpPrice = new RegExp('price=' + bid.price);
|
|
176
|
+
|
|
177
|
+
result[0].native.clickTrackers.forEach(function (clickTracker) {
|
|
178
|
+
assert.ok(clickTracker.search(regExpPrice) > -1);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
result[0].native.impressionTrackers.forEach(function (impTracker) {
|
|
182
|
+
assert.ok(impTracker.search(regExpPrice) > -1);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
});
|