prebid.js 8.1.0 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/devcontainer.json +3 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtelligentBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -0
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/categoryTranslation.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/cmp.js +1 -0
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementGpp.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/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +15 -0
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gppControl_usnat.js +1 -0
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/holidBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/mspa.js +1 -0
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +144 -140
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionRtdProvider.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.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/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trafficgateBidAdapter.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/uid2IdSystem.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/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/libraries/cmp/cmpClient.js +139 -0
- package/libraries/mspa/activityControls.js +91 -0
- package/modules/adagioBidAdapter.js +2 -1
- package/modules/admanBidAdapter.js +5 -0
- package/modules/adtelligentBidAdapter.js +8 -0
- package/modules/beopBidAdapter.js +6 -6
- package/modules/beopBidAdapter.md +35 -1
- package/modules/bridBidAdapter.js +223 -0
- package/modules/cadentApertureMXBidAdapter.md +2 -2
- package/modules/categoryTranslation.js +3 -2
- package/modules/consentManagement.js +12 -86
- package/modules/consentManagementGpp.js +47 -126
- package/modules/consentManagementUsp.js +19 -97
- package/modules/discoveryBidAdapter.js +1 -1
- package/modules/gppControl_usnat.js +11 -0
- package/modules/holidBidAdapter.js +49 -30
- package/modules/intentIqIdSystem.js +6 -5
- package/modules/ixBidAdapter.js +2 -1
- package/modules/liveIntentIdSystem.js +8 -3
- package/modules/livewrappedAnalyticsAdapter.js +33 -33
- package/modules/mediagoBidAdapter.js +1 -0
- package/modules/mediasquareBidAdapter.js +19 -23
- package/modules/oxxionRtdProvider.js +124 -11
- package/modules/oxxionRtdProvider.md +19 -4
- package/modules/smartyadsBidAdapter.js +6 -3
- package/modules/sovrnBidAdapter.js +5 -0
- package/modules/trafficgateBidAdapter.js +126 -72
- package/modules/tripleliftBidAdapter.js +21 -1
- package/modules/userId/eids.js +29 -0
- package/modules/userId/eids.md +19 -2
- package/modules/userId/index.js +78 -29
- package/modules/userId/userId.md +3 -0
- package/modules/vidazooBidAdapter.js +68 -16
- package/package.json +1 -1
- package/src/activities/params.js +4 -1
- package/test/spec/libraries/cmp/cmpClient_spec.js +233 -0
- package/test/spec/libraries/mspa/activityControls_spec.js +315 -0
- package/test/spec/modules/adagioBidAdapter_spec.js +2 -1
- package/test/spec/modules/admanBidAdapter_spec.js +8 -2
- package/test/spec/modules/adqueryBidAdapter_spec.js +5 -1
- package/test/spec/modules/adtelligentBidAdapter_spec.js +8 -0
- package/test/spec/modules/beopBidAdapter_spec.js +18 -2
- package/test/spec/modules/bridBidAdapter_spec.js +129 -0
- package/test/spec/modules/byDataAnalyticsAdapter_spec.js +9 -7
- package/test/spec/modules/cadentApertureMXBidAdapter_spec.js +1 -1
- package/test/spec/modules/chtnwBidAdapter_spec.js +4 -1
- package/test/spec/modules/consentManagementGpp_spec.js +84 -7
- package/test/spec/modules/consentManagement_spec.js +8 -18
- package/test/spec/modules/datablocksBidAdapter_spec.js +7 -3
- package/test/spec/modules/eids_spec.js +87 -0
- package/test/spec/modules/holidBidAdapter_spec.js +26 -6
- package/test/spec/modules/insticatorBidAdapter_spec.js +6 -2
- package/test/spec/modules/intentIqIdSystem_spec.js +36 -2
- package/test/spec/modules/ixBidAdapter_spec.js +52 -18
- package/test/spec/modules/lassoBidAdapter_spec.js +6 -4
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +17 -2
- package/test/spec/modules/liveIntentIdSystem_spec.js +11 -6
- package/test/spec/modules/mediasquareBidAdapter_spec.js +3 -0
- package/test/spec/modules/onetagBidAdapter_spec.js +81 -75
- package/test/spec/modules/orbidderBidAdapter_spec.js +6 -3
- package/test/spec/modules/oxxionRtdProvider_spec.js +113 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +4 -3
- package/test/spec/modules/smartyadsBidAdapter_spec.js +1 -1
- package/test/spec/modules/sovrnBidAdapter_spec.js +34 -0
- package/test/spec/modules/trafficgateBidAdapter_spec.js +1349 -199
- package/test/spec/modules/tripleliftBidAdapter_spec.js +20 -1
- package/test/spec/modules/ucfunnelBidAdapter_spec.js +37 -16
- package/test/spec/modules/userId_spec.js +393 -6
- package/test/spec/modules/vidazooBidAdapter_spec.js +131 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import {mspaRule, setupRules, isTransmitUfpdConsentDenied, isTransmitGeoConsentDenied, isBasicConsentDenied, isSensitiveNoticeMissing, isConsentDenied} from '../../../../libraries/mspa/activityControls.js';
|
|
2
|
+
import {ruleRegistry} from '../../../../src/activities/rules.js';
|
|
3
|
+
describe('isBasicConsentDenied', () => {
|
|
4
|
+
const cd = {
|
|
5
|
+
// not covered, opt in to targeted, sale, and share, all notices given, opt into precise geo
|
|
6
|
+
Gpc: 0,
|
|
7
|
+
KnownChildSensitiveDataConsents: [0, 0],
|
|
8
|
+
MspaCoveredTransaction: 2,
|
|
9
|
+
MspaOptOutOptionMode: 0,
|
|
10
|
+
MspaServiceProviderMode: 0,
|
|
11
|
+
PersonalDataConsents: 0,
|
|
12
|
+
SaleOptOut: 2,
|
|
13
|
+
SaleOptOutNotice: 1,
|
|
14
|
+
SensitiveDataLimitUseNotice: 1,
|
|
15
|
+
SensitiveDataProcessing: [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0],
|
|
16
|
+
SensitiveDataProcessingOptOutNotice: 1,
|
|
17
|
+
SharingNotice: 1,
|
|
18
|
+
SharingOptOut: 2,
|
|
19
|
+
SharingOptOutNotice: 1,
|
|
20
|
+
TargetedAdvertisingOptOut: 2,
|
|
21
|
+
TargetedAdvertisingOptOutNotice: 1,
|
|
22
|
+
Version: 1
|
|
23
|
+
};
|
|
24
|
+
it('should be false (basic consent conditions pass) with variety of notice and opt in', () => {
|
|
25
|
+
const result = isBasicConsentDenied(cd);
|
|
26
|
+
expect(result).to.equal(false);
|
|
27
|
+
});
|
|
28
|
+
it('should be true (basic consent conditions do not pass) with personal data consent set to true (invalid state)', () => {
|
|
29
|
+
cd.PersonalDataConsents = 2;
|
|
30
|
+
const result = isBasicConsentDenied(cd);
|
|
31
|
+
expect(result).to.equal(true);
|
|
32
|
+
cd.PersonalDataConsents = 0;
|
|
33
|
+
});
|
|
34
|
+
it('should be true (basic consent conditions do not pass) with sensitive opt in but no notice', () => {
|
|
35
|
+
cd.SensitiveDataLimitUseNotice = 0;
|
|
36
|
+
const result = isBasicConsentDenied(cd);
|
|
37
|
+
expect(result).to.equal(true);
|
|
38
|
+
cd.SensitiveDataLimitUseNotice = 1;
|
|
39
|
+
});
|
|
40
|
+
})
|
|
41
|
+
describe('isSensitiveNoticeMissing', () => {
|
|
42
|
+
const cd = {
|
|
43
|
+
// not covered, opt in to targeted, sale, and share, all notices given, opt into precise geo
|
|
44
|
+
Gpc: 0,
|
|
45
|
+
KnownChildSensitiveDataConsents: [0, 0],
|
|
46
|
+
MspaCoveredTransaction: 2,
|
|
47
|
+
MspaOptOutOptionMode: 0,
|
|
48
|
+
MspaServiceProviderMode: 0,
|
|
49
|
+
PersonalDataConsents: 0,
|
|
50
|
+
SaleOptOut: 2,
|
|
51
|
+
SaleOptOutNotice: 1,
|
|
52
|
+
SensitiveDataLimitUseNotice: 1,
|
|
53
|
+
SensitiveDataProcessing: [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0],
|
|
54
|
+
SensitiveDataProcessingOptOutNotice: 1,
|
|
55
|
+
SharingNotice: 1,
|
|
56
|
+
SharingOptOut: 2,
|
|
57
|
+
SharingOptOutNotice: 1,
|
|
58
|
+
TargetedAdvertisingOptOut: 2,
|
|
59
|
+
TargetedAdvertisingOptOutNotice: 1,
|
|
60
|
+
Version: 1
|
|
61
|
+
};
|
|
62
|
+
it('should be false (sensitive notice is given or not needed) with variety of notice and opt in', () => {
|
|
63
|
+
const result = isSensitiveNoticeMissing(cd);
|
|
64
|
+
expect(result).to.equal(false);
|
|
65
|
+
});
|
|
66
|
+
it('should be true (sensitive notice is missing) with variety of notice and opt in', () => {
|
|
67
|
+
cd.SensitiveDataLimitUseNotice = 2;
|
|
68
|
+
const result = isSensitiveNoticeMissing(cd);
|
|
69
|
+
expect(result).to.equal(true);
|
|
70
|
+
cd.SensitiveDataLimitUseNotice = 1;
|
|
71
|
+
});
|
|
72
|
+
})
|
|
73
|
+
describe('isConsentDenied', () => {
|
|
74
|
+
const cd = {
|
|
75
|
+
// not covered, opt in to targeted, sale, and share, all notices given, opt into precise geo
|
|
76
|
+
Gpc: 0,
|
|
77
|
+
KnownChildSensitiveDataConsents: [0, 0],
|
|
78
|
+
MspaCoveredTransaction: 2,
|
|
79
|
+
MspaOptOutOptionMode: 0,
|
|
80
|
+
MspaServiceProviderMode: 0,
|
|
81
|
+
PersonalDataConsents: 0,
|
|
82
|
+
SaleOptOut: 2,
|
|
83
|
+
SaleOptOutNotice: 1,
|
|
84
|
+
SensitiveDataLimitUseNotice: 1,
|
|
85
|
+
SensitiveDataProcessing: [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0],
|
|
86
|
+
SensitiveDataProcessingOptOutNotice: 1,
|
|
87
|
+
SharingNotice: 1,
|
|
88
|
+
SharingOptOut: 2,
|
|
89
|
+
SharingOptOutNotice: 1,
|
|
90
|
+
TargetedAdvertisingOptOut: 2,
|
|
91
|
+
TargetedAdvertisingOptOutNotice: 1,
|
|
92
|
+
Version: 1
|
|
93
|
+
};
|
|
94
|
+
it('should be false (consent given personalized ads / sale / share) with variety of notice and opt in', () => {
|
|
95
|
+
const result = isConsentDenied(cd);
|
|
96
|
+
expect(result).to.equal(false);
|
|
97
|
+
});
|
|
98
|
+
it('should be true (no consent) on opt out of targeted ads via TargetedAdvertisingOptOut', () => {
|
|
99
|
+
cd.TargetedAdvertisingOptOut = 1;
|
|
100
|
+
const result = isConsentDenied(cd);
|
|
101
|
+
expect(result).to.equal(true);
|
|
102
|
+
cd.TargetedAdvertisingOptOut = 2;
|
|
103
|
+
});
|
|
104
|
+
it('should be true (no consent) on opt out of targeted ads via no TargetedAdvertisingOptOutNotice', () => {
|
|
105
|
+
cd.TargetedAdvertisingOptOutNotice = 2;
|
|
106
|
+
const result = isConsentDenied(cd);
|
|
107
|
+
expect(result).to.equal(true);
|
|
108
|
+
cd.TargetedAdvertisingOptOutNotice = 1;
|
|
109
|
+
});
|
|
110
|
+
it('should be true (no consent) if TargetedAdvertisingOptOutNotice is 0 and TargetedAdvertisingOptOut is 2', () => {
|
|
111
|
+
cd.TargetedAdvertisingOptOutNotice = 0;
|
|
112
|
+
const result = isConsentDenied(cd);
|
|
113
|
+
expect(result).to.equal(true);
|
|
114
|
+
cd.TargetedAdvertisingOptOutNotice = 1;
|
|
115
|
+
});
|
|
116
|
+
})
|
|
117
|
+
describe('isTransmitUfpdConsentDenied', () => {
|
|
118
|
+
const cd = {
|
|
119
|
+
// not covered, opt in to targeted, sale, and share, all notices given, opt into precise geo
|
|
120
|
+
Gpc: 0,
|
|
121
|
+
KnownChildSensitiveDataConsents: [0, 0],
|
|
122
|
+
MspaCoveredTransaction: 2,
|
|
123
|
+
MspaOptOutOptionMode: 0,
|
|
124
|
+
MspaServiceProviderMode: 0,
|
|
125
|
+
PersonalDataConsents: 0,
|
|
126
|
+
SaleOptOut: 2,
|
|
127
|
+
SaleOptOutNotice: 1,
|
|
128
|
+
SensitiveDataLimitUseNotice: 1,
|
|
129
|
+
SensitiveDataProcessing: [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0],
|
|
130
|
+
SensitiveDataProcessingOptOutNotice: 1,
|
|
131
|
+
SharingNotice: 1,
|
|
132
|
+
SharingOptOut: 2,
|
|
133
|
+
SharingOptOutNotice: 1,
|
|
134
|
+
TargetedAdvertisingOptOut: 2,
|
|
135
|
+
TargetedAdvertisingOptOutNotice: 1,
|
|
136
|
+
Version: 1
|
|
137
|
+
};
|
|
138
|
+
it('should be false (consent given to add ufpd) with variety of notice and opt in', () => {
|
|
139
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
140
|
+
expect(result).to.equal(false);
|
|
141
|
+
});
|
|
142
|
+
it('should be true (consent denied to add ufpd) if no consent to process health information', () => {
|
|
143
|
+
cd.SensitiveDataProcessing[2] = 1;
|
|
144
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
145
|
+
expect(result).to.equal(true);
|
|
146
|
+
cd.SensitiveDataProcessing[2] = 0;
|
|
147
|
+
});
|
|
148
|
+
it('should be true (consent denied to add ufpd) with consent to process biometric data, as this should not be on openrtb', () => {
|
|
149
|
+
cd.SensitiveDataProcessing[6] = 1;
|
|
150
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
151
|
+
expect(result).to.equal(true);
|
|
152
|
+
cd.SensitiveDataProcessing[6] = 1;
|
|
153
|
+
});
|
|
154
|
+
it('should be true (consent denied to add ufpd) without sharing notice', () => {
|
|
155
|
+
cd.SharingNotice = 2;
|
|
156
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
157
|
+
expect(result).to.equal(true);
|
|
158
|
+
cd.SharingNotice = 1;
|
|
159
|
+
});
|
|
160
|
+
it('should be true (consent denied to add ufpd) with sale opt out', () => {
|
|
161
|
+
cd.SaleOptOut = 1;
|
|
162
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
163
|
+
expect(result).to.equal(true);
|
|
164
|
+
cd.SaleOptOut = 2;
|
|
165
|
+
});
|
|
166
|
+
it('should be true (consent denied to add ufpd) without targeted ads opt out', () => {
|
|
167
|
+
cd.TargetedAdvertisingOptOut = 1;
|
|
168
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
169
|
+
expect(result).to.equal(true);
|
|
170
|
+
cd.TargetedAdvertisingOptOut = 2;
|
|
171
|
+
});
|
|
172
|
+
it('should be true (consent denied to add ufpd) with missing sensitive data limit notice', () => {
|
|
173
|
+
cd.SensitiveDataLimitUseNotice = 2;
|
|
174
|
+
const result = isTransmitUfpdConsentDenied(cd);
|
|
175
|
+
expect(result).to.equal(true);
|
|
176
|
+
cd.SensitiveDataLimitUseNotice = 1;
|
|
177
|
+
});
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
describe('isTransmitGeoConsentDenied', () => {
|
|
181
|
+
const cd = {
|
|
182
|
+
// not covered, opt out of geo
|
|
183
|
+
Gpc: 0,
|
|
184
|
+
KnownChildSensitiveDataConsents: [0, 0],
|
|
185
|
+
MspaCoveredTransaction: 2,
|
|
186
|
+
MspaOptOutOptionMode: 0,
|
|
187
|
+
MspaServiceProviderMode: 0,
|
|
188
|
+
PersonalDataConsents: 0,
|
|
189
|
+
SaleOptOut: 2,
|
|
190
|
+
SaleOptOutNotice: 1,
|
|
191
|
+
SensitiveDataLimitUseNotice: 1,
|
|
192
|
+
SensitiveDataProcessing: [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
|
|
193
|
+
SensitiveDataProcessingOptOutNotice: 1,
|
|
194
|
+
SharingNotice: 1,
|
|
195
|
+
SharingOptOut: 2,
|
|
196
|
+
SharingOptOutNotice: 1,
|
|
197
|
+
TargetedAdvertisingOptOut: 2,
|
|
198
|
+
TargetedAdvertisingOptOutNotice: 1,
|
|
199
|
+
Version: 1
|
|
200
|
+
};
|
|
201
|
+
it('should be true (consent denied to add precise geo) -- sensitive flag denied', () => {
|
|
202
|
+
const result = isTransmitGeoConsentDenied(cd);
|
|
203
|
+
expect(result).to.equal(true);
|
|
204
|
+
});
|
|
205
|
+
it('should be true (consent denied to add precise geo) -- sensitive data limit usage not given', () => {
|
|
206
|
+
cd.SensitiveDataLimitUseNotice = 0;
|
|
207
|
+
const result = isTransmitGeoConsentDenied(cd);
|
|
208
|
+
expect(result).to.equal(true);
|
|
209
|
+
cd.SensitiveDataLimitUseNotice = 1;
|
|
210
|
+
});
|
|
211
|
+
it('should be false (consent given to add precise geo) -- sensitive position 8 (index 7) is true', () => {
|
|
212
|
+
cd.SensitiveDataProcessing[7] = 2;
|
|
213
|
+
const result = isTransmitGeoConsentDenied(cd);
|
|
214
|
+
expect(result).to.equal(false);
|
|
215
|
+
cd.SensitiveDataProcessing[7] = 1;
|
|
216
|
+
});
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
describe('mspaRule', () => {
|
|
220
|
+
it('does not apply if SID is not applicable', () => {
|
|
221
|
+
const rule = mspaRule([1, 2], () => null, () => true, () => [3, 4]);
|
|
222
|
+
expect(rule()).to.not.exist;
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('does not apply when no SID is applicable', () => {
|
|
226
|
+
const rule = mspaRule([1], () => null, () => true, () => []);
|
|
227
|
+
expect(rule()).to.not.exist;
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
describe('when SID is applicable', () => {
|
|
231
|
+
let consent, denies;
|
|
232
|
+
function mkRule() {
|
|
233
|
+
return mspaRule([1, 2], () => consent, denies, () => [2])
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
beforeEach(() => {
|
|
237
|
+
consent = null;
|
|
238
|
+
denies = sinon.stub();
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
it('should deny when no consent is available', () => {
|
|
242
|
+
expect(mkRule()().allow).to.equal(false);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
Object.entries({
|
|
246
|
+
'denies': true,
|
|
247
|
+
'allows': false
|
|
248
|
+
}).forEach(([t, denied]) => {
|
|
249
|
+
it(`should check if deny fn ${t}`, () => {
|
|
250
|
+
denies.returns(denied);
|
|
251
|
+
consent = {mock: 'value'};
|
|
252
|
+
const result = mkRule()();
|
|
253
|
+
sinon.assert.calledWith(denies, consent);
|
|
254
|
+
if (denied) {
|
|
255
|
+
expect(result.allow).to.equal(false);
|
|
256
|
+
} else {
|
|
257
|
+
expect(result).to.not.exist;
|
|
258
|
+
}
|
|
259
|
+
})
|
|
260
|
+
})
|
|
261
|
+
})
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
describe('setupRules', () => {
|
|
265
|
+
let rules, registerRule, isAllowed, consent;
|
|
266
|
+
beforeEach(() => {
|
|
267
|
+
rules = {
|
|
268
|
+
mockActivity: sinon.stub().returns(true)
|
|
269
|
+
};
|
|
270
|
+
([registerRule, isAllowed] = ruleRegistry());
|
|
271
|
+
consent = {
|
|
272
|
+
applicableSections: [1],
|
|
273
|
+
sectionData: {
|
|
274
|
+
mockApi: {
|
|
275
|
+
mock: 'consent'
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
function runSetup(api, sids, normalize) {
|
|
282
|
+
return setupRules(api, sids, normalize, rules, registerRule, () => consent)
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
it('should use section data for the given api', () => {
|
|
286
|
+
runSetup('mockApi', [1]);
|
|
287
|
+
expect(isAllowed('mockActivity', {})).to.equal(false);
|
|
288
|
+
sinon.assert.calledWith(rules.mockActivity, {mock: 'consent'})
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('should not choke when no consent data is available', () => {
|
|
292
|
+
consent = null;
|
|
293
|
+
runSetup('mockApi', [1]);
|
|
294
|
+
expect(isAllowed('mockActivity', {})).to.equal(true);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('should check applicableSections against given SIDs', () => {
|
|
298
|
+
runSetup('mockApi', [2]);
|
|
299
|
+
expect(isAllowed('mockActivity', {})).to.equal(true);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
it('should pass consent through normalizeConsent', () => {
|
|
303
|
+
const normalize = sinon.stub().returns({normalized: 'consent'})
|
|
304
|
+
runSetup('mockApi', [1], normalize);
|
|
305
|
+
expect(isAllowed('mockActivity', {})).to.equal(false);
|
|
306
|
+
sinon.assert.calledWith(normalize, {mock: 'consent'});
|
|
307
|
+
sinon.assert.calledWith(rules.mockActivity, {normalized: 'consent'});
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
it('should return a function that unregisters activity controls', () => {
|
|
311
|
+
const dereg = runSetup('mockApi', [1]);
|
|
312
|
+
dereg();
|
|
313
|
+
expect(isAllowed('mockActivity', {})).to.equal(true);
|
|
314
|
+
});
|
|
315
|
+
})
|
|
@@ -106,8 +106,11 @@ describe('AdmanAdapter', function () {
|
|
|
106
106
|
let placements = data['placements'];
|
|
107
107
|
for (let i = 0; i < placements.length; i++) {
|
|
108
108
|
let placement = placements[i];
|
|
109
|
-
expect(placement).to.have.all.keys('placementId', 'eids', 'bidId', 'traffic', 'sizes', 'schain', 'bidFloor');
|
|
109
|
+
expect(placement).to.have.all.keys('placementId', 'eids', 'bidId', 'traffic', 'sizes', 'schain', 'bidFloor', 'ext');
|
|
110
110
|
expect(placement.schain).to.be.an('object')
|
|
111
|
+
expect(placement.ext).to.be.an('object')
|
|
112
|
+
expect(placement.ext).to.have.key('tid')
|
|
113
|
+
expect(placement.ext.tid).to.equal(bidBanner.transactionId);
|
|
111
114
|
expect(placement.placementId).to.be.a('number');
|
|
112
115
|
expect(placement.bidId).to.be.a('string');
|
|
113
116
|
expect(placement.traffic).to.be.a('string');
|
|
@@ -132,7 +135,10 @@ describe('AdmanAdapter', function () {
|
|
|
132
135
|
let placement = placements[i];
|
|
133
136
|
expect(placement).to.have.all.keys('placementId', 'eids', 'bidId', 'traffic', 'schain', 'bidFloor',
|
|
134
137
|
'playerSize', 'minduration', 'maxduration', 'mimes', 'protocols', 'startdelay', 'placement', 'skip',
|
|
135
|
-
'skipafter', 'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity');
|
|
138
|
+
'skipafter', 'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity', 'ext');
|
|
139
|
+
expect(placement.ext).to.be.an('object')
|
|
140
|
+
expect(placement.ext).to.have.key('tid')
|
|
141
|
+
expect(placement.ext.tid).to.equal(bidBanner.transactionId);
|
|
136
142
|
expect(placement.schain).to.be.an('object')
|
|
137
143
|
expect(placement.placementId).to.be.a('number');
|
|
138
144
|
expect(placement.bidId).to.be.a('string');
|
|
@@ -80,7 +80,11 @@ describe('adqueryBidAdapter', function () {
|
|
|
80
80
|
})
|
|
81
81
|
|
|
82
82
|
describe('buildRequests', function () {
|
|
83
|
-
let req
|
|
83
|
+
let req;
|
|
84
|
+
beforeEach(() => {
|
|
85
|
+
req = spec.buildRequests([ bidRequest ], { refererInfo: { } })[0]
|
|
86
|
+
})
|
|
87
|
+
|
|
84
88
|
let rdata
|
|
85
89
|
|
|
86
90
|
it('should return request object', function () {
|
|
@@ -156,6 +156,10 @@ const displayBidderRequestWithConsents = {
|
|
|
156
156
|
gdprApplies: true,
|
|
157
157
|
consentString: 'test'
|
|
158
158
|
},
|
|
159
|
+
gppConsent: {
|
|
160
|
+
gppString: 'abc12345234',
|
|
161
|
+
applicableSections: [7, 8]
|
|
162
|
+
},
|
|
159
163
|
uspConsent: 'iHaveIt'
|
|
160
164
|
};
|
|
161
165
|
|
|
@@ -364,6 +368,10 @@ describe('adtelligentBidAdapter', () => {
|
|
|
364
368
|
expect(bidRequestWithPubSettingsData.GDPR).to.be.equal(1);
|
|
365
369
|
expect(bidRequestWithPubSettingsData.GDPRConsent).to.be.equal(displayBidderRequestWithConsents.gdprConsent.consentString);
|
|
366
370
|
});
|
|
371
|
+
it('sets GPP flags', () => {
|
|
372
|
+
expect(bidRequestWithPubSettingsData.GPP).to.be.equal(displayBidderRequestWithConsents.gppConsent.gppString);
|
|
373
|
+
expect(bidRequestWithPubSettingsData.GPPSid).to.be.equal('7,8');
|
|
374
|
+
});
|
|
367
375
|
it('sets USP', () => {
|
|
368
376
|
expect(bidRequestWithPubSettingsData.USP).to.be.equal(displayBidderRequestWithConsents.uspConsent);
|
|
369
377
|
})
|
|
@@ -130,15 +130,15 @@ describe('BeOp Bid Adapter tests', () => {
|
|
|
130
130
|
expect(payload.url).to.exist;
|
|
131
131
|
// check that the protocol is added correctly
|
|
132
132
|
expect(payload.url).to.equal('http://test.te');
|
|
133
|
-
expect(payload.psegs).to.not.exist;
|
|
134
133
|
});
|
|
135
134
|
|
|
136
|
-
it('should call the endpoint with psegs data if any', function () {
|
|
135
|
+
it('should call the endpoint with psegs and bpsegs (stringified) data if any or [] if none', function () {
|
|
137
136
|
let bidderRequest =
|
|
138
137
|
{
|
|
139
138
|
'ortb2': {
|
|
140
139
|
'user': {
|
|
141
140
|
'ext': {
|
|
141
|
+
'bpsegs': ['axed', 'axec', 1234],
|
|
142
142
|
'data': {
|
|
143
143
|
'permutive': [1234, 5678, 910]
|
|
144
144
|
}
|
|
@@ -154,6 +154,22 @@ describe('BeOp Bid Adapter tests', () => {
|
|
|
154
154
|
expect(payload.psegs).to.include(5678);
|
|
155
155
|
expect(payload.psegs).to.include(910);
|
|
156
156
|
expect(payload.psegs).to.not.include(1);
|
|
157
|
+
expect(payload.bpsegs).to.exist;
|
|
158
|
+
expect(payload.bpsegs).to.include('axed');
|
|
159
|
+
expect(payload.bpsegs).to.include('axec');
|
|
160
|
+
expect(payload.bpsegs).to.include('1234');
|
|
161
|
+
|
|
162
|
+
let bidderRequest2 =
|
|
163
|
+
{
|
|
164
|
+
'ortb2': {}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
const request2 = spec.buildRequests(bidRequests, bidderRequest2);
|
|
168
|
+
const payload2 = JSON.parse(request2.data);
|
|
169
|
+
expect(payload2.psegs).to.exist;
|
|
170
|
+
expect(payload2.psegs).to.be.empty;
|
|
171
|
+
expect(payload2.bpsegs).to.exist;
|
|
172
|
+
expect(payload2.bpsegs).to.be.empty;
|
|
157
173
|
});
|
|
158
174
|
|
|
159
175
|
it('should not prepend the protocol in page url if already present', function () {
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { spec } from '../../../modules/bridBidAdapter.js'
|
|
2
|
+
|
|
3
|
+
describe('Brid Bid Adapter', function() {
|
|
4
|
+
const videoRequest = [{
|
|
5
|
+
bidder: 'brid',
|
|
6
|
+
params: {
|
|
7
|
+
placementId: 12345,
|
|
8
|
+
},
|
|
9
|
+
mediaTypes: {
|
|
10
|
+
video: {
|
|
11
|
+
playerSize: [[640, 360]],
|
|
12
|
+
context: 'instream',
|
|
13
|
+
playbackmethod: [1, 2, 3, 4]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}];
|
|
17
|
+
|
|
18
|
+
it('Test the bid validation function', function() {
|
|
19
|
+
const validBid = spec.isBidRequestValid(videoRequest[0]);
|
|
20
|
+
const invalidBid = spec.isBidRequestValid(null);
|
|
21
|
+
|
|
22
|
+
expect(validBid).to.be.true;
|
|
23
|
+
expect(invalidBid).to.be.false;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('Test the request processing function', function () {
|
|
27
|
+
const request = spec.buildRequests(videoRequest, videoRequest[0]);
|
|
28
|
+
expect(request).to.not.be.empty;
|
|
29
|
+
|
|
30
|
+
const payload = JSON.parse(request[0].data);
|
|
31
|
+
expect(payload).to.not.be.empty;
|
|
32
|
+
expect(payload.sdk).to.deep.equal({
|
|
33
|
+
source: 'pbjs',
|
|
34
|
+
version: '$prebid.version$'
|
|
35
|
+
});
|
|
36
|
+
expect(payload.imp[0].ext.prebid.storedrequest.id).to.equal(12345);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('Test nobid responses', function () {
|
|
40
|
+
const responseBody = {
|
|
41
|
+
'id': 'test-id',
|
|
42
|
+
'cur': 'USD',
|
|
43
|
+
'seatbid': [],
|
|
44
|
+
'nbr': 0
|
|
45
|
+
};
|
|
46
|
+
const bidderRequest = null;
|
|
47
|
+
|
|
48
|
+
const bidResponse = spec.interpretResponse({ body: responseBody }, {bidderRequest});
|
|
49
|
+
|
|
50
|
+
expect(bidResponse.length).to.equal(0);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('Test the response parsing function', function () {
|
|
54
|
+
const responseBody = {
|
|
55
|
+
'id': 'test-id',
|
|
56
|
+
'cur': 'USD',
|
|
57
|
+
'seatbid': [{
|
|
58
|
+
'bid': [{
|
|
59
|
+
'id': '5044997188309660254',
|
|
60
|
+
'price': 5,
|
|
61
|
+
'adm': 'test ad',
|
|
62
|
+
'adid': '97517771',
|
|
63
|
+
'crid': '97517771',
|
|
64
|
+
'adomain': ['domain.com'],
|
|
65
|
+
'w': 640,
|
|
66
|
+
'h': 480
|
|
67
|
+
}],
|
|
68
|
+
'seat': 'bidder'
|
|
69
|
+
}]
|
|
70
|
+
};
|
|
71
|
+
const bidderRequest = {
|
|
72
|
+
bidderCode: 'brid',
|
|
73
|
+
bidderRequestId: '22edbae2733bf6',
|
|
74
|
+
bids: videoRequest
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const bidResponse = spec.interpretResponse({ body: responseBody }, {bidderRequest});
|
|
78
|
+
expect(bidResponse).to.not.be.empty;
|
|
79
|
+
|
|
80
|
+
const bid = bidResponse[0];
|
|
81
|
+
expect(bid).to.not.be.empty;
|
|
82
|
+
expect(bid.ad).to.equal('test ad');
|
|
83
|
+
expect(bid.cpm).to.equal(5);
|
|
84
|
+
expect(bid.width).to.equal(640);
|
|
85
|
+
expect(bid.height).to.equal(480);
|
|
86
|
+
expect(bid.currency).to.equal('USD');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('Test GDPR and USP consents are present in the request', function () {
|
|
90
|
+
let gdprConsentString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==';
|
|
91
|
+
let uspConsentString = '1YA-';
|
|
92
|
+
let bidderRequest = {
|
|
93
|
+
'bidderCode': 'brid',
|
|
94
|
+
'bidderRequestId': '22edbae2733bf6',
|
|
95
|
+
'timeout': 3000,
|
|
96
|
+
'uspConsent': uspConsentString,
|
|
97
|
+
'gdprConsent': {
|
|
98
|
+
consentString: gdprConsentString,
|
|
99
|
+
gdprApplies: true,
|
|
100
|
+
addtlConsent: '1~7.12.35.62.66.70.89.93.108'
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
bidderRequest.bids = videoRequest;
|
|
104
|
+
|
|
105
|
+
const request = spec.buildRequests(videoRequest, bidderRequest);
|
|
106
|
+
const payload = JSON.parse(request[0].data);
|
|
107
|
+
|
|
108
|
+
expect(payload.user.ext.consent).to.equal(gdprConsentString);
|
|
109
|
+
expect(payload.regs.ext.us_privacy).to.equal(uspConsentString);
|
|
110
|
+
expect(payload.regs.ext.gdpr).to.equal(1);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('Test GDPR is not present', function () {
|
|
114
|
+
let uspConsentString = '1YA-';
|
|
115
|
+
let bidderRequest = {
|
|
116
|
+
'bidderCode': 'brid',
|
|
117
|
+
'bidderRequestId': '22edbae2733bf6',
|
|
118
|
+
'timeout': 3000,
|
|
119
|
+
'uspConsent': uspConsentString
|
|
120
|
+
};
|
|
121
|
+
bidderRequest.bids = videoRequest;
|
|
122
|
+
|
|
123
|
+
const request = spec.buildRequests(videoRequest, bidderRequest);
|
|
124
|
+
const payload = JSON.parse(request[0].data);
|
|
125
|
+
|
|
126
|
+
expect(payload.regs.ext.gdpr).to.be.undefined;
|
|
127
|
+
expect(payload.regs.ext.us_privacy).to.equal(uspConsentString);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
@@ -96,7 +96,7 @@ let expectedDataArgs = {
|
|
|
96
96
|
aus: '300x250',
|
|
97
97
|
bidadv: 'appnexus',
|
|
98
98
|
bid: '14480e9832f2d2b',
|
|
99
|
-
inb:
|
|
99
|
+
inb: 1,
|
|
100
100
|
ito: 0,
|
|
101
101
|
ipwb: 0,
|
|
102
102
|
iwb: 0,
|
|
@@ -107,7 +107,7 @@ let expectedDataArgs = {
|
|
|
107
107
|
aus: '250x250',
|
|
108
108
|
bidadv: 'appnexus',
|
|
109
109
|
bid: '14480e9832f2d2b',
|
|
110
|
-
inb:
|
|
110
|
+
inb: 1,
|
|
111
111
|
ito: 0,
|
|
112
112
|
ipwb: 0,
|
|
113
113
|
iwb: 0,
|
|
@@ -167,11 +167,13 @@ describe('byData Analytics Adapter ', () => {
|
|
|
167
167
|
});
|
|
168
168
|
|
|
169
169
|
describe('track-events', function () {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
170
|
+
before(() => {
|
|
171
|
+
ascAdapter.enableAnalytics(initOptions)
|
|
172
|
+
// Step 1: Initialize adapter
|
|
173
|
+
adapterManager.enableAnalytics({
|
|
174
|
+
provider: 'bydata',
|
|
175
|
+
options: initOptions
|
|
176
|
+
});
|
|
175
177
|
});
|
|
176
178
|
it('sends and formatted auction data ', function () {
|
|
177
179
|
events.emit(constants.EVENTS.BID_TIMEOUT, bidTimeoutArgs);
|
|
@@ -699,7 +699,7 @@ describe('cadent_aperture_mx Adapter', function () {
|
|
|
699
699
|
|
|
700
700
|
it('should not throw an error when decoding an improperly encoded adm', function () {
|
|
701
701
|
const badAdmServerResponse = utils.deepClone(serverResponse);
|
|
702
|
-
badAdmServerResponse.seatbid[0].bid[0].adm = '<script\\ src\\=\\\"https\\:\\/\\/nym1\\-ib\\.adnxs\\.com\\/ab\\?an_audit\\=0\\&referrer=https%3A%2F%2Fwww.
|
|
702
|
+
badAdmServerResponse.seatbid[0].bid[0].adm = '<script\\ src\\=\\\"https\\:\\/\\/nym1\\-ib\\.adnxs\\.com\\/ab\\?an_audit\\=0\\&referrer=https%3A%2F%2Fwww.cadent.tv%3Ftest%3DhAiE3%VVl%26prebid%3D%25123%25\\&e\\=wqT_3QLPCfBDzwQAAAMA1gAFAQj2iaPtBRCdw\\-qeto72gkEYlNWN2smGoJhTKjYJzGJi83G9KkARzGJi83G9KkAZAAAAgD0KEkAhzGIJGwApESTIMQAAAGBmZu4_MMvWgAc4zApAzApIAlDo\\-YEUWNbsR2AAaIrFCnjOpQWAAQGKAQNVU0SSBQbwQJgB2AWgAVqoAQGwAQC4AQLAAQTIAQLQAQnYAQDgAQDwAQCKAjp1ZignYScsIDI4OTEwMSwgMTU3MTM0MTU1OCk7ARwscicsIDQxOTc1MDE2Nh4A9DQBkgLhAiE3VVlCWndpQmpwOEpFT2o1Z1JRWUFDRFc3RWN3QURnQVFBUkl6QXBReTlhQUIxZ0FZTHdFYUFCd0NuZ0FnQUZFaUFFQWtBRUFtQUVBb0FFQnFBRURzQUVBdVFGS1I2cF9jYjBxUU1FQlNrZXFmM0c5S2tESkFaR1JfRy1UVnRNXzJRRUFBQUFBQUFEd1AtQUJBUFVCQUFBQUFJQUNBSWdDcVlMWEJaQUNBWmdDQUtBQ0FLZ0NBTFVDQUFBQUFMMENBQUFBQU9BQ0FPZ0NBUGdDQUlBREFaZ0RBYWdEZ1k2ZkNib0RDVTVaVFRJNk5ESTRNdUFEOHhQNEE0NnV2Z3lJQkFDUUJBQ1lCQUd5QkFvSXFZTFhCUkNPcnI0TXdRUUFBQUFBQUFBQUFNa0VBQUFBBXgMQURSQgkJLEF3Q0ZBMkFRQThRUQ0SYEFBQVBnRUFJZ0Z1aUUumgKJASE2eElrelE2ZQGgMXV4SElBUW9BREU5Q3RlamNMMHFRRG9KVGxsTk1qbzBNamd5UVBNVFMRWAxQQV9VEQwMQUFBVx0MAFkdDABhHQwAYw0MAaXwi2VBQS7YAqwD4AK30UbqAlxodHRwczovL3d3dy5jZWxlYnV6ei5jb20vZy90YXlsb3Itc3dpZnQtZGVidXRzLXJlZC1oYWlyLWluLXN1Z2FybGFuZC12aWRlby8_YmlkZHJfZGVidWc9dHJ1ZfICEwoPQ1VTVE9NX01PREVMX0lEEgDyAhoKFkNVU1RPERY8TEVBRl9OQU1FEgDyAh4KGjYdAPQqAUFTVF9NT0RJRklFRBIAgAMAiAMBkAMAmAMUoAMBqgMAwAOsAsgDANgDlCHgAwDoAwD4AwOABACSBAkvb3BlbnJ0YjKYBACiBA8xNDQuMTIxLjIzMy4yMzeoBIkWsgQMCAAQABgAIAAwADgAuAQAwAQAyASxgoIB0gQOMTM1NiNOWU0yOjQyODLaBAIIAeAEAPAE6PmBFPoEEgkAAAAAZqdHQBEAAAAgWpRewIgFAZgFAKAF____________AaoFFjQ5MTgxNTcxMzQxNTU2NTI2OTQ5ZTHABQDJBQAAAAAAAPA_0gUJCQAAAAAAAAAA2AUB4AUB8AXW7gr6BQQIABAAkAYAmAYAuAYAwQYAAAAAAADwP8gGANAGwgTaBhYKEAAAAAAAAAAAAAAABQpQEAAYAOAGAfIGAggAgAcBiAcAoAcB\\&s\\=630dbbd55f593c7bfd9e7bccc4dbaa28203daaed\\&pp\\=\\$\\{EMX_MACRO\\}\\\"\\>\\<\\/script\\>';
|
|
703
703
|
badAdmServerResponse.seatbid[1].bid[0].adm = '%3F%%3Dcadent%3C3prebid';
|
|
704
704
|
|
|
705
705
|
assert.doesNotThrow(() => spec.interpretResponse({
|
|
@@ -39,7 +39,10 @@ describe('ChtnwAdapter', function () {
|
|
|
39
39
|
],
|
|
40
40
|
}];
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
let request;
|
|
43
|
+
before(() => {
|
|
44
|
+
request = spec.buildRequests(bidRequests);
|
|
45
|
+
})
|
|
43
46
|
|
|
44
47
|
it('Returns POST method', function () {
|
|
45
48
|
expect(request.method).to.equal('POST');
|