diff --git a/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java b/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java index 3626f88b93b..4d14198e230 100644 --- a/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java +++ b/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java @@ -1,6 +1,7 @@ package org.prebid.server.bidder.ogury; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.iab.openrtb.request.App; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; @@ -71,14 +72,10 @@ public Result>> makeHttpRequests(BidRequest bidRequ } if (CollectionUtils.isEmpty(impsWithOguryParams)) { - if (bidRequest.getApp() != null) { - errors.add(BidderError.badInput("Invalid request. assetKey/adUnitId required")); - return Result.withErrors(errors); - } - // for "site" request we can serve ads with just publisher.id + // we can serve ads with just publisher.id if (!hasPublisherId(bidRequest)) { errors.add(BidderError.badInput( - "Invalid request. assetKey/adUnitId or request.site.publisher.id required")); + "Invalid request. assetKey/adUnitId or request.site/app.publisher.id required")); return Result.withErrors(errors); } } @@ -145,12 +142,23 @@ private boolean hasOguryParams(Imp imp) { } private boolean hasPublisherId(BidRequest request) { + return hasSitePublisherId(request) || hasAppPublisherId(request); + } + + private boolean hasSitePublisherId(BidRequest request) { return Optional.ofNullable(request.getSite()) .map(Site::getPublisher) .map(Publisher::getId) .isPresent(); } + private boolean hasAppPublisherId(BidRequest request) { + return Optional.ofNullable(request.getApp()) + .map(App::getPublisher) + .map(Publisher::getId) + .isPresent(); + } + private MultiMap resolveHeaders(Device device) { final MultiMap headers = HttpUtil.headers(); diff --git a/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java b/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java index d5426ab415d..550c8ea06bc 100644 --- a/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java @@ -124,10 +124,9 @@ public void makeHttpRequestsShouldReturnErrorWhenRequestDoesNotHaveOguryKeys() { // when final Result>> result = target.makeHttpRequests(bidrequest); - // then assertThat(result.getErrors()).containsExactly( - BidderError.badInput("Invalid request. assetKey/adUnitId or request.site.publisher.id required")); + BidderError.badInput("Invalid request. assetKey/adUnitId or request.site/app.publisher.id required")); } @Test @@ -189,7 +188,7 @@ public void makeHttpRequestsShouldNotSendImpsWhenHasNotPublisherIdAndImpsWithOgu assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).containsExactly( - BidderError.badInput("Invalid request. assetKey/adUnitId or request.site.publisher.id required")); + BidderError.badInput("Invalid request. assetKey/adUnitId or request.site/app.publisher.id required")); } @Test @@ -214,7 +213,7 @@ public void makeHttpRequestsAppShouldSendOnlyImpsWithOguryParamsIfPresent() { } @Test - public void makeHttpRequestsAppShouldNotSendImpsWhenImpsWithOguryIsEmpty() { + public void makeHttpRequestsAppShouldSendAllImpsWhenHasPublisherIdAndImpsWithOguryIsEmpty() { // given final ObjectNode emptyImpExt = givenEmptyImpExt(); @@ -226,11 +225,33 @@ public void makeHttpRequestsAppShouldNotSendImpsWhenImpsWithOguryIsEmpty() { // when final Result>> result = target.makeHttpRequests(bidrequest); + // then + assertThat(result.getValue()).hasSize(1) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) + .hasSize(2); + + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void makeHttpRequestsAppShouldNotSendImpsWhenHasNotPublisherIdAndImpsWithOguryIsEmpty() { + // given + final ObjectNode emptyImpExt = givenEmptyImpExt(); + + final BidRequest bidrequest = givenBidRequest( + bidRequest -> bidRequest.app(App.builder().bundle("app_bundle").build()), // without publisher id + givenImp(imp -> imp.id("id1").ext(emptyImpExt)), + givenImp(imp -> imp.id("id2").ext(emptyImpExt))); + + // when + final Result>> result = target.makeHttpRequests(bidrequest); + // then assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).containsExactly( - BidderError.badInput("Invalid request. assetKey/adUnitId required")); + BidderError.badInput("Invalid request. assetKey/adUnitId or request.site/app.publisher.id required")); } @Test @@ -260,7 +281,7 @@ public void makeHttpRequestsShouldCleanImpExtWithoutLostExtraFields() { extWithOguryKeys.put("extra_field", "extra_value"); final BidRequest bidrequest = givenBidRequest( - identity(), + bidRequest -> bidRequest.site(givenSite()), givenImp(imp -> imp.id("id1").ext(extWithOguryKeys))); // when @@ -607,7 +628,12 @@ private Site givenSite() { } private App givenApp() { - return App.builder().bundle("app_bundle").build(); + return App.builder() + .bundle("app_bundle") + .publisher(Publisher.builder() + .id("publiser_id") + .build()) + .build(); } private ObjectNode givenEmptyImpExt() {