prebid.js 7.25.0 → 7.27.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/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -0
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/bucksenseBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/captifyRtdProvider.js +1 -0
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -0
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +240 -202
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -0
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartytechBidAdapter.js +1 -0
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/viqeoBidAdapter.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/dist/zeusPrimeRtdProvider.js +31 -0
- package/integrationExamples/gpt/captifyRtdProvider_example.html +167 -0
- package/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/modules/.submodules.json +3 -1
- package/modules/admaticBidAdapter.js +116 -58
- package/modules/admaticBidAdapter.md +2 -2
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/beopBidAdapter.js +17 -2
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/captifyRtdProvider.js +146 -0
- package/modules/captifyRtdProvider.md +68 -0
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/discoveryBidAdapter.js +38 -17
- package/modules/discoveryBidAdapter.md +7 -6
- package/modules/eplanningBidAdapter.js +2 -6
- package/modules/fluctBidAdapter.js +5 -0
- package/modules/gdprEnforcement.js +26 -24
- package/modules/genericAnalyticsAdapter.js +157 -0
- package/modules/geoedgeRtdProvider.js +22 -0
- package/modules/glomexBidAdapter.js +2 -0
- package/modules/gravitoIdSystem.js +3 -4
- package/modules/gridBidAdapter.js +441 -23
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +176 -0
- package/modules/growthCodeAnalyticsAdapter.md +41 -0
- package/modules/impactifyBidAdapter.js +19 -1
- package/modules/jwplayerRtdProvider.js +1 -2
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nextMillenniumBidAdapter.js +19 -23
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/pubCommonId.js +2 -1
- package/modules/pubProvidedIdSystem.js +2 -0
- package/modules/rasBidAdapter.js +8 -3
- package/modules/rasBidAdapter.md +16 -15
- package/modules/redtramBidAdapter.js +155 -0
- package/modules/redtramBidAdapter.md +33 -0
- package/modules/riseBidAdapter.js +15 -0
- package/modules/riseBidAdapter.md +3 -3
- package/modules/rtbhouseBidAdapter.js +90 -29
- package/modules/rubiconBidAdapter.js +2 -1
- package/modules/seedtagBidAdapter.js +67 -56
- package/modules/seedtagBidAdapter.md +60 -0
- package/modules/sharedIdSystem.js +3 -1
- package/modules/smartadserverBidAdapter.js +6 -2
- package/modules/smartxBidAdapter.js +11 -8
- package/modules/smartytechBidAdapter.js +78 -0
- package/modules/smartytechBidAdapter.md +44 -0
- package/modules/smnBidAdapter.md +52 -0
- package/modules/taboolaBidAdapter.js +3 -3
- package/modules/taboolaBidAdapter.md +0 -2
- package/modules/tappxBidAdapter.js +21 -6
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +8 -3
- package/modules/userId/index.js +1 -1
- package/modules/vidazooBidAdapter.js +26 -3
- package/modules/viqeoBidAdapter.js +180 -0
- package/modules/viqeoBidAdapter.md +56 -0
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +29 -12
- package/modules/yieldliftBidAdapter.js +3 -3
- package/modules/yieldoneBidAdapter.js +60 -8
- package/modules/yieldoneBidAdapter.md +109 -9
- package/modules/zeta_global_sspBidAdapter.js +4 -0
- package/modules/zeusPrimeRtdProvider.js +357 -0
- package/modules/zeusPrimeRtdProvider.md +60 -0
- package/package.json +1 -1
- package/src/adloader.js +0 -1
- package/src/auction.js +19 -3
- package/src/consentHandler.js +8 -0
- package/src/events.js +4 -0
- package/src/native.js +31 -20
- package/src/refererDetection.js +6 -1
- package/src/storageManager.js +6 -3
- package/test/helpers/analytics.js +34 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +86 -0
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/admaticBidAdapter_spec.js +262 -3
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/beopBidAdapter_spec.js +52 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/captifyRtdProvider_spec.js +253 -0
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/discoveryBidAdapter_spec.js +9 -8
- package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
- package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
- package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
- package/test/spec/modules/fpdModule_spec.js +1 -1
- package/test/spec/modules/gdprEnforcement_spec.js +115 -68
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
- package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
- package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
- package/test/spec/modules/gridBidAdapter_spec.js +289 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
- package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
- package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +4 -3
- package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
- package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
- package/test/spec/modules/rasBidAdapter_spec.js +5 -1
- package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
- package/test/spec/modules/riseBidAdapter_spec.js +24 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
- package/test/spec/modules/smartadserverBidAdapter_spec.js +80 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +32 -0
- package/test/spec/modules/smartytechBidAdapter_spec.js +162 -0
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/taboolaBidAdapter_spec.js +0 -77
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +27 -0
- package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
- package/test/spec/modules/viqeoBidAdapter_spec.js +124 -0
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +174 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/modules/yieldoneBidAdapter_spec.js +30 -6
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +16 -1
- package/test/spec/modules/zeusPrimeRtdProvider_spec.js +410 -0
- package/test/spec/native_spec.js +68 -56
- package/test/spec/refererDetection_spec.js +45 -7
- package/test/spec/unit/core/storageManager_spec.js +2 -1
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import { zeusPrimeSubmodule } from 'modules/zeusPrimeRtdProvider';
|
|
2
|
+
import { server } from 'test/mocks/xhr.js';
|
|
3
|
+
import * as utils from 'src/utils';
|
|
4
|
+
|
|
5
|
+
async function waitForStatus(statusVar) {
|
|
6
|
+
const MAX_COUNT = 20;
|
|
7
|
+
let count = 0;
|
|
8
|
+
while (
|
|
9
|
+
count <= MAX_COUNT &&
|
|
10
|
+
window.zeusPrime.status &&
|
|
11
|
+
window.zeusPrime.status[statusVar] !== true
|
|
12
|
+
) {
|
|
13
|
+
count += 1;
|
|
14
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (count === MAX_COUNT) {
|
|
18
|
+
throw new Error('Timeout waiting for zeusPrimeRtdProvider to complete');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Execute all the commands in the googletag.cmd queue.
|
|
24
|
+
*/
|
|
25
|
+
function executeGoogletagTargeting() {
|
|
26
|
+
window.googletag.cmd.forEach((cmd) => cmd());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe('Zeus Prime RTD submodule', () => {
|
|
30
|
+
let logErrorSpy;
|
|
31
|
+
let logMessageSpy;
|
|
32
|
+
let setTargetingStub;
|
|
33
|
+
let originalGtag;
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
logErrorSpy = sinon.spy(utils, 'logError');
|
|
37
|
+
logMessageSpy = sinon.spy(utils, 'logMessage');
|
|
38
|
+
setTargetingStub = sinon.stub();
|
|
39
|
+
window.zeusPrime = { cmd: [] };
|
|
40
|
+
originalGtag = window.googletag;
|
|
41
|
+
window.googletag = {
|
|
42
|
+
cmd: [],
|
|
43
|
+
pubads: () => ({
|
|
44
|
+
setTargeting: setTargetingStub,
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// Mock subtle since this doesnt exists in some test environments due to security in newer browsers.
|
|
49
|
+
if (typeof window.crypto.subtle === 'undefined') {
|
|
50
|
+
Object.defineProperty(crypto, 'subtle', { value: { digest: () => 'mockHash' } })
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
afterEach(() => {
|
|
55
|
+
logErrorSpy.restore();
|
|
56
|
+
logMessageSpy.restore();
|
|
57
|
+
window.googletag = originalGtag;
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should init and set key-value for zeus_<gamId>', async () => {
|
|
61
|
+
zeusPrimeSubmodule.init({
|
|
62
|
+
params: {
|
|
63
|
+
gamId: '1234',
|
|
64
|
+
hostname: 'www.example.com',
|
|
65
|
+
pathname: '/',
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// wait for the script to finish
|
|
70
|
+
await waitForStatus('scriptComplete');
|
|
71
|
+
|
|
72
|
+
// execute any googletag commands added to the queue during execution
|
|
73
|
+
executeGoogletagTargeting();
|
|
74
|
+
|
|
75
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
76
|
+
sinon.assert.callCount(setTargetingStub, 1);
|
|
77
|
+
sinon.assert.calledWith(setTargetingStub, 'zeus_1234', 'www.example.com');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('should init and set key-value for zeus_<gamId> from command queue', async () => {
|
|
81
|
+
window.zeusPrime.cmd.push((prime) => (prime.gamId = '9876'));
|
|
82
|
+
zeusPrimeSubmodule.init({
|
|
83
|
+
params: {
|
|
84
|
+
hostname: 'www.example.com',
|
|
85
|
+
pathname: '/',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// wait for the script to finish
|
|
90
|
+
await waitForStatus('scriptComplete');
|
|
91
|
+
|
|
92
|
+
// execute any googletag commands added to the queue during execution
|
|
93
|
+
executeGoogletagTargeting();
|
|
94
|
+
|
|
95
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
96
|
+
sinon.assert.callCount(setTargetingStub, 1);
|
|
97
|
+
sinon.assert.calledWith(setTargetingStub, 'zeus_9876', 'www.example.com');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should init with values from location and set key-value for zeus_<gamId>', async () => {
|
|
101
|
+
zeusPrimeSubmodule.init({ params: { gamId: '1234' } });
|
|
102
|
+
|
|
103
|
+
// wait for the script to finish
|
|
104
|
+
await waitForStatus('scriptComplete');
|
|
105
|
+
|
|
106
|
+
// execute any googletag commands added to the queue during execution
|
|
107
|
+
executeGoogletagTargeting();
|
|
108
|
+
|
|
109
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
110
|
+
sinon.assert.callCount(setTargetingStub, 1);
|
|
111
|
+
sinon.assert.calledWith(setTargetingStub, 'zeus_1234', 'localhost');
|
|
112
|
+
expect(window.zeusPrime.pathname).to.equal('/context.html');
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('should emit error when gamId is not set', async () => {
|
|
116
|
+
zeusPrimeSubmodule.init({});
|
|
117
|
+
|
|
118
|
+
// wait for the script to finish
|
|
119
|
+
await waitForStatus('scriptComplete');
|
|
120
|
+
|
|
121
|
+
// execute any googletag commands added to the queue during execution
|
|
122
|
+
executeGoogletagTargeting();
|
|
123
|
+
|
|
124
|
+
expect(window.googletag.cmd).to.have.length(0);
|
|
125
|
+
sinon.assert.callCount(setTargetingStub, 0);
|
|
126
|
+
sinon.assert.calledWith(
|
|
127
|
+
logErrorSpy,
|
|
128
|
+
'zeusPrimeRtdProvider: ',
|
|
129
|
+
'Failed to run.',
|
|
130
|
+
'window.zeusPrime.gamId must be a string. Received: undefined'
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('should not make a call to the server when url is a homepage', async () => {
|
|
135
|
+
zeusPrimeSubmodule.init({
|
|
136
|
+
params: {
|
|
137
|
+
gamId: '1234',
|
|
138
|
+
hostname: 'www.example.com',
|
|
139
|
+
pathname: '/',
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// wait for the script to finish
|
|
144
|
+
await waitForStatus('scriptComplete');
|
|
145
|
+
|
|
146
|
+
expect(server.requests).to.have.length(0);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('should make a call to the server and set key-vlaue when url is an article page and returns topics', async () => {
|
|
150
|
+
zeusPrimeSubmodule.init({
|
|
151
|
+
params: {
|
|
152
|
+
gamId: '1234',
|
|
153
|
+
hostname: 'www.example.com',
|
|
154
|
+
pathname: '/article/some-article',
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// Wait for request to be sent
|
|
159
|
+
await waitForStatus('insightsReqReceived');
|
|
160
|
+
|
|
161
|
+
// Response
|
|
162
|
+
server.requests[0].respond(
|
|
163
|
+
200,
|
|
164
|
+
{ 'Content-Type': 'application/json' },
|
|
165
|
+
'{"topics": ["bs0"]}'
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
// Wait for the script to process the response
|
|
169
|
+
await waitForStatus('scriptComplete');
|
|
170
|
+
|
|
171
|
+
// execute any googletag commands added to the queue during execution
|
|
172
|
+
executeGoogletagTargeting();
|
|
173
|
+
|
|
174
|
+
expect(server.requestCount).to.be.equal(1);
|
|
175
|
+
expect(window.googletag.cmd).to.have.length(2);
|
|
176
|
+
sinon.assert.calledTwice(setTargetingStub);
|
|
177
|
+
sinon.assert.calledWith(
|
|
178
|
+
setTargetingStub.firstCall,
|
|
179
|
+
'zeus_1234',
|
|
180
|
+
'www.example.com'
|
|
181
|
+
);
|
|
182
|
+
sinon.assert.calledWith(setTargetingStub.secondCall, 'zeus_insights', [
|
|
183
|
+
'bs0',
|
|
184
|
+
]);
|
|
185
|
+
sinon.assert.notCalled(logErrorSpy);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('should not set insights keyvalue when server returns 204', async () => {
|
|
189
|
+
zeusPrimeSubmodule.init({
|
|
190
|
+
params: {
|
|
191
|
+
gamId: '1234',
|
|
192
|
+
hostname: 'www.example.com',
|
|
193
|
+
pathname: '/article/some-article',
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
// Wait for request to be sent
|
|
198
|
+
await waitForStatus('insightsReqReceived');
|
|
199
|
+
|
|
200
|
+
// Response
|
|
201
|
+
server.requests[0].respond(204, { 'Content-Type': 'application/json' });
|
|
202
|
+
|
|
203
|
+
// Wait for the script to process the response
|
|
204
|
+
await waitForStatus('scriptComplete');
|
|
205
|
+
|
|
206
|
+
// execute any googletag commands added to the queue during execution
|
|
207
|
+
executeGoogletagTargeting();
|
|
208
|
+
|
|
209
|
+
expect(server.requestCount).to.be.equal(1);
|
|
210
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
211
|
+
sinon.assert.calledOnce(setTargetingStub);
|
|
212
|
+
sinon.assert.calledWith(
|
|
213
|
+
setTargetingStub.firstCall,
|
|
214
|
+
'zeus_1234',
|
|
215
|
+
'www.example.com'
|
|
216
|
+
);
|
|
217
|
+
sinon.assert.notCalled(logErrorSpy);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it('should not set insights keyvalue when server returns empty topics array', async () => {
|
|
221
|
+
zeusPrimeSubmodule.init({
|
|
222
|
+
params: {
|
|
223
|
+
gamId: '1234',
|
|
224
|
+
hostname: 'www.example.com',
|
|
225
|
+
pathname: '/article/some-article',
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// Wait for request to be sent
|
|
230
|
+
await waitForStatus('insightsReqReceived');
|
|
231
|
+
|
|
232
|
+
// Respond
|
|
233
|
+
server.requests[0].respond(
|
|
234
|
+
200,
|
|
235
|
+
{ 'Content-Type': 'application/json' },
|
|
236
|
+
'{ "topics": [] }'
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
// Wait for the script to process the response
|
|
240
|
+
await waitForStatus('scriptComplete');
|
|
241
|
+
|
|
242
|
+
// execute any googletag commands added to the queue during execution
|
|
243
|
+
executeGoogletagTargeting();
|
|
244
|
+
|
|
245
|
+
expect(server.requestCount).to.be.equal(1);
|
|
246
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
247
|
+
sinon.assert.calledOnce(setTargetingStub);
|
|
248
|
+
sinon.assert.calledWith(
|
|
249
|
+
setTargetingStub.firstCall,
|
|
250
|
+
'zeus_1234',
|
|
251
|
+
'www.example.com'
|
|
252
|
+
);
|
|
253
|
+
sinon.assert.notCalled(logErrorSpy);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it('should not set insights keyvalue and emit error when server returns error status (400)', async () => {
|
|
257
|
+
zeusPrimeSubmodule.init({
|
|
258
|
+
params: {
|
|
259
|
+
gamId: '1234',
|
|
260
|
+
hostname: 'www.example.com',
|
|
261
|
+
pathname: '/article/some-article',
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
// Wait for request to be sent
|
|
266
|
+
await waitForStatus('insightsReqReceived');
|
|
267
|
+
|
|
268
|
+
// Response
|
|
269
|
+
server.requests[0].respond(
|
|
270
|
+
404,
|
|
271
|
+
{ 'Content-Type': 'application/json' },
|
|
272
|
+
'{"message": "Not found"}'
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
// Wait for the script to process the response
|
|
276
|
+
await waitForStatus('scriptComplete');
|
|
277
|
+
|
|
278
|
+
// execute any googletag commands added to the queue during execution
|
|
279
|
+
executeGoogletagTargeting();
|
|
280
|
+
|
|
281
|
+
expect(server.requestCount).to.be.equal(1);
|
|
282
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
283
|
+
sinon.assert.calledOnce(setTargetingStub);
|
|
284
|
+
sinon.assert.calledWith(
|
|
285
|
+
setTargetingStub.firstCall,
|
|
286
|
+
'zeus_1234',
|
|
287
|
+
'www.example.com'
|
|
288
|
+
);
|
|
289
|
+
sinon.assert.calledWith(
|
|
290
|
+
logErrorSpy,
|
|
291
|
+
'zeusPrimeRtdProvider: ',
|
|
292
|
+
'Topics request returned error: 404'
|
|
293
|
+
);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
it('should not set insights keyvalue and emit error when response is not received (network request)', async () => {
|
|
297
|
+
zeusPrimeSubmodule.init({
|
|
298
|
+
params: {
|
|
299
|
+
gamId: '1234',
|
|
300
|
+
hostname: 'www.example.com',
|
|
301
|
+
pathname: '/article/some-article',
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
// Wait for request to be sent
|
|
306
|
+
await waitForStatus('insightsReqReceived');
|
|
307
|
+
|
|
308
|
+
// Response
|
|
309
|
+
server.requests[0].error();
|
|
310
|
+
|
|
311
|
+
// Wait for the script to process the response
|
|
312
|
+
await waitForStatus('scriptComplete');
|
|
313
|
+
|
|
314
|
+
// execute any googletag commands added to the queue during execution
|
|
315
|
+
executeGoogletagTargeting();
|
|
316
|
+
|
|
317
|
+
expect(server.requestCount).to.be.equal(1);
|
|
318
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
319
|
+
sinon.assert.calledOnce(setTargetingStub);
|
|
320
|
+
sinon.assert.calledWith(
|
|
321
|
+
setTargetingStub.firstCall,
|
|
322
|
+
'zeus_1234',
|
|
323
|
+
'www.example.com'
|
|
324
|
+
);
|
|
325
|
+
sinon.assert.calledWith(
|
|
326
|
+
logErrorSpy,
|
|
327
|
+
'zeusPrimeRtdProvider: ',
|
|
328
|
+
'failed to request topics'
|
|
329
|
+
);
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
it('fails gracefully when crypto fails', async () => {
|
|
333
|
+
const digestStub = sinon.stub(window.crypto.subtle, 'digest');
|
|
334
|
+
digestStub.throwsException('Failed to generate digest.');
|
|
335
|
+
|
|
336
|
+
zeusPrimeSubmodule.init({
|
|
337
|
+
params: {
|
|
338
|
+
gamId: '1234',
|
|
339
|
+
hostname: 'www.example.com',
|
|
340
|
+
pathname: '/article/some-article',
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// Wait for request to be sent
|
|
345
|
+
await waitForStatus('scriptComplete');
|
|
346
|
+
|
|
347
|
+
sinon.assert.calledWith(
|
|
348
|
+
logErrorSpy,
|
|
349
|
+
'zeusPrimeRtdProvider: ',
|
|
350
|
+
'Failed to load hash'
|
|
351
|
+
);
|
|
352
|
+
|
|
353
|
+
digestStub.restore();
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
it('script should add zeus_prime key and not send request when disabled is set', async () => {
|
|
357
|
+
zeusPrimeSubmodule.init({
|
|
358
|
+
params: {
|
|
359
|
+
gamId: '1234',
|
|
360
|
+
disabled: true,
|
|
361
|
+
hostname: 'www.example.com',
|
|
362
|
+
pathname: '/article/some-article',
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
// Wait for request to be sent
|
|
367
|
+
await waitForStatus('scriptComplete');
|
|
368
|
+
|
|
369
|
+
// execute any googletag commands added to the queue during execution
|
|
370
|
+
executeGoogletagTargeting();
|
|
371
|
+
|
|
372
|
+
expect(server.requestCount).to.be.equal(0);
|
|
373
|
+
expect(window.googletag.cmd).to.have.length(1);
|
|
374
|
+
sinon.assert.calledWith(setTargetingStub, 'zeus_prime', 'false');
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
it('debug true enables debug logging', async () => {
|
|
378
|
+
zeusPrimeSubmodule.init({
|
|
379
|
+
params: {
|
|
380
|
+
gamId: '1234',
|
|
381
|
+
debug: true,
|
|
382
|
+
hostname: 'www.example.com',
|
|
383
|
+
pathname: '/article/some-article',
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
// Wait for request to be sent
|
|
388
|
+
await waitForStatus('scriptComplete');
|
|
389
|
+
|
|
390
|
+
sinon.assert.called(logMessageSpy);
|
|
391
|
+
sinon.assert.notCalled(logErrorSpy);
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
it('debug false disables debug logging', async () => {
|
|
395
|
+
window.zeusPrime.disabled = false;
|
|
396
|
+
zeusPrimeSubmodule.init({
|
|
397
|
+
params: {
|
|
398
|
+
gamId: '1234',
|
|
399
|
+
hostname: 'www.example.com',
|
|
400
|
+
pathname: '/article/some-article',
|
|
401
|
+
},
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// Wait for request to be sent
|
|
405
|
+
await waitForStatus('scriptComplete');
|
|
406
|
+
|
|
407
|
+
sinon.assert.notCalled(logMessageSpy);
|
|
408
|
+
sinon.assert.notCalled(logErrorSpy);
|
|
409
|
+
});
|
|
410
|
+
});
|
package/test/spec/native_spec.js
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
nativeBidIsValid,
|
|
6
6
|
getAssetMessage,
|
|
7
7
|
getAllAssetsMessage,
|
|
8
|
+
toLegacyResponse,
|
|
8
9
|
decorateAdUnitsWithNativeParams,
|
|
9
10
|
isOpenRTBBidRequestValid,
|
|
10
11
|
isNativeOpenRTBBidValid,
|
|
@@ -37,6 +38,7 @@ const bid = {
|
|
|
37
38
|
clickTrackers: ['https://tracker.example'],
|
|
38
39
|
impressionTrackers: ['https://impression.example'],
|
|
39
40
|
javascriptTrackers: '<script src="http://www.foobar.js"></script>',
|
|
41
|
+
privacyLink: 'https://privacy-link.example',
|
|
40
42
|
ext: {
|
|
41
43
|
foo: 'foo-value',
|
|
42
44
|
baz: 'baz-value',
|
|
@@ -98,9 +100,18 @@ const ortbBid = {
|
|
|
98
100
|
privacy: 'https://privacy-link.example',
|
|
99
101
|
ver: '1.2'
|
|
100
102
|
}
|
|
101
|
-
}
|
|
103
|
+
}
|
|
102
104
|
};
|
|
103
105
|
|
|
106
|
+
const completeNativeBid = {
|
|
107
|
+
adId: '123',
|
|
108
|
+
transactionId: 'au',
|
|
109
|
+
native: {
|
|
110
|
+
...bid.native,
|
|
111
|
+
...ortbBid.native
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
104
115
|
const ortbRequest = {
|
|
105
116
|
assets: [
|
|
106
117
|
{
|
|
@@ -224,6 +235,14 @@ describe('native.js', function () {
|
|
|
224
235
|
expect(targeting.hb_native_baz).to.equal('hb_native_baz:123');
|
|
225
236
|
});
|
|
226
237
|
|
|
238
|
+
it('sends placeholdes targetings with ortb native response', function () {
|
|
239
|
+
const targeting = getNativeTargeting(completeNativeBid);
|
|
240
|
+
|
|
241
|
+
expect(targeting[CONSTANTS.NATIVE_KEYS.title]).to.equal('Native Creative');
|
|
242
|
+
expect(targeting[CONSTANTS.NATIVE_KEYS.body]).to.equal('Cool description great stuff');
|
|
243
|
+
expect(targeting[CONSTANTS.NATIVE_KEYS.clickUrl]).to.equal('https://www.link.example');
|
|
244
|
+
});
|
|
245
|
+
|
|
227
246
|
it('should only include native targeting keys with values', function () {
|
|
228
247
|
const adUnit = {
|
|
229
248
|
transactionId: 'au',
|
|
@@ -302,6 +321,10 @@ describe('native.js', function () {
|
|
|
302
321
|
required: false,
|
|
303
322
|
sendTargetingKeys: false,
|
|
304
323
|
},
|
|
324
|
+
privacyLink: {
|
|
325
|
+
required: false,
|
|
326
|
+
sendTargetingKeys: false,
|
|
327
|
+
},
|
|
305
328
|
ext: {
|
|
306
329
|
foo: {
|
|
307
330
|
required: false,
|
|
@@ -348,6 +371,7 @@ describe('native.js', function () {
|
|
|
348
371
|
CONSTANTS.NATIVE_KEYS.icon,
|
|
349
372
|
CONSTANTS.NATIVE_KEYS.sponsoredBy,
|
|
350
373
|
CONSTANTS.NATIVE_KEYS.clickUrl,
|
|
374
|
+
CONSTANTS.NATIVE_KEYS.privacyLink,
|
|
351
375
|
CONSTANTS.NATIVE_KEYS.rendererUrl,
|
|
352
376
|
]);
|
|
353
377
|
|
|
@@ -380,6 +404,7 @@ describe('native.js', function () {
|
|
|
380
404
|
CONSTANTS.NATIVE_KEYS.icon,
|
|
381
405
|
CONSTANTS.NATIVE_KEYS.sponsoredBy,
|
|
382
406
|
CONSTANTS.NATIVE_KEYS.clickUrl,
|
|
407
|
+
CONSTANTS.NATIVE_KEYS.privacyLink,
|
|
383
408
|
]);
|
|
384
409
|
|
|
385
410
|
expect(bid.native.adTemplate).to.deep.equal(
|
|
@@ -437,9 +462,9 @@ describe('native.js', function () {
|
|
|
437
462
|
adId: '123',
|
|
438
463
|
};
|
|
439
464
|
|
|
440
|
-
const message = getAllAssetsMessage(messageRequest, bid
|
|
465
|
+
const message = getAllAssetsMessage(messageRequest, bid);
|
|
441
466
|
|
|
442
|
-
expect(message.assets.length).to.equal(
|
|
467
|
+
expect(message.assets.length).to.equal(10);
|
|
443
468
|
expect(message.assets).to.deep.include({
|
|
444
469
|
key: 'body',
|
|
445
470
|
value: bid.native.body,
|
|
@@ -485,7 +510,7 @@ describe('native.js', function () {
|
|
|
485
510
|
adId: '123',
|
|
486
511
|
};
|
|
487
512
|
|
|
488
|
-
const message = getAllAssetsMessage(messageRequest, bidWithUndefinedFields
|
|
513
|
+
const message = getAllAssetsMessage(messageRequest, bidWithUndefinedFields);
|
|
489
514
|
|
|
490
515
|
expect(message.assets.length).to.equal(4);
|
|
491
516
|
expect(message.assets).to.deep.include({
|
|
@@ -506,16 +531,16 @@ describe('native.js', function () {
|
|
|
506
531
|
});
|
|
507
532
|
});
|
|
508
533
|
|
|
509
|
-
it('creates native all asset message with
|
|
534
|
+
it('creates native all asset message with complete format', function () {
|
|
510
535
|
const messageRequest = {
|
|
511
536
|
message: 'Prebid Native',
|
|
512
537
|
action: 'allAssetRequest',
|
|
513
538
|
adId: '123',
|
|
514
539
|
};
|
|
515
540
|
|
|
516
|
-
const message = getAllAssetsMessage(messageRequest,
|
|
541
|
+
const message = getAllAssetsMessage(messageRequest, completeNativeBid);
|
|
517
542
|
|
|
518
|
-
expect(message.assets.length).to.equal(
|
|
543
|
+
expect(message.assets.length).to.equal(10);
|
|
519
544
|
expect(message.assets).to.deep.include({
|
|
520
545
|
key: 'body',
|
|
521
546
|
value: bid.native.body,
|
|
@@ -548,6 +573,14 @@ describe('native.js', function () {
|
|
|
548
573
|
key: 'privacyLink',
|
|
549
574
|
value: ortbBid.native.ortb.privacy,
|
|
550
575
|
});
|
|
576
|
+
expect(message.assets).to.deep.include({
|
|
577
|
+
key: 'foo',
|
|
578
|
+
value: bid.native.ext.foo,
|
|
579
|
+
});
|
|
580
|
+
expect(message.assets).to.deep.include({
|
|
581
|
+
key: 'baz',
|
|
582
|
+
value: bid.native.ext.baz,
|
|
583
|
+
});
|
|
551
584
|
});
|
|
552
585
|
|
|
553
586
|
const SAMPLE_ORTB_REQUEST = toOrtbNativeRequest({
|
|
@@ -555,60 +588,39 @@ describe('native.js', function () {
|
|
|
555
588
|
body: 'vbody'
|
|
556
589
|
});
|
|
557
590
|
const SAMPLE_ORTB_RESPONSE = {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
value: 'vbody'
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
]
|
|
591
|
+
link: {
|
|
592
|
+
url: 'url'
|
|
593
|
+
},
|
|
594
|
+
assets: [
|
|
595
|
+
{
|
|
596
|
+
id: 0,
|
|
597
|
+
title: {
|
|
598
|
+
text: 'vtitle'
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
id: 1,
|
|
603
|
+
data: {
|
|
604
|
+
value: 'vbody'
|
|
605
|
+
}
|
|
577
606
|
}
|
|
578
|
-
|
|
607
|
+
],
|
|
608
|
+
eventtrackers: [
|
|
609
|
+
{ event: 1, method: 1, url: 'https://sampleurl.com' },
|
|
610
|
+
{ event: 1, method: 2, url: 'https://sampleurljs.com' }
|
|
611
|
+
]
|
|
579
612
|
}
|
|
580
|
-
describe('
|
|
613
|
+
describe('toLegacyResponse', () => {
|
|
581
614
|
it('returns assets in legacy format for ortb responses', () => {
|
|
582
|
-
const actual =
|
|
583
|
-
expect(actual.
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
key: 'title',
|
|
590
|
-
value: 'vtitle'
|
|
591
|
-
},
|
|
592
|
-
{
|
|
593
|
-
key: 'body',
|
|
594
|
-
value: 'vbody'
|
|
595
|
-
},
|
|
596
|
-
])
|
|
615
|
+
const actual = toLegacyResponse(SAMPLE_ORTB_RESPONSE, SAMPLE_ORTB_REQUEST);
|
|
616
|
+
expect(actual.body).to.equal('vbody');
|
|
617
|
+
expect(actual.title).to.equal('vtitle');
|
|
618
|
+
expect(actual.clickUrl).to.equal('url');
|
|
619
|
+
expect(actual.javascriptTrackers).to.equal('<script async src="https://sampleurljs.com"></script>');
|
|
620
|
+
expect(actual.impressionTrackers.length).to.equal(1);
|
|
621
|
+
expect(actual.impressionTrackers[0]).to.equal('https://sampleurl.com');
|
|
597
622
|
});
|
|
598
623
|
});
|
|
599
|
-
describe('getAssetsMessage', () => {
|
|
600
|
-
Object.entries({
|
|
601
|
-
'hb_native_title': {key: 'title', value: 'vtitle'},
|
|
602
|
-
'hb_native_body': {key: 'body', value: 'vbody'}
|
|
603
|
-
}).forEach(([tkey, assetVal]) => {
|
|
604
|
-
it(`returns ${tkey} asset in legacy format for ortb responses`, () => {
|
|
605
|
-
const actual = getAssetMessage({
|
|
606
|
-
assets: [tkey]
|
|
607
|
-
}, SAMPLE_ORTB_RESPONSE, {getNativeReq: () => SAMPLE_ORTB_REQUEST})
|
|
608
|
-
expect(actual.assets).to.eql([assetVal])
|
|
609
|
-
})
|
|
610
|
-
})
|
|
611
|
-
})
|
|
612
624
|
});
|
|
613
625
|
|
|
614
626
|
describe('validate native openRTB', function () {
|