Skip to content

Commit

Permalink
All Requested Changes have been made v2
Browse files Browse the repository at this point in the history
  • Loading branch information
SuprPhatAnon committed Apr 22, 2024
1 parent 63c438f commit 2d8618e
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 96 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package org.prebid.server.bidder.consumable;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.TextNode;
import com.google.common.base.Strings;
import com.iab.openrtb.request.App;
import com.iab.openrtb.request.BidRequest;
Expand All @@ -25,11 +23,9 @@
import org.prebid.server.exception.PreBidException;
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.model.UpdateResult;
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
import org.prebid.server.proto.openrtb.ext.request.consumable.ExtImpConsumable;
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;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
Expand All @@ -53,7 +49,7 @@ public class ConsumableBidder implements Bidder<BidRequest> {
private final String endpointUrl;

public ConsumableBidder(String endpointUrl, JacksonMapper mapper) {
this.endpointUrl = endpointUrl;
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.mapper = Objects.requireNonNull(mapper);
}

Expand All @@ -73,7 +69,7 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest bidRequ
placementId = impExt.getPlacementId();
}

imps.add(modifyImp(imp, impExt));
imps.add(imp);

} catch (PreBidException e) {
errors.add(BidderError.badInput(e.getMessage()));
Expand Down Expand Up @@ -102,33 +98,6 @@ private boolean isImpValid(Site site, App app, ExtImpConsumable impExt) {

}

private Imp modifyImp(Imp imp, ExtImpConsumable impExt) {
final UpdateResult<ObjectNode> impExtUpdateResult = modifyImpExt(imp, impExt);

return imp;
}

private UpdateResult<ObjectNode> modifyImpExt(Imp imp, ExtImpConsumable extImpConsumable) {
final Integer siteId = extImpConsumable.getSiteId();
final String unitName = extImpConsumable.getUnitName();
final Integer unitId = extImpConsumable.getUnitId();
final Integer networkId = extImpConsumable.getNetworkId();
final String placementId = extImpConsumable.getPlacementId();
final ObjectNode impExt = imp.getExt();

final ObjectNode updatedExt = impExt.deepCopy();
if (Strings.isNullOrEmpty(placementId)) {
updatedExt.set("siteId", TextNode.valueOf(Integer.toString(siteId)));
updatedExt.set("unitName", TextNode.valueOf(unitName));
updatedExt.set("unitId", TextNode.valueOf(Integer.toString(unitId)));
updatedExt.set("networkId", TextNode.valueOf(Integer.toString(networkId)));
} else {
updatedExt.set("placementId", TextNode.valueOf(placementId));
}

return UpdateResult.updated(updatedExt);
}

private BidRequest modifyBidRequest(BidRequest bidRequest, List<Imp> imps) {
return bidRequest.toBuilder().imp(imps).build();
}
Expand Down Expand Up @@ -179,10 +148,8 @@ private List<BidderBid> extractConsumableBids(BidRequest bidRequest, BidResponse
}

private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, BidResponse bidResponse, List<BidderError> errors) {
final ExtBidPrebid prebidExt;
final BidType bidType;
try {
prebidExt = parseBidExt(bid);
bidType = getBidType(bid, bidRequest.getImp());
} catch (PreBidException e) {
errors.add(BidderError.badServerResponse(e.getMessage()));
Expand All @@ -197,22 +164,9 @@ private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, BidResponse bidRes
.build();
}

private ExtBidPrebid parseBidExt(Bid bid) {
final Optional<Bid> optionalBid = Optional.ofNullable(bid);

final ObjectNode bidExt = optionalBid
.map(Bid::getExt)
.orElse(mapper.mapper().valueToTree(ExtBidPrebid.builder().build()));

try {
return mapper.mapper().treeToValue(bidExt, ExtBidPrebid.class);
} catch (IllegalArgumentException | JsonProcessingException e) {
throw new PreBidException(e.getMessage());
}
}

private static BidType getBidType(Bid bid, List<Imp> imps) {
return getBidTypeFromMtype(bid.getMtype()).or(() -> getBidTypeFromExtPrebidType(bid.getExt()))
return getBidTypeFromMtype(bid.getMtype())
.or(() -> getBidTypeFromExtPrebidType(bid.getExt()))
.orElseGet(() -> getBidTypeFromImp(imps, bid.getImpid()));
}

Expand All @@ -229,7 +183,9 @@ private static Optional<BidType> getBidTypeFromMtype(Integer mType) {
}

private static Optional<BidType> getBidTypeFromExtPrebidType(ObjectNode bidExt) {
return Optional.ofNullable(bidExt).map(ext -> ext.get("prebid")).map(prebid -> prebid.get("type"))
return Optional.ofNullable(bidExt)
.map(ext -> ext.get("prebid"))
.map(prebid -> prebid.get("type"))
.map(JsonNode::asText).map(BidType::fromString);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,42 @@ public void makeHttpRequestsShouldHaveCorrectHeaders() throws JsonProcessingExce
);
}

@Test
public void makeHttpRequestsShouldHaveCorrectURIForSiteRequest() throws JsonProcessingException {
// given
final BidRequest bidRequest = givenSiteBidRequest(identity());

// when
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
.extracting(HttpRequest::getUri)
.containsExactly(ENDPOINT_URL + ConsumableBidder.SITE_URI_PATH);
}

@Test
public void makeHttpRequestsShouldHaveCorrectURIForAppRequest() throws JsonProcessingException {
// given
final BidRequest bidRequest = givenAppBidRequest(identity());

// when
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
.extracting(HttpRequest::getUri)
.containsExactly(ENDPOINT_URL + ConsumableBidder.APP_URI_PATH + "0421008445828ceb46f496700a5fa65e");
}

