Skip to content

Commit 1e6638e

Browse files
author
Samuel Alejandro Maldonado Garcia
committed
fixes
1 parent 7c5532b commit 1e6638e

6 files changed

Lines changed: 140 additions & 77 deletions

File tree

src/main/java/org/prebid/server/bidder/alvads/AlvadsBidder.java

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import com.iab.openrtb.request.Video;
99
import com.iab.openrtb.response.Bid;
1010
import com.iab.openrtb.response.BidResponse;
11-
import com.iab.openrtb.response.SeatBid;
1211
import io.vertx.core.http.HttpMethod;
1312
import org.apache.commons.collections4.CollectionUtils;
1413
import org.prebid.server.bidder.Bidder;
@@ -29,7 +28,6 @@
2928
import org.prebid.server.util.HttpUtil;
3029

3130
import java.util.ArrayList;
32-
import java.util.Collection;
3331
import java.util.Collections;
3432
import java.util.HashMap;
3533
import java.util.List;
@@ -114,14 +112,13 @@ private static AlvaAdsImp makeImp(Imp imp) {
114112
}
115113

116114
private static Map<String, Object> sizes(Integer w, Integer h) {
117-
final Map<String, Object> map = new HashMap<>();
118-
if (w != null) {
119-
map.put("w", w);
120-
}
121-
if (h != null) {
122-
map.put("h", h);
115+
if (w == null || h == null) {
116+
return null;
123117
}
124-
return map.isEmpty() ? null : map;
118+
final Map<String, Object> map = new HashMap<>();
119+
map.put("w", w);
120+
map.put("h", h);
121+
return map;
125122
}
126123

127124
private static AlvaAdsSite makeSite(Site site, String publisherUniqueId) {
@@ -151,15 +148,10 @@ private List<BidderBid> extractBids(BidResponse bidResponse, AlvadsRequestOrtb r
151148
}
152149

153150
private List<BidderBid> bidsFromResponse(BidResponse bidResponse, AlvadsRequestOrtb request) {
154-
return Optional.ofNullable(bidResponse.getSeatbid())
155-
.orElse(Collections.emptyList())
156-
.stream()
157-
.filter(Objects::nonNull)
158-
.map(SeatBid::getBid)
159-
.filter(Objects::nonNull)
160-
.flatMap(Collection::stream)
161-
.filter(Objects::nonNull)
151+
return bidResponse.getSeatbid().stream()
152+
.flatMap(sb -> sb.getBid().stream())
162153
.map(bid -> makeBid(bid, request, bidResponse.getCur()))
154+
.filter(Objects::nonNull)
163155
.toList();
164156
}
165157

@@ -169,17 +161,27 @@ private BidderBid makeBid(Bid bid, AlvadsRequestOrtb request, String currency) {
169161
.findFirst()
170162
.orElse(null);
171163

172-
return BidderBid.of(bid, getBidType(bid, imp), currency);
164+
final BidType type = getBidType(bid, imp);
165+
166+
if (type == null) {
167+
return null;
168+
}
169+
170+
return BidderBid.of(bid, type, currency);
173171
}
174172

175173
private BidType getBidType(Bid bid, AlvaAdsImp imp) {
176-
if (imp != null && imp.getVideo() != null) {
177-
return BidType.video;
174+
if (imp != null) {
175+
if (imp.getVideo() != null) {
176+
return BidType.video;
177+
}
178+
179+
return Optional.ofNullable(getBidExt(bid))
180+
.map(ExtBidAlvads::getCrtype)
181+
.orElse(BidType.banner);
178182
}
179183

180-
return Optional.ofNullable(getBidExt(bid))
181-
.map(ExtBidAlvads::getCrtype)
182-
.orElse(BidType.banner);
184+
return null;
183185
}
184186

185187
private ExtBidAlvads getBidExt(Bid bid) {

src/main/java/org/prebid/server/proto/openrtb/ext/request/alvads/AlvadsImpExt.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,4 @@ public class AlvadsImpExt {
99
@JsonProperty("publisherUniqueId")
1010
String publisherUniqueId;
1111

12-
@JsonProperty("endPointUrl")
13-
String endpointUrl;
1412
}

src/main/resources/static/bidder-params/alvads.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
"publisherUniqueId": {
99
"type": "string",
1010
"description": "Publisher Unique Id"
11-
},
12-
"endPointUrl": {
13-
"type": "string",
14-
"description": "Url ads openrtb"
1511
}
1612
},
1713

src/test/java/org/prebid/server/bidder/alvads/AlvadsBidderTest.java

Lines changed: 96 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
import com.iab.openrtb.request.Device;
77
import com.iab.openrtb.request.Imp;
88
import com.iab.openrtb.request.Site;
9+
import com.iab.openrtb.request.Video;
910
import com.iab.openrtb.response.Bid;
1011
import com.iab.openrtb.response.BidResponse;
1112
import com.iab.openrtb.response.SeatBid;
13+
import io.netty.handler.codec.http.HttpHeaderValues;
1214
import io.vertx.core.MultiMap;
1315
import org.junit.jupiter.api.Test;
1416
import org.prebid.server.VertxTest;
@@ -20,6 +22,7 @@
2022
import org.prebid.server.bidder.model.HttpResponse;
2123
import org.prebid.server.bidder.model.Result;
2224
import org.prebid.server.proto.openrtb.ext.response.BidType;
25+
import org.prebid.server.util.HttpUtil;
2326

2427
import java.math.BigDecimal;
2528
import java.util.Arrays;
@@ -28,8 +31,9 @@
2831

2932
import static org.assertj.core.api.Assertions.assertThat;
3033
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
34+
import static org.assertj.core.api.Assertions.tuple;
3135

32-
class AlvadsBidderTest extends VertxTest {
36+
public class AlvadsBidderTest extends VertxTest {
3337

3438
private static final String ENDPOINT_URL = "https://helios-ads-qa-core.ssidevops.com/decision/openrtb";
3539

@@ -70,7 +74,10 @@ public void makeHttpRequestsShouldBuildValidHttpRequestsUrl() {
7074

7175
// then
7276
assertThat(result.getErrors()).isEmpty();
73-
result.getValue().forEach(req -> assertThat(req.getUri()).isEqualTo(ENDPOINT_URL));
77+
78+
assertThat(result.getValue())
79+
.extracting(HttpRequest::getUri)
80+
.allMatch(uri -> uri.equals(ENDPOINT_URL));
7481
}
7582

7683
@Test
@@ -82,7 +89,17 @@ public void makeHttpRequestsShouldBuildValidHttpRequestsHeaders() {
8289
final Result<List<HttpRequest<AlvadsRequestOrtb>>> result = target.makeHttpRequests(bidRequest);
8390

8491
// then
85-
result.getValue().forEach(req -> assertThat(req.getHeaders()).isNotEmpty());
92+
assertThat(result.getErrors()).isEmpty();
93+
assertThat(result.getValue())
94+
.extracting(HttpRequest::getHeaders)
95+
.flatExtracting(MultiMap::entries)
96+
.extracting(Map.Entry::getKey, Map.Entry::getValue)
97+
.containsExactlyInAnyOrder(
98+
tuple(HttpUtil.CONTENT_TYPE_HEADER.toString(), HttpUtil.APPLICATION_JSON_CONTENT_TYPE),
99+
tuple(HttpUtil.ACCEPT_HEADER.toString(), HttpHeaderValues.APPLICATION_JSON.toString()),
100+
101+
tuple(HttpUtil.CONTENT_TYPE_HEADER.toString(), HttpUtil.APPLICATION_JSON_CONTENT_TYPE),
102+
tuple(HttpUtil.ACCEPT_HEADER.toString(), HttpHeaderValues.APPLICATION_JSON.toString()));
86103
}
87104

88105
@Test
@@ -155,17 +172,85 @@ public void makeBidsShouldReturnEmptyListForEmptyResponse() {
155172
}
156173

157174
@Test
158-
public void makeBidsShouldReturnBidderBidsWithFullFields() {
175+
public void makeBidsShouldReturnBannerBidderBid() {
159176
// given
160177
final Imp bannerImp = createImp("imp-banner", "pub-1", 300, 250);
161-
final Imp videoImp = createImp("imp-video", "pub-2", 640, 480);
162-
163-
final BidRequest bidRequest = createBidRequest(List.of(bannerImp, videoImp));
178+
final BidRequest bidRequest = createBidRequest(List.of(bannerImp));
164179

165180
final Bid bannerBid = createBid("bid-banner", "imp-banner", 1.5);
181+
final SeatBid seatBid = createSeatBid(bannerBid);
182+
final BidResponse bidResponse = createBidResponse(List.of(seatBid), "USD");
183+
184+
final HttpResponse httpResponse = HttpResponse.of(
185+
200,
186+
MultiMap.caseInsensitiveMultiMap(),
187+
jacksonMapper.encodeToString(bidResponse));
188+
189+
final HttpRequest<AlvadsRequestOrtb> request = HttpRequest.<AlvadsRequestOrtb>builder()
190+
.payload(AlvadsRequestOrtb.builder()
191+
.imp(List.of(createAlvadsRequestImp("imp-banner", 300, 250)))
192+
.build())
193+
.build();
194+
195+
// when
196+
final Result<List<BidderBid>> result = target.makeBids(
197+
BidderCall.succeededHttp(request, httpResponse, null),
198+
bidRequest
199+
);
200+
201+
// then
202+
final BidderBid expected = BidderBid.of(
203+
bannerBid,
204+
BidType.banner,
205+
"USD"
206+
);
207+
assertThat(result.getValue()).containsExactly(expected);
208+
}
209+
210+
@Test
211+
public void makeBidsShouldReturnVideoBidderBid() {
212+
// given
213+
final Imp videoImp = createImp("imp-video", "pub-2", 640, 480);
214+
final BidRequest bidRequest = createBidRequest(List.of(videoImp));
215+
166216
final Bid videoBid = createBid("bid-video", "imp-video", 2.5);
217+
final SeatBid seatBid = createSeatBid(videoBid);
218+
final BidResponse bidResponse = createBidResponse(List.of(seatBid), "USD");
167219

168-
final SeatBid seatBid = createSeatBid(bannerBid, videoBid);
220+
final HttpResponse httpResponse = HttpResponse.of(
221+
200,
222+
MultiMap.caseInsensitiveMultiMap(),
223+
jacksonMapper.encodeToString(bidResponse));
224+
225+
final HttpRequest<AlvadsRequestOrtb> request = HttpRequest.<AlvadsRequestOrtb>builder()
226+
.payload(AlvadsRequestOrtb.builder()
227+
.imp(List.of(createAlvadsRequestImp("imp-video", 640, 480)))
228+
.build())
229+
.build();
230+
231+
// when
232+
final Result<List<BidderBid>> result = target.makeBids(
233+
BidderCall.succeededHttp(request, httpResponse, null),
234+
bidRequest
235+
);
236+
237+
// then
238+
final BidderBid expected = BidderBid.of(
239+
videoBid,
240+
BidType.video,
241+
"USD"
242+
);
243+
assertThat(result.getValue()).containsExactly(expected);
244+
}
245+
246+
@Test
247+
public void makeBidsShouldIgnoreUnsupportedBidType() {
248+
// given
249+
final Imp imp = createImp("imp-unknown", "pub-3", 100, 100);
250+
final BidRequest bidRequest = createBidRequest(List.of(imp));
251+
252+
final Bid unknownBid = createBid("bid-unknown", "imp-unknown", 1.0);
253+
final SeatBid seatBid = createSeatBid(unknownBid);
169254
final BidResponse bidResponse = createBidResponse(List.of(seatBid), "USD");
170255

171256
final HttpResponse httpResponse = HttpResponse.of(
@@ -175,10 +260,7 @@ public void makeBidsShouldReturnBidderBidsWithFullFields() {
175260

176261
final HttpRequest<AlvadsRequestOrtb> request = HttpRequest.<AlvadsRequestOrtb>builder()
177262
.payload(AlvadsRequestOrtb.builder()
178-
.imp(List.of(
179-
createAlvadsRequestImp("imp-banner", 300, 250),
180-
createAlvadsRequestImp("imp-video", 640, 480)
181-
))
263+
.imp(List.of())
182264
.build())
183265
.build();
184266

@@ -189,23 +271,7 @@ public void makeBidsShouldReturnBidderBidsWithFullFields() {
189271
);
190272

191273
// then
192-
assertThat(result.getValue()).hasSize(2);
193-
194-
final BidderBid bannerBidderBid = result.getValue().stream()
195-
.filter(b -> b.getBid().getImpid().equals("imp-banner"))
196-
.findFirst()
197-
.orElseThrow();
198-
assertThat(bannerBidderBid.getBid().getId()).isEqualTo("bid-banner");
199-
assertThat(bannerBidderBid.getBid().getPrice()).isEqualByComparingTo("1.5");
200-
assertThat(bannerBidderBid.getType()).isEqualTo(BidType.banner);
201-
202-
final BidderBid videoBidderBid = result.getValue().stream()
203-
.filter(b -> b.getBid().getImpid().equals("imp-video"))
204-
.findFirst()
205-
.orElseThrow();
206-
assertThat(videoBidderBid.getBid().getId()).isEqualTo("bid-video");
207-
assertThat(videoBidderBid.getBid().getPrice()).isEqualByComparingTo("2.5");
208-
assertThat(videoBidderBid.getType()).isEqualTo(BidType.video);
274+
assertThat(result.getValue()).isEmpty();
209275
}
210276

211277
private static BidRequest createBidRequestWithBannerAndVideo() {
@@ -231,7 +297,7 @@ private static BidRequest createBidRequestWithBannerAndVideo() {
231297

232298
final Imp imp2 = Imp.builder()
233299
.id("imp-2")
234-
.video(com.iab.openrtb.request.Video.builder().w(640).h(480).build())
300+
.video(Video.builder().w(640).h(480).build())
235301
.ext(impExtNode2)
236302
.build();
237303

@@ -286,18 +352,6 @@ private static BidRequest createBidRequest(List<Imp> imps) {
286352
.build();
287353
}
288354

289-
private static AlvadsRequestOrtb createAlvadsRequest(String impId, int width, int height) {
290-
final AlvaAdsImp alvaImp = AlvaAdsImp.builder()
291-
.id(impId)
292-
.banner(height <= 250 ? Map.of("w", width, "h", height) : null)
293-
.video(height > 250 ? Map.of("w", width, "h", height) : null)
294-
.build();
295-
296-
return AlvadsRequestOrtb.builder()
297-
.imp(List.of(alvaImp))
298-
.build();
299-
}
300-
301355
private static AlvaAdsImp createAlvadsRequestImp(String impId, int width, int height) {
302356
return AlvaAdsImp.builder()
303357
.id(impId)

src/test/resources/org/prebid/server/it/openrtb2/alvads/test-auction-alvads-request.json

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
"imp": [
44
{
55
"id": "imp1",
6-
"banner": { "w": 300, "h": 250 },
6+
"banner": {
7+
"w": 300,
8+
"h": 250
9+
},
710
"tagid": "123",
811
"bidfloor": 0,
912
"bidfloorcur": "USD",
@@ -13,7 +16,9 @@
1316
"placementId": "testPlacementId",
1417
"publisherUniqueId": "D7DACCE3-C23D-4AB9-8FE6-9FF41BF32F8F"
1518
},
16-
"prebid": { "is_rewarded_inventory": 1 },
19+
"prebid": {
20+
"is_rewarded_inventory": 1
21+
},
1722
"userId": "+59172893207"
1823
}
1924
}
@@ -29,9 +34,17 @@
2934
"site": {
3035
"page": "https://facebooktest.com",
3136
"ref": "https://facebooktest.com",
32-
"publisher": { "id": "D7DACCE3-C23D-4AB9-8FE6-9FF41BF32F8F" }
37+
"publisher": {
38+
"id": "D7DACCE3-C23D-4AB9-8FE6-9FF41BF32F8F"
39+
}
40+
},
41+
"regs": {
42+
"ext": {
43+
"gdpr": 0
44+
}
45+
},
46+
"ext": {
47+
"user_fingerprint": "e061375f-bba1-4a57-98f9-cc072d5a5ad8"
3348
},
34-
"regs": { "ext": { "gdpr": 0 } },
35-
"ext": { "user_fingerprint": "e061375f-bba1-4a57-98f9-cc072d5a5ad8" },
3649
"tmax": 5000
3750
}

src/test/resources/org/prebid/server/it/openrtb2/alvads/test-auction-alvads-response.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"adaptercode": "alvads"
2222
}
2323
},
24-
"origbidcpm": 3.33,
24+
"origbidcpm": 3.33,
2525
"origbidcur": "USD"
2626
}
2727
}

0 commit comments

Comments
 (0)