Skip to content

Commit

Permalink
Fix comments
Browse files Browse the repository at this point in the history
  • Loading branch information
AntoxaAntoxic committed Feb 7, 2025
1 parent 1bd8dea commit acb7dd6
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 34 deletions.
64 changes: 34 additions & 30 deletions src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<ExtBidPrebid, ObjectNode> 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)
Expand All @@ -1750,6 +1728,32 @@ private ExtPrebid<ExtBidPrebid, ObjectNode> 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;
Expand Down
111 changes: 107 additions & 4 deletions src/test/java/org/prebid/server/bidder/rubicon/RubiconBidderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<BidRequest> 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<List<BidderBid>> 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<BidRequest> 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<List<BidderBid>> 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 {
Expand Down Expand Up @@ -3377,7 +3480,7 @@ public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenApexRenderer
}

@Test
public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsDefinedAsFalse()
public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsDefinedAsFalse()
throws JsonProcessingException {

// given
Expand Down Expand Up @@ -3412,7 +3515,7 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenApexRendererIsD
}

@Test
public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenBidResponseIsNotVideo()
public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenBidResponseIsNotVideo()
throws JsonProcessingException {

// given
Expand Down Expand Up @@ -3447,7 +3550,7 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenBidResponseIsNo
}

@Test
public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenVideoPlacementIsOne()
public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenVideoPlacementIsOne()
throws JsonProcessingException {

// given
Expand Down Expand Up @@ -3482,7 +3585,7 @@ public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenVideoPlacementI
}

@Test
public void makeBidsShouldSetApexRendererUrlToMetaRendererUrlWhenVideoPlcmtIsOne()
public void makeBidsShouldNotSetApexRendererUrlToMetaRendererUrlWhenVideoPlcmtIsOne()
throws JsonProcessingException {

// given
Expand Down

0 comments on commit acb7dd6

Please sign in to comment.