diff --git a/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java b/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java index 8d45320cb9c..19717bbc951 100644 --- a/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java +++ b/src/main/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidder.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.iab.openrtb.request.App; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Publisher; @@ -88,6 +89,7 @@ public Result>> makeHttpRequests(BidRequest bidRequ final BidRequest outgoingRequest = bidRequest.toBuilder() .cur(Collections.singletonList(BIDDER_CURRENCY)) .site(modifySite(bidRequest.getSite(), publisherId)) + .app(modifyApp(bidRequest.getApp(), publisherId)) .imp(modifiedImps) .build(); @@ -178,24 +180,33 @@ private static Optional extractPbadslot(Imp imp) { } private Site modifySite(Site site, String publisherId) { + return Optional.ofNullable(site) + .map(Site::toBuilder) + .map(builder -> builder.publisher(modifyPublisher(site.getPublisher(), publisherId))) + .map(Site.SiteBuilder::build) + .orElse(site); + } + + private App modifyApp(App app, String publisherId) { + return Optional.ofNullable(app) + .map(App::toBuilder) + .map(builder -> builder.publisher(modifyPublisher(app.getPublisher(), publisherId))) + .map(App.AppBuilder::build) + .orElse(app); + } + + private Publisher modifyPublisher(Publisher publisher, String publisherId) { final ObjectNode prebidNode = mapper.mapper().createObjectNode(); prebidNode.put("publisherId", publisherId); final ExtPublisher extPublisher = ExtPublisher.empty(); extPublisher.addProperty("prebid", prebidNode); - final Publisher publisher = Optional.ofNullable(site) - .map(Site::getPublisher) + return Optional.ofNullable(publisher) .map(Publisher::toBuilder) .orElseGet(Publisher::builder) .ext(extPublisher) .build(); - - return Optional.ofNullable(site) - .map(Site::toBuilder) - .orElseGet(Site::builder) - .publisher(publisher) - .build(); } @Override diff --git a/src/test/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidderTest.java b/src/test/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidderTest.java index 7a4e483303c..ea3390f2771 100644 --- a/src/test/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/rtbhouse/RtbhouseBidderTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.iab.openrtb.request.App; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Deal; @@ -189,10 +190,10 @@ public void makeHttpRequestsShouldNotReturnErrorIfNativePresent() { } @Test - public void makeHttpRequestsShouldCreateSiteAndPublisherWhenBidRequestHasNoSite() { + public void makeHttpRequestsShouldNotCreateSiteWhenBidRequestHasAppOnly() { // given final BidRequest bidRequest = givenBidRequest( - bidReq -> bidReq.site(null), + bidReq -> bidReq.site(null).app(App.builder().id("app_id").build()), identity(), identity()); @@ -204,12 +205,31 @@ public void makeHttpRequestsShouldCreateSiteAndPublisherWhenBidRequestHasNoSite( assertThat(result.getValue()).hasSize(1) .extracting(HttpRequest::getPayload) .extracting(BidRequest::getSite) - .allSatisfy(site -> { - assertThat(site).isNotNull(); - assertThat(site.getPublisher()).isNotNull(); - assertThat(site.getPublisher().getExt()).isNotNull(); + .containsOnlyNulls(); + } - final JsonNode prebidNode = site.getPublisher().getExt().getProperty("prebid"); + @Test + public void makeHttpRequestsShouldAddPublisherToAppWhenBidRequestHasAppOnly() { + // given + final BidRequest bidRequest = givenBidRequest( + bidReq -> bidReq.site(null).app(App.builder().id("app_id").build()), + identity(), + identity()); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1) + .extracting(HttpRequest::getPayload) + .extracting(BidRequest::getApp) + .allSatisfy(app -> { + assertThat(app.getId()).isEqualTo("app_id"); + assertThat(app.getPublisher()).isNotNull(); + assertThat(app.getPublisher().getExt()).isNotNull(); + + final JsonNode prebidNode = app.getPublisher().getExt().getProperty("prebid"); assertThat(prebidNode).isNotNull(); assertThat(prebidNode.get("publisherId").asText()).isEqualTo("publisherId"); });