Skip to content

Commit 2ab6d26

Browse files
author
QuentinGallard
committed
SmileWanted endpoint now supports dynamic zoneId and integrates prebid server technology
1 parent 3bdbe21 commit 2ab6d26

File tree

7 files changed

+75
-8
lines changed

7 files changed

+75
-8
lines changed

src/main/java/org/prebid/server/bidder/smilewanted/SmileWantedBidder.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.prebid.server.bidder.smilewanted;
22

3+
import com.fasterxml.jackson.core.type.TypeReference;
34
import com.iab.openrtb.request.BidRequest;
45
import com.iab.openrtb.request.Imp;
56
import com.iab.openrtb.response.BidResponse;
@@ -13,8 +14,11 @@
1314
import org.prebid.server.bidder.model.BidderError;
1415
import org.prebid.server.bidder.model.HttpRequest;
1516
import org.prebid.server.bidder.model.Result;
17+
import org.prebid.server.exception.PreBidException;
1618
import org.prebid.server.json.DecodeException;
1719
import org.prebid.server.json.JacksonMapper;
20+
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
21+
import org.prebid.server.proto.openrtb.ext.request.smilewanted.ExtImpSmilewanted;
1822
import org.prebid.server.proto.openrtb.ext.response.BidType;
1923
import org.prebid.server.util.HttpUtil;
2024

