prebid.js 6.0.0 → 6.4.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/.babelrc.js +1 -7
- package/.circleci/config.yml +1 -1
- package/README.md +1 -1
- package/browsers.json +13 -29
- package/gulpfile.js +88 -82
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
- package/karma.conf.maker.js +2 -2
- package/modules/33acrossBidAdapter.js +189 -102
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/addefendBidAdapter.js +1 -0
- package/modules/adheseBidAdapter.js +7 -2
- package/modules/adkernelBidAdapter.js +147 -61
- package/modules/adlivetechBidAdapter.md +61 -0
- package/modules/adlooxAdServerVideo.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +4 -4
- package/modules/admanBidAdapter.js +1 -0
- package/modules/admixerBidAdapter.js +3 -2
- package/modules/adnuntiusBidAdapter.js +5 -2
- package/modules/adomikAnalyticsAdapter.js +16 -4
- package/modules/adplusBidAdapter.js +203 -0
- package/modules/adplusBidAdapter.md +39 -0
- package/modules/adxcgBidAdapter.js +311 -359
- package/modules/adxcgBidAdapter.md +22 -21
- package/modules/adyoulikeBidAdapter.js +7 -2
- package/modules/aniviewBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +23 -3
- package/modules/beachfrontBidAdapter.js +14 -17
- package/modules/beopBidAdapter.js +6 -4
- package/modules/bidViewability.js +3 -3
- package/modules/bidViewabilityIO.js +3 -3
- package/modules/codefuelBidAdapter.js +1 -3
- package/modules/codefuelBidAdapter.md +3 -3
- package/modules/colossussspBidAdapter.js +7 -0
- package/modules/compassBidAdapter.js +201 -0
- package/modules/compassBidAdapter.md +79 -0
- package/modules/craftBidAdapter.js +5 -3
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/currency.js +2 -2
- package/modules/cwireBidAdapter.js +3 -0
- package/modules/dailyhuntBidAdapter.js +435 -0
- package/modules/dailyhuntBidAdapter.md +4 -0
- package/modules/datablocksBidAdapter.js +3 -3
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/deepintentBidAdapter.js +1 -1
- package/modules/dspxBidAdapter.js +1 -1
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +68 -54
- package/modules/feedadBidAdapter.js +2 -2
- package/modules/feedadBidAdapter.md +4 -2
- package/modules/freewheel-sspBidAdapter.js +6 -0
- package/modules/futureads.md +48 -0
- package/modules/glimpseBidAdapter.js +44 -16
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +11 -5
- package/modules/gridBidAdapter.js +5 -4
- package/modules/gumgumBidAdapter.js +7 -3
- package/modules/id5IdSystem.md +6 -6
- package/modules/imRtdProvider.js +31 -0
- package/modules/improvedigitalBidAdapter.js +19 -3
- package/modules/instreamTracking.js +4 -4
- package/modules/intersectionRtdProvider.js +114 -0
- package/modules/invibesBidAdapter.js +64 -14
- package/modules/invibesBidAdapter.md +2 -1
- package/modules/ipromBidAdapter.js +79 -0
- package/modules/ixBidAdapter.js +185 -22
- package/modules/kinessoIdSystem.js +1 -1
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedBidAdapter.js +8 -2
- package/modules/lotamePanoramaIdSystem.js +80 -8
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/mediasquareBidAdapter.js +1 -9
- package/modules/merkleIdSystem.js +5 -0
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/nativoBidAdapter.js +27 -1
- package/modules/nextMillenniumBidAdapter.js +37 -7
- package/modules/oguryBidAdapter.js +2 -1
- package/modules/openxBidAdapter.js +6 -1
- package/modules/prebidServerBidAdapter/index.js +19 -15
- package/modules/pubgeniusBidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +5 -3
- package/modules/pubxaiAnalyticsAdapter.js +17 -0
- package/modules/relaidoBidAdapter.js +86 -65
- package/modules/richaudienceBidAdapter.js +2 -3
- package/modules/rtdModule/index.js +48 -18
- package/modules/rubiconBidAdapter.js +31 -19
- package/modules/saambaaBidAdapter.js +420 -0
- package/modules/saambaaBidAdapter.md +65 -68
- package/modules/seedtagBidAdapter.js +6 -0
- package/modules/sharedIdSystem.js +27 -1
- package/modules/smaatoBidAdapter.js +9 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/sspBCBidAdapter.js +34 -3
- package/modules/tappxBidAdapter.js +3 -1
- package/modules/targetVideoBidAdapter.js +187 -0
- package/modules/targetVideoBidAdapter.md +34 -0
- package/modules/telariaBidAdapter.js +2 -2
- package/modules/trustxBidAdapter.js +18 -17
- package/modules/undertoneBidAdapter.js +8 -1
- package/modules/userId/index.js +27 -2
- package/modules/ventes.md +71 -0
- package/modules/ventesBidAdapter.js +104 -64
- package/modules/ventesBidAdapter.md +0 -1
- package/modules/vidoomyBidAdapter.js +65 -108
- package/modules/visxBidAdapter.js +20 -3
- package/modules/visxBidAdapter.md +4 -6
- package/modules/weboramaRtdProvider.js +288 -73
- package/modules/weboramaRtdProvider.md +27 -10
- package/modules/yahoosspBidAdapter.js +5 -1
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +41 -10
- package/modules/yieldlabBidAdapter.md +91 -48
- package/modules/yieldoneBidAdapter.js +115 -11
- package/modules/zetaSspBidAdapter.md +33 -1
- package/modules/zeta_global_sspBidAdapter.js +22 -1
- package/package.json +6 -1
- package/plugins/pbjsGlobals.js +28 -1
- package/src/adapterManager.js +14 -8
- package/src/auction.js +5 -4
- package/src/prebid.js +1 -2
- package/src/targeting.js +24 -3
- package/src/utils.js +41 -7
- package/test/helpers/prebidGlobal.js +1 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
- package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
- package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
- package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
- package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +63 -1
- package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
- package/test/spec/modules/beopBidAdapter_spec.js +1 -1
- package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
- package/test/spec/modules/bidViewability_spec.js +4 -4
- package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
- package/test/spec/modules/compassBidAdapter_spec.js +397 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
- package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
- package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
- package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
- package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +58 -4
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/imRtdProvider_spec.js +25 -0
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
- package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
- package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
- package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
- package/test/spec/modules/ixBidAdapter_spec.js +293 -2
- package/test/spec/modules/konduitWrapper_spec.js +0 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
- package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
- package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
- package/test/spec/modules/merkleIdSystem_spec.js +18 -0
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
- package/test/spec/modules/openxBidAdapter_spec.js +5 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
- package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
- package/test/spec/modules/realTimeDataModule_spec.js +135 -49
- package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
- package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
- package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
- package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
- package/test/spec/modules/sharedIdSystem_spec.js +52 -6
- package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
- package/test/spec/modules/visxBidAdapter_spec.js +121 -5
- package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
- package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
- package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
- package/test/spec/unit/core/adapterManager_spec.js +24 -6
- package/test/spec/unit/core/targeting_spec.js +116 -0
- package/test/spec/utils_spec.js +38 -0
- package/test/test_deps.js +3 -0
- package/test/test_index.js +1 -3
|
@@ -590,6 +590,32 @@ describe('Adyoulike Adapter', function () {
|
|
|
590
590
|
expect(payload.gdprConsent.consentRequired).to.be.null;
|
|
591
591
|
});
|
|
592
592
|
|
|
593
|
+
it('should add userid eids information to the request', function () {
|
|
594
|
+
let bidderRequest = {
|
|
595
|
+
'auctionId': '1d1a030790a475',
|
|
596
|
+
'bidderRequestId': '22edbae2733bf6',
|
|
597
|
+
'timeout': 3000,
|
|
598
|
+
'userId': {
|
|
599
|
+
pubcid: '01EAJWWNEPN3CYMM5N8M5VXY22',
|
|
600
|
+
unsuported: '666'
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
bidderRequest.bids = bidRequestWithSinglePlacement;
|
|
605
|
+
|
|
606
|
+
const request = spec.buildRequests(bidRequestWithSinglePlacement, bidderRequest);
|
|
607
|
+
const payload = JSON.parse(request.data);
|
|
608
|
+
|
|
609
|
+
expect(payload.userId).to.exist;
|
|
610
|
+
expect(payload.userId).to.deep.equal([{
|
|
611
|
+
'source': 'pubcid.org',
|
|
612
|
+
'uids': [{
|
|
613
|
+
'atype': 1,
|
|
614
|
+
'id': '01EAJWWNEPN3CYMM5N8M5VXY22'
|
|
615
|
+
}]
|
|
616
|
+
}]);
|
|
617
|
+
});
|
|
618
|
+
|
|
593
619
|
it('sends bid request to endpoint with single placement', function () {
|
|
594
620
|
const request = spec.buildRequests(bidRequestWithSinglePlacement, bidderRequest);
|
|
595
621
|
const payload = JSON.parse(request.data);
|
|
@@ -1004,12 +1004,16 @@ describe('AppNexusAdapter', function () {
|
|
|
1004
1004
|
|
|
1005
1005
|
describe('interpretResponse', function () {
|
|
1006
1006
|
let bfStub;
|
|
1007
|
+
let bidderSettingsStorage;
|
|
1008
|
+
|
|
1007
1009
|
before(function() {
|
|
1008
1010
|
bfStub = sinon.stub(bidderFactory, 'getIabSubCategory');
|
|
1011
|
+
bidderSettingsStorage = $$PREBID_GLOBAL$$.bidderSettings;
|
|
1009
1012
|
});
|
|
1010
1013
|
|
|
1011
1014
|
after(function() {
|
|
1012
1015
|
bfStub.restore();
|
|
1016
|
+
$$PREBID_GLOBAL$$.bidderSettings = bidderSettingsStorage;
|
|
1013
1017
|
});
|
|
1014
1018
|
|
|
1015
1019
|
let response = {
|
|
@@ -1077,6 +1081,15 @@ describe('AppNexusAdapter', function () {
|
|
|
1077
1081
|
'adUnitCode': 'code',
|
|
1078
1082
|
'appnexus': {
|
|
1079
1083
|
'buyerMemberId': 958
|
|
1084
|
+
},
|
|
1085
|
+
'meta': {
|
|
1086
|
+
'dchain': {
|
|
1087
|
+
'ver': '1.0',
|
|
1088
|
+
'complete': 0,
|
|
1089
|
+
'nodes': [{
|
|
1090
|
+
'bsid': '958'
|
|
1091
|
+
}]
|
|
1092
|
+
}
|
|
1080
1093
|
}
|
|
1081
1094
|
}
|
|
1082
1095
|
];
|
|
@@ -1085,11 +1098,46 @@ describe('AppNexusAdapter', function () {
|
|
|
1085
1098
|
bidId: '3db3773286ee59',
|
|
1086
1099
|
adUnitCode: 'code'
|
|
1087
1100
|
}]
|
|
1088
|
-
}
|
|
1101
|
+
};
|
|
1089
1102
|
let result = spec.interpretResponse({ body: response }, {bidderRequest});
|
|
1090
1103
|
expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0]));
|
|
1091
1104
|
});
|
|
1092
1105
|
|
|
1106
|
+
it('should reject 0 cpm bids', function () {
|
|
1107
|
+
let zeroCpmResponse = deepClone(response);
|
|
1108
|
+
zeroCpmResponse.tags[0].ads[0].cpm = 0;
|
|
1109
|
+
|
|
1110
|
+
let bidderRequest = {
|
|
1111
|
+
bidderCode: 'appnexus'
|
|
1112
|
+
};
|
|
1113
|
+
|
|
1114
|
+
let result = spec.interpretResponse({ body: zeroCpmResponse }, { bidderRequest });
|
|
1115
|
+
expect(result.length).to.equal(0);
|
|
1116
|
+
});
|
|
1117
|
+
|
|
1118
|
+
it('should allow 0 cpm bids if allowZeroCpmBids setConfig is true', function () {
|
|
1119
|
+
$$PREBID_GLOBAL$$.bidderSettings = {
|
|
1120
|
+
appnexus: {
|
|
1121
|
+
allowZeroCpmBids: true
|
|
1122
|
+
}
|
|
1123
|
+
};
|
|
1124
|
+
|
|
1125
|
+
let zeroCpmResponse = deepClone(response);
|
|
1126
|
+
zeroCpmResponse.tags[0].ads[0].cpm = 0;
|
|
1127
|
+
|
|
1128
|
+
let bidderRequest = {
|
|
1129
|
+
bidderCode: 'appnexus',
|
|
1130
|
+
bids: [{
|
|
1131
|
+
bidId: '3db3773286ee59',
|
|
1132
|
+
adUnitCode: 'code'
|
|
1133
|
+
}]
|
|
1134
|
+
};
|
|
1135
|
+
|
|
1136
|
+
let result = spec.interpretResponse({ body: zeroCpmResponse }, { bidderRequest });
|
|
1137
|
+
expect(result.length).to.equal(1);
|
|
1138
|
+
expect(result[0].cpm).to.equal(0);
|
|
1139
|
+
});
|
|
1140
|
+
|
|
1093
1141
|
it('handles nobid responses', function () {
|
|
1094
1142
|
let response = {
|
|
1095
1143
|
'version': '0.0.1',
|
|
@@ -1335,6 +1383,20 @@ describe('AppNexusAdapter', function () {
|
|
|
1335
1383
|
expect(Object.keys(result[0].meta)).to.include.members(['advertiserId']);
|
|
1336
1384
|
});
|
|
1337
1385
|
|
|
1386
|
+
it('should add brand id', function() {
|
|
1387
|
+
let responseBrandId = deepClone(response);
|
|
1388
|
+
responseBrandId.tags[0].ads[0].brand_id = 123;
|
|
1389
|
+
|
|
1390
|
+
let bidderRequest = {
|
|
1391
|
+
bids: [{
|
|
1392
|
+
bidId: '3db3773286ee59',
|
|
1393
|
+
adUnitCode: 'code'
|
|
1394
|
+
}]
|
|
1395
|
+
}
|
|
1396
|
+
let result = spec.interpretResponse({ body: responseBrandId }, {bidderRequest});
|
|
1397
|
+
expect(Object.keys(result[0].meta)).to.include.members(['brandId']);
|
|
1398
|
+
});
|
|
1399
|
+
|
|
1338
1400
|
it('should add advertiserDomains', function() {
|
|
1339
1401
|
let responseAdvertiserId = deepClone(response);
|
|
1340
1402
|
responseAdvertiserId.tags[0].ads[0].adomain = ['123'];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { expect } from 'chai';
|
|
2
2
|
import { spec, VIDEO_ENDPOINT, BANNER_ENDPOINT, OUTSTREAM_SRC, DEFAULT_MIMES } from 'modules/beachfrontBidAdapter.js';
|
|
3
|
-
import {
|
|
3
|
+
import { config } from 'src/config.js';
|
|
4
|
+
import { parseUrl, deepAccess } from 'src/utils.js';
|
|
4
5
|
|
|
5
6
|
describe('BeachfrontAdapter', function () {
|
|
6
7
|
let bidRequests;
|
|
@@ -556,6 +557,69 @@ describe('BeachfrontAdapter', function () {
|
|
|
556
557
|
});
|
|
557
558
|
});
|
|
558
559
|
|
|
560
|
+
describe('with first-party data', function () {
|
|
561
|
+
let sandbox
|
|
562
|
+
|
|
563
|
+
beforeEach(function () {
|
|
564
|
+
sandbox = sinon.sandbox.create();
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
afterEach(function () {
|
|
568
|
+
sandbox.restore();
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
it('must add first-party data to the video bid request', function () {
|
|
572
|
+
sandbox.stub(config, 'getConfig').callsFake(key => {
|
|
573
|
+
const cfg = {
|
|
574
|
+
ortb2: {
|
|
575
|
+
site: {
|
|
576
|
+
keywords: 'test keyword'
|
|
577
|
+
},
|
|
578
|
+
user: {
|
|
579
|
+
data: 'some user data'
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
};
|
|
583
|
+
return deepAccess(cfg, key);
|
|
584
|
+
});
|
|
585
|
+
const bidRequest = bidRequests[0];
|
|
586
|
+
bidRequest.mediaTypes = { video: {} };
|
|
587
|
+
const bidderRequest = {
|
|
588
|
+
refererInfo: {
|
|
589
|
+
referer: 'http://example.com/page.html'
|
|
590
|
+
}
|
|
591
|
+
};
|
|
592
|
+
const requests = spec.buildRequests([ bidRequest ], bidderRequest);
|
|
593
|
+
const data = requests[0].data;
|
|
594
|
+
expect(data.user.data).to.equal('some user data');
|
|
595
|
+
expect(data.site.keywords).to.equal('test keyword');
|
|
596
|
+
expect(data.site.page).to.equal('http://example.com/page.html');
|
|
597
|
+
expect(data.site.domain).to.equal('example.com');
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
it('must add first-party data to the banner bid request', function () {
|
|
601
|
+
sandbox.stub(config, 'getConfig').callsFake(key => {
|
|
602
|
+
const cfg = {
|
|
603
|
+
ortb2: {
|
|
604
|
+
site: {
|
|
605
|
+
keywords: 'test keyword'
|
|
606
|
+
},
|
|
607
|
+
user: {
|
|
608
|
+
data: 'some user data'
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
};
|
|
612
|
+
return deepAccess(cfg, key);
|
|
613
|
+
});
|
|
614
|
+
const bidRequest = bidRequests[0];
|
|
615
|
+
bidRequest.mediaTypes = { banner: {} };
|
|
616
|
+
const requests = spec.buildRequests([ bidRequest ]);
|
|
617
|
+
const data = requests[0].data;
|
|
618
|
+
expect(data.ortb2.user.data).to.equal('some user data');
|
|
619
|
+
expect(data.ortb2.site.keywords).to.equal('test keyword');
|
|
620
|
+
});
|
|
621
|
+
});
|
|
622
|
+
|
|
559
623
|
describe('for multi-format bids', function () {
|
|
560
624
|
it('should create a POST request for each bid format', function () {
|
|
561
625
|
const width = 300;
|
|
@@ -124,7 +124,7 @@ describe('BeOp Bid Adapter tests', () => {
|
|
|
124
124
|
expect(payload.tc_string).to.exist;
|
|
125
125
|
expect(payload.tc_string).to.equal('BOJ8RZsOJ8RZsABAB8AAAAAZ+A==');
|
|
126
126
|
expect(payload.url).to.exist;
|
|
127
|
-
expect(payload.url).to.equal('http://
|
|
127
|
+
expect(payload.url).to.equal('http://localhost:9876/context.html');
|
|
128
128
|
});
|
|
129
129
|
});
|
|
130
130
|
|
|
@@ -3,7 +3,7 @@ import * as events from 'src/events.js';
|
|
|
3
3
|
import * as utils from 'src/utils.js';
|
|
4
4
|
import * as sinon from 'sinon';
|
|
5
5
|
import { expect } from 'chai';
|
|
6
|
-
import
|
|
6
|
+
import CONSTANTS from 'src/constants.json';
|
|
7
7
|
|
|
8
8
|
describe('#bidViewabilityIO', function() {
|
|
9
9
|
const makeElement = (id) => {
|
|
@@ -97,7 +97,7 @@ describe('#bidViewabilityIO', function() {
|
|
|
97
97
|
expect(mockObserver.unobserve.calledOnce).to.be.true;
|
|
98
98
|
expect(emitSpy.calledOnce).to.be.true;
|
|
99
99
|
// expect(emitSpy.firstCall.args).to.be.false;
|
|
100
|
-
expect(emitSpy.firstCall.args[0]).to.eq(EVENTS.BID_VIEWABLE);
|
|
100
|
+
expect(emitSpy.firstCall.args[0]).to.eq(CONSTANTS.EVENTS.BID_VIEWABLE);
|
|
101
101
|
});
|
|
102
102
|
})
|
|
103
103
|
|
|
@@ -5,7 +5,7 @@ import * as utils from 'src/utils.js';
|
|
|
5
5
|
import * as sinon from 'sinon';
|
|
6
6
|
import {expect, spy} from 'chai';
|
|
7
7
|
import * as prebidGlobal from 'src/prebidGlobal.js';
|
|
8
|
-
import
|
|
8
|
+
import CONSTANTS from 'src/constants.json';
|
|
9
9
|
import adapterManager, { gdprDataHandler, uspDataHandler } from 'src/adapterManager.js';
|
|
10
10
|
import parse from 'url-parse';
|
|
11
11
|
|
|
@@ -279,9 +279,9 @@ describe('#bidViewability', function() {
|
|
|
279
279
|
let call = callBidViewableBidderSpy.getCall(0);
|
|
280
280
|
expect(call.args[0]).to.equal(PBJS_WINNING_BID.bidder);
|
|
281
281
|
expect(call.args[1]).to.deep.equal(PBJS_WINNING_BID);
|
|
282
|
-
// EVENTS.BID_VIEWABLE is triggered
|
|
282
|
+
// CONSTANTS.EVENTS.BID_VIEWABLE is triggered
|
|
283
283
|
call = eventsEmitSpy.getCall(0);
|
|
284
|
-
expect(call.args[0]).to.equal(EVENTS.BID_VIEWABLE);
|
|
284
|
+
expect(call.args[0]).to.equal(CONSTANTS.EVENTS.BID_VIEWABLE);
|
|
285
285
|
expect(call.args[1]).to.deep.equal(PBJS_WINNING_BID);
|
|
286
286
|
});
|
|
287
287
|
|
|
@@ -290,7 +290,7 @@ describe('#bidViewability', function() {
|
|
|
290
290
|
expect(triggerPixelSpy.callCount).to.equal(0);
|
|
291
291
|
// adapterManager.callBidViewableBidder is NOT called
|
|
292
292
|
expect(callBidViewableBidderSpy.callCount).to.equal(0);
|
|
293
|
-
// EVENTS.BID_VIEWABLE is NOT triggered
|
|
293
|
+
// CONSTANTS.EVENTS.BID_VIEWABLE is NOT triggered
|
|
294
294
|
expect(eventsEmitSpy.callCount).to.equal(0);
|
|
295
295
|
});
|
|
296
296
|
});
|
|
@@ -183,7 +183,7 @@ describe('Codefuel Adapter', function () {
|
|
|
183
183
|
tmax: 500
|
|
184
184
|
}
|
|
185
185
|
const res = spec.buildRequests([bidRequest], commonBidderRequest)
|
|
186
|
-
expect(res.url).to.equal('https://
|
|
186
|
+
expect(res.url).to.equal('https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid')
|
|
187
187
|
expect(res.data).to.deep.equal(expectedData)
|
|
188
188
|
})
|
|
189
189
|
|
|
@@ -186,6 +186,15 @@ describe('ColossussspAdapter', function () {
|
|
|
186
186
|
});
|
|
187
187
|
});
|
|
188
188
|
|
|
189
|
+
describe('onBidWon', function () {
|
|
190
|
+
it('should make an ajax call', function () {
|
|
191
|
+
const bid = {
|
|
192
|
+
nurl: 'http://example.com/win',
|
|
193
|
+
};
|
|
194
|
+
expect(spec.onBidWon(bid)).to.equals(undefined);
|
|
195
|
+
});
|
|
196
|
+
})
|
|
197
|
+
|
|
189
198
|
describe('getUserSyncs', function () {
|
|
190
199
|
let userSync = spec.getUserSyncs();
|
|
191
200
|
it('Returns valid URL and type', function () {
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { spec } from '../../../modules/compassBidAdapter.js';
|
|
3
|
+
import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
|
|
4
|
+
import { getUniqueIdentifierStr } from '../../../src/utils.js';
|
|
5
|
+
|
|
6
|
+
const bidder = 'compass'
|
|
7
|
+
|
|
8
|
+
describe('CompassBidAdapter', function () {
|
|
9
|
+
const bids = [
|
|
10
|
+
{
|
|
11
|
+
bidId: getUniqueIdentifierStr(),
|
|
12
|
+
bidder: bidder,
|
|
13
|
+
mediaTypes: {
|
|
14
|
+
[BANNER]: {
|
|
15
|
+
sizes: [[300, 250]]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
params: {
|
|
19
|
+
placementId: 'testBanner',
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
bidId: getUniqueIdentifierStr(),
|
|
24
|
+
bidder: bidder,
|
|
25
|
+
mediaTypes: {
|
|
26
|
+
[VIDEO]: {
|
|
27
|
+
playerSize: [[300, 300]],
|
|
28
|
+
minduration: 5,
|
|
29
|
+
maxduration: 60
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
params: {
|
|
33
|
+
placementId: 'testVideo',
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
bidId: getUniqueIdentifierStr(),
|
|
38
|
+
bidder: bidder,
|
|
39
|
+
mediaTypes: {
|
|
40
|
+
[NATIVE]: {
|
|
41
|
+
native: {
|
|
42
|
+
title: {
|
|
43
|
+
required: true
|
|
44
|
+
},
|
|
45
|
+
body: {
|
|
46
|
+
required: true
|
|
47
|
+
},
|
|
48
|
+
icon: {
|
|
49
|
+
required: true,
|
|
50
|
+
size: [64, 64]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
params: {
|
|
56
|
+
placementId: 'testNative',
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
const invalidBid = {
|
|
62
|
+
bidId: getUniqueIdentifierStr(),
|
|
63
|
+
bidder: bidder,
|
|
64
|
+
mediaTypes: {
|
|
65
|
+
[BANNER]: {
|
|
66
|
+
sizes: [[300, 250]]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
params: {
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const bidderRequest = {
|
|
75
|
+
uspConsent: '1---',
|
|
76
|
+
gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
|
|
77
|
+
refererInfo: {
|
|
78
|
+
referer: 'https://test.com'
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
describe('isBidRequestValid', function () {
|
|
83
|
+
it('Should return true if there are bidId, params and key parameters present', function () {
|
|
84
|
+
expect(spec.isBidRequestValid(bids[0])).to.be.true;
|
|
85
|
+
});
|
|
86
|
+
it('Should return false if at least one of parameters is not present', function () {
|
|
87
|
+
expect(spec.isBidRequestValid(invalidBid)).to.be.false;
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe('buildRequests', function () {
|
|
92
|
+
let serverRequest = spec.buildRequests(bids, bidderRequest);
|
|
93
|
+
|
|
94
|
+
it('Creates a ServerRequest object with method, URL and data', function () {
|
|
95
|
+
expect(serverRequest).to.exist;
|
|
96
|
+
expect(serverRequest.method).to.exist;
|
|
97
|
+
expect(serverRequest.url).to.exist;
|
|
98
|
+
expect(serverRequest.data).to.exist;
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('Returns POST method', function () {
|
|
102
|
+
expect(serverRequest.method).to.equal('POST');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('Returns valid URL', function () {
|
|
106
|
+
expect(serverRequest.url).to.equal('https://sa-lb.deliverimp.com/pbjs');
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('Returns general data valid', function () {
|
|
110
|
+
let data = serverRequest.data;
|
|
111
|
+
expect(data).to.be.an('object');
|
|
112
|
+
expect(data).to.have.all.keys('deviceWidth',
|
|
113
|
+
'deviceHeight',
|
|
114
|
+
'language',
|
|
115
|
+
'secure',
|
|
116
|
+
'host',
|
|
117
|
+
'page',
|
|
118
|
+
'placements',
|
|
119
|
+
'coppa',
|
|
120
|
+
'ccpa',
|
|
121
|
+
'gdpr',
|
|
122
|
+
'tmax'
|
|
123
|
+
);
|
|
124
|
+
expect(data.deviceWidth).to.be.a('number');
|
|
125
|
+
expect(data.deviceHeight).to.be.a('number');
|
|
126
|
+
expect(data.language).to.be.a('string');
|
|
127
|
+
expect(data.secure).to.be.within(0, 1);
|
|
128
|
+
expect(data.host).to.be.a('string');
|
|
129
|
+
expect(data.page).to.be.a('string');
|
|
130
|
+
expect(data.coppa).to.be.a('number');
|
|
131
|
+
expect(data.gdpr).to.be.a('string');
|
|
132
|
+
expect(data.ccpa).to.be.a('string');
|
|
133
|
+
expect(data.tmax).to.be.a('number');
|
|
134
|
+
expect(data.placements).to.have.lengthOf(3);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('Returns valid placements', function () {
|
|
138
|
+
const { placements } = serverRequest.data;
|
|
139
|
+
for (let i = 0, len = placements.length; i < len; i++) {
|
|
140
|
+
const placement = placements[i];
|
|
141
|
+
expect(placement.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
|
|
142
|
+
expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
|
|
143
|
+
expect(placement.bidId).to.be.a('string');
|
|
144
|
+
expect(placement.schain).to.be.an('object');
|
|
145
|
+
expect(placement.bidfloor).to.exist.and.to.equal(0);
|
|
146
|
+
|
|
147
|
+
if (placement.adFormat === BANNER) {
|
|
148
|
+
expect(placement.sizes).to.be.an('array');
|
|
149
|
+
}
|
|
150
|
+
switch (placement.adFormat) {
|
|
151
|
+
case BANNER:
|
|
152
|
+
expect(placement.sizes).to.be.an('array');
|
|
153
|
+
break;
|
|
154
|
+
case VIDEO:
|
|
155
|
+
expect(placement.playerSize).to.be.an('array');
|
|
156
|
+
expect(placement.minduration).to.be.an('number');
|
|
157
|
+
expect(placement.maxduration).to.be.an('number');
|
|
158
|
+
break;
|
|
159
|
+
case NATIVE:
|
|
160
|
+
expect(placement.native).to.be.an('object');
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('Returns data with gdprConsent and without uspConsent', function () {
|
|
167
|
+
delete bidderRequest.uspConsent;
|
|
168
|
+
serverRequest = spec.buildRequests(bids, bidderRequest);
|
|
169
|
+
let data = serverRequest.data;
|
|
170
|
+
expect(data.gdpr).to.exist;
|
|
171
|
+
expect(data.gdpr).to.be.a('string');
|
|
172
|
+
expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
|
|
173
|
+
expect(data.ccpa).to.not.exist;
|
|
174
|
+
delete bidderRequest.gdprConsent;
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('Returns data with uspConsent and without gdprConsent', function () {
|
|
178
|
+
bidderRequest.uspConsent = '1---';
|
|
179
|
+
delete bidderRequest.gdprConsent;
|
|
180
|
+
serverRequest = spec.buildRequests(bids, bidderRequest);
|
|
181
|
+
let data = serverRequest.data;
|
|
182
|
+
expect(data.ccpa).to.exist;
|
|
183
|
+
expect(data.ccpa).to.be.a('string');
|
|
184
|
+
expect(data.ccpa).to.equal(bidderRequest.uspConsent);
|
|
185
|
+
expect(data.gdpr).to.not.exist;
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('Returns empty data if no valid requests are passed', function () {
|
|
189
|
+
serverRequest = spec.buildRequests([], bidderRequest);
|
|
190
|
+
let data = serverRequest.data;
|
|
191
|
+
expect(data.placements).to.be.an('array').that.is.empty;
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
describe('interpretResponse', function () {
|
|
196
|
+
it('Should interpret banner response', function () {
|
|
197
|
+
const banner = {
|
|
198
|
+
body: [{
|
|
199
|
+
mediaType: 'banner',
|
|
200
|
+
width: 300,
|
|
201
|
+
height: 250,
|
|
202
|
+
cpm: 0.4,
|
|
203
|
+
ad: 'Test',
|
|
204
|
+
requestId: '23fhj33i987f',
|
|
205
|
+
ttl: 120,
|
|
206
|
+
creativeId: '2',
|
|
207
|
+
netRevenue: true,
|
|
208
|
+
currency: 'USD',
|
|
209
|
+
dealId: '1',
|
|
210
|
+
meta: {
|
|
211
|
+
advertiserDomains: ['google.com'],
|
|
212
|
+
advertiserId: 1234
|
|
213
|
+
}
|
|
214
|
+
}]
|
|
215
|
+
};
|
|
216
|
+
let bannerResponses = spec.interpretResponse(banner);
|
|
217
|
+
expect(bannerResponses).to.be.an('array').that.is.not.empty;
|
|
218
|
+
let dataItem = bannerResponses[0];
|
|
219
|
+
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
|
|
220
|
+
'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
|
|
221
|
+
expect(dataItem.requestId).to.equal(banner.body[0].requestId);
|
|
222
|
+
expect(dataItem.cpm).to.equal(banner.body[0].cpm);
|
|
223
|
+
expect(dataItem.width).to.equal(banner.body[0].width);
|
|
224
|
+
expect(dataItem.height).to.equal(banner.body[0].height);
|
|
225
|
+
expect(dataItem.ad).to.equal(banner.body[0].ad);
|
|
226
|
+
expect(dataItem.ttl).to.equal(banner.body[0].ttl);
|
|
227
|
+
expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
|
|
228
|
+
expect(dataItem.netRevenue).to.be.true;
|
|
229
|
+
expect(dataItem.currency).to.equal(banner.body[0].currency);
|
|
230
|
+
expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
|
|
231
|
+
});
|
|
232
|
+
it('Should interpret video response', function () {
|
|
233
|
+
const video = {
|
|
234
|
+
body: [{
|
|
235
|
+
vastUrl: 'test.com',
|
|
236
|
+
mediaType: 'video',
|
|
237
|
+
cpm: 0.5,
|
|
238
|
+
requestId: '23fhj33i987f',
|
|
239
|
+
ttl: 120,
|
|
240
|
+
creativeId: '2',
|
|
241
|
+
netRevenue: true,
|
|
242
|
+
currency: 'USD',
|
|
243
|
+
dealId: '1',
|
|
244
|
+
meta: {
|
|
245
|
+
advertiserDomains: ['google.com'],
|
|
246
|
+
advertiserId: 1234
|
|
247
|
+
}
|
|
248
|
+
}]
|
|
249
|
+
};
|
|
250
|
+
let videoResponses = spec.interpretResponse(video);
|
|
251
|
+
expect(videoResponses).to.be.an('array').that.is.not.empty;
|
|
252
|
+
|
|
253
|
+
let dataItem = videoResponses[0];
|
|
254
|
+
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
|
|
255
|
+
'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
|
|
256
|
+
expect(dataItem.requestId).to.equal('23fhj33i987f');
|
|
257
|
+
expect(dataItem.cpm).to.equal(0.5);
|
|
258
|
+
expect(dataItem.vastUrl).to.equal('test.com');
|
|
259
|
+
expect(dataItem.ttl).to.equal(120);
|
|
260
|
+
expect(dataItem.creativeId).to.equal('2');
|
|
261
|
+
expect(dataItem.netRevenue).to.be.true;
|
|
262
|
+
expect(dataItem.currency).to.equal('USD');
|
|
263
|
+
expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
|
|
264
|
+
});
|
|
265
|
+
it('Should interpret native response', function () {
|
|
266
|
+
const native = {
|
|
267
|
+
body: [{
|
|
268
|
+
mediaType: 'native',
|
|
269
|
+
native: {
|
|
270
|
+
clickUrl: 'test.com',
|
|
271
|
+
title: 'Test',
|
|
272
|
+
image: 'test.com',
|
|
273
|
+
impressionTrackers: ['test.com'],
|
|
274
|
+
},
|
|
275
|
+
ttl: 120,
|
|
276
|
+
cpm: 0.4,
|
|
277
|
+
requestId: '23fhj33i987f',
|
|
278
|
+
creativeId: '2',
|
|
279
|
+
netRevenue: true,
|
|
280
|
+
currency: 'USD',
|
|
281
|
+
meta: {
|
|
282
|
+
advertiserDomains: ['google.com'],
|
|
283
|
+
advertiserId: 1234
|
|
284
|
+
}
|
|
285
|
+
}]
|
|
286
|
+
};
|
|
287
|
+
let nativeResponses = spec.interpretResponse(native);
|
|
288
|
+
expect(nativeResponses).to.be.an('array').that.is.not.empty;
|
|
289
|
+
|
|
290
|
+
let dataItem = nativeResponses[0];
|
|
291
|
+
expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
|
|
292
|
+
expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
|
|
293
|
+
expect(dataItem.requestId).to.equal('23fhj33i987f');
|
|
294
|
+
expect(dataItem.cpm).to.equal(0.4);
|
|
295
|
+
expect(dataItem.native.clickUrl).to.equal('test.com');
|
|
296
|
+
expect(dataItem.native.title).to.equal('Test');
|
|
297
|
+
expect(dataItem.native.image).to.equal('test.com');
|
|
298
|
+
expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
|
|
299
|
+
expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
|
|
300
|
+
expect(dataItem.ttl).to.equal(120);
|
|
301
|
+
expect(dataItem.creativeId).to.equal('2');
|
|
302
|
+
expect(dataItem.netRevenue).to.be.true;
|
|
303
|
+
expect(dataItem.currency).to.equal('USD');
|
|
304
|
+
expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
|
|
305
|
+
});
|
|
306
|
+
it('Should return an empty array if invalid banner response is passed', function () {
|
|
307
|
+
const invBanner = {
|
|
308
|
+
body: [{
|
|
309
|
+
width: 300,
|
|
310
|
+
cpm: 0.4,
|
|
311
|
+
ad: 'Test',
|
|
312
|
+
requestId: '23fhj33i987f',
|
|
313
|
+
ttl: 120,
|
|
314
|
+
creativeId: '2',
|
|
315
|
+
netRevenue: true,
|
|
316
|
+
currency: 'USD',
|
|
317
|
+
dealId: '1'
|
|
318
|
+
}]
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
let serverResponses = spec.interpretResponse(invBanner);
|
|
322
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
323
|
+
});
|
|
324
|
+
it('Should return an empty array if invalid video response is passed', function () {
|
|
325
|
+
const invVideo = {
|
|
326
|
+
body: [{
|
|
327
|
+
mediaType: 'video',
|
|
328
|
+
cpm: 0.5,
|
|
329
|
+
requestId: '23fhj33i987f',
|
|
330
|
+
ttl: 120,
|
|
331
|
+
creativeId: '2',
|
|
332
|
+
netRevenue: true,
|
|
333
|
+
currency: 'USD',
|
|
334
|
+
dealId: '1'
|
|
335
|
+
}]
|
|
336
|
+
};
|
|
337
|
+
let serverResponses = spec.interpretResponse(invVideo);
|
|
338
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
339
|
+
});
|
|
340
|
+
it('Should return an empty array if invalid native response is passed', function () {
|
|
341
|
+
const invNative = {
|
|
342
|
+
body: [{
|
|
343
|
+
mediaType: 'native',
|
|
344
|
+
clickUrl: 'test.com',
|
|
345
|
+
title: 'Test',
|
|
346
|
+
impressionTrackers: ['test.com'],
|
|
347
|
+
ttl: 120,
|
|
348
|
+
requestId: '23fhj33i987f',
|
|
349
|
+
creativeId: '2',
|
|
350
|
+
netRevenue: true,
|
|
351
|
+
currency: 'USD',
|
|
352
|
+
}]
|
|
353
|
+
};
|
|
354
|
+
let serverResponses = spec.interpretResponse(invNative);
|
|
355
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
356
|
+
});
|
|
357
|
+
it('Should return an empty array if invalid response is passed', function () {
|
|
358
|
+
const invalid = {
|
|
359
|
+
body: [{
|
|
360
|
+
ttl: 120,
|
|
361
|
+
creativeId: '2',
|
|
362
|
+
netRevenue: true,
|
|
363
|
+
currency: 'USD',
|
|
364
|
+
dealId: '1'
|
|
365
|
+
}]
|
|
366
|
+
};
|
|
367
|
+
let serverResponses = spec.interpretResponse(invalid);
|
|
368
|
+
expect(serverResponses).to.be.an('array').that.is.empty;
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
describe('getUserSyncs', function() {
|
|
373
|
+
it('Should return array of objects with proper sync config , include GDPR', function() {
|
|
374
|
+
const syncData = spec.getUserSyncs({}, {}, {
|
|
375
|
+
consentString: 'ALL',
|
|
376
|
+
gdprApplies: true,
|
|
377
|
+
}, {});
|
|
378
|
+
expect(syncData).to.be.an('array').which.is.not.empty;
|
|
379
|
+
expect(syncData[0]).to.be.an('object')
|
|
380
|
+
expect(syncData[0].type).to.be.a('string')
|
|
381
|
+
expect(syncData[0].type).to.equal('image')
|
|
382
|
+
expect(syncData[0].url).to.be.a('string')
|
|
383
|
+
expect(syncData[0].url).to.equal('https://sa-cs.deliverimp.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
|
|
384
|
+
});
|
|
385
|
+
it('Should return array of objects with proper sync config , include CCPA', function() {
|
|
386
|
+
const syncData = spec.getUserSyncs({}, {}, {}, {
|
|
387
|
+
consentString: '1---'
|
|
388
|
+
});
|
|
389
|
+
expect(syncData).to.be.an('array').which.is.not.empty;
|
|
390
|
+
expect(syncData[0]).to.be.an('object')
|
|
391
|
+
expect(syncData[0].type).to.be.a('string')
|
|
392
|
+
expect(syncData[0].type).to.equal('image')
|
|
393
|
+
expect(syncData[0].url).to.be.a('string')
|
|
394
|
+
expect(syncData[0].url).to.equal('https://sa-cs.deliverimp.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
});
|