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
10 changes: 7 additions & 3 deletions src/main/java/org/prebid/server/bidder/vungle/VungleBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,16 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest bidRequ
final List<BidderError> errors = new ArrayList<>();
final List<HttpRequest<BidRequest>> httpRequests = new ArrayList<>();

final String buyerId = ObjectUtil.getIfNotNull(bidRequest.getUser(), User::getBuyeruid);
if (StringUtils.isBlank(buyerId)) {
return Result.withError(BidderError.badInput("missing bidder token in user.buyeruid"));
}

for (Imp imp : bidRequest.getImp()) {
try {
final Price price = resolveBidFloor(imp, bidRequest);
final VungleImpressionExt impExt = parseImpExt(imp);
final VungleImpressionExt modifiedImpExt = modifyImpExt(impExt, bidRequest);
final VungleImpressionExt modifiedImpExt = modifyImpExt(impExt, buyerId);
final Imp modifiedImp = modifyImp(imp, modifiedImpExt, price);
final BidRequest modifiedRequest = modifyBidRequest(
bidRequest,
Expand Down Expand Up @@ -95,9 +100,8 @@ private VungleImpressionExt parseImpExt(Imp imp) {
return mapper.mapper().convertValue(imp.getExt(), VungleImpressionExt.class);
}

private static VungleImpressionExt modifyImpExt(VungleImpressionExt impExt, BidRequest bidRequest) {
private static VungleImpressionExt modifyImpExt(VungleImpressionExt impExt, String buyerId) {
final ExtImpVungle bidder = impExt.getBidder();
final String buyerId = ObjectUtil.getIfNotNull(bidRequest.getUser(), User::getBuyeruid);
final ExtImpVungle vungle = ExtImpVungle.of(
buyerId,
bidder.getAppStoreId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,54 @@ public void makeHttpRequestsShouldThrowErrorWhenCurrencyConvertCannotConvertInAn
.containsExactly("Unable to convert from currency UAH to desired ad server currency USD");
}

@Test
public void makeHttpRequestsShouldReturnErrorWhenUserIsNull() {
// given
final BidRequest bidRequest = givenBidRequest(
bidRequestBuilder -> bidRequestBuilder.user(null), identity());

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

// then
assertThat(result.getValue()).isEmpty();
assertThat(result.getErrors())
.extracting(BidderError::getMessage)
.containsExactly("missing bidder token in user.buyeruid");
}

@Test
public void makeHttpRequestsShouldReturnErrorWhenUserBuyeruidIsNull() {
// given
final BidRequest bidRequest = givenBidRequest(
bidRequestBuilder -> bidRequestBuilder.user(User.builder().buyeruid(null).build()), identity());

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

// then
assertThat(result.getValue()).isEmpty();
assertThat(result.getErrors())
.extracting(BidderError::getMessage)
.containsExactly("missing bidder token in user.buyeruid");
}

@Test
public void makeHttpRequestsShouldReturnErrorWhenUserBuyeruidIsBlank() {
// given
final BidRequest bidRequest = givenBidRequest(
bidRequestBuilder -> bidRequestBuilder.user(User.builder().buyeruid(" ").build()), identity());

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

// then
assertThat(result.getValue()).isEmpty();
assertThat(result.getErrors())
.extracting(BidderError::getMessage)
.containsExactly("missing bidder token in user.buyeruid");
}

@Test
public void makeHttpRequestShouldUpdateExtImpVungleWhenUserBuyeruidPresent() {
// given
Expand Down Expand Up @@ -380,12 +428,14 @@ public void makeBidsShouldReturnVideoBidIfBaneerIsPresentInRequestImp() throws J
.containsOnly(BidderBid.of(Bid.builder().impid("123").build(), video, "seat", null));
}

@SafeVarargs
private static BidRequest givenBidRequest(
UnaryOperator<BidRequest.BidRequestBuilder> bidRequestCustomizer,
UnaryOperator<Imp.ImpBuilder>... impCustomizer) {

return bidRequestCustomizer.apply(BidRequest.builder()
.app(App.builder().build())
.user(User.builder().buyeruid("buyeruid").build())
.imp(Arrays.stream(impCustomizer).map(VungleBidderTest::givenImp).toList()))
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
},
"ext": {
"liftoff": {
"bid_token": "bid_token",
"app_store_id": "app_store_id",
"placement_reference_id": "placement_reference_id"
}
}
}
],
"user": {
"buyeruid": "bid_token"
},
"tmax": 5000,
"regs": {
"ext": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@
},
"ext": {
"bidder": {
"bid_token": "bid_token",
"app_store_id": "app_store_id",
"placement_reference_id": "placement_reference_id"
},
"vungle": {
"bid_token": "bid_token",
"app_store_id": "app_store_id",
"placement_reference_id": "placement_reference_id"
}
}
}
],
"user": {
"buyeruid": "bid_token"
},
"source": {
"tid": "${json-unit.any-string}"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
},
"ext": {
"vungle": {
"bid_token": "bid_token",
"app_store_id": "app_store_id",
"placement_reference_id": "placement_reference_id"
}
}
}
],
"user": {
"buyeruid": "bid_token"
},
"tmax": 5000,
"regs": {
"ext": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@
},
"ext": {
"bidder": {
"bid_token": "bid_token",
"app_store_id": "app_store_id",
"placement_reference_id": "placement_reference_id"
},
"vungle": {
"bid_token": "bid_token",
"app_store_id": "app_store_id",
"placement_reference_id": "placement_reference_id"
}
}
}
],
"user": {
"buyeruid": "bid_token"
},
"source": {
"tid": "${json-unit.any-string}"
},
Expand Down
Loading