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 91906d7643c..3626f88b93b 100644 --- a/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java +++ b/src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java @@ -70,10 +70,17 @@ public Result>> makeHttpRequests(BidRequest bidRequ } } - if (!isValidRequestKeys(bidRequest, impsWithOguryParams)) { - errors.add(BidderError.badInput( - "Invalid request. assetKey/adUnitId or request.site.publisher.id required")); - return Result.withErrors(errors); + 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 + if (!hasPublisherId(bidRequest)) { + errors.add(BidderError.badInput( + "Invalid request. assetKey/adUnitId or request.site.publisher.id required")); + return Result.withErrors(errors); + } } final BidRequest modifiedBidRequest = bidRequest.toBuilder() @@ -137,8 +144,8 @@ private boolean hasOguryParams(Imp imp) { && impExtBidderHoist.has(PREBID_FIELD_ADUNIT_ID); } - private boolean isValidRequestKeys(BidRequest request, List impsWithOguryParams) { - return !CollectionUtils.isEmpty(impsWithOguryParams) || Optional.ofNullable(request.getSite()) + private boolean hasPublisherId(BidRequest request) { + return Optional.ofNullable(request.getSite()) .map(Site::getPublisher) .map(Publisher::getId) .isPresent(); diff --git a/src/main/resources/bidder-config/ogury.yaml b/src/main/resources/bidder-config/ogury.yaml index 32ccccac07e..90fe12ccd76 100644 --- a/src/main/resources/bidder-config/ogury.yaml +++ b/src/main/resources/bidder-config/ogury.yaml @@ -8,6 +8,8 @@ adapters: maintainer-email: deliveryservices@ogury.co site-media-types: - banner + app-media-types: + - banner vendor-id: 31 usersync: cookie-family-name: ogury 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 8222df6ab01..d5426ab415d 100644 --- a/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; 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; @@ -191,6 +192,47 @@ public void makeHttpRequestsShouldNotSendImpsWhenHasNotPublisherIdAndImpsWithOgu BidderError.badInput("Invalid request. assetKey/adUnitId or request.site.publisher.id required")); } + @Test + public void makeHttpRequestsAppShouldSendOnlyImpsWithOguryParamsIfPresent() { + // given + final BidRequest bidrequest = givenBidRequest( + bidRequest -> bidRequest.app(givenApp()), + givenImp(imp -> imp.id("without_ogury_keys").ext(givenEmptyImpExt())), + givenImp(imp -> imp.id("with_ogury_keys").ext(givenImpExtWithOguryKeys()))); + + // when + final Result>> result = target.makeHttpRequests(bidrequest); + + // then + assertThat(result.getValue()).hasSize(1) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getId) + .containsExactly("with_ogury_keys"); + + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void makeHttpRequestsAppShouldNotSendImpsWhenImpsWithOguryIsEmpty() { + // given + final ObjectNode emptyImpExt = givenEmptyImpExt(); + + final BidRequest bidrequest = givenBidRequest( + bidRequest -> bidRequest.app(givenApp()), + 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")); + } + @Test public void makeHttpRequestsShouldCopyImpIdToTagId() { // given @@ -564,6 +606,10 @@ private Site givenSite() { .build(); } + private App givenApp() { + return App.builder().bundle("app_bundle").build(); + } + private ObjectNode givenEmptyImpExt() { final ObjectNode ext = mapper.createObjectNode(); ext.putIfAbsent("bidder", mapper.createObjectNode());