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 @@ -49,22 +49,30 @@ public SmartadserverBidder(String endpointUrl, JacksonMapper mapper) {

@Override
public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request) {
final List<HttpRequest<BidRequest>> result = new ArrayList<>();
final List<BidderError> errors = new ArrayList<>();
final List<Imp> imps = new ArrayList<>();
ExtImpSmartadserver extImp = null;

for (Imp imp : request.getImp()) {
try {
final ExtImpSmartadserver extImpSmartadserver = parseImpExt(imp);
final BidRequest updatedRequest = request.toBuilder()
.imp(Collections.singletonList(imp))
.site(modifySite(request.getSite(), extImpSmartadserver.getNetworkId()))
.build();
result.add(createSingleRequest(updatedRequest));
extImp = parseImpExt(imp);
imps.add(imp);
} catch (PreBidException e) {
errors.add(BidderError.badInput(e.getMessage()));
}
}
return Result.of(result, errors);

if (imps.isEmpty()) {
return Result.withErrors(errors);
}

final BidRequest outgoingRequest = request.toBuilder()
.imp(imps)
.site(modifySite(request.getSite(), extImp.getNetworkId()))
.build();

final HttpRequest<BidRequest> httpRequest = BidderUtil.defaultRequest(outgoingRequest, makeUrl(), mapper);
return Result.of(Collections.singletonList(httpRequest), errors);
}

private ExtImpSmartadserver parseImpExt(Imp imp) {
Expand All @@ -75,24 +83,6 @@ private ExtImpSmartadserver parseImpExt(Imp imp) {
}
}

private HttpRequest<BidRequest> createSingleRequest(BidRequest request) {

return BidderUtil.defaultRequest(request, getUri(), mapper);
}

private String getUri() {
final URI uri;
try {
uri = new URI(endpointUrl);
} catch (URISyntaxException e) {
throw new PreBidException("Malformed URL: %s.".formatted(endpointUrl));
}
return new URIBuilder(uri)
.setPath(StringUtils.removeEnd(uri.getPath(), "/") + "/api/bid")
.addParameter("callerId", "5")
.toString();
}

private static Site modifySite(Site site, Integer networkId) {
final Site.SiteBuilder siteBuilder = site != null ? site.toBuilder() : Site.builder();
final Publisher sitePublisher = site != null ? site.getPublisher() : null;
Expand All @@ -108,6 +98,19 @@ private static Publisher modifyPublisher(Publisher publisher, Integer networkId)
return publisherBuilder.id(String.valueOf(networkId)).build();
}

private String makeUrl() {
final URI uri;
try {
uri = new URI(endpointUrl);
} catch (URISyntaxException e) {
throw new PreBidException("Malformed URL: %s.".formatted(endpointUrl));
}
return new URIBuilder(uri)
.setPath(StringUtils.removeEnd(uri.getPath(), "/") + "/api/bid")
.addParameter("callerId", "5")
.toString();
}

@Override
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
try {
Expand Down Expand Up @@ -135,7 +138,6 @@ private Result<List<BidderBid>> extractBids(BidResponse bidResponse) {

private static BidType getBidTypeFromMarkupType(Integer markupType) {
return switch (markupType) {
case 1 -> BidType.banner;
case 2 -> BidType.video;
case 3 -> BidType.audio;
case 4 -> BidType.xNative;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,36 +108,35 @@ public void makeHttpRequestsShouldUpdateSiteObjectIfPresent() {
}

@Test
public void makeHttpRequestsShouldCreateRequestForEveryValidImp() {
public void makeHttpRequestsShouldCreateSingleRequest() {
// given
final BidRequest bidRequest = BidRequest.builder()
.imp(Arrays.asList(givenImp(identity()),
givenImp(impBuilder -> impBuilder.id("456"))
))
.imp(Arrays.asList(
givenImp(impBuilder -> impBuilder.id("123")),
givenImp(impBuilder -> impBuilder.id("456"))))
.build();

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

// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
assertThat(result.getValue()).hasSize(1)
.extracting(HttpRequest::getPayload)
.flatExtracting(BidRequest::getImp)
.flatExtracting(Imp::getId)
.extracting(Imp::getId)
.containsExactly("123", "456");
}

@Test
public void makeHttpRequestsShouldCreateRequestForValidImpAndSaveErrorForInvalid() {
public void makeHttpRequestsShouldCreateSingleRequestWithValidImpsOnly() {
// given
final BidRequest bidRequest = BidRequest.builder()
.imp(Arrays.asList(givenImp(impBuilder -> impBuilder.id("456")),
.imp(Arrays.asList(givenImp(impBuilder -> impBuilder.id("123")),
Imp.builder()
.id("invalidImp")
.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))
.build()
))
.build()))
.build();

// when
Expand All @@ -146,11 +145,11 @@ public void makeHttpRequestsShouldCreateRequestForValidImpAndSaveErrorForInvalid
// then
assertThat(result.getErrors())
.containsExactly(BidderError.badInput("Error parsing smartadserverExt parameters"));
assertThat(result.getValue())
assertThat(result.getValue()).hasSize(1)
.extracting(HttpRequest::getPayload)
.flatExtracting(BidRequest::getImp)
.flatExtracting(Imp::getId)
.containsExactly("456");
.extracting(Imp::getId)
.containsExactly("123");
}

@Test
Expand Down
Loading