prebid.js 6.4.0 → 6.8.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/integrationExamples/gpt/amp/creative.html +11 -33
- package/integrationExamples/gpt/x-domain/creative.html +53 -26
- package/modules/.submodules.json +2 -1
- package/modules/adagioBidAdapter.js +0 -8
- package/modules/adagioBidAdapter.md +1 -1
- package/modules/adbookpspBidAdapter.js +27 -10
- package/modules/adhashBidAdapter.js +3 -3
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/admanBidAdapter.js +10 -4
- package/modules/adomikAnalyticsAdapter.js +23 -11
- package/modules/adqueryIdSystem.js +103 -0
- package/modules/adqueryIdSystem.md +35 -0
- package/modules/adyoulikeBidAdapter.js +13 -9
- package/modules/appnexusBidAdapter.js +11 -0
- package/modules/bliinkBidAdapter.js +3 -2
- package/modules/brandmetricsRtdProvider.js +168 -0
- package/modules/brandmetricsRtdProvider.md +40 -0
- package/modules/colossussspBidAdapter.js +12 -8
- package/modules/colossussspBidAdapter.md +15 -1
- package/modules/compassBidAdapter.js +10 -3
- package/modules/consentManagement.js +7 -1
- package/modules/consumableBidAdapter.md +1 -1
- package/modules/criteoBidAdapter.js +10 -1
- package/modules/criteoIdSystem.js +29 -7
- package/modules/currency.js +26 -1
- package/modules/displayioBidAdapter.js +157 -0
- package/modules/displayioBidAdapter.md +148 -0
- package/modules/docereeBidAdapter.js +10 -1
- package/modules/docereeBidAdapter.md +2 -0
- package/modules/e_volutionBidAdapter.js +158 -0
- package/modules/glimpseBidAdapter.js +66 -44
- package/modules/gnetBidAdapter.js +3 -3
- package/modules/gnetBidAdapter.md +4 -4
- package/modules/gptPreAuction.js +55 -7
- package/modules/gumgumBidAdapter.js +56 -42
- package/modules/idImportLibrary.js +45 -8
- package/modules/idImportLibrary.md +4 -0
- package/modules/improvedigitalBidAdapter.js +24 -2
- package/modules/interactiveOffersBidAdapter.js +9 -6
- package/modules/ixBidAdapter.js +29 -12
- package/modules/jwplayerRtdProvider.js +71 -6
- package/modules/jwplayerRtdProvider.md +27 -11
- package/modules/kargoBidAdapter.js +2 -2
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedAnalyticsAdapter.js +3 -1
- package/modules/loglyliftBidAdapter.js +79 -0
- package/modules/loglyliftBidAdapter.md +55 -0
- package/modules/nextMillenniumBidAdapter.js +3 -1
- package/modules/oguryBidAdapter.js +9 -2
- package/modules/onetagBidAdapter.js +4 -2
- package/modules/optimeraRtdProvider.js +8 -1
- package/modules/ozoneBidAdapter.js +21 -64
- package/modules/pilotxBidAdapter.js +147 -0
- package/modules/pilotxBidAdapter.md +50 -0
- package/modules/proxistoreBidAdapter.js +0 -2
- package/modules/pubmaticAnalyticsAdapter.js +16 -0
- package/modules/richaudienceBidAdapter.js +3 -2
- package/modules/riseBidAdapter.js +1 -1
- package/modules/rtbhouseBidAdapter.js +14 -4
- package/modules/rtdModule/index.js +14 -15
- package/modules/rubiconAnalyticsAdapter.js +3 -2
- package/modules/seedingAllianceBidAdapter.js +3 -3
- package/modules/sharethroughBidAdapter.js +12 -17
- package/modules/showheroes-bsBidAdapter.js +13 -2
- package/modules/sovrnBidAdapter.js +93 -18
- package/modules/sovrnBidAdapter.md +80 -2
- package/modules/synacormediaBidAdapter.js +31 -10
- package/modules/tappxBidAdapter.js +8 -5
- package/modules/teadsBidAdapter.js +1 -2
- package/modules/undertoneBidAdapter.js +17 -1
- package/modules/userId/eids.js +7 -1
- package/modules/userId/userId.md +8 -0
- package/modules/viewability.js +177 -0
- package/modules/viewability.md +87 -0
- package/modules/welectBidAdapter.js +106 -0
- package/modules/yahoosspBidAdapter.js +2 -0
- package/modules/yieldmoBidAdapter.js +23 -5
- package/modules/zeta_global_sspAnalyticsAdapter.js +97 -0
- package/modules/zeta_global_sspAnalyticsAdapter.md +24 -0
- package/package.json +1 -1
- package/src/adRendering.js +38 -0
- package/src/auction.js +44 -9
- package/src/config.js +27 -3
- package/src/hook.js +5 -1
- package/src/prebid.js +21 -21
- package/src/secureCreatives.js +114 -44
- package/src/utils.js +25 -4
- package/test/helpers/syncPromise.js +71 -0
- package/test/spec/auctionmanager_spec.js +148 -16
- package/test/spec/config_spec.js +279 -0
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
- package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
- package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
- package/test/spec/modules/admanBidAdapter_spec.js +2 -2
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
- package/test/spec/modules/adqueryIdSystem_spec.js +74 -0
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +49 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
- package/test/spec/modules/bliinkBidAdapter_spec.js +2 -0
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
- package/test/spec/modules/compassBidAdapter_spec.js +1 -0
- package/test/spec/modules/consentManagement_spec.js +20 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
- package/test/spec/modules/criteoIdSystem_spec.js +6 -3
- package/test/spec/modules/currency_spec.js +21 -6
- package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
- package/test/spec/modules/docereeBidAdapter_spec.js +9 -1
- package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
- package/test/spec/modules/eids_spec.js +15 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +0 -18
- package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
- package/test/spec/modules/gptPreAuction_spec.js +177 -2
- package/test/spec/modules/gumgumBidAdapter_spec.js +46 -0
- package/test/spec/modules/idImportLibrary_spec.js +197 -10
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +42 -0
- package/test/spec/modules/ixBidAdapter_spec.js +104 -62
- package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
- package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +75 -17
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +22 -0
- package/test/spec/modules/loglyliftBidAdapter_spec.js +172 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +1 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +10 -2
- package/test/spec/modules/optimeraRtdProvider_spec.js +14 -1
- package/test/spec/modules/ozoneBidAdapter_spec.js +43 -31
- package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +13 -1
- package/test/spec/modules/realTimeDataModule_spec.js +67 -5
- package/test/spec/modules/richaudienceBidAdapter_spec.js +40 -0
- package/test/spec/modules/riseBidAdapter_spec.js +1 -1
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +20 -0
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +30 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
- package/test/spec/modules/showheroes-bsBidAdapter_spec.js +2 -0
- package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
- package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
- package/test/spec/modules/tappxBidAdapter_spec.js +0 -19
- package/test/spec/modules/teadsBidAdapter_spec.js +14 -59
- package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
- package/test/spec/modules/userId_spec.js +68 -19
- package/test/spec/modules/viewability_spec.js +280 -0
- package/test/spec/modules/welectBidAdapter_spec.js +211 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
- package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +427 -0
- package/test/spec/unit/pbjs_api_spec.js +20 -2
- package/test/spec/unit/secureCreatives_spec.js +85 -0
|
@@ -69,8 +69,6 @@ var validBidRequestsMulti = [
|
|
|
69
69
|
transactionId: '2e63c0ed-b10c-4008-aed5-84582cecfe87'
|
|
70
70
|
}
|
|
71
71
|
];
|
|
72
|
-
// use 'pubcid', 'tdid', 'id5id', 'parrableId', 'idl_env', 'criteoId'
|
|
73
|
-
// see http://prebid.org/dev-docs/modules/userId.html
|
|
74
72
|
var validBidRequestsWithUserIdData = [
|
|
75
73
|
{
|
|
76
74
|
adUnitCode: 'div-gpt-ad-1460505748561-0',
|
|
@@ -291,7 +289,6 @@ var validBidRequests1OutstreamVideo2020 = [
|
|
|
291
289
|
}
|
|
292
290
|
];
|
|
293
291
|
|
|
294
|
-
// WHEN sent as bidderRequest to buildRequests you should send the child: .bidderRequest
|
|
295
292
|
var validBidderRequest1OutstreamVideo2020 = {
|
|
296
293
|
bidderRequest: {
|
|
297
294
|
auctionId: '27dcb421-95c6-4024-a624-3c03816c5f99',
|
|
@@ -394,7 +391,6 @@ var validBidderRequest1OutstreamVideo2020 = {
|
|
|
394
391
|
timeout: 3000
|
|
395
392
|
}
|
|
396
393
|
};
|
|
397
|
-
// WHEN sent as bidderRequest to buildRequests you should send the child: .bidderRequest
|
|
398
394
|
var validBidderRequest = {
|
|
399
395
|
bidderRequest: {
|
|
400
396
|
auctionId: '27dcb421-95c6-4024-a624-3c03816c5f99',
|
|
@@ -419,11 +415,6 @@ var validBidderRequest = {
|
|
|
419
415
|
}
|
|
420
416
|
};
|
|
421
417
|
|
|
422
|
-
// bidder request with GDPR - change the values for testing:
|
|
423
|
-
// gdprConsent.gdprApplies (true/false)
|
|
424
|
-
// gdprConsent.vendorData.purposeConsents (make empty, make null, remove it)
|
|
425
|
-
// gdprConsent.vendorData.vendorConsents (remove 524, remove all, make the element null, remove it)
|
|
426
|
-
// WHEN sent as bidderRequest to buildRequests you should send the child: .bidderRequest
|
|
427
418
|
var bidderRequestWithFullGdpr = {
|
|
428
419
|
bidderRequest: {
|
|
429
420
|
auctionId: '27dcb421-95c6-4024-a624-3c03816c5f99',
|
|
@@ -512,7 +503,6 @@ var gdpr1 = {
|
|
|
512
503
|
'gdprApplies': true
|
|
513
504
|
};
|
|
514
505
|
|
|
515
|
-
// simulating the Mirror
|
|
516
506
|
var bidderRequestWithPartialGdpr = {
|
|
517
507
|
bidderRequest: {
|
|
518
508
|
auctionId: '27dcb421-95c6-4024-a624-3c03816c5f99',
|
|
@@ -558,7 +548,6 @@ var bidderRequestWithPartialGdpr = {
|
|
|
558
548
|
}
|
|
559
549
|
};
|
|
560
550
|
|
|
561
|
-
// make sure the impid matches the request bidId
|
|
562
551
|
var validResponse = {
|
|
563
552
|
'body': {
|
|
564
553
|
'id': 'd6198807-7a53-4141-b2db-d2cb754d68ba',
|
|
@@ -1113,7 +1102,6 @@ var multiRequest1 = [
|
|
|
1113
1102
|
}
|
|
1114
1103
|
];
|
|
1115
1104
|
|
|
1116
|
-
// WHEN sent as bidderRequest to buildRequests you should send the child: .bidderRequest
|
|
1117
1105
|
var multiBidderRequest1 = {
|
|
1118
1106
|
bidderRequest: {
|
|
1119
1107
|
'bidderCode': 'ozone',
|
|
@@ -1507,7 +1495,6 @@ var multiResponse1 = {
|
|
|
1507
1495
|
|
|
1508
1496
|
describe('ozone Adapter', function () {
|
|
1509
1497
|
describe('isBidRequestValid', function () {
|
|
1510
|
-
// A test ad unit that will consistently return test creatives
|
|
1511
1498
|
let validBidReq = {
|
|
1512
1499
|
bidder: BIDDER_CODE,
|
|
1513
1500
|
params: {
|
|
@@ -1941,7 +1928,6 @@ describe('ozone Adapter', function () {
|
|
|
1941
1928
|
const request = spec.buildRequests(validBidRequestsNoSizes, validBidderRequest.bidderRequest);
|
|
1942
1929
|
expect(request).to.be.a('array');
|
|
1943
1930
|
expect(request[0]).to.have.all.keys(['bidderRequest', 'data', 'method', 'url']);
|
|
1944
|
-
// need to reset the singleRequest config flag:
|
|
1945
1931
|
config.setConfig({'ozone': {'singleRequest': true}});
|
|
1946
1932
|
});
|
|
1947
1933
|
|
|
@@ -1965,7 +1951,6 @@ describe('ozone Adapter', function () {
|
|
|
1965
1951
|
expect(payload.user.ext.consent).to.equal(consentString);
|
|
1966
1952
|
});
|
|
1967
1953
|
|
|
1968
|
-
// mirror
|
|
1969
1954
|
it('should add gdpr consent information to the request when vendorData is missing vendorConsents (Mirror)', function () {
|
|
1970
1955
|
let consentString = 'BOcocyaOcocyaAfEYDENCD-AAAAjx7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_NphLgA==';
|
|
1971
1956
|
let bidderRequest = validBidderRequest.bidderRequest;
|
|
@@ -2018,7 +2003,6 @@ describe('ozone Adapter', function () {
|
|
|
2018
2003
|
};
|
|
2019
2004
|
|
|
2020
2005
|
let bidRequests = validBidRequests;
|
|
2021
|
-
// values from http://prebid.org/dev-docs/modules/userId.html#pubcommon-id
|
|
2022
2006
|
bidRequests[0]['userId'] = {
|
|
2023
2007
|
'digitrustid': {data: {id: 'DTID', keyv: 4, privacy: {optout: false}, producer: 'ABC', version: 2}},
|
|
2024
2008
|
'id5id': { uid: '1111', ext: { linkType: 2, abTestingControlGroup: false } },
|
|
@@ -2038,13 +2022,11 @@ describe('ozone Adapter', function () {
|
|
|
2038
2022
|
|
|
2039
2023
|
it('should pick up the value of pubcid when built using the pubCommonId module (not userId)', function () {
|
|
2040
2024
|
let bidRequests = validBidRequests;
|
|
2041
|
-
// values from http://prebid.org/dev-docs/modules/userId.html#pubcommon-id
|
|
2042
2025
|
bidRequests[0]['userId'] = {
|
|
2043
2026
|
'digitrustid': {data: {id: 'DTID', keyv: 4, privacy: {optout: false}, producer: 'ABC', version: 2}},
|
|
2044
2027
|
'id5id': { uid: '1111', ext: { linkType: 2, abTestingControlGroup: false } },
|
|
2045
2028
|
'idl_env': '3333',
|
|
2046
2029
|
'parrableid': 'eidVersion.encryptionKeyReference.encryptedValue',
|
|
2047
|
-
// 'pubcid': '5555', // remove pubcid from here to emulate the OLD module & cause the failover code to kick in
|
|
2048
2030
|
'tdid': '6666',
|
|
2049
2031
|
'sharedid': {'id': '01EAJWWNEPN3CYMM5N8M5VXY22', 'third': '01EAJWWNEPN3CYMM5N8M5VXY22'}
|
|
2050
2032
|
};
|
|
@@ -2170,7 +2152,6 @@ describe('ozone Adapter', function () {
|
|
|
2170
2152
|
});
|
|
2171
2153
|
it('should use oztestmode GET value if set', function() {
|
|
2172
2154
|
var specMock = utils.deepClone(spec);
|
|
2173
|
-
// mock the getGetParametersAsObject function to simulate GET parameters for oztestmode:
|
|
2174
2155
|
specMock.getGetParametersAsObject = function() {
|
|
2175
2156
|
return {'oztestmode': 'mytestvalue_123'};
|
|
2176
2157
|
};
|
|
@@ -2181,7 +2162,6 @@ describe('ozone Adapter', function () {
|
|
|
2181
2162
|
});
|
|
2182
2163
|
it('should pass through GET params if present: ozf, ozpf, ozrp, ozip', function() {
|
|
2183
2164
|
var specMock = utils.deepClone(spec);
|
|
2184
|
-
// mock the getGetParametersAsObject function to simulate GET parameters :
|
|
2185
2165
|
specMock.getGetParametersAsObject = function() {
|
|
2186
2166
|
return {ozf: '1', ozpf: '0', ozrp: '2', ozip: '123'};
|
|
2187
2167
|
};
|
|
@@ -2194,7 +2174,6 @@ describe('ozone Adapter', function () {
|
|
|
2194
2174
|
});
|
|
2195
2175
|
it('should pass through GET params if present: ozf, ozpf, ozrp, ozip with alternative values', function() {
|
|
2196
2176
|
var specMock = utils.deepClone(spec);
|
|
2197
|
-
// mock the getGetParametersAsObject function to simulate GET parameters :
|
|
2198
2177
|
specMock.getGetParametersAsObject = function() {
|
|
2199
2178
|
return {ozf: 'false', ozpf: 'true', ozrp: 'xyz', ozip: 'hello'};
|
|
2200
2179
|
};
|
|
@@ -2207,7 +2186,6 @@ describe('ozone Adapter', function () {
|
|
|
2207
2186
|
});
|
|
2208
2187
|
it('should use oztestmode GET value if set, even if there is no customdata in config', function() {
|
|
2209
2188
|
var specMock = utils.deepClone(spec);
|
|
2210
|
-
// mock the getGetParametersAsObject function to simulate GET parameters for oztestmode:
|
|
2211
2189
|
specMock.getGetParametersAsObject = function() {
|
|
2212
2190
|
return {'oztestmode': 'mytestvalue_123'};
|
|
2213
2191
|
};
|
|
@@ -2217,7 +2195,6 @@ describe('ozone Adapter', function () {
|
|
|
2217
2195
|
expect(data.imp[0].ext.ozone.customData[0].targeting.oztestmode).to.equal('mytestvalue_123');
|
|
2218
2196
|
});
|
|
2219
2197
|
it('should use GET values auction=dev & cookiesync=dev if set', function() {
|
|
2220
|
-
// mock the getGetParametersAsObject function to simulate GET parameters for oztestmode:
|
|
2221
2198
|
var specMock = utils.deepClone(spec);
|
|
2222
2199
|
specMock.getGetParametersAsObject = function() {
|
|
2223
2200
|
return {};
|
|
@@ -2228,8 +2205,6 @@ describe('ozone Adapter', function () {
|
|
|
2228
2205
|
let cookieUrl = specMock.getCookieSyncUrl();
|
|
2229
2206
|
expect(cookieUrl).to.equal('https://elb.the-ozone-project.com/static/load-cookie.html');
|
|
2230
2207
|
|
|
2231
|
-
// now mock the response from getGetParametersAsObject & do the request again
|
|
2232
|
-
|
|
2233
2208
|
specMock = utils.deepClone(spec);
|
|
2234
2209
|
specMock.getGetParametersAsObject = function() {
|
|
2235
2210
|
return {'auction': 'dev', 'cookiesync': 'dev'};
|
|
@@ -2241,7 +2216,6 @@ describe('ozone Adapter', function () {
|
|
|
2241
2216
|
expect(cookieUrl).to.equal('https://test.ozpr.net/static/load-cookie.html');
|
|
2242
2217
|
});
|
|
2243
2218
|
it('should use a valid ozstoredrequest GET value if set to override the placementId values, and set oz_rw if we find it', function() {
|
|
2244
|
-
// mock the getGetParametersAsObject function to simulate GET parameters for ozstoredrequest:
|
|
2245
2219
|
var specMock = utils.deepClone(spec);
|
|
2246
2220
|
specMock.getGetParametersAsObject = function() {
|
|
2247
2221
|
return {'ozstoredrequest': '1122334455'}; // 10 digits are valid
|
|
@@ -2252,7 +2226,6 @@ describe('ozone Adapter', function () {
|
|
|
2252
2226
|
expect(data.imp[0].ext.prebid.storedrequest.id).to.equal('1122334455');
|
|
2253
2227
|
});
|
|
2254
2228
|
it('should NOT use an invalid ozstoredrequest GET value if set to override the placementId values, and set oz_rw to 0', function() {
|
|
2255
|
-
// mock the getGetParametersAsObject function to simulate GET parameters for ozstoredrequest:
|
|
2256
2229
|
var specMock = utils.deepClone(spec);
|
|
2257
2230
|
specMock.getGetParametersAsObject = function() {
|
|
2258
2231
|
return {'ozstoredrequest': 'BADVAL'}; // 10 digits are valid
|
|
@@ -2424,6 +2397,26 @@ describe('ozone Adapter', function () {
|
|
|
2424
2397
|
expect(utils.deepAccess(payload, 'imp.0.floor.banner.floor')).to.equal(0.8);
|
|
2425
2398
|
config.resetConfig();
|
|
2426
2399
|
});
|
|
2400
|
+
|
|
2401
|
+
it('handles schain object in each bidrequest (will be the same in each br)', function () {
|
|
2402
|
+
let br = JSON.parse(JSON.stringify(validBidRequests));
|
|
2403
|
+
let schainConfigObject = {
|
|
2404
|
+
'ver': '1.0',
|
|
2405
|
+
'complete': 1,
|
|
2406
|
+
'nodes': [
|
|
2407
|
+
{
|
|
2408
|
+
'asi': 'bidderA.com',
|
|
2409
|
+
'sid': '00001',
|
|
2410
|
+
'hp': 1
|
|
2411
|
+
}
|
|
2412
|
+
]
|
|
2413
|
+
};
|
|
2414
|
+
br[0]['schain'] = schainConfigObject;
|
|
2415
|
+
const request = spec.buildRequests(br, validBidderRequest.bidderRequest);
|
|
2416
|
+
const data = JSON.parse(request.data);
|
|
2417
|
+
expect(data.source.ext).to.haveOwnProperty('schain');
|
|
2418
|
+
expect(data.source.ext.schain).to.deep.equal(schainConfigObject); // .deep.equal() : Target object deeply (but not strictly) equals `{a: 1}`
|
|
2419
|
+
});
|
|
2427
2420
|
});
|
|
2428
2421
|
|
|
2429
2422
|
describe('interpretResponse', function () {
|
|
@@ -2624,7 +2617,6 @@ describe('ozone Adapter', function () {
|
|
|
2624
2617
|
expect(result[1]['impid']).to.equal('3025f169863b7f8');
|
|
2625
2618
|
expect(result[1]['id']).to.equal('18552976939844999');
|
|
2626
2619
|
expect(result[1]['adserverTargeting']['oz_ozappnexus_adId']).to.equal('3025f169863b7f8-0-oz-2');
|
|
2627
|
-
// change the bid values so a different second bid for an impid by the same bidder gets dropped
|
|
2628
2620
|
validres = JSON.parse(JSON.stringify(multiResponse1));
|
|
2629
2621
|
validres.body.seatbid[0].bid[1].price = 1.1;
|
|
2630
2622
|
validres.body.seatbid[0].bid[1].cpm = 1.1;
|
|
@@ -2647,7 +2639,6 @@ describe('ozone Adapter', function () {
|
|
|
2647
2639
|
expect(result).to.be.empty;
|
|
2648
2640
|
});
|
|
2649
2641
|
it('should append the various values if they exist', function() {
|
|
2650
|
-
// get the cookie bag populated
|
|
2651
2642
|
spec.buildRequests(validBidRequests, validBidderRequest.bidderRequest);
|
|
2652
2643
|
const result = spec.getUserSyncs({iframeEnabled: true}, 'good server response', gdpr1);
|
|
2653
2644
|
expect(result).to.be.an('array');
|
|
@@ -2657,14 +2648,12 @@ describe('ozone Adapter', function () {
|
|
|
2657
2648
|
expect(result[0].url).to.include('gdpr_consent=BOh7mtYOh7mtYAcABBENCU-AAAAncgPIXJiiAoao0PxBFkgCAC8ACIAAQAQQAAIAAAIAAAhBGAAAQAQAEQgAAAAAAABAAAAAAAAAAAAAAACAAAAAAAACgAAAAABAAAAQAAAAAAA');
|
|
2658
2649
|
});
|
|
2659
2650
|
it('should append ccpa (usp data)', function() {
|
|
2660
|
-
// get the cookie bag populated
|
|
2661
2651
|
spec.buildRequests(validBidRequests, validBidderRequest.bidderRequest);
|
|
2662
2652
|
const result = spec.getUserSyncs({iframeEnabled: true}, 'good server response', gdpr1, '1YYN');
|
|
2663
2653
|
expect(result).to.be.an('array');
|
|
2664
2654
|
expect(result[0].url).to.include('usp_consent=1YYN');
|
|
2665
2655
|
});
|
|
2666
2656
|
it('should use "" if no usp is sent to cookieSync', function() {
|
|
2667
|
-
// get the cookie bag populated
|
|
2668
2657
|
spec.buildRequests(validBidRequests, validBidderRequest.bidderRequest);
|
|
2669
2658
|
const result = spec.getUserSyncs({iframeEnabled: true}, 'good server response', gdpr1);
|
|
2670
2659
|
expect(result).to.be.an('array');
|
|
@@ -2887,4 +2876,27 @@ describe('ozone Adapter', function () {
|
|
|
2887
2876
|
expect(response[1].bid.length).to.equal(2);
|
|
2888
2877
|
});
|
|
2889
2878
|
});
|
|
2879
|
+
/**
|
|
2880
|
+
* spec.getWhitelabelConfigItem test - get a config value for a whitelabelled bidder,
|
|
2881
|
+
* from a standard ozone.oz_xxxx_yyy string
|
|
2882
|
+
*/
|
|
2883
|
+
describe('getWhitelabelConfigItem', function() {
|
|
2884
|
+
it('should fetch the whitelabelled equivalent config value correctly', function () {
|
|
2885
|
+
var specMock = utils.deepClone(spec);
|
|
2886
|
+
config.setConfig({'ozone': {'oz_omp_floor': 'ozone-floor-value'}});
|
|
2887
|
+
config.setConfig({'markbidder': {'mb_omp_floor': 'markbidder-floor-value'}});
|
|
2888
|
+
specMock.propertyBag.whitelabel = {bidder: 'ozone', keyPrefix: 'oz'};
|
|
2889
|
+
let testKey = 'ozone.oz_omp_floor';
|
|
2890
|
+
let ozone_value = specMock.getWhitelabelConfigItem(testKey);
|
|
2891
|
+
expect(ozone_value).to.equal('ozone-floor-value');
|
|
2892
|
+
specMock.propertyBag.whitelabel = {bidder: 'markbidder', keyPrefix: 'mb'};
|
|
2893
|
+
let markbidder_config = specMock.getWhitelabelConfigItem(testKey);
|
|
2894
|
+
expect(markbidder_config).to.equal('markbidder-floor-value');
|
|
2895
|
+
config.setConfig({'markbidder': {'singleRequest': 'markbidder-singlerequest-value'}});
|
|
2896
|
+
let testKey2 = 'ozone.singleRequest';
|
|
2897
|
+
let markbidder_config2 = specMock.getWhitelabelConfigItem(testKey2);
|
|
2898
|
+
expect(markbidder_config2).to.equal('markbidder-singlerequest-value');
|
|
2899
|
+
config.resetConfig();
|
|
2900
|
+
});
|
|
2901
|
+
});
|
|
2890
2902
|
});
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
// import or require modules necessary for the test, e.g.:
|
|
2
|
+
import { expect } from 'chai'; // may prefer 'assert' in place of 'expect'
|
|
3
|
+
import { spec } from '../../../modules/pilotxBidAdapter.js';
|
|
4
|
+
|
|
5
|
+
describe('pilotxAdapter', function () {
|
|
6
|
+
describe('isBidRequestValid', function () {
|
|
7
|
+
let banner;
|
|
8
|
+
beforeEach(function () {
|
|
9
|
+
banner = {
|
|
10
|
+
bidder: 'pilotx',
|
|
11
|
+
adUnitCode: 'adunit-test',
|
|
12
|
+
mediaTypes: { banner: {} },
|
|
13
|
+
sizes: [[300, 250], [468, 60]],
|
|
14
|
+
bidId: '2de8c82e30665a',
|
|
15
|
+
params: {
|
|
16
|
+
placementId: '1'
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('should return false if sizes is empty', function () {
|
|
22
|
+
banner.sizes = []
|
|
23
|
+
expect(spec.isBidRequestValid(banner)).to.equal(false);
|
|
24
|
+
});
|
|
25
|
+
it('should return true if all is valid/ is not empty', function () {
|
|
26
|
+
expect(spec.isBidRequestValid(banner)).to.equal(true);
|
|
27
|
+
});
|
|
28
|
+
it('should return false if there is no placement id found', function () {
|
|
29
|
+
banner.params = {}
|
|
30
|
+
expect(spec.isBidRequestValid(banner)).to.equal(false);
|
|
31
|
+
});
|
|
32
|
+
it('should return false if sizes is empty', function () {
|
|
33
|
+
banner.sizes = []
|
|
34
|
+
expect(spec.isBidRequestValid(banner)).to.equal(false);
|
|
35
|
+
});
|
|
36
|
+
it('should return false for no size and empty params', function() {
|
|
37
|
+
const emptySizes = {
|
|
38
|
+
bidder: 'pilotx',
|
|
39
|
+
adUnitCode: 'adunit-test',
|
|
40
|
+
mediaTypes: { banner: {} },
|
|
41
|
+
bidId: '2de8c82e30665a',
|
|
42
|
+
params: {
|
|
43
|
+
placementId: '1',
|
|
44
|
+
sizes: []
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
expect(spec.isBidRequestValid(emptySizes)).to.equal(false);
|
|
48
|
+
})
|
|
49
|
+
it('should return true for no size and valid size params', function() {
|
|
50
|
+
const emptySizes = {
|
|
51
|
+
bidder: 'pilotx',
|
|
52
|
+
adUnitCode: 'adunit-test',
|
|
53
|
+
mediaTypes: { banner: {} },
|
|
54
|
+
bidId: '2de8c82e30665a',
|
|
55
|
+
params: {
|
|
56
|
+
placementId: '1',
|
|
57
|
+
sizes: [[300, 250], [468, 60]]
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
expect(spec.isBidRequestValid(emptySizes)).to.equal(true);
|
|
61
|
+
})
|
|
62
|
+
it('should return false for no size items', function() {
|
|
63
|
+
const emptySizes = {
|
|
64
|
+
bidder: 'pilotx',
|
|
65
|
+
adUnitCode: 'adunit-test',
|
|
66
|
+
mediaTypes: { banner: {} },
|
|
67
|
+
bidId: '2de8c82e30665a',
|
|
68
|
+
params: {
|
|
69
|
+
placementId: '1'
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
expect(spec.isBidRequestValid(emptySizes)).to.equal(false);
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe('buildRequests', function () {
|
|
77
|
+
const mockRequest = { refererInfo: {} };
|
|
78
|
+
const mockRequestGDPR = {
|
|
79
|
+
refererInfo: {},
|
|
80
|
+
gdprConsent: {
|
|
81
|
+
consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==',
|
|
82
|
+
gdprApplies: true
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
const mockVideo1 = [{
|
|
87
|
+
adUnitCode: 'video1',
|
|
88
|
+
auctionId: '01618029-7ae9-4e98-a73a-1ed0c817f414',
|
|
89
|
+
bidId: '2a59588c0114fa',
|
|
90
|
+
bidRequestsCount: 1,
|
|
91
|
+
bidder: 'pilotx',
|
|
92
|
+
bidderRequestId: '1f6b4ba2039726',
|
|
93
|
+
bidderRequestsCount: 1,
|
|
94
|
+
bidderWinsCount: 0,
|
|
95
|
+
crumbs: { pubcid: 'de5240ef-ff80-4b55-8837-26a11cfbf64c' },
|
|
96
|
+
mediaTypes: {
|
|
97
|
+
video: {
|
|
98
|
+
context: 'instream',
|
|
99
|
+
mimes: ['video/mp4'],
|
|
100
|
+
playbackmethod: [2],
|
|
101
|
+
playerSize: [[640, 480]],
|
|
102
|
+
protocols: [1, 2, 3, 4, 5, 6, 7, 8],
|
|
103
|
+
skip: 1
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
ortb2Imp: {
|
|
107
|
+
ext: {
|
|
108
|
+
data: {
|
|
109
|
+
pbadslot: 'video1'
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
params: { placementId: '379' },
|
|
114
|
+
sizes: [[640, 480]],
|
|
115
|
+
src: 'client',
|
|
116
|
+
transactionId: 'fec9f2ff-da13-4921-8437-8d679c2be7fe',
|
|
117
|
+
}];
|
|
118
|
+
const mockVideo2 = [{
|
|
119
|
+
adUnitCode: 'video1',
|
|
120
|
+
auctionId: '01618029-7ae9-4e98-a73a-1ed0c817f414',
|
|
121
|
+
bidId: '2a59588c0114fa',
|
|
122
|
+
bidRequestsCount: 1,
|
|
123
|
+
bidder: 'pilotx',
|
|
124
|
+
bidderRequestId: '1f6b4ba2039726',
|
|
125
|
+
bidderRequestsCount: 1,
|
|
126
|
+
bidderWinsCount: 0,
|
|
127
|
+
crumbs: { pubcid: 'de5240ef-ff80-4b55-8837-26a11cfbf64c' },
|
|
128
|
+
mediaTypes: {
|
|
129
|
+
video: {
|
|
130
|
+
context: 'instream',
|
|
131
|
+
mimes: ['video/mp4'],
|
|
132
|
+
playbackmethod: [2],
|
|
133
|
+
playerSize: [[640, 480]],
|
|
134
|
+
protocols: [1, 2, 3, 4, 5, 6, 7, 8],
|
|
135
|
+
skip: 1
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
ortb2Imp: {
|
|
139
|
+
ext: {
|
|
140
|
+
data: {
|
|
141
|
+
pbadslot: 'video1'
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
params: { placementId: '379' },
|
|
146
|
+
sizes: [640, 480],
|
|
147
|
+
src: 'client',
|
|
148
|
+
transactionId: 'fec9f2ff-da13-4921-8437-8d679c2be7fe',
|
|
149
|
+
}];
|
|
150
|
+
it('should return correct response', function () {
|
|
151
|
+
const builtRequest = spec.buildRequests(mockVideo1, mockRequest)
|
|
152
|
+
let builtRequestData = builtRequest.data
|
|
153
|
+
let data = JSON.parse(builtRequestData)
|
|
154
|
+
expect(data['379'].bidId).to.equal(mockVideo1[0].bidId)
|
|
155
|
+
});
|
|
156
|
+
it('should return correct response for only array of size', function () {
|
|
157
|
+
const builtRequest = spec.buildRequests(mockVideo2, mockRequest)
|
|
158
|
+
let builtRequestData = builtRequest.data
|
|
159
|
+
let data = JSON.parse(builtRequestData)
|
|
160
|
+
expect(data['379'].sizes[0][0]).to.equal(mockVideo2[0].sizes[0])
|
|
161
|
+
expect(data['379'].sizes[0][1]).to.equal(mockVideo2[0].sizes[1])
|
|
162
|
+
});
|
|
163
|
+
it('should be valid and pass gdpr items correctly', function () {
|
|
164
|
+
const builtRequest = spec.buildRequests(mockVideo2, mockRequestGDPR)
|
|
165
|
+
let builtRequestData = builtRequest.data
|
|
166
|
+
let data = JSON.parse(builtRequestData)
|
|
167
|
+
expect(data['379'].gdprConsentString).to.equal(mockRequestGDPR.gdprConsent.consentString)
|
|
168
|
+
expect(data['379'].gdprConsentRequired).to.equal(mockRequestGDPR.gdprConsent.gdprApplies)
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe('interpretResponse', function () {
|
|
172
|
+
const bidRequest = {}
|
|
173
|
+
const serverResponse = {
|
|
174
|
+
cpm: 2.5,
|
|
175
|
+
creativeId: 'V9060',
|
|
176
|
+
currency: 'US',
|
|
177
|
+
height: 480,
|
|
178
|
+
mediaType: 'video',
|
|
179
|
+
netRevenue: false,
|
|
180
|
+
requestId: '273b39c74069cb',
|
|
181
|
+
ttl: 3000,
|
|
182
|
+
vastUrl: 'http://testadserver.com/ads?&k=60cd901ad8ab70c9cedf373cb17b93b8&pid=379&tid=91342717',
|
|
183
|
+
width: 640
|
|
184
|
+
}
|
|
185
|
+
const serverResponseVideo = {
|
|
186
|
+
body: serverResponse
|
|
187
|
+
}
|
|
188
|
+
const serverResponse2 = {
|
|
189
|
+
cpm: 2.5,
|
|
190
|
+
creativeId: 'V9060',
|
|
191
|
+
currency: 'US',
|
|
192
|
+
height: 480,
|
|
193
|
+
mediaType: 'banner',
|
|
194
|
+
netRevenue: false,
|
|
195
|
+
requestId: '273b39c74069cb',
|
|
196
|
+
ttl: 3000,
|
|
197
|
+
vastUrl: 'http://testadserver.com/ads?&k=60cd901ad8ab70c9cedf373cb17b93b8&pid=379&tid=91342717',
|
|
198
|
+
width: 640
|
|
199
|
+
}
|
|
200
|
+
const serverResponseBanner = {
|
|
201
|
+
body: serverResponse2
|
|
202
|
+
}
|
|
203
|
+
it('should be valid from bidRequest for video', function () {
|
|
204
|
+
const bidResponses = spec.interpretResponse(serverResponseVideo, bidRequest)
|
|
205
|
+
expect(bidResponses[0].requestId).to.equal(serverResponse.requestId)
|
|
206
|
+
expect(bidResponses[0].cpm).to.equal(serverResponse.cpm)
|
|
207
|
+
expect(bidResponses[0].width).to.equal(serverResponse.width)
|
|
208
|
+
expect(bidResponses[0].height).to.equal(serverResponse.height)
|
|
209
|
+
expect(bidResponses[0].creativeId).to.equal(serverResponse.creativeId)
|
|
210
|
+
expect(bidResponses[0].currency).to.equal(serverResponse.currency)
|
|
211
|
+
expect(bidResponses[0].netRevenue).to.equal(serverResponse.netRevenue)
|
|
212
|
+
expect(bidResponses[0].ttl).to.equal(serverResponse.ttl)
|
|
213
|
+
expect(bidResponses[0].vastUrl).to.equal(serverResponse.vastUrl)
|
|
214
|
+
expect(bidResponses[0].mediaType).to.equal(serverResponse.mediaType)
|
|
215
|
+
expect(bidResponses[0].meta.mediaType).to.equal(serverResponse.mediaType)
|
|
216
|
+
});
|
|
217
|
+
it('should be valid from bidRequest for banner', function () {
|
|
218
|
+
const bidResponses = spec.interpretResponse(serverResponseBanner, bidRequest)
|
|
219
|
+
expect(bidResponses[0].requestId).to.equal(serverResponse2.requestId)
|
|
220
|
+
expect(bidResponses[0].cpm).to.equal(serverResponse2.cpm)
|
|
221
|
+
expect(bidResponses[0].width).to.equal(serverResponse2.width)
|
|
222
|
+
expect(bidResponses[0].height).to.equal(serverResponse2.height)
|
|
223
|
+
expect(bidResponses[0].creativeId).to.equal(serverResponse2.creativeId)
|
|
224
|
+
expect(bidResponses[0].currency).to.equal(serverResponse2.currency)
|
|
225
|
+
expect(bidResponses[0].netRevenue).to.equal(serverResponse2.netRevenue)
|
|
226
|
+
expect(bidResponses[0].ttl).to.equal(serverResponse2.ttl)
|
|
227
|
+
expect(bidResponses[0].ad).to.equal(serverResponse2.ad)
|
|
228
|
+
expect(bidResponses[0].mediaType).to.equal(serverResponse2.mediaType)
|
|
229
|
+
expect(bidResponses[0].meta.mediaType).to.equal(serverResponse2.mediaType)
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
describe('setPlacementID', function () {
|
|
233
|
+
const multiplePlacementIds = ['380', '381']
|
|
234
|
+
it('should be valid with an array of placement ids passed', function () {
|
|
235
|
+
const placementID = spec.setPlacementID(multiplePlacementIds)
|
|
236
|
+
expect(placementID).to.equal('380#381')
|
|
237
|
+
});
|
|
238
|
+
it('should be valid with single placement ID passed', function () {
|
|
239
|
+
const placementID = spec.setPlacementID('381')
|
|
240
|
+
expect(placementID).to.equal('381')
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
// Add other `describe` or `it` blocks as necessary
|
|
244
|
+
});
|
|
@@ -95,6 +95,9 @@ const BID2 = Object.assign({}, BID, {
|
|
|
95
95
|
'hb_pb': '1.500',
|
|
96
96
|
'hb_size': '728x90',
|
|
97
97
|
'hb_source': 'server'
|
|
98
|
+
},
|
|
99
|
+
meta: {
|
|
100
|
+
advertiserDomains: ['example.com']
|
|
98
101
|
}
|
|
99
102
|
});
|
|
100
103
|
|
|
@@ -382,6 +385,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
382
385
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
383
386
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
384
387
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
388
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
385
389
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
386
390
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
387
391
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -651,6 +655,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
651
655
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
652
656
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
653
657
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
658
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
654
659
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
655
660
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
656
661
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -708,6 +713,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
708
713
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
709
714
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
710
715
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
716
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
711
717
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
712
718
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
713
719
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -754,6 +760,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
754
760
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
755
761
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
756
762
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
763
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
757
764
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
758
765
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
759
766
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -771,9 +778,10 @@ describe('pubmatic analytics adapter', function () {
|
|
|
771
778
|
expect(data.kgpv).to.equal('*');
|
|
772
779
|
});
|
|
773
780
|
|
|
774
|
-
it('Logger: regexPattern in bid.bidResponse', function() {
|
|
781
|
+
it('Logger: regexPattern in bid.bidResponse and url in adomain', function() {
|
|
775
782
|
const BID2_COPY = utils.deepClone(BID2);
|
|
776
783
|
BID2_COPY.regexPattern = '*';
|
|
784
|
+
BID2_COPY.meta.advertiserDomains = ['https://www.example.com/abc/223']
|
|
777
785
|
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
|
|
778
786
|
events.emit(AUCTION_INIT, MOCK.AUCTION_INIT);
|
|
779
787
|
events.emit(BID_REQUESTED, MOCK.BID_REQUESTED);
|
|
@@ -808,6 +816,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
808
816
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
809
817
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
810
818
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
819
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
811
820
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
812
821
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
813
822
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -859,6 +868,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
859
868
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
860
869
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
861
870
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
871
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
862
872
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
863
873
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
864
874
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -912,6 +922,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
912
922
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
913
923
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
914
924
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
925
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
915
926
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
916
927
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
917
928
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -1011,6 +1022,7 @@ describe('pubmatic analytics adapter', function () {
|
|
|
1011
1022
|
expect(data.s[1].ps[0].di).to.equal('the-deal-id');
|
|
1012
1023
|
expect(data.s[1].ps[0].dc).to.equal('PMP');
|
|
1013
1024
|
expect(data.s[1].ps[0].mi).to.equal('matched-impression');
|
|
1025
|
+
expect(data.s[1].ps[0].adv).to.equal('example.com');
|
|
1014
1026
|
expect(data.s[1].ps[0].l1).to.equal(3214);
|
|
1015
1027
|
expect(data.s[1].ps[0].l2).to.equal(0);
|
|
1016
1028
|
expect(data.s[1].ps[0].ss).to.equal(1);
|
|
@@ -3,6 +3,7 @@ import {config} from 'src/config.js';
|
|
|
3
3
|
import * as sinon from 'sinon';
|
|
4
4
|
import {default as CONSTANTS} from '../../../src/constants.json';
|
|
5
5
|
import {default as events} from '../../../src/events.js';
|
|
6
|
+
import 'src/prebid.js';
|
|
6
7
|
|
|
7
8
|
const getBidRequestDataSpy = sinon.spy();
|
|
8
9
|
|
|
@@ -140,7 +141,56 @@ describe('Real time module', function () {
|
|
|
140
141
|
const adUnits = rtdModule.getAdUnitTargeting(auction);
|
|
141
142
|
assert.deepEqual(expectedAdUnits, adUnits)
|
|
142
143
|
done();
|
|
143
|
-
})
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
describe('setBidRequestData', () => {
|
|
147
|
+
let withWait, withoutWait;
|
|
148
|
+
|
|
149
|
+
function runSetBidRequestData() {
|
|
150
|
+
return new Promise((resolve) => {
|
|
151
|
+
rtdModule.setBidRequestsData(resolve, {bidRequest: {}});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
beforeEach(() => {
|
|
156
|
+
withWait = {
|
|
157
|
+
submod: validSMWait,
|
|
158
|
+
cbTime: 0,
|
|
159
|
+
cbRan: false
|
|
160
|
+
};
|
|
161
|
+
withoutWait = {
|
|
162
|
+
submod: validSM,
|
|
163
|
+
cbTime: 0,
|
|
164
|
+
cbRan: false
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
[withWait, withoutWait].forEach((c) => {
|
|
168
|
+
c.submod.getBidRequestData = sinon.stub().callsFake((_, cb) => {
|
|
169
|
+
setTimeout(() => {
|
|
170
|
+
c.cbRan = true;
|
|
171
|
+
cb();
|
|
172
|
+
}, c.cbTime);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('should allow non-priority submodules to run synchronously', () => {
|
|
178
|
+
withWait.cbTime = withoutWait.cbTime = 0;
|
|
179
|
+
return runSetBidRequestData().then(() => {
|
|
180
|
+
expect(withWait.cbRan).to.be.true;
|
|
181
|
+
expect(withoutWait.cbRan).to.be.true;
|
|
182
|
+
})
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('should not wait for non-priority submodules if priority ones complete first', () => {
|
|
186
|
+
withWait.cbTime = 10;
|
|
187
|
+
withoutWait.cbTime = 100;
|
|
188
|
+
return runSetBidRequestData().then(() => {
|
|
189
|
+
expect(withWait.cbRan).to.be.true;
|
|
190
|
+
expect(withoutWait.cbRan).to.be.false;
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
});
|
|
144
194
|
});
|
|
145
195
|
|
|
146
196
|
it('deep merge object', function () {
|
|
@@ -195,7 +245,7 @@ describe('Real time module', function () {
|
|
|
195
245
|
'name': 'tp1',
|
|
196
246
|
},
|
|
197
247
|
{
|
|
198
|
-
'name': 'tp2'
|
|
248
|
+
'name': 'tp2',
|
|
199
249
|
}
|
|
200
250
|
]
|
|
201
251
|
}
|
|
@@ -206,7 +256,7 @@ describe('Real time module', function () {
|
|
|
206
256
|
function eventHandlingProvider(name) {
|
|
207
257
|
const provider = {
|
|
208
258
|
name: name,
|
|
209
|
-
init: () => true
|
|
259
|
+
init: () => true,
|
|
210
260
|
}
|
|
211
261
|
Object.values(EVENTS).forEach((ev) => provider[ev] = sinon.spy());
|
|
212
262
|
return provider;
|
|
@@ -222,7 +272,19 @@ describe('Real time module', function () {
|
|
|
222
272
|
afterEach(() => {
|
|
223
273
|
_detachers.forEach((d) => d())
|
|
224
274
|
config.resetConfig();
|
|
225
|
-
})
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('should set targeting for auctionEnd', () => {
|
|
278
|
+
providers.forEach(p => p.getTargetingData = sinon.spy());
|
|
279
|
+
const auction = {
|
|
280
|
+
adUnitCodes: ['a1'],
|
|
281
|
+
adUnits: [{code: 'a1'}]
|
|
282
|
+
};
|
|
283
|
+
mockEmitEvent(CONSTANTS.EVENTS.AUCTION_END, auction);
|
|
284
|
+
providers.forEach(p => {
|
|
285
|
+
expect(p.getTargetingData.calledWith(auction.adUnitCodes)).to.be.true;
|
|
286
|
+
});
|
|
287
|
+
});
|
|
226
288
|
|
|
227
289
|
Object.entries(EVENTS).forEach(([event, hook]) => {
|
|
228
290
|
it(`'${event}' should be propagated to providers through '${hook}'`, () => {
|
|
@@ -242,5 +304,5 @@ describe('Real time module', function () {
|
|
|
242
304
|
expect(providers[1][hook].called).to.be.true;
|
|
243
305
|
});
|
|
244
306
|
});
|
|
245
|
-
})
|
|
307
|
+
});
|
|
246
308
|
});
|