Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions src/main/java/org/prebid/server/bidder/unruly/UnrulyBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,7 +34,7 @@

public class UnrulyBidder implements Bidder<BidRequest> {

private static final TypeReference<ExtPrebid<?, ExtImpUnruly>> UNRULY_EXT_TYPE_REFERENCE =
private static final TypeReference<UnrulyExtImp<?, ExtImpUnruly>> UNRULY_EXT_TYPE_REFERENCE =
new TypeReference<>() {
};

Expand All @@ -58,14 +58,18 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request

private Imp modifyImp(Imp imp) {

final UnrulyExtImp<?, ExtImpUnruly> 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<?, ExtImpUnruly> 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());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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, B> {

P prebid;

B bidder;

String gpid;

@JsonProperty("ae")
@JsonInclude(value = JsonInclude.Include.NON_DEFAULT)
ExtImpAuctionEnvironment auctionEnvironment;

public static <P, B> UnrulyExtImp<P, B> of(P prebid, B bidder, String gpid) {
return of(prebid, bidder, gpid, null);
}

public static <P, B> UnrulyExtImp<P, B> of(P prebid, B bidder) {
return of(prebid, bidder, null, null);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<List<HttpRequest<BidRequest>>> 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
Expand Down Expand Up @@ -288,7 +310,10 @@ private static BidRequest givenBidRequest(Function<Imp.ImpBuilder, Imp.ImpBuilde

private static Imp givenImp(Function<Imp.ImpBuilder, Imp.ImpBuilder> 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()
Expand Down
Loading