@@ -28,6 +32,10 @@ public class SmileWantedBidder implements Bidder<BidRequest> {
2832
private static final String X_OPENRTB_VERSION = "2.5";
2933
private static final int DEFAULT_AT = 1;
3034

35+
private static final TypeReference<ExtPrebid<?, ExtImpSmilewanted>> SMILEWANTED_EXT_TYPE_REFERENCE =
36+
new TypeReference<>() {
37+
};
38+
3139
private final String endpointUrl;
3240
private final JacksonMapper mapper;
3341

@@ -38,17 +46,38 @@ public SmileWantedBidder(String endpointUrl, JacksonMapper mapper) {
3846

3947
@Override
4048
public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request) {
49+
if (CollectionUtils.isEmpty(request.getImp())) {
50+
return Result.withError(BidderError.badInput("No impressions in request"));
51+
}
52+
53+
final ExtImpSmilewanted extImpSmilewanted;
54+
55+
try {
56+
extImpSmilewanted = parseImpExt(request.getImp().getFirst());
57+
} catch (PreBidException e) {
58+
return Result.withError(BidderError.badInput(e.getMessage()));
59+
}
60+
4161
final BidRequest outgoingRequest = request.toBuilder().at(DEFAULT_AT).build();
62+
final String url = endpointUrl + extImpSmilewanted.getZoneId();
4263

4364
return Result.withValue(HttpRequest.<BidRequest>builder()
4465
.method(HttpMethod.POST)
45-
.uri(endpointUrl)
66+
.uri(url)
4667
.headers(createHeaders())
4768
.payload(outgoingRequest)
4869
.body(mapper.encodeToBytes(outgoingRequest))
4970
.build());
5071
}
5172

73+
private ExtImpSmilewanted parseImpExt(Imp imp) {
74+
try {
75+
return mapper.mapper().convertValue(imp.getExt(), SMILEWANTED_EXT_TYPE_REFERENCE).getBidder();
76+
} catch (IllegalArgumentException e) {
77+
throw new PreBidException("Missing bidder ext in impression with id: " + imp.getId());
78+
}
79+
}
80+
5281
private static MultiMap createHeaders() {
5382
return HttpUtil.headers()
5483
.add(HttpUtil.X_OPENRTB_VERSION_HEADER, X_OPENRTB_VERSION)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.prebid.server.proto.openrtb.ext.request.smilewanted;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Value;
5+
6+
@Value(staticConstructor = "of")
7+
public class ExtImpSmilewanted {
8+
9+
@JsonProperty("zoneId")
10+
String zoneId;
11+
}

src/main/java/org/prebid/server/spring/config/bidder/SimpleWantedConfiguration.java renamed to src/main/java/org/prebid/server/spring/config/bidder/SmileWantedConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
@Configuration
1919
@PropertySource(value = "classpath:/bidder-config/smilewanted.yaml", factory = YamlPropertySourceFactory.class)
20-
public class SimpleWantedConfiguration {
20+
public class SmileWantedConfiguration {
2121

2222
private static final String BIDDER_NAME = "smilewanted";
2323

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
adapters:
22
smilewanted:
3-
endpoint: https://prebid-server.smilewanted.com
3+
endpoint: https://prebid-server.smilewanted.com/java/
44
meta-info:
55
maintainer-email: tech@smilewanted.com
66
app-media-types:

src/test/java/org/prebid/server/bidder/smilewanted/SmileWantedBidderTest.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import org.prebid.server.bidder.model.HttpRequest;
1818
import org.prebid.server.bidder.model.HttpResponse;
1919
import org.prebid.server.bidder.model.Result;
20+
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
21+
import org.prebid.server.proto.openrtb.ext.request.smilewanted.ExtImpSmilewanted;
2022
import org.prebid.server.util.HttpUtil;
2123

2224
import java.util.List;
@@ -32,7 +34,7 @@
3234

3335
public class SmileWantedBidderTest extends VertxTest {
3436

35-
private static final String ENDPOINT_URL = "https://{{Host}}/test?param={{PublisherId}}";
37+
private static final String ENDPOINT_URL = "https://prebid-server.smilewanted.com/java/";
3638

3739
private final SmileWantedBidder target = new SmileWantedBidder(ENDPOINT_URL, jacksonMapper);
3840

@@ -42,13 +44,29 @@ public void creationShouldFailOnInvalidEndpointUrl() {
4244
}
4345

4446
@Test
45-
public void makeHttpRequestsShouldCorrectlyAddHeaders() {
47+
public void makeHttpRequestsShouldReturnErrorIfNoImpressions() {
4648
// given
4749
final BidRequest bidRequest = BidRequest.builder().build();
4850

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

54+
// then
55+
assertThat(result.getValue()).isEmpty();
56+
assertThat(result.getErrors())
57+
.containsExactly(BidderError.badInput("No impressions in request"));
58+
}
59+
60+
@Test
61+
public void makeHttpRequestsShouldCorrectlyAddHeaders() {
62+
// given
63+
final BidRequest bidRequest = BidRequest.builder()
64+
.imp(singletonList(givenImp("zone123")))
65+
.build();
66+
67+
// when
68+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
69+
5270
// then
5371
assertThat(result.getErrors()).isEmpty();
5472
assertThat(result.getValue())
@@ -65,7 +83,9 @@ public void makeHttpRequestsShouldCorrectlyAddHeaders() {
6583
@Test
6684
public void makeHttpRequestsShouldSetAtToOne() {
6785
// given
68-
final BidRequest bidRequest = BidRequest.builder().build();
86+
final BidRequest bidRequest = BidRequest.builder()
87+
.imp(singletonList(givenImp("zone123")))
88+
.build();
6989

7090
// when
7191
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -173,4 +193,11 @@ private static BidderCall<BidRequest> givenHttpCall(BidRequest bidRequest, Strin
173193
HttpResponse.of(200, null, body),
174194
null);
175195
}
196+
197+
private static Imp givenImp(String zoneId) {
198+
return Imp.builder()
199+
.id("123")
200+
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpSmilewanted.of(zoneId))))
201+
.build();
202+
}
176203
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class SmileWantedTest extends IntegrationTest {
1818
@Test
1919
public void openrtb2AuctionShouldRespondWithBidsFromSmileWanted() throws IOException, JSONException {
2020
// given
21-
WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/smilewanted-exchange"))
21+
WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/smilewanted-exchange/java/someZoneId"))
2222
.withRequestBody(equalToJson(jsonFrom("openrtb2/smilewanted/test-smilewanted-bid-request.json")))
2323
.willReturn(aResponse().withBody(jsonFrom(
2424
"openrtb2/smilewanted/test-smilewanted-bid-response.json"))));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ adapters.smarthub.aliases.artechnology.endpoint=http://localhost:8090/artechnolo
511511
adapters.smartyads.enabled=true
512512
adapters.smartyads.endpoint=http://localhost:8090/smartyads-exchange
513513
adapters.smilewanted.enabled=true
514-
adapters.smilewanted.endpoint=http://localhost:8090/smilewanted-exchange
514+
adapters.smilewanted.endpoint=http://localhost:8090/smilewanted-exchange/java/
515515
adapters.smoot.enabled=true
516516
adapters.smoot.endpoint=http://localhost:8090/smoot-exchange
517517
adapters.smrtconnect.enabled=true

0 commit comments

Comments
 (0)