From 8c76a2876c1727b102c5e5845d8be16e0abd8dc2 Mon Sep 17 00:00:00 2001 From: vmalitskyi Date: Wed, 22 Oct 2025 17:24:01 +0200 Subject: [PATCH 1/2] Unruly: Include GPID in request payload --- .../server/bidder/unruly/UnrulyBidder.java | 14 +++++---- .../bidder/unruly/proto/UnrulyExtImp.java | 28 ++++++++++++++++++ .../bidder/unruly/UnrulyBidderTest.java | 29 +++++++++++++++++-- 3 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java 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..599cded6f50 100644 --- a/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java +++ b/src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java @@ -15,10 +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.UnrulyExtImp; 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; @@ -34,7 +34,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 +58,18 @@ public Result>> makeHttpRequests(BidRequest request private Imp modifyImp(Imp imp) { + final UnrulyExtImp unrulyExtImp = parseImpExt(imp); return imp.toBuilder() - .ext(mapper.mapper().valueToTree(ExtPrebid.of(null, parseImpExt(imp)))) + .ext(mapper.mapper().valueToTree(UnrulyExtImp.of( + null, + unrulyExtImp.getBidder(), + unrulyExtImp.getGpid()))) .build(); } - private ExtImpUnruly parseImpExt(Imp imp) { + private UnrulyExtImp 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/UnrulyExtImp.java b/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java new file mode 100644 index 00000000000..a515dd1693d --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java @@ -0,0 +1,28 @@ +package org.prebid.server.bidder.unruly.proto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Value; +import org.prebid.server.proto.openrtb.ext.request.ExtImpAuctionEnvironment; + +@Value(staticConstructor = "of") +public class UnrulyExtImp { + + P prebid; + + B bidder; + + String gpid; + + @JsonProperty("ae") + @JsonInclude(value = JsonInclude.Include.NON_DEFAULT) + ExtImpAuctionEnvironment auctionEnvironment; + + public static UnrulyExtImp of(P prebid, B bidder, String gpid) { + return of(prebid, bidder, gpid, null); + } + + public static UnrulyExtImp of(P prebid, B bidder) { + return of(prebid, bidder, null, null); + } +} 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..53199efd1d2 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,7 @@ 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.UnrulyExtImp; import java.util.List; import java.util.Map; @@ -65,6 +66,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 +310,10 @@ private static BidRequest givenBidRequest(Function impCustomizer) { final ObjectNode impExt = mapper.valueToTree( - ExtPrebid.of(null, mapper.createObjectNode().set("siteId", IntNode.valueOf(123)))); + UnrulyExtImp.of( + null, + mapper.createObjectNode().set("siteId", IntNode.valueOf(123)), + "gpid")); return impCustomizer.apply( Imp.builder() From 14248bc6ae26e797fbbe1c6db65ba09e01719420 Mon Sep 17 00:00:00 2001 From: vmalitskyi Date: Tue, 28 Oct 2025 18:51:01 +0100 Subject: [PATCH 2/2] Unruly: code cleanup --- .../server/bidder/unruly/UnrulyBidder.java | 16 +++++------ .../bidder/unruly/proto/UnrulyExtImp.java | 28 ------------------- .../bidder/unruly/proto/UnrulyExtPrebid.java | 12 ++++++++ .../bidder/unruly/UnrulyBidderTest.java | 8 ++---- 4 files changed, 22 insertions(+), 42 deletions(-) delete mode 100644 src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java create mode 100644 src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtPrebid.java 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 599cded6f50..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.UnrulyExtImp; +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.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,16 +57,15 @@ public Result>> makeHttpRequests(BidRequest request private Imp modifyImp(Imp imp) { - final UnrulyExtImp unrulyExtImp = parseImpExt(imp); + final UnrulyExtPrebid unrulyExtPrebid = parseImpExt(imp); return imp.toBuilder() - .ext(mapper.mapper().valueToTree(UnrulyExtImp.of( - null, - unrulyExtImp.getBidder(), - unrulyExtImp.getGpid()))) + .ext(mapper.mapper().valueToTree(UnrulyExtPrebid.of( + unrulyExtPrebid.getBidder(), + unrulyExtPrebid.getGpid()))) .build(); } - private UnrulyExtImp parseImpExt(Imp imp) { + private UnrulyExtPrebid parseImpExt(Imp imp) { try { return mapper.mapper().convertValue(imp.getExt(), UNRULY_EXT_TYPE_REFERENCE); } catch (IllegalArgumentException e) { diff --git a/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java b/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java deleted file mode 100644 index a515dd1693d..00000000000 --- a/src/main/java/org/prebid/server/bidder/unruly/proto/UnrulyExtImp.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.prebid.server.bidder.unruly.proto; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Value; -import org.prebid.server.proto.openrtb.ext.request.ExtImpAuctionEnvironment; - -@Value(staticConstructor = "of") -public class UnrulyExtImp { - - P prebid; - - B bidder; - - String gpid; - - @JsonProperty("ae") - @JsonInclude(value = JsonInclude.Include.NON_DEFAULT) - ExtImpAuctionEnvironment auctionEnvironment; - - public static UnrulyExtImp of(P prebid, B bidder, String gpid) { - return of(prebid, bidder, gpid, null); - } - - public static UnrulyExtImp of(P prebid, B bidder) { - return of(prebid, bidder, null, null); - } -} 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 53199efd1d2..c059eb1f291 100644 --- a/src/test/java/org/prebid/server/bidder/unruly/UnrulyBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/unruly/UnrulyBidderTest.java @@ -20,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.bidder.unruly.proto.UnrulyExtImp; +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; @@ -310,10 +311,7 @@ private static BidRequest givenBidRequest(Function impCustomizer) { final ObjectNode impExt = mapper.valueToTree( - UnrulyExtImp.of( - null, - mapper.createObjectNode().set("siteId", IntNode.valueOf(123)), - "gpid")); + UnrulyExtPrebid.of(ExtImpUnruly.of(123), "gpid")); return impCustomizer.apply( Imp.builder()