Skip to content

Commit 2204043

Browse files
Bidder Specific Imp Level Params Should Apply to a Specific Alias (#4157)
1 parent 3c2bb27 commit 2204043

File tree

6 files changed

+60
-37
lines changed

6 files changed

+60
-37
lines changed

src/main/java/org/prebid/server/auction/ExchangeService.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,6 @@ private AuctionParticipation createAuctionParticipation(
782782
bidderToMultiBid,
783783
biddersToConfigs,
784784
bidderToPrebidBidders,
785-
bidderAliases,
786785
context);
787786

788787
final Map<String, Price> originalPriceFloors = enrichedWithPriceFloors.getImp().stream()
@@ -815,7 +814,6 @@ private BidRequest prepareBidRequest(BidderPrivacyResult bidderPrivacyResult,
815814
Map<String, MultiBidConfig> bidderToMultiBid,
816815
Map<String, ExtBidderConfigOrtb> biddersToConfigs,
817816
Map<String, JsonNode> bidderToPrebidBidders,
818-
BidderAliases bidderAliases,
819817
AuctionContext context) {
820818

821819
final String bidder = bidderPrivacyResult.getRequestBidder();
@@ -869,7 +867,6 @@ private BidRequest prepareBidRequest(BidderPrivacyResult bidderPrivacyResult,
869867
transmitTid,
870868
useFirstPartyData,
871869
context.getAccount(),
872-
bidderAliases,
873870
context.getDebugWarnings());
874871

875872
return bidRequest.toBuilder()
@@ -907,13 +904,12 @@ private List<Imp> prepareImps(String bidder,
907904
boolean transmitTid,
908905
boolean useFirstPartyData,
909906
Account account,
910-
BidderAliases bidderAliases,
911907
List<String> debugWarnings) {
912908

913909
return bidRequest.getImp().stream()
914910
.filter(imp -> bidderParamsFromImpExt(imp.getExt()).hasNonNull(bidder))
915911
.map(imp -> imp.toBuilder().ext(imp.getExt().deepCopy()).build())
916-
.map(imp -> impAdjuster.adjust(imp, bidder, bidderAliases, debugWarnings))
912+
.map(imp -> impAdjuster.adjust(imp, bidder, debugWarnings))
917913
.map(imp -> prepareImp(imp, bidder, bidRequest, transmitTid, useFirstPartyData, account, debugWarnings))
918914
.toList();
919915
}

src/main/java/org/prebid/server/auction/ImpAdjuster.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.fasterxml.jackson.databind.node.IntNode;
55
import com.fasterxml.jackson.databind.node.ObjectNode;
66
import com.iab.openrtb.request.Imp;
7-
import org.prebid.server.auction.aliases.BidderAliases;
7+
import org.apache.commons.lang3.StringUtils;
88
import org.prebid.server.json.JacksonMapper;
99
import org.prebid.server.json.JsonMerger;
1010
import org.prebid.server.validation.ImpValidator;
@@ -36,15 +36,15 @@ public ImpAdjuster(JacksonMapper jacksonMapper,
3636
this.jsonMerger = Objects.requireNonNull(jsonMerger);
3737
}
3838

39-
public Imp adjust(Imp originalImp, String bidder, BidderAliases bidderAliases, List<String> debugMessages) {
39+
public Imp adjust(Imp originalImp, String bidder, List<String> debugMessages) {
4040
setAeParams(originalImp.getExt());
4141

4242
final JsonNode impExtPrebidImp = bidderParamsFromImpExtPrebidImp(originalImp.getExt());
4343
if (impExtPrebidImp == null) {
4444
return originalImp;
4545
}
4646

47-
final JsonNode bidderNode = getBidderNode(bidder, bidderAliases, impExtPrebidImp);
47+
final JsonNode bidderNode = getBidderNode(bidder, impExtPrebidImp);
4848

4949
if (bidderNode == null || bidderNode.isEmpty()) {
5050
removeImpExtPrebidImp(originalImp.getExt());
@@ -98,11 +98,11 @@ private static JsonNode bidderParamsFromImpExtPrebidImp(ObjectNode ext) {
9898
.orElse(null);
9999
}
100100

101-
private static JsonNode getBidderNode(String bidderName, BidderAliases bidderAliases, JsonNode node) {
101+
private static JsonNode getBidderNode(String bidderName, JsonNode node) {
102102
final Iterator<String> fieldNames = node.fieldNames();
103103
while (fieldNames.hasNext()) {
104104
final String fieldName = fieldNames.next();
105-
if (bidderAliases.isSame(fieldName, bidderName)) {
105+
if (StringUtils.equalsIgnoreCase(fieldName, bidderName)) {
106106
return node.get(fieldName);
107107
}
108108
}

src/test/groovy/org/prebid/server/functional/tests/ImpRequestSpec.groovy

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import static org.prebid.server.functional.model.bidder.BidderName.OPENX
1919
import static org.prebid.server.functional.model.bidder.BidderName.RUBICON
2020
import static org.prebid.server.functional.model.bidder.BidderName.UNKNOWN
2121
import static org.prebid.server.functional.model.bidder.BidderName.WILDCARD
22+
import static org.prebid.server.functional.model.bidder.BidderName.GENER_X
2223
import static org.prebid.server.functional.model.response.auction.ErrorType.PREBID
2324
import static org.prebid.server.functional.testcontainers.Dependencies.getNetworkServiceContainer
2425

@@ -131,6 +132,42 @@ class ImpRequestSpec extends BaseSpec {
131132
ALIAS_CAMEL_CASE | GENERIC_CAMEL_CASE
132133
}
133134

135+
def "PBS should update imp fields only for specific alias when request has multiple aliases"() {
136+
given: "Default basic BidRequest"
137+
def storedPmp = Pmp.defaultPmp
138+
def originalPmp = Pmp.defaultPmp
139+
def bidRequest = BidRequest.defaultBidRequest.tap {
140+
imp.first.tap {
141+
pmp = originalPmp
142+
ext.prebid.imp = [(aliasName): new Imp(pmp: storedPmp)]
143+
ext.prebid.bidder.generic = null
144+
ext.prebid.bidder.generX = new Generic()
145+
ext.prebid.bidder.alias = new Generic()
146+
}
147+
ext.prebid.aliases = [(GENER_X.value) : bidderName,
148+
(aliasName.value): bidderName,
149+
]
150+
}
151+
152+
when: "Requesting PBS auction"
153+
def response = defaultPbsService.sendAuctionRequest(bidRequest)
154+
155+
then: "BidderRequest should update imp information for specific alias"
156+
def bidderRequests = getRequests(response)
157+
assert bidderRequests.size() == 2
158+
assert bidderRequests[ALIAS.value].imp.pmp.flatten() == [storedPmp]
159+
160+
and: "Left original information for other"
161+
assert bidderRequests[GENER_X.value].imp.pmp.flatten() == [originalPmp]
162+
163+
where:
164+
aliasName | bidderName
165+
ALIAS | GENERIC
166+
ALIAS_CAMEL_CASE | GENERIC
167+
ALIAS | GENERIC_CAMEL_CASE
168+
ALIAS_CAMEL_CASE | GENERIC_CAMEL_CASE
169+
}
170+
134171
def "PBS shouldn't update imp fields when imp.ext.prebid.imp contain only bidder with invalid name"() {
135172
given: "Default basic BidRequest"
136173
def impPmp = Pmp.defaultPmp

src/test/groovy/org/prebid/server/functional/tests/privacy/GdprSetUidSpec.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class GdprSetUidSpec extends PrivacyBaseSpec {
5858
.build()
5959
}
6060

61-
and: "Default uids cookie with gener_x bidder"
61+
and: "Default uids cookie with generic bidder"
6262
def uidsCookie = UidsCookie.defaultUidsCookie.tap {
6363
it.tempUIDs = [(GENERIC): defaultUidWithExpiry]
6464
}

src/test/java/org/prebid/server/auction/ExchangeServiceTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ public void setUp() {
345345
given(fpdResolver.resolveImpExt(any(), anyBoolean()))
346346
.willAnswer(invocation -> invocation.getArgument(0));
347347

348-
given(impAdjuster.adjust(any(), any(), any(), any())).willAnswer(invocation -> invocation.getArgument(0));
348+
given(impAdjuster.adjust(any(), any(), any())).willAnswer(invocation -> invocation.getArgument(0));
349349

350350
given(supplyChainResolver.resolveForBidder(anyString(), any())).willReturn(null);
351351

@@ -498,7 +498,7 @@ public void shouldExtractRequestWithBidderSpecificExtension() {
498498

499499
final ObjectNode adjustedExt = givenImp.getExt().deepCopy();
500500
final Imp adjustedImp = givenImp.toBuilder().ext(adjustedExt).build();
501-
given(impAdjuster.adjust(any(), any(), any(), any())).willReturn(adjustedImp);
501+
given(impAdjuster.adjust(any(), any(), any())).willReturn(adjustedImp);
502502

503503
// when
504504
target.holdAuction(givenRequestContext(bidRequest));
@@ -519,7 +519,7 @@ public void shouldExtractRequestWithBidderSpecificExtension() {
519519
.build());
520520

521521
final ArgumentCaptor<Imp> impCaptor = forClass(Imp.class);
522-
verify(impAdjuster).adjust(impCaptor.capture(), eq("someBidder"), any(), any());
522+
verify(impAdjuster).adjust(impCaptor.capture(), eq("someBidder"), any());
523523

524524
final Imp actualImp = impCaptor.getValue();
525525
assertThat(actualImp).isNotSameAs(givenImp);

src/test/java/org/prebid/server/auction/ImpAdjusterTest.java

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import org.mockito.Mock;
1313
import org.mockito.junit.jupiter.MockitoExtension;
1414
import org.prebid.server.VertxTest;
15-
import org.prebid.server.auction.aliases.BidderAliases;
16-
import org.prebid.server.bidder.BidderCatalog;
1715
import org.prebid.server.json.JsonMerger;
1816
import org.prebid.server.validation.ImpValidator;
1917
import org.prebid.server.validation.ValidationException;
@@ -22,7 +20,6 @@
2220
import java.util.ArrayList;
2321
import java.util.Collections;
2422
import java.util.List;
25-
import java.util.Map;
2623

2724
import static org.assertj.core.api.Assertions.assertThat;
2825
import static org.mockito.ArgumentMatchers.any;
@@ -35,18 +32,11 @@ public class ImpAdjusterTest extends VertxTest {
3532
@Mock
3633
private ImpValidator impValidator;
3734

38-
@Mock
39-
private BidderCatalog bidderCatalog;
40-
4135
private ImpAdjuster target;
4236

43-
private BidderAliases bidderAliases;
44-
4537
@BeforeEach
4638
public void setUp() {
4739
target = new ImpAdjuster(jacksonMapper, new JsonMerger(jacksonMapper), impValidator);
48-
bidderAliases = BidderAliases.of(
49-
Map.of("someBidderAlias", "someBidder"), Collections.emptyMap(), bidderCatalog);
5040
}
5141

5242
@Test
@@ -56,7 +46,7 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsNull() {
5646
final List<String> debugMessages = new ArrayList<>();
5747

5848
// when
59-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
49+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
6050

6151
// then
6252
assertThat(result).isSameAs(givenImp);
@@ -72,7 +62,7 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsAbsent() {
7262
final List<String> debugMessages = new ArrayList<>();
7363

7464
// when
75-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
65+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
7666

7767
// then
7868
assertThat(result).isSameAs(givenImp);
@@ -90,7 +80,7 @@ public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsZero() {
9080
final List<String> debugMessages = new ArrayList<>();
9181

9282
// when
93-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
83+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
9484

9585
// then
9686
assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(0));
@@ -108,7 +98,7 @@ public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsOne() {
10898
final List<String> debugMessages = new ArrayList<>();
10999

110100
// when
111-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
101+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
112102

113103
// then
114104
assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(1));
@@ -126,7 +116,7 @@ public void adjustShouldNotSetImpExtIgsAeWhenImpExtAeIsNotZeroOrOne() {
126116
final List<String> debugMessages = new ArrayList<>();
127117

128118
// when
129-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
119+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
130120

131121
// then
132122
assertThat(result.getExt().get("igs")).isNull();
@@ -145,7 +135,7 @@ public void adjustShouldNotModifyImpExtIgsAeWhenImpExtIgsAePresent() {
145135
final List<String> debugMessages = new ArrayList<>();
146136

147137
// when
148-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
138+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
149139

150140
// then
151141
assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(123));
@@ -162,7 +152,7 @@ public void adjustShouldRemoveExpImpFromOriginalImpWhenImpExtPrebidImpHasEmptyBi
162152
final List<String> debugMessages = new ArrayList<>();
163153

164154
// when
165-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
155+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
166156

167157
// then
168158
final Imp expectedImp = givenImp.toBuilder()
@@ -186,7 +176,7 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImp() throws Valid
186176
final List<String> debugMessages = new ArrayList<>();
187177

188178
// when
189-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
179+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
190180

191181
// then
192182
final Imp expectedImp = givenImp.toBuilder()
@@ -214,7 +204,7 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImpCaseInsensitive
214204
final List<String> debugMessages = new ArrayList<>();
215205

216206
// when
217-
final Imp result = target.adjust(givenImp, "SOMEbiDDer", bidderAliases, debugMessages);
207+
final Imp result = target.adjust(givenImp, "SOMEbiDDer", debugMessages);
218208

219209
// then
220210
final Imp expectedImp = givenImp.toBuilder()
@@ -238,11 +228,11 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImpCaseAliasBidder
238228
.set("deals", mapper.createArrayNode()
239229
.add(mapper.createObjectNode().put("id", "dealId2"))));
240230

241-
final Imp givenImp = givenImp("someBidderAlias", givenBidderImp);
231+
final Imp givenImp = givenImp("someBidder", givenBidderImp);
242232
final List<String> debugMessages = new ArrayList<>();
243233

244234
// when
245-
final Imp result = target.adjust(givenImp, "SOMEbiDDer", bidderAliases, debugMessages);
235+
final Imp result = target.adjust(givenImp, "SOMEbiDDer", debugMessages);
246236

247237
// then
248238
final Imp expectedImp = givenImp.toBuilder()
@@ -272,7 +262,7 @@ public void resolveImpShouldReturnImpWithoutExpImpWhenResultingImpValidationFail
272262
final List<String> debugMessages = new ArrayList<>();
273263

274264
// when
275-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
265+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
276266

277267
// then
278268
final Imp expectedImp = givenImp.toBuilder()
@@ -297,7 +287,7 @@ public void resolveImpShouldReturnImpWithoutExpWhenMergingFailed() {
297287
final List<String> debugMessages = new ArrayList<>();
298288

299289
// when
300-
final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages);
290+
final Imp result = target.adjust(givenImp, "someBidder", debugMessages);
301291

302292
// then
303293
final Imp expectedImp = givenImp.toBuilder()

0 commit comments

Comments
 (0)