Skip to content

Commit b82fdd2

Browse files
authored
Fix IX bidder crash (#3767)
1 parent ce94d8a commit b82fdd2

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

src/main/java/org/prebid/server/bidder/ix/IxBidder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,12 +386,15 @@ private String mergeNativeImpTrackers(boolean isV11, Response response, List<Eve
386386
}
387387

388388
private static Response mergeNativeImpTrackers(Response response, List<EventTracker> eventTrackers) {
389+
final Stream<String> impTrackers = Optional.of(response)
390+
.map(Response::getImptrackers).stream().flatMap(Collection::stream);
391+
389392
return response.toBuilder()
390393
.imptrackers(Stream.concat(
391394
eventTrackers.stream()
392395
.filter(IxBidder::isImpTracker)
393396
.map(EventTracker::getUrl),
394-
response.getImptrackers().stream())
397+
impTrackers)
395398
.distinct()
396399
.toList())
397400
.build();

src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import java.util.function.UnaryOperator;
5656

5757
import static java.util.Arrays.asList;
58+
import static java.util.Collections.emptyList;
5859
import static java.util.Collections.singletonList;
5960
import static java.util.function.UnaryOperator.identity;
6061
import static org.assertj.core.api.Assertions.assertThat;
@@ -540,6 +541,86 @@ public void makeBidderResponseShouldReturnAdmContainingImpTrackersAndEventImpTra
540541
.containsExactly(mapper.writeValueAsString(expectedNativeResponse));
541542
}
542543

544+
@Test
545+
public void makeBidderResponseShouldReturnAdmContainingEventImpTrackersUrlsWhenImpTrackersAreNull()
546+
throws JsonProcessingException {
547+
// given
548+
final String adm = mapper.writeValueAsString(
549+
Response.builder()
550+
.eventtrackers(singletonList(
551+
EventTracker.builder()
552+
.event(EventType.IMPRESSION.getValue())
553+
.url("eventUrl")
554+
.build()))
555+
.build());
556+
final BidRequest bidRequest = BidRequest.builder()
557+
.imp(singletonList(Imp.builder().id("123").xNative(Native.builder().build()).build()))
558+
.build();
559+
final BidderCall<BidRequest> httpCall = givenHttpCall(
560+
bidRequest,
561+
mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder
562+
.impid("123")
563+
.adm(adm))));
564+
565+
// when
566+
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
567+
568+
// then
569+
final Response expectedNativeResponse = Response.builder()
570+
.imptrackers(asList("eventUrl"))
571+
.eventtrackers(singletonList(EventTracker.builder()
572+
.event(EventType.IMPRESSION.getValue())
573+
.url("eventUrl")
574+
.build()))
575+
.build();
576+
577+
assertThat(result.getErrors()).isEmpty();
578+
assertThat(result.getBids())
579+
.extracting(BidderBid::getBid)
580+
.extracting(Bid::getAdm)
581+
.containsExactly(mapper.writeValueAsString(expectedNativeResponse));
582+
}
583+
584+
@Test
585+
public void makeBidderResponseShouldReturnAdmWithoutImpTrackers()
586+
throws JsonProcessingException {
587+
// given
588+
final String adm = mapper.writeValueAsString(
589+
Response.builder()
590+
.eventtrackers(singletonList(
591+
EventTracker.builder()
592+
.event(EventType.VIEWABLE_VIDEO50.getValue())
593+
.url("eventUrl")
594+
.build()))
595+
.build());
596+
final BidRequest bidRequest = BidRequest.builder()
597+
.imp(singletonList(Imp.builder().id("123").xNative(Native.builder().build()).build()))
598+
.build();
599+
final BidderCall<BidRequest> httpCall = givenHttpCall(
600+
bidRequest,
601+
mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder
602+
.impid("123")
603+
.adm(adm))));
604+
605+
// when
606+
final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest);
607+
608+
// then
609+
final Response expectedNativeResponse = Response.builder()
610+
.imptrackers(emptyList())
611+
.eventtrackers(singletonList(EventTracker.builder()
612+
.event(EventType.VIEWABLE_VIDEO50.getValue())
613+
.url("eventUrl")
614+
.build()))
615+
.build();
616+
617+
assertThat(result.getErrors()).isEmpty();
618+
assertThat(result.getBids())
619+
.extracting(BidderBid::getBid)
620+
.extracting(Bid::getAdm)
621+
.containsExactly(mapper.writeValueAsString(expectedNativeResponse));
622+
}
623+
543624
@Test
544625
public void makeBidderResponseShouldReturnAdmContainingOnlyUniqueImpTrackersUrls() throws JsonProcessingException {
545626
// given

0 commit comments

Comments
 (0)