From acb7dd6515eee96192aecc0497904995d674a331 Mon Sep 17 00:00:00 2001 From: antonbabak Date: Fri, 7 Feb 2025 12:08:23 +0100 Subject: [PATCH] Fix comments --- .../server/bidder/rubicon/RubiconBidder.java | 64 +++++----- .../bidder/rubicon/RubiconBidderTest.java | 111 +++++++++++++++++- 2 files changed, 141 insertions(+), 34 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 3ecc01a376d..aac6506f3da 100644 --- a/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java +++ b/src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java @@ -1689,41 +1689,19 @@ private ObjectNode prepareBidExt(RubiconBid bid, BidType bidType, boolean hasApexRenderer) { - final ObjectNode originalBidExt = bid.getExt(); - final Integer networkId = resolveNetworkId(seatBid); - final String seat = seatBid.getSeat(); - final String rendererUrl = resolveRendererUrl(imp, bidType, hasApexRenderer); - - return ObjectUtils.allNull(networkId, rendererUrl, seat) - ? originalBidExt - : prepareBidMeta(bid, seat, networkId, rendererUrl); - } - - private static Integer resolveNetworkId(RubiconSeatBid seatBid) { - final String buyer = seatBid.getBuyer(); - final int networkId = NumberUtils.toInt(buyer, 0); - return networkId <= 0 ? null : networkId; - } - - private String resolveRendererUrl(Imp imp, BidType bidType, boolean hasApexRenderer) { - if (imp == null) { - return null; - } - - final Video video = imp.getVideo(); - return hasApexRenderer - && bidType == BidType.video - && (!Objects.equals(video.getPlacement(), 1) && !Objects.equals(video.getPlcmt(), 1)) - ? VIDEO_OUTSTREAM_APEX_META_RENDERER_URL - : null; - } - - private ObjectNode prepareBidMeta(RubiconBid bid, String seat, Integer networkId, String rendererUrl) { final ObjectNode bidExt = bid.getExt(); final ExtPrebid extPrebid = getExtPrebid(bidExt, bid.getId()); final ExtBidPrebid extBidPrebid = extPrebid != null ? extPrebid.getPrebid() : null; final ExtBidPrebidMeta meta = extBidPrebid != null ? extBidPrebid.getMeta() : null; + final Integer networkId = resolveNetworkId(seatBid); + final String seat = seatBid.getSeat(); + final String rendererUrl = resolveRendererUrl(imp, meta, bidType, hasApexRenderer); + + if (ObjectUtils.allNull(networkId, rendererUrl, seat)) { + return bidExt; + } + final ExtBidPrebidMeta updatedMeta = Optional.ofNullable(meta) .map(ExtBidPrebidMeta::toBuilder) .orElseGet(ExtBidPrebidMeta::builder) @@ -1750,6 +1728,32 @@ private ExtPrebid getExtPrebid(ObjectNode bidExt, Stri } } + private static Integer resolveNetworkId(RubiconSeatBid seatBid) { + final String buyer = seatBid.getBuyer(); + final int networkId = NumberUtils.toInt(buyer, 0); + return networkId <= 0 ? null : networkId; + } + + private String resolveRendererUrl(Imp imp, ExtBidPrebidMeta meta, BidType bidType, boolean hasApexRenderer) { + if (imp == null) { + return null; + } + + final Video video = imp.getVideo(); + return hasApexRenderer + && (bidType == BidType.video || isVideoMetaMediaType(meta)) + && (video != null && !Objects.equals(video.getPlacement(), 1) && !Objects.equals(video.getPlcmt(), 1)) + ? VIDEO_OUTSTREAM_APEX_META_RENDERER_URL + : null; + } + + private static Boolean isVideoMetaMediaType(ExtBidPrebidMeta meta) { + return Optional.ofNullable(meta) + .map(ExtBidPrebidMeta::getMediaType) + .map("video"::equalsIgnoreCase) + .orElse(false); + } + private String resolveAdm(String bidAdm, ObjectNode admobject) { if (StringUtils.isNotBlank(bidAdm)) { return bidAdm; 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 71e67fbbf6b..b097468082b 100644 --- a/src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java @@ -3348,6 +3348,109 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlForOutputStreamVide .containsExactly(expectedBidExt); } + @Test + public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenMetaMediaTypeIsVideoAndVideoIsPresent() + throws JsonProcessingException { + + // given + final ExtRequest extBidRequest = ExtRequest.of(ExtRequestPrebid.builder() + .bidders(mapper.valueToTree(ExtPrebidBidders.of( + mapper.createObjectNode().set("apexRenderer", BooleanNode.valueOf(true))))) + .build()); + + final BidRequest givenBidRequest = givenBidRequest( + builder -> builder.ext(extBidRequest), + imp -> imp.id("impId").video(Video.builder().build()), + identity()); + + final ObjectNode givenBidExt = mapper.valueToTree( + ExtPrebid.of(ExtBidPrebid.builder() + .meta(ExtBidPrebidMeta.builder() + .mediaType("video") + .rendererUrl("https://renderer.url.from.bidder") + .build()) + .build(), null)); + + final BidderCall httpCall = givenHttpCall( + givenBidRequest, + mapper.writeValueAsString(RubiconBidResponse.builder() + .cur("USD") + .seatbid(singletonList(RubiconSeatBid.builder() + .bid(singletonList(givenRubiconBid(bid -> + bid.impid("impId").price(ONE).ext(givenBidExt)))) + .build())) + .build())); + + // when + final Result> result = target.makeBids(httpCall, givenBidRequest); + + // then + final ObjectNode expectedBidExt = mapper.valueToTree( + ExtPrebid.of(ExtBidPrebid.builder() + .meta(ExtBidPrebidMeta.builder() + .mediaType("video") + .rendererUrl("https://video-outstream.rubiconproject.com/apex-2.2.1.js") + .build()) + .build(), null)); + + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(BidderBid::getBid) + .extracting(Bid::getExt) + .containsExactly(expectedBidExt); + } + + @Test + public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenMetaMediaTypeIsVideoAndVideoIsAbsent() + throws JsonProcessingException { + + // given + final ExtRequest extBidRequest = ExtRequest.of(ExtRequestPrebid.builder() + .bidders(mapper.valueToTree(ExtPrebidBidders.of( + mapper.createObjectNode().set("apexRenderer", BooleanNode.valueOf(true))))) + .build()); + + final BidRequest givenBidRequest = givenBidRequest( + builder -> builder.ext(extBidRequest), + imp -> imp.id("impId").video(null), + identity()); + + final ObjectNode givenBidExt = mapper.valueToTree( + ExtPrebid.of(ExtBidPrebid.builder() + .meta(ExtBidPrebidMeta.builder() + .mediaType("video") + .rendererUrl("https://renderer.url.from.bidder") + .build()) + .build(), null)); + + final BidderCall httpCall = givenHttpCall( + givenBidRequest, + mapper.writeValueAsString(RubiconBidResponse.builder() + .cur("USD") + .seatbid(singletonList(RubiconSeatBid.builder() + .bid(singletonList(givenRubiconBid(bid -> + bid.impid("impId").price(ONE).ext(givenBidExt)))) + .build())) + .build())); + + // when + final Result> result = target.makeBids(httpCall, givenBidRequest); + + // then + final ObjectNode expectedBidExt = mapper.valueToTree( + ExtPrebid.of(ExtBidPrebid.builder() + .meta(ExtBidPrebidMeta.builder() + .rendererUrl("https://video-outstream.rubiconproject.com/apex-2.2.1.js") + .build()) + .build(), null)); + + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(BidderBid::getBid) + .extracting(Bid::getExt) + .containsExactly(givenBidExt); + } + @Test public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsNotDefined() throws JsonProcessingException { @@ -3377,7 +3480,7 @@ public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenApexRenderer } @Test - public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsDefinedAsFalse() + public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsDefinedAsFalse() throws JsonProcessingException { // given @@ -3412,7 +3515,7 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsD } @Test - public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenBidResponseIsNotVideo() + public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenBidResponseIsNotVideo() throws JsonProcessingException { // given @@ -3447,7 +3550,7 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenBidResponseIsNo } @Test - public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenVideoPlacementIsOne() + public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenVideoPlacementIsOne() throws JsonProcessingException { // given @@ -3482,7 +3585,7 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenVideoPlacementI } @Test - public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenVideoPlcmtIsOne() + public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenVideoPlcmtIsOne() throws JsonProcessingException { // given