@Test
public void makeBidderResponseShouldReturnBidderBidWithNoErrors() throws JsonProcessingException {
// given
final BidRequest bidRequest = givenSiteBidRequest(identity());
final BidderCall<BidRequest> httpCall = givenHttpCall(bidRequest,
mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder.impid("123"))));
givenBidResponse(bidBuilder -> bidBuilder.impid("123")));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand Down Expand Up @@ -150,9 +180,10 @@ public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed()
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null);

// then
assertThat(result.getErrors()).hasSize(1);
assertThat(result.getErrors().get(0).getMessage()).startsWith("Failed to decode: Unrecognized token");
assertThat(result.getErrors().get(0).getType()).isEqualTo(BidderError.Type.bad_server_response);
assertThat(result.getErrors()).hasSize(1).first().satisfies(error -> {
assertThat(error.getMessage()).startsWith("Failed to decode: Unrecognized token");
assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response);
});
assertThat(result.getBids()).isEmpty();
}

Expand Down Expand Up @@ -192,8 +223,7 @@ public void makeBidderResponseShouldReturnBannerBidIfBannerIsPresent() throws Js
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(bidBuilder -> bidBuilder.impid("123"))));
givenBidResponse(bidBuilder -> bidBuilder.impid("123")));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -213,8 +243,7 @@ public void makeBidderResponseShouldReturnAudioBidIfAudioIsPresent() throws Json
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(bidBuilder -> bidBuilder.impid("123"))));
givenBidResponse(bidBuilder -> bidBuilder.impid("123")));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -234,8 +263,7 @@ public void makeBidderResponseShouldReturnErrorIfImpNotMatched() throws JsonProc
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(bidBuilder -> bidBuilder.impid("489"))));
givenBidResponse(bidBuilder -> bidBuilder.impid("489")));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -254,12 +282,11 @@ public void makeBidderResponseShouldReturnBidWithVideoExt() throws JsonProcessin
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.dur(1)
.mtype(2))));
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.dur(1)
.mtype(2)));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -285,11 +312,10 @@ public void makeBidderResponseShouldReturnBannerBidIfMTypeIsOne() throws JsonPro
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.mtype(1))));
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.mtype(1)));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -314,11 +340,10 @@ public void makeBidderResponseShouldReturnVideoBidIfMTypeIsTwo() throws JsonProc
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.mtype(2))));
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.mtype(2)));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -343,11 +368,10 @@ public void makeBidderResponseShouldReturnAudioBidIfMTypeIsThree() throws JsonPr
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.mtype(3))));
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.mtype(3)));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -372,12 +396,11 @@ public void makeBidderResponseShouldReturnCorrectTypeExtPrebidTypeInResponse() t
.build();
final BidderCall<BidRequest> httpCall = givenHttpCall(
bidRequest,
mapper.writeValueAsString(
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.ext(mapper.createObjectNode()
.set("prebid", mapper.createObjectNode().put("type", "video"))))));
givenBidResponse(
bidBuilder -> bidBuilder
.impid("123")
.ext(mapper.createObjectNode()
.set("prebid", mapper.createObjectNode().put("type", "video")))));

// when
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
Expand All @@ -391,7 +414,7 @@ public void makeBidderResponseShouldReturnCorrectTypeExtPrebidTypeInResponse() t

private static BidRequest givenSiteBidRequest(UnaryOperator<Imp.ImpBuilder>... impCustomizers) {
return givenSiteBidRequest(bidRequestBuilder -> bidRequestBuilder.site(Site.builder()
.page("http://www.some.com/page-where-ad-will-be-shown").domain("www.some.com").build()),
.page("http://www.some.com/page-where-ad-will-be-shown").domain("www.some.com").build()),
List.of(impCustomizers));
}

Expand All @@ -400,10 +423,10 @@ private static BidRequest givenSiteBidRequest(
List<UnaryOperator<Imp.ImpBuilder>> impCustomizers) {

return bidRequestCustomizer.apply(
BidRequest.builder()
.imp(impCustomizers.stream()
.map(ConsumableBidderTest::givenSiteImp)
.toList())).build();
BidRequest.builder()
.imp(impCustomizers.stream()
.map(ConsumableBidderTest::givenSiteImp)
.toList())).build();
}

private static BidRequest givenAppBidRequest(UnaryOperator<Imp.ImpBuilder>... impCustomizers) {
Expand Down Expand Up @@ -441,14 +464,15 @@ private static Imp givenAppImp(Function<Imp.ImpBuilder, Imp.ImpBuilder> impCusto
.build();
}

private static BidResponse givenBidResponse(Function<Bid.BidBuilder, Bid.BidBuilder> bidCustomizer) {
return BidResponse.builder()
private static String givenBidResponse(Function<Bid.BidBuilder, Bid.BidBuilder> bidCustomizer)
throws JsonProcessingException {
return mapper.writeValueAsString(BidResponse.builder()
.cur("USD")
.seatbid(singletonList(SeatBid.builder()
.bid(singletonList(bidCustomizer.apply(Bid.builder()
.ext(mapper.valueToTree(ExtBidPrebid.builder().build()))).build()))
.build()))
.build();
.build());
}

private static BidderCall<BidRequest> givenHttpCall(BidRequest bidRequest, String body) {
Expand Down

0 comments on commit 2d8618e

Please sign in to comment.