Skip to content

Commit 2f761e8

Browse files
committed
Sparteo: add required query params to adapter endpoint
1 parent eb5d5ca commit 2f761e8

4 files changed

Lines changed: 84 additions & 4 deletions

File tree

src/main/java/org/prebid/server/bidder/sparteo/SparteoBidder.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.prebid.server.util.BidderUtil;
3030
import org.prebid.server.util.HttpUtil;
3131

32+
import java.net.URLEncoder;
33+
import java.nio.charset.StandardCharsets;
3234
import java.util.ArrayList;
3335
import java.util.Collection;
3436
import java.util.Collections;
@@ -45,7 +47,7 @@ public class SparteoBidder implements Bidder<BidRequest> {
4547
private final JacksonMapper mapper;
4648

4749
public SparteoBidder(String endpointUrl, JacksonMapper mapper) {
48-
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
50+
this.endpointUrl = HttpUtil.validateUrlSyntax(Objects.requireNonNull(endpointUrl));
4951
this.mapper = Objects.requireNonNull(mapper);
5052
}
5153

@@ -79,7 +81,8 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
7981
.site(modifySite(request.getSite(), siteNetworkId, mapper))
8082
.build();
8183

82-
final HttpRequest<BidRequest> call = BidderUtil.defaultRequest(outgoingRequest, endpointUrl, mapper);
84+
final String finalEndpointUrl = enrichUrlWithQueryParams(endpointUrl, request.getSite(), siteNetworkId);
85+
final HttpRequest<BidRequest> call = BidderUtil.defaultRequest(outgoingRequest, finalEndpointUrl, mapper);
8386

8487
return Result.of(Collections.singletonList(call), errors);
8588
}
@@ -138,6 +141,29 @@ private Site modifySite(Site site, String siteNetworkId, JacksonMapper mapper) {
138141
.build();
139142
}
140143

144+
private static String enrichUrlWithQueryParams(String baseUrl, Site site, String siteNetworkId) {
145+
String url = baseUrl;
146+
147+
final String domain = Optional.ofNullable(site)
148+
.map(Site::getPublisher)
149+
.map(Publisher::getDomain)
150+
.orElse(null);
151+
152+
if (domain != null && !domain.isBlank()) {
153+
url = appendQueryParam(url, "domain", domain);
154+
}
155+
if (siteNetworkId != null && !siteNetworkId.isBlank()) {
156+
url = appendQueryParam(url, "networkId", siteNetworkId);
157+
}
158+
159+
return url;
160+
}
161+
162+
private static String appendQueryParam(String url, String name, String value) {
163+
final String sep = url.contains("?") ? "&" : "?";
164+
return url + sep + name + "=" + URLEncoder.encode(value, StandardCharsets.UTF_8);
165+
}
166+
141167
@Override
142168
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
143169
try {

src/test/java/org/prebid/server/bidder/sparteo/SparteoBidderTest.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@
2525
import org.prebid.server.proto.openrtb.ext.response.BidType;
2626

2727
import java.math.BigDecimal;
28+
import java.net.URI;
29+
import java.net.URLDecoder;
30+
import java.nio.charset.StandardCharsets;
2831
import java.util.ArrayList;
2932
import java.util.Collections;
33+
import java.util.HashMap;
3034
import java.util.List;
35+
import java.util.Map;
3136
import java.util.function.UnaryOperator;
3237

3338
import static java.util.Arrays.asList;
@@ -121,7 +126,7 @@ public void makeHttpRequestsShouldSetNetworkIdOnSitePublisherExtWhenPresentInImp
121126
assertThat(result.getErrors()).isEmpty();
122127
assertThat(result.getValue())
123128
.extracting(HttpRequest::getMethod, HttpRequest::getUri)
124-
.containsExactly(tuple(HttpMethod.POST, ENDPOINT_URL));
129+
.containsExactly(tuple(HttpMethod.POST, ENDPOINT_URL + "?networkId=testNetworkId"));
125130

126131
assertThat(result.getValue())
127132
.extracting(HttpRequest::getPayload)
@@ -857,6 +862,34 @@ public void makeBidsShouldReturnEmptyResultWhenSeatBidHasEmptyBidList() throws J
857862
assertThat(result.getValue()).isEmpty();
858863
}
859864

