Skip to content

Commit 6f3c529

Browse files
Rubicon Adapter: set additional meta fields (#3960)
Co-authored-by: osulzhenko <osulzhenko@magnite.com>
1 parent 323bc05 commit 6f3c529

6 files changed

Lines changed: 98 additions & 3 deletions

File tree

src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1595,8 +1595,10 @@ private ObjectNode prepareBidExt(RubiconBid bid,
15951595
final Integer networkId = resolveNetworkId(seatBid);
15961596
final String seat = seatBid.getSeat();
15971597
final String rendererUrl = resolveRendererUrl(imp, meta, bidType, hasApexRenderer);
1598+
final List<String> advertiserDomains = bid.getAdomain();
1599+
final Integer advertiserId = resolveAdvertiserId(bidExt);
15981600

1599-
if (ObjectUtils.allNull(networkId, rendererUrl, seat)) {
1601+
if (ObjectUtils.allNull(networkId, rendererUrl, seat, advertiserDomains, advertiserId)) {
16001602
return bidExt;
16011603
}
16021604

@@ -1606,6 +1608,8 @@ private ObjectNode prepareBidExt(RubiconBid bid,
16061608
.networkId(networkId)
16071609
.seat(seat)
16081610
.rendererUrl(rendererUrl)
1611+
.advertiserId(advertiserId)
1612+
.advertiserDomains(advertiserDomains)
16091613
.build();
16101614

16111615
final ExtBidPrebid modifiedExtBidPrebid = extBidPrebid != null
@@ -1652,6 +1656,31 @@ private static Boolean isVideoMetaMediaType(ExtBidPrebidMeta meta) {
16521656
.orElse(false);
16531657
}
16541658

1659+
private static Integer resolveAdvertiserId(ObjectNode bidExt) {
1660+
return Optional.ofNullable(bidExt)
1661+
.map(ext -> ext.get("rp"))
1662+
.filter(JsonNode::isObject)
1663+
.map(rp -> rp.get("advid"))
1664+
.map(RubiconBidder::convertToInt)
1665+
.orElse(null);
1666+
}
1667+
1668+
private static Integer convertToInt(JsonNode jsonNode) {
1669+
if (jsonNode.canConvertToInt()) {
1670+
return jsonNode.asInt();
1671+
}
1672+
1673+
if (jsonNode.isTextual()) {
1674+
try {
1675+
return Integer.parseInt(jsonNode.asText());
1676+
} catch (NumberFormatException e) {
1677+
return null;
1678+
}
1679+
}
1680+
1681+
return null;
1682+
}
1683+
16551684
private String resolveBidId(Imp rubiconImp, RubiconBid bid) {
16561685
return generateBidId
16571686
? Optional.ofNullable(rubiconImp)

src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3430,6 +3430,62 @@ public void makeBidsShouldSetSeatToMetaSeat() throws JsonProcessingException {
34303430
.containsExactly(expectedBidExt);
34313431
}
34323432

3433+
@Test
3434+
public void makeBidsShouldSetBidExtRpAdvidToMetaAdvertiserId() throws JsonProcessingException {
3435+
// given
3436+
final ObjectNode givenBidExt = mapper.createObjectNode()
3437+
.set("rp", mapper.createObjectNode().put("advid", "1"));
3438+
3439+
final BidderCall<BidRequest> httpCall = givenHttpCall(
3440+
givenBidRequest(identity()),
3441+
mapper.writeValueAsString(RubiconBidResponse.builder()
3442+
.cur("USD")
3443+
.seatbid(singletonList(RubiconSeatBid.builder()
3444+
.bid(singletonList(givenRubiconBid(bid -> bid.ext(givenBidExt))))
3445+
.build()))
3446+
.build()));
3447+
3448+
// when
3449+
final Result<List<BidderBid>> result = target.makeBids(httpCall, givenBidRequest(identity()));
3450+
3451+
// then
3452+
final ObjectNode expectedBidExt = givenBidExt.deepCopy()
3453+
.set("prebid", mapper.createObjectNode()
3454+
.set("meta", mapper.createObjectNode().put("advertiserId", 1)));
3455+
assertThat(result.getErrors()).isEmpty();
3456+
assertThat(result.getValue())
3457+
.extracting(BidderBid::getBid)
3458+
.extracting(Bid::getExt)
3459+
.containsExactly(expectedBidExt);
3460+
}
3461+
3462+
@Test
3463+
public void makeBidsShouldSetBidAdomainToMetaAdvertiserDomains() throws JsonProcessingException {
3464+
// given
3465+
final BidderCall<BidRequest> httpCall = givenHttpCall(
3466+
givenBidRequest(identity()),
3467+
mapper.writeValueAsString(RubiconBidResponse.builder()
3468+
.cur("USD")
3469+
.seatbid(singletonList(RubiconSeatBid.builder()
3470+
.bid(singletonList(givenRubiconBid(bid -> bid.adomain(List.of("A", "B")))))
3471+
.build()))
3472+
.build()));
3473+
3474+
// when
3475+
final Result<List<BidderBid>> result = target.makeBids(httpCall, givenBidRequest(identity()));
3476+
3477+
// then
3478+
final ObjectNode expectedBidExt = mapper.valueToTree(
3479+
ExtPrebid.of(ExtBidPrebid.builder()
3480+
.meta(ExtBidPrebidMeta.builder().advertiserDomains(List.of("A", "B")).build())
3481+
.build(), null));
3482+
assertThat(result.getErrors()).isEmpty();
3483+
assertThat(result.getValue())
3484+
.extracting(BidderBid::getBid)
3485+
.extracting(Bid::getExt)
3486+
.containsExactly(expectedBidExt);
3487+
}
3488+
34333489
@Test
34343490
public void makeBidsShouldSetSeatBuyerToMetaNetworkId() throws JsonProcessingException {
34353491
// given

src/test/resources/org/prebid/server/it/openrtb2/magnite/test-auction-magnite-response.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
"w": 300,
1616
"h": 250,
1717
"ext": {
18+
"rp": {
19+
"advid": "1"
20+
},
1821
"prebid": {
1922
"meta": {
2023
"advertiserId": 1,

src/test/resources/org/prebid/server/it/openrtb2/magnite/test-magnite-bid-response.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
"h": 250,
1616
"w": 300,
1717
"ext": {
18+
"rp": {
19+
"advid": "1"
20+
},
1821
"prebid": {
1922
"meta": {
20-
"advertiserId": 1,
2123
"secondaryCatIds": [
2224
"id1",
2325
"id2"

src/test/resources/org/prebid/server/it/openrtb2/rubicon/test-auction-rubicon-response.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
"w": 300,
1616
"h": 250,
1717
"ext": {
18+
"rp": {
19+
"advid": "1"
20+
},
1821
"prebid": {
1922
"meta": {
2023
"advertiserId": 1,

src/test/resources/org/prebid/server/it/openrtb2/rubicon/test-rubicon-bid-response.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
"h": 250,
1616
"w": 300,
1717
"ext": {
18+
"rp": {
19+
"advid": "1"
20+
},
1821
"prebid": {
1922
"meta": {
20-
"advertiserId": 1,
2123
"secondaryCatIds": [
2224
"id1",
2325
"id2"

0 commit comments

Comments
 (0)