diff --git a/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java b/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java index ee0471a937f..feac7f16ab0 100644 --- a/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java +++ b/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java @@ -15,11 +15,10 @@ import org.prebid.server.bidder.model.BidderError; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; +import org.prebid.server.bidder.unruly.proto.UnrulyExtPrebid; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.DecodeException; import org.prebid.server.json.JacksonMapper; -import org.prebid.server.proto.openrtb.ext.ExtPrebid; -import org.prebid.server.proto.openrtb.ext.request.unruly.ExtImpUnruly; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; @@ -34,7 +33,7 @@ public class UnrulyBidder implements Bidder { - private static final TypeReference> UNRULY_EXT_TYPE_REFERENCE = + private static final TypeReference UNRULY_EXT_TYPE_REFERENCE = new TypeReference<>() { }; @@ -58,14 +57,17 @@ public Result>> makeHttpRequests(BidRequest request private Imp modifyImp(Imp imp) { + final UnrulyExtPrebid unrulyExtPrebid = parseImpExt(imp); return imp.toBuilder() - .ext(mapper.mapper().valueToTree(ExtPrebid.of(null, parseImpExt(imp)))) + .ext(mapper.mapper().valueToTree(UnrulyExtPrebid.of( + unrulyExtPrebid.getBidder(), + unrulyExtPrebid.getGpid()))) .build(); } - private ExtImpUnruly parseImpExt(Imp imp) { + private UnrulyExtPrebid parseImpExt(Imp imp) { try { - return mapper.mapper().convertValue(imp.getExt(), UNRULY_EXT_TYPE_REFERENCE).getBidder(); + return mapper.mapper().convertValue(imp.getExt(), UNRULY_EXT_TYPE_REFERENCE); } catch (IllegalArgumentException e) { throw new PreBidException(e.getMessage()); } diff --git a/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtPrebid.java b/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtPrebid.java new file mode 100644 index 00000000000..f34ec91894f --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtPrebid.java @@ -0,0 +1,12 @@ +package org.prebid.server.bidder.unruly.proto; + +import lombok.Value; +import org.prebid.server.proto.openrtb.ext.request.unruly.ExtImpUnruly; + +@Value(staticConstructor = "of") +public class UnrulyExtPrebid { + + ExtImpUnruly bidder; + + String gpid; +} diff --git a/src/test/java/org/prebid/server/bidder/unruly/UnrulyBidderTest.java b/src/test/java/org/prebid/server/bidder/unruly/UnrulyBidderTest.java index 82cee73461a..c059eb1f291 100644 --- a/src/test/java/org/prebid/server/bidder/unruly/UnrulyBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/unruly/UnrulyBidderTest.java @@ -1,6 +1,7 @@ package org.prebid.server.bidder.unruly; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.IntNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.TextNode; @@ -19,7 +20,8 @@ import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; -import org.prebid.server.proto.openrtb.ext.ExtPrebid; +import org.prebid.server.bidder.unruly.proto.UnrulyExtPrebid; +import org.prebid.server.proto.openrtb.ext.request.unruly.ExtImpUnruly; import java.util.List; import java.util.Map; @@ -65,6 +67,27 @@ public void makeHttpRequestsShouldReturnOneRequestPerImpWithExpectedHeaders() { tuple("Accept", "application/json")); } + @Test + public void makeHttpRequestsShouldPassThroughGPID() { + // given + final BidRequest bidRequest = BidRequest.builder() + .imp(singletonList(givenImp(identity()))) + .build(); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getValue()).hasSize(1) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getExt) + .extracting(ext -> ext.get("gpid")) + .extracting(JsonNode::asText) + .first() + .isEqualTo("gpid"); + } + @Test public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given @@ -288,7 +311,7 @@ private static BidRequest givenBidRequest(Function impCustomizer) { final ObjectNode impExt = mapper.valueToTree( - ExtPrebid.of(null, mapper.createObjectNode().set("siteId", IntNode.valueOf(123)))); + UnrulyExtPrebid.of(ExtImpUnruly.of(123), "gpid")); return impCustomizer.apply( Imp.builder()