865+
@Test
866+
public void makeHttpRequestsShouldAppendDomainAndNetworkIdAsQueryParams() {
867+
// given
868+
final ObjectNode impExt = mapper.createObjectNode();
869+
impExt.set("bidder", mapper.createObjectNode()
870+
.put("networkId", "testNetworkId"));
871+
872+
final BidRequest bidRequest = givenBidRequest(
873+
request -> request.site(Site.builder()
874+
.publisher(Publisher.builder().domain("dev.sparteo.com").build())
875+
.build()),
876+
givenImp(imp -> imp.ext(impExt)));
877+
878+
// when
879+
final Result<List<HttpRequest<BidRequest>>> result = sparteoBidder.makeHttpRequests(bidRequest);
880+
881+
// then
882+
assertThat(result.getErrors()).isEmpty();
883+
assertThat(result.getValue()).hasSize(1);
884+
885+
final String uri = result.getValue().get(0).getUri();
886+
final Map<String, String> qp = parseQueryParams(uri);
887+
888+
assertThat(qp)
889+
.containsEntry("domain", "dev.sparteo.com")
890+
.containsEntry("networkId", "testNetworkId");
891+
}
892+
860893
private BidRequest givenBidRequest(UnaryOperator<BidRequest.BidRequestBuilder> customizer, Imp... imps) {
861894
return customizer.apply(BidRequest.builder().imp(asList(imps))).build();
862895
}
@@ -916,4 +949,22 @@ private ObjectNode createBidExtWithEmptyPrebid() {
916949
bidExt.set("prebid", mapper.createObjectNode());
917950
return bidExt;
918951
}
952+
953+
private static Map<String, String> parseQueryParams(String uri) {
954+
final String raw = URI.create(uri).getRawQuery();
955+
final Map<String, String> out = new HashMap<>();
956+
if (raw == null || raw.isEmpty()) {
957+
return out;
958+
}
959+
for (String pair : raw.split("&")) {
960+
final int idx = pair.indexOf('=');
961+
final String name = idx >= 0 ? pair.substring(0, idx) : pair;
962+
final String value = idx >= 0 ? pair.substring(idx + 1) : "";
963+
out.put(
964+
URLDecoder.decode(name, StandardCharsets.UTF_8),
965+
URLDecoder.decode(value, StandardCharsets.UTF_8)
966+
);
967+
}
968+
return out;
969+
}
919970
}

src/test/java/org/prebid/server/it/SparteoTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.prebid.server.model.Endpoint;
66

77
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
8+
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
89
import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson;
910
import static com.github.tomakehurst.wiremock.client.WireMock.post;
1011
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
@@ -15,6 +16,8 @@ public class SparteoTest extends IntegrationTest {
1516
@Test
1617
public void openrtb2AuctionShouldRespondWithBidsFromSparteoBanner() throws Exception {
1718
WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/sparteo-exchange"))
19+
.withQueryParam("domain", equalTo("dev.sparteo.com"))
20+
.withQueryParam("networkId", equalTo("networkId"))
1821
.withRequestBody(equalToJson(
1922
jsonFrom("openrtb2/sparteo/test-sparteo-bid-request.json")))
2023
.willReturn(aResponse().withBody(

src/test/resources/org/prebid/server/it/test-application.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ adapters.sovrn.endpoint=http://localhost:8090/sovrn-exchange
534534
adapters.sovrnXsp.enabled=true
535535
adapters.sovrnXsp.endpoint=http://localhost:8090/sovrnxsp-exchange
536536
adapters.sparteo.enabled=true
537-
adapters.sparteo.endpoint=http://localhost:8090/sparteo-exchange
537+
adapters.sparteo.endpoint=http://localhost:8090/sparteo-exchange?domain={{Domain}}&networkId={{NetworkId}}
538538
adapters.sspbc.enabled=true
539539
adapters.sspbc.endpoint=http://localhost:8090/sspbc-exchange
540540
adapters.sharethrough.enabled=true

0 commit comments

Comments
 (0)