Skip to content

Commit b261c8a

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

5 files changed

Lines changed: 84 additions & 7 deletions

File tree

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

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,16 @@
3838

3939
public class SparteoBidder implements Bidder<BidRequest> {
4040

41+
private static final String NETWORK_ID_MACRO = "{{NetworkId}}";
42+
private static final String DOMAIN_MACRO = "{{Domain}}";
4143
private static final TypeReference<ExtPrebid<?, ExtImpSparteo>> TYPE_REFERENCE =
4244
new TypeReference<>() { };
4345

4446
private final String endpointUrl;
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 = replaceMacros(request.getSite(), siteNetworkId);
85+
final HttpRequest<BidRequest> call = BidderUtil.defaultRequest(outgoingRequest, finalEndpointUrl, mapper);
8386

8487
return Result.of(Collections.singletonList(call), errors);
8588
}
@@ -92,7 +95,7 @@ private ExtImpSparteo parseExtImp(Imp imp) {
9295
}
9396
}
9497

95-
private static ObjectNode modifyImpExt(Imp imp) {
98+
private ObjectNode modifyImpExt(Imp imp) {
9699
final ObjectNode modifiedImpExt = imp.getExt().deepCopy();
97100
final ObjectNode sparteoNode = modifiedImpExt.putObject("sparteo");
98101
final JsonNode bidderJsonNode = modifiedImpExt.remove("bidder");
@@ -138,6 +141,28 @@ private Site modifySite(Site site, String siteNetworkId, JacksonMapper mapper) {
138141
.build();
139142
}
140143

144+
private String replaceMacros(Site site, String siteNetworkId) {
145+
final String domain = Optional.ofNullable(site)
146+
.map(s -> Optional.ofNullable(s.getPublisher()).map(Publisher::getDomain).orElse(s.getDomain()))
147+
.orElse(null);
148+
149+
return resolveEndpoint(domain, siteNetworkId);
150+
}
151+
152+
private String resolveEndpoint(String domain, String networkId) {
153+
if (networkId == null) {
154+
return endpointUrl;
155+
}
156+
157+
final String uri = endpointUrl.replace(NETWORK_ID_MACRO, HttpUtil.encodeUrl(networkId));
158+
159+
if (domain == null) {
160+
return uri;
161+
}
162+
163+
return uri.replace(DOMAIN_MACRO, HttpUtil.encodeUrl(domain));
164+
}
165+
141166
@Override
142167
public Result<List<BidderBid>> makeBids(BidderCall<BidRequest> httpCall, BidRequest bidRequest) {
143168
try {

src/main/resources/bidder-config/sparteo.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
adapters:
22
sparteo:
3-
endpoint: https://bid.sparteo.com/s2s-auction
3+
endpoint: https://bid.sparteo.com/s2s-auction?network_id={{NetworkId}}&domain={{Domain}}
44
meta-info:
55
maintainer-email: prebid@sparteo.com
66
app-media-types:

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

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
public class SparteoBidderTest extends VertxTest {
4141

42-
private static final String ENDPOINT_URL = "https://test.sparteo.com/endpoint";
42+
private static final String ENDPOINT_URL = "https://test.sparteo.com/endpoint?network_id={{NetworkId}}&domain={{Domain}}";
4343
private final SparteoBidder sparteoBidder = new SparteoBidder(ENDPOINT_URL, jacksonMapper);
4444

4545
@Test
@@ -121,7 +121,7 @@ public void makeHttpRequestsShouldSetNetworkIdOnSitePublisherExtWhenPresentInImp
121121
assertThat(result.getErrors()).isEmpty();
122122
assertThat(result.getValue())
123123
.extracting(HttpRequest::getMethod, HttpRequest::getUri)
124-
.containsExactly(tuple(HttpMethod.POST, ENDPOINT_URL));
124+
.containsExactly(tuple(HttpMethod.POST, "https://test.sparteo.com/endpoint?network_id=testNetworkId&domain={{Domain}}"));
125125

126126
assertThat(result.getValue())
127127
.extracting(HttpRequest::getPayload)
@@ -857,6 +857,55 @@ public void makeBidsShouldReturnEmptyResultWhenSeatBidHasEmptyBidList() throws J
857857
assertThat(result.getValue()).isEmpty();
858858
}
859859

860+
@Test
861+
public void makeHttpRequestsShouldAppendDomainAndNetworkIdAsQueryParams() {
862+
// given
863+
final ObjectNode impExt = mapper.createObjectNode();
864+
impExt.set("bidder", mapper.createObjectNode()
865+
.put("networkId", "testNetworkId"));
866+
867+
final BidRequest bidRequest = givenBidRequest(
868+
request -> request.site(Site.builder()
869+
.publisher(Publisher.builder().domain("dev.sparteo.com").build())
870+
.build()),
871+
givenImp(imp -> imp.ext(impExt)));
872+
873+
// when
874+
final Result<List<HttpRequest<BidRequest>>> result = sparteoBidder.makeHttpRequests(bidRequest);
875+
876+
// then
877+
assertThat(result.getErrors()).isEmpty();
878+
assertThat(result.getValue()).hasSize(1);
879+
880+
final String uri = result.getValue().get(0).getUri();
881+
882+
assertThat(uri).isEqualTo("https://test.sparteo.com/endpoint?network_id=testNetworkId&domain=dev.sparteo.com");
883+
}
884+
885+
@Test
886+
public void makeHttpRequestsShouldUseSiteDomainWhenPublisherDomainIsMissing() {
887+
// given
888+
final ObjectNode impExt = mapper.createObjectNode();
889+
impExt.set("bidder", mapper.createObjectNode()
890+
.put("networkId", "testNetworkId"));
891+
892+
final BidRequest bidRequest = givenBidRequest(
893+
request -> request.site(Site.builder()
894+
.domain("dev.sparteo.com")
895+
.publisher(Publisher.builder().build())
896+
.build()),
897+
givenImp(imp -> imp.ext(impExt)));
898+
899+
// when
900+
final Result<List<HttpRequest<BidRequest>>> result = sparteoBidder.makeHttpRequests(bidRequest);
901+
902+
// then
903+
assertThat(result.getErrors()).isEmpty();
904+
assertThat(result.getValue()).hasSize(1)
905+
.extracting(HttpRequest::getUri)
906+
.containsExactly("https://test.sparteo.com/endpoint?network_id=testNetworkId&domain=dev.sparteo.com");
907+
}
908+
860909
private BidRequest givenBidRequest(UnaryOperator<BidRequest.BidRequestBuilder> customizer, Imp... imps) {
861910
return customizer.apply(BidRequest.builder().imp(asList(imps))).build();
862911
}

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)