diff --git a/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java b/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java index 08b7aec984e..7e57d054fab 100644 --- a/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java +++ b/src/main/java/org/prebid/server/bidder/metax/MetaxBidder.java @@ -9,7 +9,6 @@ import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -22,6 +21,7 @@ import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.metax.ExtImpMetax; import org.prebid.server.proto.openrtb.ext.response.BidType; +import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; @@ -106,10 +106,10 @@ private static Imp modifyImp(Imp imp) { private String resolveEndpoint(ExtImpMetax extImpMetax) { final String publisherIdAsString = Optional.ofNullable(extImpMetax.getPublisherId()) .map(Object::toString) - .orElse(StringUtils.EMPTY); + .orElse("0"); final String adUnitAsString = Optional.ofNullable(extImpMetax.getAdUnit()) .map(Object::toString) - .orElse(StringUtils.EMPTY); + .orElse("0"); return endpointUrl .replace(PUBLISHER_ID_MACRO, publisherIdAsString) @@ -136,7 +136,12 @@ private static List extractBids(BidResponse bidResponse) { .map(SeatBid::getBid).filter(Objects::nonNull) .flatMap(Collection::stream) .filter(Objects::nonNull) - .map(bid -> BidderBid.of(bid, getBidType(bid), bidResponse.getCur())) + .map(bid -> BidderBid.builder() + .bid(bid) + .type(getBidType(bid)) + .bidCurrency(bidResponse.getCur()) + .videoInfo(videoInfo(bid)) + .build()) .toList(); } @@ -155,4 +160,17 @@ private static BidType getBidType(Bid bid) { .formatted(bid.getImpid())); }; } + + private static ExtBidPrebidVideo videoInfo(Bid bid) { + final List cat = bid.getCat(); + final Integer duration = bid.getDur(); + + final boolean catNotEmpty = CollectionUtils.isNotEmpty(cat); + final boolean durationValid = duration != null && duration > 0; + return catNotEmpty || durationValid + ? ExtBidPrebidVideo.of( + durationValid ? duration : null, + catNotEmpty ? cat.getFirst() : null) + : null; + } } diff --git a/src/test/java/org/prebid/server/bidder/metax/MetaxBidderTest.java b/src/test/java/org/prebid/server/bidder/metax/MetaxBidderTest.java index 605b56315da..942e17400b1 100644 --- a/src/test/java/org/prebid/server/bidder/metax/MetaxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/metax/MetaxBidderTest.java @@ -22,6 +22,7 @@ import org.prebid.server.bidder.model.Result; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.metax.ExtImpMetax; +import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; import java.util.Collections; import java.util.List; @@ -338,6 +339,38 @@ public void makeBidsShouldThrowErrorWhenMediaTypeIsMissing() throws JsonProcessi }); } + @Test + public void makeBidsShouldReturnVideoInfoWithDuration() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall( + givenBidResponse(bid -> bid.dur(1).mtype(2))); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getValue()) + .extracting(BidderBid::getVideoInfo) + .containsExactly(ExtBidPrebidVideo.of(1, null)); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void makeBidsShouldReturnVideoInfoWithPrimaryCategory() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall( + givenBidResponse(bid -> bid.cat(List.of("1", "2")).mtype(2))); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getValue()) + .extracting(BidderBid::getVideoInfo) + .containsExactly(ExtBidPrebidVideo.of(null, "1")); + assertThat(result.getErrors()).isEmpty(); + } + private static BidRequest givenBidRequest(UnaryOperator impCustomizer) { return BidRequest.builder()