prebid.js 9.53.2 → 9.53.3
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/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adagioRtdProvider.js +1 -1
- package/dist/adagioUtils.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aniviewBidAdapter.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/bitmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgeuppBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contxtfulBidAdapter.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/dailymotionBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/equativBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/excoBidAdapter.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/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsBidAdapter.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/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmobiBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentId.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.js +1 -1
- package/dist/madsenseBidAdapter.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/medianetBidAdapter.js +1 -1
- package/dist/medianetUtils.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobilefuseBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360Utils.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/nodalsAiRtdProvider.js +1 -1
- package/dist/not-for-prod/prebid.js +172 -172
- package/dist/objectGuard.js +1 -1
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubmaticIdSystem.js +1 -1
- package/dist/pubmaticRtdProvider.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.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/riseUtils.js +1 -1
- package/dist/rtdModule.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/showheroes-bsBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sparteoBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.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/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooUtils.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/yahooAdsBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/libraries/objectGuard/objectGuard.js +149 -48
- package/libraries/objectGuard/ortbGuard.js +33 -43
- package/modules/adagioAnalyticsAdapter.js +6 -1
- package/modules/adagioBidAdapter.js +12 -5
- package/modules/adagioRtdProvider.js +41 -35
- package/modules/pubmaticAnalyticsAdapter.js +311 -587
- package/modules/pubmaticBidAdapter.js +71 -8
- package/modules/pubmaticIdSystem.js +4 -4
- package/modules/pubmaticRtdProvider.js +12 -60
- package/modules/rtdModule/index.js +1 -5
- package/modules/ttdBidAdapter.js +0 -5
- package/modules/userId/eids.js +1 -1
- package/modules/userId/index.js +32 -1
- package/package.json +1 -1
- package/src/auction.js +3 -0
- package/test/spec/activities/objectGuard_spec.js +156 -32
- package/test/spec/activities/ortbGuard_spec.js +10 -15
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +94 -24
- package/test/spec/modules/adagioRtdProvider_spec.js +17 -17
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +634 -916
- package/test/spec/modules/pubmaticBidAdapter_spec.js +260 -1
- package/test/spec/modules/pubmaticRtdProvider_spec.js +78 -400
- package/test/spec/modules/ttdBidAdapter_spec.js +0 -33
- package/test/spec/modules/userId_spec.js +115 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {objectGuard, writeProtectRule} from '../../../libraries/objectGuard/objectGuard.js';
|
|
2
|
+
import {redactRule} from '../../../src/activities/redactor.js';
|
|
2
3
|
|
|
3
4
|
describe('objectGuard', () => {
|
|
4
5
|
describe('read rule', () => {
|
|
@@ -13,7 +14,7 @@ describe('objectGuard', () => {
|
|
|
13
14
|
}
|
|
14
15
|
})
|
|
15
16
|
it('can prevent top level read access', () => {
|
|
16
|
-
const
|
|
17
|
+
const obj = objectGuard([rule])({'foo': 1, 'other': 2});
|
|
17
18
|
expect(obj).to.eql({
|
|
18
19
|
foo: 'repl1',
|
|
19
20
|
other: 2
|
|
@@ -21,20 +22,27 @@ describe('objectGuard', () => {
|
|
|
21
22
|
});
|
|
22
23
|
|
|
23
24
|
it('does not choke if a guarded property is missing', () => {
|
|
24
|
-
const
|
|
25
|
+
const obj = objectGuard([rule])({});
|
|
25
26
|
expect(obj.foo).to.not.exist;
|
|
26
27
|
});
|
|
27
28
|
|
|
29
|
+
it('allows concurrent reads', () => {
|
|
30
|
+
const obj = {'foo': 'bar'};
|
|
31
|
+
const guarded = objectGuard([rule])(obj);
|
|
32
|
+
obj.foo = 'baz';
|
|
33
|
+
expect(guarded.foo).to.eql('replbaz');
|
|
34
|
+
})
|
|
35
|
+
|
|
28
36
|
it('does not prevent access if applies returns false', () => {
|
|
29
37
|
applies = false;
|
|
30
|
-
const
|
|
38
|
+
const obj = objectGuard([rule])({foo: 1});
|
|
31
39
|
expect(obj).to.eql({
|
|
32
40
|
foo: 1
|
|
33
41
|
});
|
|
34
42
|
})
|
|
35
43
|
|
|
36
44
|
it('can prevent nested property access', () => {
|
|
37
|
-
const
|
|
45
|
+
const obj = objectGuard([rule])({
|
|
38
46
|
other: 0,
|
|
39
47
|
outer: {
|
|
40
48
|
foo: 1,
|
|
@@ -60,6 +68,11 @@ describe('objectGuard', () => {
|
|
|
60
68
|
})
|
|
61
69
|
});
|
|
62
70
|
|
|
71
|
+
it('prevents nested property access when a parent property is protected', () => {
|
|
72
|
+
const guard = objectGuard([rule])({foo: {inner: 'value'}});
|
|
73
|
+
expect(guard.inner?.value).to.not.exist;
|
|
74
|
+
})
|
|
75
|
+
|
|
63
76
|
it('does not call applies more than once', () => {
|
|
64
77
|
JSON.stringify(objectGuard([rule])({
|
|
65
78
|
foo: 0,
|
|
@@ -68,7 +81,7 @@ describe('objectGuard', () => {
|
|
|
68
81
|
foo: 1
|
|
69
82
|
}
|
|
70
83
|
}
|
|
71
|
-
})
|
|
84
|
+
}));
|
|
72
85
|
expect(rule.applies.callCount).to.equal(1);
|
|
73
86
|
})
|
|
74
87
|
});
|
|
@@ -84,35 +97,60 @@ describe('objectGuard', () => {
|
|
|
84
97
|
});
|
|
85
98
|
});
|
|
86
99
|
|
|
87
|
-
it('
|
|
100
|
+
it('does not mess up array reads', () => {
|
|
101
|
+
const guard = objectGuard([rule])({foo: [{bar: 'baz'}]});
|
|
102
|
+
expect(guard.foo).to.eql([{bar: 'baz'}]);
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('prevents array modification', () => {
|
|
106
|
+
const obj = {foo: ['value']};
|
|
107
|
+
const guard = objectGuard([rule])(obj);
|
|
108
|
+
guard.foo.pop();
|
|
109
|
+
guard.foo.push('test');
|
|
110
|
+
expect(obj.foo).to.eql(['value']);
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
it('allows array modification when not applicable', () => {
|
|
114
|
+
applies = false;
|
|
115
|
+
const obj = {foo: ['value']};
|
|
116
|
+
const guard = objectGuard([rule])(obj);
|
|
117
|
+
guard.foo.pop();
|
|
118
|
+
guard.foo.push('test');
|
|
119
|
+
expect(obj.foo).to.eql(['test']);
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('should prevent top-level writes', () => {
|
|
88
123
|
const obj = {bar: {nested: 'val'}, other: 'val'};
|
|
89
124
|
const guard = objectGuard([rule])(obj);
|
|
90
|
-
guard.
|
|
91
|
-
guard.
|
|
92
|
-
guard.
|
|
93
|
-
guard.
|
|
94
|
-
guard.
|
|
95
|
-
expect(obj).to.eql({bar: {nested: 'val'}, other: 'allowed'});
|
|
125
|
+
guard.foo = 'denied';
|
|
126
|
+
guard.bar.nested = 'denied';
|
|
127
|
+
guard.bar.other = 'denied';
|
|
128
|
+
guard.other = 'allowed';
|
|
129
|
+
expect(guard).to.eql({bar: {nested: 'val'}, other: 'allowed'});
|
|
96
130
|
});
|
|
97
131
|
|
|
98
|
-
it('should
|
|
132
|
+
it('should not prevent no-op writes', () => {
|
|
133
|
+
const guard = objectGuard([rule])({foo: {some: 'value'}});
|
|
134
|
+
guard.foo = {some: 'value'};
|
|
135
|
+
sinon.assert.notCalled(rule.applies);
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
it('should prevent top-level deletes', () => {
|
|
99
139
|
const obj = {foo: {nested: 'val'}, bar: 'val'};
|
|
100
140
|
const guard = objectGuard([rule])(obj);
|
|
101
|
-
delete guard.
|
|
102
|
-
delete guard.
|
|
103
|
-
guard.
|
|
104
|
-
expect(obj).to.eql({foo: {nested: 'val'}, bar: 'val'});
|
|
141
|
+
delete guard.foo.nested;
|
|
142
|
+
delete guard.bar;
|
|
143
|
+
expect(guard).to.eql({foo: {nested: 'val'}, bar: 'val'});
|
|
105
144
|
})
|
|
106
145
|
|
|
107
|
-
it('should
|
|
146
|
+
it('should prevent nested writes', () => {
|
|
108
147
|
const obj = {outer: {inner: {bar: {nested: 'val'}, other: 'val'}}};
|
|
109
148
|
const guard = objectGuard([rule])(obj);
|
|
110
|
-
guard.
|
|
111
|
-
guard.
|
|
112
|
-
guard.
|
|
113
|
-
guard.
|
|
114
|
-
guard.
|
|
115
|
-
expect(obj).to.eql({
|
|
149
|
+
guard.outer.inner.bar.other = 'denied';
|
|
150
|
+
guard.outer.inner.bar.nested = 'denied';
|
|
151
|
+
guard.outer.inner.foo = 'denied';
|
|
152
|
+
guard.outer.inner.other = 'allowed';
|
|
153
|
+
expect(guard).to.eql({
|
|
116
154
|
outer: {
|
|
117
155
|
inner: {
|
|
118
156
|
bar: {
|
|
@@ -124,21 +162,107 @@ describe('objectGuard', () => {
|
|
|
124
162
|
})
|
|
125
163
|
});
|
|
126
164
|
|
|
127
|
-
it('should
|
|
165
|
+
it('should prevent writes if upper levels are protected', () => {
|
|
166
|
+
const obj = {foo: {inner: {}}};
|
|
167
|
+
const guard = objectGuard([rule])(obj);
|
|
168
|
+
guard.foo.inner.prop = 'value';
|
|
169
|
+
expect(obj).to.eql({foo: {inner: {}}});
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('should prevent deletes if a higher level property is protected', () => {
|
|
173
|
+
const obj = {foo: {inner: {prop: 'value'}}};
|
|
174
|
+
const guard = objectGuard([rule])(obj);
|
|
175
|
+
delete guard.foo.inner.prop;
|
|
176
|
+
expect(obj).to.eql({foo: {inner: {prop: 'value'}}});
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
it('should clean up top-level writes that would result in inner properties changing', () => {
|
|
180
|
+
const guard = objectGuard([rule])({outer: {inner: {bar: 'baz'}}});
|
|
181
|
+
guard.outer = {inner: {bar: 'baz', foo: 'baz', prop: 'allowed'}};
|
|
182
|
+
expect(guard).to.eql({outer: {inner: {bar: 'baz', prop: 'allowed'}}});
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
it('should not prevent writes that are not protected', () => {
|
|
186
|
+
const obj = {};
|
|
187
|
+
const guard = objectGuard([rule])(obj);
|
|
188
|
+
guard.outer = {
|
|
189
|
+
test: 'value'
|
|
190
|
+
}
|
|
191
|
+
expect(obj.outer.test).to.eql('value');
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
it('should not choke on type mismatch: overwrite object with scalar', () => {
|
|
195
|
+
const obj = {outer: {inner: {}}};
|
|
196
|
+
const guard = objectGuard([rule])(obj);
|
|
197
|
+
guard.outer = null;
|
|
198
|
+
expect(obj).to.eql({outer: {inner: {}}});
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('should not choke on type mismatch: overwrite scalar with object', () => {
|
|
202
|
+
const obj = {outer: null};
|
|
203
|
+
const guard = objectGuard([rule])(obj);
|
|
204
|
+
guard.outer = {inner: {bar: 'denied', other: 'allowed'}};
|
|
205
|
+
expect(obj).to.eql({outer: {inner: {other: 'allowed'}}});
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
it('should prevent nested deletes', () => {
|
|
128
209
|
const obj = {outer: {inner: {foo: {nested: 'val'}, bar: 'val'}}};
|
|
129
210
|
const guard = objectGuard([rule])(obj);
|
|
130
|
-
delete guard.
|
|
131
|
-
delete guard.
|
|
132
|
-
guard.
|
|
133
|
-
expect(obj).to.eql({outer: {inner: {foo: {nested: 'val'}, bar: 'val'}}})
|
|
211
|
+
delete guard.outer.inner.foo.nested;
|
|
212
|
+
delete guard.outer.inner.bar;
|
|
213
|
+
expect(guard).to.eql({outer: {inner: {foo: {nested: 'val'}, bar: 'val'}}})
|
|
134
214
|
});
|
|
135
215
|
|
|
216
|
+
it('should prevent higher level deletes that would result in inner properties changing', () => {
|
|
217
|
+
const guard = objectGuard([rule])({outer: {inner: {bar: 'baz'}}});
|
|
218
|
+
delete guard.outer.inner;
|
|
219
|
+
expect(guard).to.eql({outer: {inner: {bar: 'baz'}}});
|
|
220
|
+
})
|
|
221
|
+
|
|
136
222
|
it('should work on null properties', () => {
|
|
137
223
|
const obj = {foo: null};
|
|
138
224
|
const guard = objectGuard([rule])(obj);
|
|
139
|
-
guard.
|
|
140
|
-
guard.
|
|
141
|
-
expect(obj).to.eql({foo: null});
|
|
225
|
+
guard.foo = 'denied';
|
|
226
|
+
expect(guard).to.eql({foo: null});
|
|
142
227
|
});
|
|
143
228
|
});
|
|
229
|
+
describe('multiple rules on the same path', () => {
|
|
230
|
+
it('should each be checked for redacts', () => {
|
|
231
|
+
const obj = objectGuard([
|
|
232
|
+
redactRule({
|
|
233
|
+
paths: ['foo'],
|
|
234
|
+
applies: () => true,
|
|
235
|
+
get(val) {
|
|
236
|
+
return '1' + val;
|
|
237
|
+
}
|
|
238
|
+
}),
|
|
239
|
+
redactRule({
|
|
240
|
+
paths: ['foo'],
|
|
241
|
+
applies: () => true,
|
|
242
|
+
get(val) {
|
|
243
|
+
return '2' + val;
|
|
244
|
+
}
|
|
245
|
+
})
|
|
246
|
+
])({foo: 'bar'});
|
|
247
|
+
expect(obj.foo).to.eql('21bar');
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('can apply both redact and write protect', () => {
|
|
251
|
+
const obj = objectGuard([
|
|
252
|
+
redactRule({
|
|
253
|
+
paths: ['foo'],
|
|
254
|
+
applies: () => true,
|
|
255
|
+
get(val) {
|
|
256
|
+
return 'redact' + val;
|
|
257
|
+
},
|
|
258
|
+
}),
|
|
259
|
+
writeProtectRule({
|
|
260
|
+
paths: ['foo'],
|
|
261
|
+
applies: () => true,
|
|
262
|
+
})
|
|
263
|
+
])({foo: 'bar'});
|
|
264
|
+
obj.foo = 'baz';
|
|
265
|
+
expect(obj.foo).to.eql('redactbar');
|
|
266
|
+
});
|
|
267
|
+
})
|
|
144
268
|
});
|
|
@@ -45,7 +45,7 @@ describe('ortb2Guard', () => {
|
|
|
45
45
|
|
|
46
46
|
function testPropertiesAreProtected(properties, allowed) {
|
|
47
47
|
properties.forEach(prop => {
|
|
48
|
-
it(`should ${allowed ? 'keep' : '
|
|
48
|
+
it(`should ${allowed ? 'keep' : 'prevent'} additions to ${prop}`, () => {
|
|
49
49
|
const orig = [{n: 'orig'}];
|
|
50
50
|
const ortb2 = {};
|
|
51
51
|
deepSetValue(ortb2, prop, deepClone(orig));
|
|
@@ -53,8 +53,7 @@ describe('ortb2Guard', () => {
|
|
|
53
53
|
const mod = {};
|
|
54
54
|
const insert = [{n: 'new'}];
|
|
55
55
|
deepSetValue(mod, prop, insert);
|
|
56
|
-
mergeDeep(guard
|
|
57
|
-
guard.verify();
|
|
56
|
+
mergeDeep(guard, mod);
|
|
58
57
|
const actual = deepAccess(ortb2, prop);
|
|
59
58
|
if (allowed) {
|
|
60
59
|
expect(actual).to.eql(orig.concat(insert))
|
|
@@ -63,13 +62,12 @@ describe('ortb2Guard', () => {
|
|
|
63
62
|
}
|
|
64
63
|
});
|
|
65
64
|
|
|
66
|
-
it(`should ${allowed ? 'keep' : '
|
|
65
|
+
it(`should ${allowed ? 'keep' : 'prevent'} modifications to ${prop}`, () => {
|
|
67
66
|
const orig = [{n: 'orig'}];
|
|
68
67
|
const ortb2 = {};
|
|
69
68
|
deepSetValue(ortb2, prop, orig);
|
|
70
69
|
const guard = ortb2Guard(ortb2, activityParams(MOD_TYPE, MOD_NAME));
|
|
71
|
-
deepSetValue(guard
|
|
72
|
-
guard.verify();
|
|
70
|
+
deepSetValue(guard, `${prop}.0.n`, 'new');
|
|
73
71
|
const actual = deepAccess(ortb2, prop);
|
|
74
72
|
if (allowed) {
|
|
75
73
|
expect(actual).to.eql([{n: 'new'}]);
|
|
@@ -102,19 +100,18 @@ describe('ortb2FragmentsGuard', () => {
|
|
|
102
100
|
guardFragments = ortb2FragmentsGuardFactory(testGuard);
|
|
103
101
|
});
|
|
104
102
|
|
|
105
|
-
it('should
|
|
103
|
+
it('should prevent changes to global FPD', () => {
|
|
106
104
|
const fragments = {
|
|
107
105
|
global: {
|
|
108
106
|
foo: {inner: 'val'}
|
|
109
107
|
}
|
|
110
108
|
}
|
|
111
109
|
const guard = guardFragments(fragments);
|
|
112
|
-
guard.
|
|
113
|
-
guard.verify();
|
|
110
|
+
guard.global.foo = 'other';
|
|
114
111
|
expect(fragments.global.foo).to.eql({inner: 'val'});
|
|
115
112
|
});
|
|
116
113
|
|
|
117
|
-
it('should
|
|
114
|
+
it('should prevent changes to bidder FPD', () => {
|
|
118
115
|
const fragments = {
|
|
119
116
|
bidder: {
|
|
120
117
|
A: {
|
|
@@ -123,18 +120,16 @@ describe('ortb2FragmentsGuard', () => {
|
|
|
123
120
|
}
|
|
124
121
|
};
|
|
125
122
|
const guard = guardFragments(fragments);
|
|
126
|
-
guard.
|
|
127
|
-
guard.verify();
|
|
123
|
+
guard.bidder.A.foo = 'denied';
|
|
128
124
|
expect(fragments.bidder.A).to.eql({foo: 'val'});
|
|
129
125
|
});
|
|
130
126
|
|
|
131
|
-
it('should
|
|
127
|
+
it('should prevent changes to bidder FPD that was not initially there', () => {
|
|
132
128
|
const fragments = {
|
|
133
129
|
bidder: {}
|
|
134
130
|
};
|
|
135
131
|
const guard = guardFragments(fragments);
|
|
136
|
-
guard.
|
|
137
|
-
guard.verify();
|
|
132
|
+
guard.bidder.A = {foo: 'denied', other: 'allowed'};
|
|
138
133
|
expect(fragments.bidder.A).to.eql({other: 'allowed'});
|
|
139
134
|
});
|
|
140
135
|
})
|
|
@@ -4,6 +4,7 @@ import adagioAnalyticsAdapter, { _internal } from 'modules/adagioAnalyticsAdapte
|
|
|
4
4
|
import { EVENTS } from 'src/constants.js';
|
|
5
5
|
import { expect } from 'chai';
|
|
6
6
|
import { server } from 'test/mocks/xhr.js';
|
|
7
|
+
import { deepClone } from 'src/utils.js';
|
|
7
8
|
|
|
8
9
|
let adapterManager = require('src/adapterManager').default;
|
|
9
10
|
let events = require('src/events');
|
|
@@ -191,8 +192,10 @@ const BID_CACHED = Object.assign({}, BID_ADAGIO, {
|
|
|
191
192
|
latestTargetedAuctionId: BID_ADAGIO.auctionId,
|
|
192
193
|
});
|
|
193
194
|
|
|
195
|
+
const PARAMS_PLCMT = 'placement_from_params';
|
|
194
196
|
const PARAMS_ADG = {
|
|
195
197
|
environment: 'desktop',
|
|
198
|
+
placement: PARAMS_PLCMT,
|
|
196
199
|
};
|
|
197
200
|
|
|
198
201
|
const ORTB_DATA = {
|
|
@@ -208,6 +211,13 @@ const ADG_RTD = {
|
|
|
208
211
|
}
|
|
209
212
|
};
|
|
210
213
|
|
|
214
|
+
const ORTB2IMP_PLCMT = 'placement_from_ortb2imp';
|
|
215
|
+
const ORTB2IMP_DATA_ADG = {
|
|
216
|
+
'adg_rtd': {
|
|
217
|
+
'placement': ORTB2IMP_PLCMT
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
211
221
|
const AUCTION_INIT_ANOTHER = {
|
|
212
222
|
'auctionId': AUCTION_ID,
|
|
213
223
|
'timestamp': 1519767010567,
|
|
@@ -228,6 +238,11 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
228
238
|
]
|
|
229
239
|
}
|
|
230
240
|
},
|
|
241
|
+
'ortb2Imp': {
|
|
242
|
+
'ext': {
|
|
243
|
+
'data': ORTB2IMP_DATA_ADG
|
|
244
|
+
}
|
|
245
|
+
},
|
|
231
246
|
'sizes': [[640, 480]],
|
|
232
247
|
'bids': [ {
|
|
233
248
|
'bidder': 'another',
|
|
@@ -250,14 +265,7 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
250
265
|
'publisherId': '1001'
|
|
251
266
|
},
|
|
252
267
|
}, ],
|
|
253
|
-
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014'
|
|
254
|
-
'ortb2Imp': {
|
|
255
|
-
'ext': {
|
|
256
|
-
'data': {
|
|
257
|
-
'placement': 'pave_top',
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
},
|
|
268
|
+
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014'
|
|
261
269
|
}, {
|
|
262
270
|
'code': '/19968336/footer-bid-tag-1',
|
|
263
271
|
'mediaTypes': {
|
|
@@ -281,7 +289,9 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
281
289
|
'ortb2Imp': {
|
|
282
290
|
'ext': {
|
|
283
291
|
'data': {
|
|
284
|
-
'
|
|
292
|
+
'adg_rtd': {
|
|
293
|
+
'placement': 'footer'
|
|
294
|
+
}
|
|
285
295
|
}
|
|
286
296
|
}
|
|
287
297
|
},
|
|
@@ -303,6 +313,11 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
303
313
|
'sizes': [[640, 480]]
|
|
304
314
|
}
|
|
305
315
|
},
|
|
316
|
+
'ortb2Imp': {
|
|
317
|
+
'ext': {
|
|
318
|
+
'data': ORTB2IMP_DATA_ADG
|
|
319
|
+
}
|
|
320
|
+
},
|
|
306
321
|
'adUnitCode': '/19968336/header-bid-tag-1',
|
|
307
322
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
308
323
|
'sizes': [[640, 480]],
|
|
@@ -363,6 +378,12 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
363
378
|
'sizes': [[640, 480]]
|
|
364
379
|
}
|
|
365
380
|
},
|
|
381
|
+
|
|
382
|
+
'ortb2Imp': {
|
|
383
|
+
'ext': {
|
|
384
|
+
'data': ORTB2IMP_DATA_ADG
|
|
385
|
+
}
|
|
386
|
+
},
|
|
366
387
|
'adUnitCode': '/19968336/header-bid-tag-1',
|
|
367
388
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
368
389
|
'sizes': [[640, 480]],
|
|
@@ -405,6 +426,11 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
405
426
|
'sizes': [[640, 480]]
|
|
406
427
|
}
|
|
407
428
|
},
|
|
429
|
+
'ortb2Imp': {
|
|
430
|
+
'ext': {
|
|
431
|
+
'data': ORTB2IMP_DATA_ADG
|
|
432
|
+
}
|
|
433
|
+
},
|
|
408
434
|
'adUnitCode': '/19968336/header-bid-tag-1',
|
|
409
435
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
410
436
|
'sizes': [[640, 480]],
|
|
@@ -453,7 +479,12 @@ const AUCTION_INIT_ANOTHER = {
|
|
|
453
479
|
'bidderRequestId': '1be65d7958826a',
|
|
454
480
|
'auctionId': AUCTION_ID,
|
|
455
481
|
'src': 'client',
|
|
456
|
-
'bidRequestsCount': 1
|
|
482
|
+
'bidRequestsCount': 1,
|
|
483
|
+
'ortb2Imp': {
|
|
484
|
+
'ext': {
|
|
485
|
+
'data': ORTB2IMP_DATA_ADG
|
|
486
|
+
}
|
|
487
|
+
},
|
|
457
488
|
}
|
|
458
489
|
],
|
|
459
490
|
'timeout': 3000,
|
|
@@ -514,9 +545,7 @@ const AUCTION_INIT_CACHE = {
|
|
|
514
545
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
515
546
|
'ortb2Imp': {
|
|
516
547
|
'ext': {
|
|
517
|
-
'data':
|
|
518
|
-
'placement': 'pave_top',
|
|
519
|
-
}
|
|
548
|
+
'data': ORTB2IMP_DATA_ADG
|
|
520
549
|
}
|
|
521
550
|
},
|
|
522
551
|
}, {
|
|
@@ -539,13 +568,6 @@ const AUCTION_INIT_CACHE = {
|
|
|
539
568
|
},
|
|
540
569
|
} ],
|
|
541
570
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
542
|
-
'ortb2Imp': {
|
|
543
|
-
'ext': {
|
|
544
|
-
'data': {
|
|
545
|
-
'placement': 'pave_top',
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
},
|
|
549
571
|
} ],
|
|
550
572
|
'adUnitCodes': ['/19968336/header-bid-tag-1', '/19968336/footer-bid-tag-1'],
|
|
551
573
|
'bidderRequests': [ {
|
|
@@ -562,6 +584,11 @@ const AUCTION_INIT_CACHE = {
|
|
|
562
584
|
'sizes': [[640, 480]]
|
|
563
585
|
}
|
|
564
586
|
},
|
|
587
|
+
'ortb2Imp': {
|
|
588
|
+
'ext': {
|
|
589
|
+
'data': ORTB2IMP_DATA_ADG
|
|
590
|
+
}
|
|
591
|
+
},
|
|
565
592
|
'adUnitCode': '/19968336/header-bid-tag-1',
|
|
566
593
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
567
594
|
'sizes': [[640, 480]],
|
|
@@ -621,6 +648,11 @@ const AUCTION_INIT_CACHE = {
|
|
|
621
648
|
'sizes': [[640, 480]]
|
|
622
649
|
}
|
|
623
650
|
},
|
|
651
|
+
'ortb2Imp': {
|
|
652
|
+
'ext': {
|
|
653
|
+
'data': ORTB2IMP_DATA_ADG
|
|
654
|
+
}
|
|
655
|
+
},
|
|
624
656
|
'adUnitCode': '/19968336/header-bid-tag-1',
|
|
625
657
|
'transactionId': 'ca4af27a-6d02-4f90-949d-d5541fa12014',
|
|
626
658
|
'sizes': [[640, 480]],
|
|
@@ -818,7 +850,7 @@ describe('adagio analytics adapter', () => {
|
|
|
818
850
|
expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
|
|
819
851
|
expect(search.url_dmn).to.equal(window.location.hostname);
|
|
820
852
|
expect(search.pgtyp).to.equal('article');
|
|
821
|
-
expect(search.plcmt).to.equal(
|
|
853
|
+
expect(search.plcmt).to.equal(ORTB2IMP_PLCMT);
|
|
822
854
|
expect(search.mts).to.equal('ban');
|
|
823
855
|
expect(search.ban_szs).to.equal('640x100,640x480');
|
|
824
856
|
expect(search.bdrs).to.equal('adagio,another,anotherWithAlias,nobid');
|
|
@@ -869,6 +901,7 @@ describe('adagio analytics adapter', () => {
|
|
|
869
901
|
expect(search.auct_id).to.equal(RTD_AUCTION_ID);
|
|
870
902
|
expect(search.adu_code).to.equal('/19968336/header-bid-tag-1');
|
|
871
903
|
expect(search.win_bdr).to.equal('another');
|
|
904
|
+
expect(search.plcmt).to.equal(ORTB2IMP_PLCMT);
|
|
872
905
|
expect(search.win_mt).to.equal('ban');
|
|
873
906
|
expect(search.win_ban_sz).to.equal('728x90');
|
|
874
907
|
expect(search.win_net_cpm).to.equal('2.052');
|
|
@@ -877,6 +910,43 @@ describe('adagio analytics adapter', () => {
|
|
|
877
910
|
}
|
|
878
911
|
});
|
|
879
912
|
|
|
913
|
+
it('it fallback on the adUnit.params.placement value if adg_rtd.placement is not set', () => {
|
|
914
|
+
const mockAuctionInit = deepClone(MOCK.AUCTION_INIT.another);
|
|
915
|
+
for (const adUnit of mockAuctionInit.adUnits) {
|
|
916
|
+
delete adUnit.ortb2Imp?.ext?.data.adg_rtd;
|
|
917
|
+
}
|
|
918
|
+
for (const bidRequest of mockAuctionInit.bidderRequests) {
|
|
919
|
+
for (const bid of bidRequest.bids) {
|
|
920
|
+
delete bid.ortb2Imp?.ext?.data.adg_rtd;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
events.emit(EVENTS.AUCTION_INIT, mockAuctionInit);
|
|
925
|
+
{
|
|
926
|
+
const { protocol, hostname, pathname, search } = utils.parseUrl(server.requests[0].url);
|
|
927
|
+
expect(protocol).to.equal('https');
|
|
928
|
+
expect(hostname).to.equal('c.4dex.io');
|
|
929
|
+
expect(pathname).to.equal('/pba.gif');
|
|
930
|
+
expect(search.v).to.equal('1');
|
|
931
|
+
expect(search.pbjsv).to.equal('$prebid.version$');
|
|
932
|
+
expect(search.s_id).to.equal(SESSION_ID);
|
|
933
|
+
expect(search.auct_id).to.equal(RTD_AUCTION_ID);
|
|
934
|
+
expect(search.adu_code).to.equal('/19968336/header-bid-tag-1');
|
|
935
|
+
expect(search.org_id).to.equal('1001');
|
|
936
|
+
expect(search.site).to.equal('test-com');
|
|
937
|
+
expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
|
|
938
|
+
expect(search.url_dmn).to.equal(window.location.hostname);
|
|
939
|
+
expect(search.pgtyp).to.equal('article');
|
|
940
|
+
expect(search.plcmt).to.equal(PARAMS_PLCMT);
|
|
941
|
+
expect(search.mts).to.equal('ban');
|
|
942
|
+
expect(search.ban_szs).to.equal('640x100,640x480');
|
|
943
|
+
expect(search.bdrs).to.equal('adagio,another,anotherWithAlias,nobid');
|
|
944
|
+
expect(search.bdrs_code).to.equal('adagio,another,another,nobid');
|
|
945
|
+
expect(search.bdrs_timeout).to.not.exist;
|
|
946
|
+
expect(search.adg_mts).to.equal('ban');
|
|
947
|
+
}
|
|
948
|
+
});
|
|
949
|
+
|
|
880
950
|
it('builds and sends auction data with a cached bid win', () => {
|
|
881
951
|
events.emit(EVENTS.AUCTION_INIT, MOCK.AUCTION_INIT.bidcached);
|
|
882
952
|
events.emit(EVENTS.AUCTION_INIT, MOCK.AUCTION_INIT.another);
|
|
@@ -903,7 +973,7 @@ describe('adagio analytics adapter', () => {
|
|
|
903
973
|
expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
|
|
904
974
|
expect(search.url_dmn).to.equal(window.location.hostname);
|
|
905
975
|
expect(search.pgtyp).to.equal('article');
|
|
906
|
-
expect(search.plcmt).to.equal(
|
|
976
|
+
expect(search.plcmt).to.equal(ORTB2IMP_PLCMT);
|
|
907
977
|
expect(search.mts).to.equal('ban');
|
|
908
978
|
expect(search.ban_szs).to.equal('640x100,640x480');
|
|
909
979
|
expect(search.bdrs).to.equal('adagio,another');
|
|
@@ -928,7 +998,7 @@ describe('adagio analytics adapter', () => {
|
|
|
928
998
|
expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
|
|
929
999
|
expect(search.url_dmn).to.equal(window.location.hostname);
|
|
930
1000
|
expect(search.pgtyp).to.equal('article');
|
|
931
|
-
expect(search.plcmt).to.
|
|
1001
|
+
expect(search.plcmt).to.be.undefined; // no placement set, no adagio bidder for this adUnit.
|
|
932
1002
|
expect(search.mts).to.equal('ban');
|
|
933
1003
|
expect(search.ban_szs).to.equal('640x480');
|
|
934
1004
|
expect(search.bdrs).to.equal('another');
|
|
@@ -951,7 +1021,7 @@ describe('adagio analytics adapter', () => {
|
|
|
951
1021
|
expect(search.pv_id).to.equal('a68e6d70-213b-496c-be0a-c468ff387106');
|
|
952
1022
|
expect(search.url_dmn).to.equal(window.location.hostname);
|
|
953
1023
|
expect(search.pgtyp).to.equal('article');
|
|
954
|
-
expect(search.plcmt).to.equal(
|
|
1024
|
+
expect(search.plcmt).to.equal(ORTB2IMP_PLCMT);
|
|
955
1025
|
expect(search.mts).to.equal('ban');
|
|
956
1026
|
expect(search.ban_szs).to.equal('640x100,640x480');
|
|
957
1027
|
expect(search.bdrs).to.equal('adagio,another,anotherWithAlias,nobid');
|
|
@@ -507,7 +507,7 @@ describe('Adagio Rtd Provider', function () {
|
|
|
507
507
|
expect(ortb2ImpExt.adunit_position).equal('');
|
|
508
508
|
});
|
|
509
509
|
|
|
510
|
-
describe('
|
|
510
|
+
describe('set the ortb2Imp.ext.data.adg_rtd.placement', function() {
|
|
511
511
|
const config = {
|
|
512
512
|
name: SUBMODULE_NAME,
|
|
513
513
|
params: {
|
|
@@ -516,50 +516,50 @@ describe('Adagio Rtd Provider', function () {
|
|
|
516
516
|
}
|
|
517
517
|
};
|
|
518
518
|
|
|
519
|
-
it('
|
|
519
|
+
it('set the adg_rtd.placement value from the adUnit[].bids adagio.params.placement value', function() {
|
|
520
|
+
const placement = 'placement-value';
|
|
521
|
+
|
|
520
522
|
const configCopy = utils.deepClone(config);
|
|
521
|
-
configCopy.params.placementSource = PLACEMENT_SOURCES.ADUNITCODE;
|
|
522
523
|
|
|
523
524
|
const bidRequest = utils.deepClone(bidReqConfig);
|
|
525
|
+
bidRequest.adUnits[0].bids[0].params.placement = placement;
|
|
524
526
|
|
|
525
527
|
adagioRtdSubmodule.getBidRequestData(bidRequest, cb, configCopy);
|
|
526
528
|
expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
|
|
527
|
-
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.equal(
|
|
529
|
+
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.adg_rtd.placement).to.equal(placement);
|
|
528
530
|
});
|
|
529
531
|
|
|
530
|
-
it('
|
|
532
|
+
it('fallback on the adUnit.code value to set the adg_rtd.placement value', function() {
|
|
531
533
|
const configCopy = utils.deepClone(config);
|
|
532
|
-
configCopy.params.placementSource = PLACEMENT_SOURCES.
|
|
534
|
+
configCopy.params.placementSource = PLACEMENT_SOURCES.ADUNITCODE;
|
|
533
535
|
|
|
534
536
|
const bidRequest = utils.deepClone(bidReqConfig);
|
|
535
|
-
const gpid = '/19968336/header-bid-tag-0'
|
|
536
|
-
utils.deepSetValue(bidRequest.adUnits[0], 'ortb2Imp.ext.gpid', gpid)
|
|
537
537
|
|
|
538
538
|
adagioRtdSubmodule.getBidRequestData(bidRequest, cb, configCopy);
|
|
539
539
|
expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
|
|
540
|
-
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.equal(
|
|
540
|
+
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.adg_rtd.placement).to.equal('div-gpt-ad-1460505748561-0');
|
|
541
541
|
});
|
|
542
542
|
|
|
543
|
-
it('
|
|
544
|
-
const placement = 'placement-value';
|
|
545
|
-
|
|
543
|
+
it('fallback on the the gpid value to set the adg_rtd.placement value ', function() {
|
|
546
544
|
const configCopy = utils.deepClone(config);
|
|
545
|
+
configCopy.params.placementSource = PLACEMENT_SOURCES.GPID;
|
|
547
546
|
|
|
548
547
|
const bidRequest = utils.deepClone(bidReqConfig);
|
|
549
|
-
|
|
548
|
+
const gpid = '/19968336/header-bid-tag-0'
|
|
549
|
+
utils.deepSetValue(bidRequest.adUnits[0], 'ortb2Imp.ext.gpid', gpid)
|
|
550
550
|
|
|
551
551
|
adagioRtdSubmodule.getBidRequestData(bidRequest, cb, configCopy);
|
|
552
552
|
expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
|
|
553
|
-
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.equal(
|
|
553
|
+
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.adg_rtd.placement).to.equal(gpid);
|
|
554
554
|
});
|
|
555
555
|
|
|
556
|
-
it('it does not populate `ortb2Imp.ext.data.placement` if no fallback', function() {
|
|
556
|
+
it('it does not populate `ortb2Imp.ext.data.adg_rtd.placement` if no fallback', function() {
|
|
557
557
|
const configCopy = utils.deepClone(config);
|
|
558
558
|
const bidRequest = utils.deepClone(bidReqConfig);
|
|
559
559
|
|
|
560
560
|
adagioRtdSubmodule.getBidRequestData(bidRequest, cb, configCopy);
|
|
561
561
|
expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
|
|
562
|
-
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.not.exist;
|
|
562
|
+
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.adg_rtd.placement).to.not.exist;
|
|
563
563
|
});
|
|
564
564
|
|
|
565
565
|
it('ensure we create the `ortb2Imp` object if it does not exist', function() {
|
|
@@ -571,7 +571,7 @@ describe('Adagio Rtd Provider', function () {
|
|
|
571
571
|
|
|
572
572
|
adagioRtdSubmodule.getBidRequestData(bidRequest, cb, configCopy);
|
|
573
573
|
expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
|
|
574
|
-
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.equal('div-gpt-ad-1460505748561-0');
|
|
574
|
+
expect(bidRequest.adUnits[0].ortb2Imp.ext.data.adg_rtd.placement).to.equal('div-gpt-ad-1460505748561-0');
|
|
575
575
|
});
|
|
576
576
|
});
|
|
577
577
|
});
|