Skip to content

Commit b86bc10

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

File tree

6 files changed

+56
-7
lines changed

6 files changed

+56
-7
lines changed

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

Lines changed: 26 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,34 @@ public SmileWantedBidder(String endpointUrl, JacksonMapper mapper) {
3846

3947
@Override
4048
public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request) {
49+
final ExtImpSmilewanted extImpSmilewanted;
50+
51+
try {
52+
extImpSmilewanted = parseImpExt(request.getImp().getFirst());
53+
} catch (PreBidException e) {
54+
return Result.withError(BidderError.badInput(e.getMessage()));
55+
}
56+
4157
final BidRequest outgoingRequest = request.toBuilder().at(DEFAULT_AT).build();
58+
final String url = endpointUrl + extImpSmilewanted.getZoneId();
4259

4360
return Result.withValue(HttpRequest.<BidRequest>builder()
4461
.method(HttpMethod.POST)
45-
.uri(endpointUrl)
62+
.uri(url)
4663
.headers(createHeaders())
4764
.payload(outgoingRequest)
4865
.body(mapper.encodeToBytes(outgoingRequest))
4966
.build());
5067
}
5168

69+
private ExtImpSmilewanted parseImpExt(Imp imp) {
70+
try {
71+
return mapper.mapper().convertValue(imp.getExt(), SMILEWANTED_EXT_TYPE_REFERENCE).getBidder();
72+
} catch (IllegalArgumentException e) {
73+
throw new PreBidException("Missing bidder ext in impression with id: " + imp.getId());
74+
}
75+
}
76+
5277
private static MultiMap createHeaders() {
5378
return HttpUtil.headers()
5479
.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/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: 16 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

@@ -44,7 +46,9 @@ public void creationShouldFailOnInvalidEndpointUrl() {
4446
@Test
4547
public void makeHttpRequestsShouldCorrectlyAddHeaders() {
4648
// given
47-
final BidRequest bidRequest = BidRequest.builder().build();
49+
final BidRequest bidRequest = BidRequest.builder()
50+
.imp(singletonList(givenImp("zone123")))
51+
.build();
4852

4953
// when
5054
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -65,7 +69,9 @@ public void makeHttpRequestsShouldCorrectlyAddHeaders() {
6569
@Test
6670
public void makeHttpRequestsShouldSetAtToOne() {
6771
// given
68-
final BidRequest bidRequest = BidRequest.builder().build();
72+
final BidRequest bidRequest = BidRequest.builder()
73+
.imp(singletonList(givenImp("zone123")))
74+
.build();
6975

7076
// when
7177
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -173,4 +179,11 @@ private static BidderCall<BidRequest> givenHttpCall(BidRequest bidRequest, Strin
173179
HttpResponse.of(200, null, body),
174180
null);
175181
}
182+
183+
private static Imp givenImp(String zoneId) {
184+
return Imp.builder()
185+
.id("123")
186+
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpSmilewanted.of(zoneId))))
187+
.build();
188+
}
176189
}

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)