Skip to content

Commit 277ff26

Browse files
committed
WPPAR-6423: create custom request
1 parent b07ee12 commit 277ff26

3 files changed

Lines changed: 55 additions & 53 deletions

File tree

src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.iab.openrtb.request.BidRequest;
44
import com.iab.openrtb.response.Bid;
55
import com.iab.openrtb.response.BidResponse;
6+
import io.vertx.core.http.HttpMethod;
67
import org.apache.commons.collections4.CollectionUtils;
78
import org.apache.commons.lang3.StringUtils;
89
import org.apache.http.client.utils.URIBuilder;
@@ -25,7 +26,7 @@
2526
import java.util.Objects;
2627
import java.util.function.UnaryOperator;
2728

28-
public class SspbcBidder implements Bidder<BidRequest> {
29+
public class SspbcBidder implements Bidder<SspbcRequest> {
2930

3031
private static final String ADAPTER_VERSION = "6.0";
3132

@@ -38,16 +39,29 @@ public SspbcBidder(String endpointUrl, JacksonMapper mapper) {
3839
}
3940

4041
@Override
41-
public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request) {
42+
public Result<List<HttpRequest<SspbcRequest>>> makeHttpRequests(BidRequest request) {
4243
try {
43-
return Result.withValue(createRequest(request));
44+
final SspbcRequest outgoingRequest = SspbcRequest.of(request);
45+
final String uri = updateUrl(getUri(endpointUrl));
46+
final HttpRequest<SspbcRequest> httpRequest = createHttpRequest(outgoingRequest, uri, mapper);
47+
return Result.withValue(httpRequest);
4448
} catch (PreBidException e) {
4549
return Result.withError(BidderError.badInput(e.getMessage()));
4650
}
4751
}
4852

49-
private HttpRequest<BidRequest> createRequest(BidRequest request) {
50-
return BidderUtil.defaultRequest(request, updateUrl(getUri(endpointUrl)), mapper);
53+
public HttpRequest<SspbcRequest> createHttpRequest(SspbcRequest sspbcRequest,
54+
String endpointUrl,
55+
JacksonMapper mapper) {
56+
return HttpRequest.<SspbcRequest>builder()
57+
.method(HttpMethod.POST)
58+
.uri(endpointUrl)
59+
.headers(HttpUtil.headers())
60+
.impIds(BidderUtil.impIds(sspbcRequest.getBidRequest()))
61+
.body(mapper.encodeToBytes(sspbcRequest))
62+
.payload(sspbcRequest)
63+
.build();
64+
5165
}
5266

5367
private static URIBuilder getUri(String endpointUrl) {
@@ -67,16 +81,16 @@ private String updateUrl(URIBuilder uriBuilder) {
6781
}
6882

6983
@Override
70-
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
84+
public Result<List<BidderBid>> makeBids(BidderCall<SspbcRequest> httpCall, BidRequest bidRequest) {
7185
try {
7286
final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
73-
return Result.withValues(extractBids(bidResponse, httpCall.getRequest().getPayload()));
87+
return Result.withValues(extractBids(bidResponse));
7488
} catch (PreBidException | DecodeException e) {
7589
return Result.withError(BidderError.badServerResponse(e.getMessage()));
7690
}
7791
}
7892

79-
private List<BidderBid> extractBids(BidResponse bidResponse, BidRequest bidRequest) {
93+
private List<BidderBid> extractBids(BidResponse bidResponse) {
8094
if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) {
8195
return Collections.emptyList();
8296
}
@@ -86,13 +100,13 @@ private List<BidderBid> extractBids(BidResponse bidResponse, BidRequest bidReque
86100
.map(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid())
87101
.stream()
88102
.filter(Objects::nonNull)
89-
.map(bid -> toBidderBid(bid, seatBid.getSeat(), bidResponse.getCur())
103+
.map(bid -> toBidderBid(bid, bidResponse.getCur())
90104
))
91105
.flatMap(UnaryOperator.identity())
92106
.toList();
93107
}
94108

95-
private BidderBid toBidderBid(Bid bid, String seat, String currency) {
109+
private BidderBid toBidderBid(Bid bid, String currency) {
96110
if (StringUtils.isEmpty(bid.getAdm())) {
97111
throw new PreBidException("Bid format is not supported");
98112
}
@@ -101,18 +115,14 @@ private BidderBid toBidderBid(Bid bid, String seat, String currency) {
101115
}
102116

103117
private BidType getBidType(Bid bid) {
104-
switch (bid.getMtype()) {
105-
case 1:
106-
return BidType.banner;
107-
case 2:
108-
return BidType.video;
109-
case 3:
110-
return BidType.audio;
111-
case 4:
112-
return BidType.xNative;
113-
default:
114-
throw new PreBidException("Bid type not supported: %s.".formatted(bid.getMtype()));
115-
}
118+
return switch (bid.getMtype()) {
119+
case null -> throw new PreBidException("Bid mtype is required");
120+
case 1 -> BidType.banner;
121+
case 2 -> BidType.video;
122+
case 3 -> BidType.audio;
123+
case 4 -> BidType.xNative;
124+
default -> throw new PreBidException("unsupported MType: %s.".formatted(bid.getMtype()));
125+
};
116126
}
117127

118128
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.prebid.server.bidder.sspbc;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import com.iab.openrtb.request.BidRequest;
5+
import lombok.Value;
6+
7+
@Value(staticConstructor = "of")
8+
public class SspbcRequest {
9+
10+
@JsonProperty("bidRequest")
11+
BidRequest BidRequest;
12+
}

src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
package org.prebid.server.bidder.sspbc;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.iab.openrtb.request.Banner;
54
import com.iab.openrtb.request.BidRequest;
6-
import com.iab.openrtb.request.Format;
75
import com.iab.openrtb.request.Imp;
86
import com.iab.openrtb.request.Site;
97
import com.iab.openrtb.response.Bid;
108
import com.iab.openrtb.response.BidResponse;
119
import com.iab.openrtb.response.SeatBid;
12-
import org.apache.commons.lang3.StringUtils;
1310
import org.junit.jupiter.api.Test;
1411
import org.prebid.server.VertxTest;
1512
import org.prebid.server.bidder.model.BidderBid;
1613
import org.prebid.server.bidder.model.BidderCall;
1714
import org.prebid.server.bidder.model.BidderError;
1815
import org.prebid.server.bidder.model.HttpRequest;
1916
import org.prebid.server.bidder.model.HttpResponse;
20-
import org.prebid.server.bidder.model.Result;
21-
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
22-
import org.prebid.server.proto.openrtb.ext.request.sspbc.ExtImpSspbc;
17+
import org.prebid.server.bidder.model.Result;
2318
import org.prebid.server.proto.openrtb.ext.response.BidType;
2419

2520
import java.util.List;
@@ -47,7 +42,7 @@ public void makeHttpRequestsShouldCreateExpectedUrl() {
4742
final BidRequest bidRequest = givenBidRequest(identity());
4843

4944
// when
50-
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
45+
final Result<List<HttpRequest<SspbcRequest>>> result = target.makeHttpRequests(bidRequest);
5146

5247
// then
5348
assertThat(result.getErrors()).isEmpty();
@@ -59,7 +54,7 @@ public void makeHttpRequestsShouldCreateExpectedUrl() {
5954
@Test
6055
public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() {
6156
// given
62-
final BidderCall<BidRequest> httpCall = givenHttpCall(null, "invalid");
57+
final BidderCall<SspbcRequest> httpCall = givenHttpCall(null, "invalid");
6358

6459
// when
6560
final Result<List<BidderBid>> result = target.makeBids(httpCall, null);
@@ -76,7 +71,7 @@ public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() {
7671
@Test
7772
public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException {
7873
// given
79-
final BidderCall<BidRequest> httpCall = givenHttpCall(null, mapper.writeValueAsString(null));
74+
final BidderCall<SspbcRequest> httpCall = givenHttpCall(null, mapper.writeValueAsString(null));
8075

8176
// when
8277
final Result<List<BidderBid>> result = target.makeBids(httpCall, null);
@@ -86,25 +81,10 @@ public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProces
8681
assertThat(result.getValue()).isEmpty();
8782
}
8883

89-
@Test
90-
public void makeBidsShouldReturnErrorWhenImpIdNotEqualsBidImpId() throws JsonProcessingException {
91-
// given
92-
final BidderCall<BidRequest> httpCall = givenHttpCall(givenBidRequest(identity()),
93-
mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder.adm("Any adm"))));
94-
95-
// when
96-
final Result<List<BidderBid>> result = target.makeBids(httpCall, null);
97-
98-
// then
99-
assertThat(result.getValue()).isEmpty();
100-
assertThat(result.getErrors())
101-
.containsExactly(BidderError.badServerResponse("imp not found"));
102-
}
103-
10484
@Test
10585
public void makeBidsShouldReturnErrorWhenAdmIsEmpty() throws JsonProcessingException {
10686
// given
107-
final BidderCall<BidRequest> httpCall = givenHttpCall(givenBidRequest(identity(),
87+
final BidderCall<SspbcRequest> httpCall = givenHttpCall(givenBidRequest(identity(),
10888
impBuilder -> impBuilder.id("id").tagid("tagId")),
10989
mapper.writeValueAsString(givenBidResponse(bidBuilder ->
11090
bidBuilder
@@ -123,7 +103,7 @@ public void makeBidsShouldReturnErrorWhenAdmIsEmpty() throws JsonProcessingExcep
123103
@Test
124104
public void makeBidsShouldReturnErrorWhenMTypeIsIncorrect() throws JsonProcessingException {
125105
// given
126-
final BidderCall<BidRequest> httpCall = givenHttpCall(givenBidRequest(identity(),
106+
final BidderCall<SspbcRequest> httpCall = givenHttpCall(givenBidRequest(identity(),
127107
impBuilder -> impBuilder.id("id").tagid("tagId")),
128108
mapper.writeValueAsString(givenBidResponse(bidBuilder ->
129109
bidBuilder
@@ -137,13 +117,13 @@ public void makeBidsShouldReturnErrorWhenMTypeIsIncorrect() throws JsonProcessin
137117
// then
138118
assertThat(result.getValue()).isEmpty();
139119
assertThat(result.getErrors())
140-
.containsExactly(BidderError.badServerResponse("Bid type not supported: 100."));
120+
.containsExactly(BidderError.badServerResponse("unsupported MType: 100."));
141121
}
142122

143123
@Test
144124
public void makeBidsShouldParseBid() throws JsonProcessingException {
145125
// given
146-
final BidderCall<BidRequest> httpCall = givenHttpCall(givenBidRequest(
126+
final BidderCall<SspbcRequest> httpCall = givenHttpCall(givenBidRequest(
147127
bidRequestBuilder -> bidRequestBuilder
148128
.id("bidRequestId")
149129
.site(Site.builder()
@@ -155,7 +135,7 @@ public void makeBidsShouldParseBid() throws JsonProcessingException {
155135
bidBuilder
156136
.impid("id")
157137
.adm("anyAdm")
158-
.mtype(BidType.banner.ordinal()))));
138+
.mtype(1))));
159139

160140
// when
161141
final Result<List<BidderBid>> result = target.makeBids(httpCall, null);
@@ -197,9 +177,9 @@ private static BidResponse givenBidResponse(UnaryOperator<Bid.BidBuilder> bidCus
197177
.build();
198178
}
199179

200-
private static BidderCall<BidRequest> givenHttpCall(BidRequest bidRequest, String body) {
180+
private static BidderCall<SspbcRequest> givenHttpCall(BidRequest bidRequest, String body) {
201181
return BidderCall.succeededHttp(
202-
HttpRequest.<BidRequest>builder().payload(bidRequest).build(),
182+
HttpRequest.<SspbcRequest>builder().payload(SspbcRequest.of(bidRequest)).build(),
203183
HttpResponse.of(200, null, body),
204184
null);
205185
}

0 commit comments

Comments
 (0)