From 4cf193f35e13cb0d116f71e4249f0d0f8fed9285 Mon Sep 17 00:00:00 2001 From: antonbabak Date: Thu, 28 Nov 2024 12:00:52 +0100 Subject: [PATCH 1/3] Rubicon Bidder: Add Bid Meta Seat Field --- .../server/bidder/rubicon/RubiconBidder.java | 26 +++++++++++++---- .../ext/response/ExtBidPrebidMeta.java | 2 ++ .../bidder/rubicon/RubiconBidderTest.java | 28 +++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java index 031f7590475..d327658f5f0 100644 --- a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java +++ b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java @@ -1616,20 +1616,28 @@ private List bidsFromResponse(BidRequest prebidRequest, .toList(); } - private RubiconSeatBid updateSeatBids(RubiconSeatBid seatBid, List errors) { + private static Integer resolveNetworkId(RubiconSeatBid seatBid) { final String buyer = seatBid.getBuyer(); final int networkId = NumberUtils.toInt(buyer, 0); - if (networkId <= 0) { + return networkId <= 0 ? null : networkId; + } + + private RubiconSeatBid updateSeatBids(RubiconSeatBid seatBid, List errors) { + final Integer networkId = resolveNetworkId(seatBid); + final String seat = seatBid.getSeat(); + + if (networkId == null && seat == null) { return seatBid; } + final List updatedBids = seatBid.getBid().stream() - .map(bid -> insertNetworkIdToMeta(bid, networkId, errors)) + .map(bid -> prepareBidMeta(bid, seat, networkId, errors)) .filter(Objects::nonNull) .toList(); return seatBid.toBuilder().bid(updatedBids).build(); } - private RubiconBid insertNetworkIdToMeta(RubiconBid bid, int networkId, List errors) { + private RubiconBid prepareBidMeta(RubiconBid bid, String seat, Integer networkId, List errors) { final ObjectNode bidExt = bid.getExt(); final ExtPrebid extPrebid; try { @@ -1641,8 +1649,14 @@ private RubiconBid insertNetworkIdToMeta(RubiconBid bid, int networkId, List secondaryCategoryIdList; + String seat; + } diff --git a/src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java b/src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java index 7658e5be17a..d49f874c0e8 100644 --- a/src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java @@ -3305,6 +3305,34 @@ public void makeBidsShouldReplaceNotPresentAdmWithAdmNative() throws JsonProcess .containsExactly("{\"admNativeProperty\":\"admNativeValue\"}"); } + @Test + public void makeBidsShouldSetSeatToMetaSeat() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall( + givenBidRequest(identity()), + mapper.writeValueAsString(RubiconBidResponse.builder() + .cur("USD") + .seatbid(singletonList(RubiconSeatBid.builder() + .seat("seat") + .bid(singletonList(givenRubiconBid(bid -> bid.price(ONE)))) + .build())) + .build())); + + // when + final Result> result = target.makeBids(httpCall, givenBidRequest(identity())); + + // then + final ObjectNode expectedBidExt = mapper.valueToTree( + ExtPrebid.of(ExtBidPrebid.builder() + .meta(ExtBidPrebidMeta.builder().seat("seat").build()) + .build(), null)); + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(BidderBid::getBid) + .extracting(Bid::getExt) + .containsExactly(expectedBidExt); + } + @Test public void makeBidsShouldSetSeatBuyerToMetaNetworkId() throws JsonProcessingException { // given From d2ec8b9c2d642b6d0f83c69b77fedfd7402890db Mon Sep 17 00:00:00 2001 From: antonbabak Date: Tue, 3 Dec 2024 09:29:38 +0100 Subject: [PATCH 2/3] Small Fixes --- .../prebid/server/bidder/rubicon/RubiconBidder.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java index d327658f5f0..8b6608c6362 100644 --- a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java +++ b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java @@ -1648,12 +1648,10 @@ private RubiconBid prepareBidMeta(RubiconBid bid, String seat, Integer networkId } final ExtBidPrebid extBidPrebid = extPrebid != null ? extPrebid.getPrebid() : null; final ExtBidPrebidMeta meta = extBidPrebid != null ? extBidPrebid.getMeta() : null; - final ExtBidPrebidMeta updatedMeta = meta != null - ? meta.toBuilder() - .networkId(networkId != null ? networkId : meta.getNetworkId()) - .seat(seat != null ? seat : meta.getSeat()) - .build() - : ExtBidPrebidMeta.builder() + + final ExtBidPrebidMeta updatedMeta = Optional.ofNullable(meta) + .map(ExtBidPrebidMeta::toBuilder) + .orElseGet(ExtBidPrebidMeta::builder) .networkId(networkId) .seat(seat) .build(); From 886dcd680c1685016a45ab6e650265a15a2094ce Mon Sep 17 00:00:00 2001 From: antonbabak Date: Tue, 10 Dec 2024 14:05:50 +0100 Subject: [PATCH 3/3] Fix comments --- .../prebid/server/bidder/rubicon/RubiconBidder.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java index 8b6608c6362..a420efed87d 100644 --- a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java +++ b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java @@ -1616,12 +1616,6 @@ private List bidsFromResponse(BidRequest prebidRequest, .toList(); } - private static Integer resolveNetworkId(RubiconSeatBid seatBid) { - final String buyer = seatBid.getBuyer(); - final int networkId = NumberUtils.toInt(buyer, 0); - return networkId <= 0 ? null : networkId; - } - private RubiconSeatBid updateSeatBids(RubiconSeatBid seatBid, List errors) { final Integer networkId = resolveNetworkId(seatBid); final String seat = seatBid.getSeat(); @@ -1637,6 +1631,12 @@ private RubiconSeatBid updateSeatBids(RubiconSeatBid seatBid, List return seatBid.toBuilder().bid(updatedBids).build(); } + private static Integer resolveNetworkId(RubiconSeatBid seatBid) { + final String buyer = seatBid.getBuyer(); + final int networkId = NumberUtils.toInt(buyer, 0); + return networkId <= 0 ? null : networkId; + } + private RubiconBid prepareBidMeta(RubiconBid bid, String seat, Integer networkId, List errors) { final ObjectNode bidExt = bid.getExt(); final ExtPrebid extPrebid;