Skip to content

Commit 3a979e6

Browse files
fix comments
1 parent a9e734f commit 3a979e6

File tree

2 files changed

+28
-75
lines changed

2 files changed

+28
-75
lines changed

src/main/java/org/prebid/server/bidder/nativery/NativeryBidder.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import com.iab.openrtb.response.Bid;
99
import com.iab.openrtb.response.BidResponse;
1010
import com.iab.openrtb.response.SeatBid;
11-
import io.vertx.core.MultiMap;
1211
import org.apache.commons.collections4.CollectionUtils;
12+
import org.apache.commons.collections4.ListUtils;
1313
import org.apache.commons.lang3.StringUtils;
1414
import org.prebid.server.auction.model.Endpoint;
1515
import org.prebid.server.bidder.Bidder;
@@ -38,6 +38,7 @@
3838
import java.util.Collections;
3939
import java.util.List;
4040
import java.util.Objects;
41+
import java.util.Optional;
4142

4243
public class NativeryBidder implements Bidder<BidRequest> {
4344

@@ -119,7 +120,11 @@ private ExtImpNativery parseImpExt(Imp imp) {
119120
private ExtRequest buildRequestExtWithNativery(ExtRequest originalExt, boolean isAmp, String widgetId) {
120121
final ExtRequest ext = originalExt != null ? originalExt : ExtRequest.empty();
121122

122-
final ObjectNode nativeryNode = mapper.mapper().createObjectNode();
123+
final JsonNode existing = ext.getProperty("nativery");
124+
final ObjectNode nativeryNode = existing != null && existing.isObject()
125+
? (ObjectNode) existing
126+
: mapper.mapper().createObjectNode();
127+
123128
nativeryNode.put("isAmp", isAmp);
124129
if (StringUtils.isNotBlank(widgetId)) {
125130
nativeryNode.put("widgetId", widgetId);
@@ -133,17 +138,13 @@ private ExtRequest buildRequestExtWithNativery(ExtRequest originalExt, boolean i
133138
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
134139
final List<BidderError> errors = new ArrayList<>();
135140

136-
if (httpCall.getResponse() != null && httpCall.getResponse().getStatusCode() == 204) {
137-
final MultiMap headers = httpCall.getResponse().getHeaders();
138-
final String nativeryErr = headers != null ? headers.get(NATIVERY_ERROR_HEADER) : null;
139-
if (StringUtils.isNotBlank(nativeryErr)) {
140-
return Result.withError(BidderError.badInput("Nativery Error: " + nativeryErr + "."));
141-
}
142-
return Result.withError(BidderError.badServerResponse("No Content"));
141+
final var response = httpCall.getResponse();
142+
if (response == null || StringUtils.isBlank(response.getBody())) {
143+
return Result.withError(BidderError.badServerResponse("Empty response"));
143144
}
144145

145146
try {
146-
final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
147+
final BidResponse bidResponse = mapper.decodeValue(response.getBody(), BidResponse.class);
147148
final List<BidderBid> bidderBids = extractBids(bidResponse, errors);
148149
return Result.of(bidderBids, errors);
149150
} catch (DecodeException e) {
@@ -172,15 +173,12 @@ private List<BidderBid> extractBids(BidResponse bidResponse, List<BidderError> e
172173
private BidderBid resolveBidderBid(Bid bid, String currency, List<BidderError> errors) {
173174
try {
174175
final BidExtNativery nativeryExt = parseNativeryExt(bid.getExt());
175-
final String mediaTypeRaw = nativeryExt != null ? nativeryExt.getBidAdMediaType() : null;
176-
final BidType bidType = mapMediaType(mediaTypeRaw);
177176

178-
final List<String> advDomains = nativeryExt != null && nativeryExt.getBidAdvDomains() != null
179-
? nativeryExt.getBidAdvDomains()
180-
: Collections.emptyList();
177+
final BidType bidType = mapMediaType(nativeryExt.getBidAdMediaType());
178+
final List<String> advDomains = ListUtils.defaultIfNull(
179+
nativeryExt.getBidAdvDomains(), Collections.emptyList());
181180

182181
final Bid updatedBid = addBidMeta(bid, mediaTypeString(bidType), advDomains);
183-
184182
return BidderBid.of(updatedBid, bidType, currency);
185183
} catch (PreBidException e) {
186184
errors.add(BidderError.badInput(e.getMessage()));
@@ -216,24 +214,30 @@ private static BidType mapMediaType(String mediaType) {
216214

217215
private static String mediaTypeString(BidType type) {
218216
return switch (type) {
219-
case banner -> "banner";
220-
case video -> "video";
221-
case xNative -> "native";
217+
case banner -> type.getName();
218+
case video -> type.getName();
219+
case xNative -> type.getName();
222220
default -> throw new IllegalStateException("Unexpected value: " + type.getName());
223221
};
224222
}
225223

226224
private Bid addBidMeta(Bid bid, String mediaType, List<String> advDomains) {
227225
final ExtBidPrebid prebid = parseExtBidPrebid(bid);
228226

229-
final ExtBidPrebidMeta modifiedMeta = (prebid != null && prebid.getMeta() != null
230-
? prebid.getMeta().toBuilder()
231-
: ExtBidPrebidMeta.builder())
227+
final List<String> safeAdvDomains = Optional.ofNullable(advDomains)
228+
.orElse(Collections.emptyList());
229+
230+
final ExtBidPrebidMeta modifiedMeta = Optional.ofNullable(prebid)
231+
.map(ExtBidPrebid::getMeta)
232+
.map(ExtBidPrebidMeta::toBuilder)
233+
.orElseGet(ExtBidPrebidMeta::builder)
232234
.mediaType(mediaType)
233-
.advertiserDomains(advDomains)
235+
.advertiserDomains(safeAdvDomains)
234236
.build();
235237

236-
final ExtBidPrebid modifiedPrebid = (prebid != null ? prebid.toBuilder() : ExtBidPrebid.builder())
238+
final ExtBidPrebid modifiedPrebid = Optional.ofNullable(prebid)
239+
.map(ExtBidPrebid::toBuilder)
240+
.orElseGet(ExtBidPrebid::builder)
237241
.meta(modifiedMeta)
238242
.build();
239243

src/test/java/org/prebid/server/bidder/nativery/NativeryBidderTest.java

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -211,22 +211,6 @@ public void makeHttpRequestsShouldReturnErrorIfImpExtCannotBeParsed() {
211211
assertThat(result.getValue()).isEmpty();
212212
}
213213

214-
@Test
215-
public void makeHttpRequestsShouldNotSetCurrencyIfNotProvided() {
216-
// given
217-
final BidRequest bidRequest = givenBidRequest(UnaryOperator.identity());
218-
219-
// when
220-
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
221-
222-
// then
223-
assertThat(result.getErrors()).isEmpty();
224-
assertThat(result.getValue())
225-
.extracting(HttpRequest::getPayload)
226-
.extracting(BidRequest::getCur)
227-
.allSatisfy(cur -> assertThat(cur).isNull());
228-
}
229-
230214
@Test
231215
public void makeHttpRequestsShouldReturnExpectedHeaders() {
232216
// given
@@ -245,41 +229,6 @@ public void makeHttpRequestsShouldReturnExpectedHeaders() {
245229
assertThat(result.getErrors()).isEmpty();
246230
}
247231

248-
@Test
249-
public void makeBidsShouldReturnErrorWhenStatusIs204WithErrorHeader() {
250-
// given
251-
final BidderCall<BidRequest> httpCall =
252-
givenHttpCallWithHeaders(204, Map.of(NATIVERY_ERROR_HEADER, "test error"));
253-
254-
// when
255-
final Result<List<BidderBid>> result = target.makeBids(httpCall, null);
256-
257-
// then
258-
assertThat(result.getValue()).isEmpty();
259-
assertThat(result.getErrors()).hasSize(1)
260-
.allSatisfy(error -> {
261-
assertThat(error.getMessage()).isEqualTo("Nativery Error: test error.");
262-
assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input);
263-
});
264-
}
265-
266-
@Test
267-
public void makeBidsShouldReturnErrorWhenStatusIs204WithoutErrorHeader() {
268-
// given
269-
final BidderCall<BidRequest> httpCall = givenHttpCallWithHeaders(204, null);
270-
271-
// when
272-
final Result<List<BidderBid>> result = target.makeBids(httpCall, null);
273-
274-
// then
275-
assertThat(result.getValue()).isEmpty();
276-
assertThat(result.getErrors()).hasSize(1)
277-
.allSatisfy(error -> {
278-
assertThat(error.getMessage()).isEqualTo("No Content");
279-
assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response);
280-
});
281-
}
282-
283232
@Test
284233
public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException {
285234
// given

0 commit comments

Comments
 (0)