Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -261,10 +261,12 @@ private Bid updateBidWithId(Bid bid) {
private static BidType getType(String impId, List<Imp> imps) {
for (Imp imp : imps) {
if (imp.getId().equals(impId)) {
if (imp.getVideo() != null) {
return BidType.video;
} else if (imp.getAudio() != null) {
if (imp.getAudio() != null) {
return BidType.audio;
} else if (imp.getXNative() != null) {
return BidType.xNative;
} else if (imp.getVideo() != null) {
return BidType.video;
} else {
return BidType.banner;
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/bidder-config/epsilon.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ adapters:
- banner
- video
- audio
- native
site-media-types:
- banner
- video
- audio
- native
supported-vendors:
vendor-id: 24
usersync:
Expand Down
154 changes: 105 additions & 49 deletions src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.iab.openrtb.request.Banner;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.request.Native;
import com.iab.openrtb.request.Site;
import com.iab.openrtb.request.Video;
import com.iab.openrtb.response.Bid;
Expand All @@ -21,12 +22,15 @@
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.HttpResponse;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.currency.CurrencyConversionService;
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
import org.prebid.server.proto.openrtb.ext.request.epsilon.ExtImpEpsilon;
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.proto.openrtb.ext.response.ExtBidResponse;

import java.math.BigDecimal;
import java.util.Collections;
Expand Down Expand Up @@ -513,6 +517,65 @@ public void makeHttpRequestsShouldPrioritizeVideoProtocolsFromImpExtEvenIfInvali
.isEmpty();
}

@Test
public void makeHttpRequestsShouldSetImpBidFloorFromImpExtIfPresentAndImpBidFloorIsInvalid() {
// given
final BidRequest bidRequest = givenBidRequest(
impBuilder -> impBuilder.bidfloor(BigDecimal.valueOf(-1.00)),
extBuilder -> extBuilder.bidfloor(BigDecimal.ONE));

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue()).hasSize(1)
.extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class))
.flatExtracting(BidRequest::getImp)
.extracting(Imp::getBidfloor)
.containsExactly(BigDecimal.ONE);
}

@Test
public void makeHttpRequestsShouldNotSetImpBidFloorFromImpExt() {
// given
final BidRequest bidRequest = givenBidRequest(
impBuilder -> impBuilder.bidfloor(BigDecimal.valueOf(-1.00)),
extBuilder -> extBuilder.bidfloor(BigDecimal.valueOf(-2.00)));

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue()).hasSize(1)
.extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class))
.flatExtracting(BidRequest::getImp)
.extracting(Imp::getBidfloor)
.containsExactly(BigDecimal.valueOf(-1.00));
}

@Test
public void makeHttpRequestsShouldReturnConvertedBidFloorCurrency() {
// given
given(currencyConversionService.convertCurrency(any(), any(), anyString(), anyString()))
.willReturn(BigDecimal.ONE);

final BidRequest bidRequest = givenBidRequest(
impBuilder -> impBuilder.bidfloor(BigDecimal.TEN).bidfloorcur("EUR"));

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
.extracting(HttpRequest::getPayload)
.flatExtracting(BidRequest::getImp)
.extracting(Imp::getBidfloor, Imp::getBidfloorcur)
.containsOnly(AssertionsForClassTypes.tuple(BigDecimal.ONE, "USD"));
}

@Test
public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() {
// given
Expand Down Expand Up @@ -654,62 +717,55 @@ public void makeBidsShouldUpdateBidWithUUIDIfGenerateBidIdIsTrue() throws JsonPr
}

@Test
public void makeHttpRequestsShouldSetImpBidFloorFromImpExtIfPresentAndImpBidFloorIsInvalid() {
public void makeBidsShouldReturnResultForNativeBidsWithExpectedFields() throws JsonProcessingException {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the test order is messed up a little bit, please fix

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you give me a bit more detail. I don't work with java much, where did I go wrong

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for the purpose of code clarity it's better not to mix up the tests that test different methods

place first tests starting from makeHttpRequestsShould and then starting from makeBidsShould

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to clarify: Anton asks to move the old tests so that they are in the "correct" order. This doesn't apply to the new method you added.

// given
final BidRequest bidRequest = givenBidRequest(
impBuilder -> impBuilder.bidfloor(BigDecimal.valueOf(-1.00)),
extBuilder -> extBuilder.bidfloor(BigDecimal.ONE));

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue()).hasSize(1)
.extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class))
.flatExtracting(BidRequest::getImp)
.extracting(Imp::getBidfloor)
.containsExactly(BigDecimal.ONE);
}

@Test
public void makeHttpRequestsShouldNotSetImpBidFloorFromImpExt() {
// given
final BidRequest bidRequest = givenBidRequest(
impBuilder -> impBuilder.bidfloor(BigDecimal.valueOf(-1.00)),
extBuilder -> extBuilder.bidfloor(BigDecimal.valueOf(-2.00)));

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue()).hasSize(1)
.extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class))
.flatExtracting(BidRequest::getImp)
.extracting(Imp::getBidfloor)
.containsExactly(BigDecimal.valueOf(-1.00));
}

@Test
public void makeHttpRequestsShouldReturnConvertedBidFloorCurrency() {
// given
given(currencyConversionService.convertCurrency(any(), any(), anyString(), anyString()))
.willReturn(BigDecimal.ONE);
final String nativeRequestString =
"{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":80}}";
final String nativeResponseString =
"\"native\"{\"assets\": [{\"id\": 1, \"title\": {\"text\": \"Native test (Title)\"}}], "
+ "\"link\": {\"url\": \"https://www.epsilon.com/\"}, "
+ "\"imptrackers\":[\"https://iad-usadmm.dotomi.com/event\"],\"jstracker\":\"\"}";
final BidRequest bidRequest = BidRequest.builder()
.id("native-test")
.imp(singletonList(Imp.builder()
.id("impid-0")
.xNative(Native.builder()
.request(nativeRequestString)
.ver("1.2")
.build())
.build()))
.build();

final BidRequest bidRequest = givenBidRequest(
impBuilder -> impBuilder.bidfloor(BigDecimal.TEN).bidfloorcur("EUR"));
final BidderCall<BidRequest> httpCall = givenHttpCall(bidRequest,
mapper.writeValueAsString(BidResponse.builder()
.seatbid(singletonList(SeatBid.builder()
.bid(singletonList(Bid.builder()
.price(BigDecimal.ONE)
.impid("impid-0")
.adm(nativeResponseString)
.mtype(4)
.cat(singletonList("IAB3"))
.build()))
.build()))
.cur("USD")
.ext(ExtBidResponse.builder().build())
.build()));

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
.extracting(HttpRequest::getPayload)
.flatExtracting(BidRequest::getImp)
.extracting(Imp::getBidfloor, Imp::getBidfloorcur)
.containsOnly(AssertionsForClassTypes.tuple(BigDecimal.ONE, "USD"));
assertThat(result.getBids()).hasSize(1)
.containsOnly(BidderBid.of(
Bid.builder()
.impid("impid-0")
.price(BigDecimal.ONE)
.adm(nativeResponseString)
.cat(singletonList("IAB3"))
.mtype(4)
.build(),
BidType.xNative, "USD"));
}

private static BidRequest givenBidRequest(
Expand Down
Loading