diff --git a/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java b/src/main/java/org/prebid/server/bidder/gopl/GoplBidder.java similarity index 83% rename from src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java rename to src/main/java/org/prebid/server/bidder/gopl/GoplBidder.java index 615ba3dbc7c..c76f7bca280 100644 --- a/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java +++ b/src/main/java/org/prebid/server/bidder/gopl/GoplBidder.java @@ -1,4 +1,4 @@ -package org.prebid.server.bidder.sspbc; +package org.prebid.server.bidder.gopl; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; @@ -25,14 +25,14 @@ import java.util.List; import java.util.Objects; -public class SspbcBidder implements Bidder { +public class GoplBidder implements Bidder { - private static final String ADAPTER_VERSION = "6.0"; + private static final String ADAPTER_VERSION = "7.0"; private final String endpointUrl; private final JacksonMapper mapper; - public SspbcBidder(String endpointUrl, JacksonMapper mapper) { + public GoplBidder(String endpointUrl, JacksonMapper mapper) { this.endpointUrl = resolveEndpointUrl(endpointUrl); this.mapper = Objects.requireNonNull(mapper); } @@ -42,13 +42,13 @@ private static String resolveEndpointUrl(String base) { } @Override - public Result>> makeHttpRequests(BidRequest request) { + public Result>> makeHttpRequests(BidRequest request) { return Result.withValue(createHttpRequest(request)); } - private HttpRequest createHttpRequest(BidRequest request) { - final SspbcRequest outgoingRequest = SspbcRequest.of(request); - return HttpRequest.builder() + private HttpRequest createHttpRequest(BidRequest request) { + final GoplRequest outgoingRequest = GoplRequest.of(request); + return HttpRequest.builder() .method(HttpMethod.POST) .uri(endpointUrl) .headers(HttpUtil.headers()) @@ -59,7 +59,7 @@ private HttpRequest createHttpRequest(BidRequest request) { } @Override - public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { + public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); return Result.withValues(extractBids(bidResponse)); diff --git a/src/main/java/org/prebid/server/bidder/sspbc/SspbcRequest.java b/src/main/java/org/prebid/server/bidder/gopl/GoplRequest.java similarity index 75% rename from src/main/java/org/prebid/server/bidder/sspbc/SspbcRequest.java rename to src/main/java/org/prebid/server/bidder/gopl/GoplRequest.java index 5e0859a6c98..90f47e37be9 100644 --- a/src/main/java/org/prebid/server/bidder/sspbc/SspbcRequest.java +++ b/src/main/java/org/prebid/server/bidder/gopl/GoplRequest.java @@ -1,11 +1,11 @@ -package org.prebid.server.bidder.sspbc; +package org.prebid.server.bidder.gopl; import com.fasterxml.jackson.annotation.JsonProperty; import com.iab.openrtb.request.BidRequest; import lombok.Value; @Value(staticConstructor = "of") -public class SspbcRequest { +public class GoplRequest { @JsonProperty("bidRequest") BidRequest bidRequest; diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/sspbc/ExtImpSspbc.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/gopl/ExtImpGopl.java similarity index 73% rename from src/main/java/org/prebid/server/proto/openrtb/ext/request/sspbc/ExtImpSspbc.java rename to src/main/java/org/prebid/server/proto/openrtb/ext/request/gopl/ExtImpGopl.java index 27f06a62fde..896ab58e5e0 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/sspbc/ExtImpSspbc.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/gopl/ExtImpGopl.java @@ -1,10 +1,10 @@ -package org.prebid.server.proto.openrtb.ext.request.sspbc; +package org.prebid.server.proto.openrtb.ext.request.gopl; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Value; @Value(staticConstructor = "of") -public class ExtImpSspbc { +public class ExtImpGopl { @JsonProperty("siteId") String siteId; diff --git a/src/main/java/org/prebid/server/spring/config/bidder/SspbcBidderConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/GoplBidderConfiguration.java similarity index 61% rename from src/main/java/org/prebid/server/spring/config/bidder/SspbcBidderConfiguration.java rename to src/main/java/org/prebid/server/spring/config/bidder/GoplBidderConfiguration.java index f0849de3540..cf6ab57b70b 100644 --- a/src/main/java/org/prebid/server/spring/config/bidder/SspbcBidderConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/bidder/GoplBidderConfiguration.java @@ -1,7 +1,7 @@ package org.prebid.server.spring.config.bidder; import org.prebid.server.bidder.BidderDeps; -import org.prebid.server.bidder.sspbc.SspbcBidder; +import org.prebid.server.bidder.gopl.GoplBidder; import org.prebid.server.json.JacksonMapper; import org.prebid.server.spring.config.bidder.model.BidderConfigurationProperties; import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler; @@ -12,24 +12,24 @@ import org.springframework.context.annotation.PropertySource; @Configuration -@PropertySource(value = "classpath:/bidder-config/sspbc.yaml", factory = YamlPropertySourceFactory.class) -public class SspbcBidderConfiguration { +@PropertySource(value = "classpath:/bidder-config/gopl.yaml", factory = YamlPropertySourceFactory.class) +public class GoplBidderConfiguration { - private static final String BIDDER_NAME = "sspbc"; + private static final String BIDDER_NAME = "gopl"; - @Bean("sspbcConfigurationProperties") - @ConfigurationProperties("adapters.sspbc") + @Bean("goplConfigurationProperties") + @ConfigurationProperties("adapters.gopl") BidderConfigurationProperties configurationProperties() { return new BidderConfigurationProperties(); } @Bean - BidderDeps sspbcBidderDeps(BidderConfigurationProperties sspbcConfigurationProperties, + BidderDeps goplBidderDeps(BidderConfigurationProperties goplConfigurationProperties, JacksonMapper mapper) { return BidderDepsAssembler.forBidder(BIDDER_NAME) - .withConfig(sspbcConfigurationProperties) - .bidderCreator(config -> new SspbcBidder(config.getEndpoint(), mapper)) + .withConfig(goplConfigurationProperties) + .bidderCreator(config -> new GoplBidder(config.getEndpoint(), mapper)) .assemble(); } } diff --git a/src/main/resources/bidder-config/sspbc.yaml b/src/main/resources/bidder-config/gopl.yaml similarity index 68% rename from src/main/resources/bidder-config/sspbc.yaml rename to src/main/resources/bidder-config/gopl.yaml index 7b3258e1667..8679d5389fb 100644 --- a/src/main/resources/bidder-config/sspbc.yaml +++ b/src/main/resources/bidder-config/gopl.yaml @@ -1,5 +1,5 @@ adapters: - sspbc: + gopl: endpoint: https://ssp.wp.pl/v2/bidder/prebidserver meta-info: maintainer-email: prebid-dev@grupawp.pl @@ -7,12 +7,20 @@ adapters: site-media-types: - banner supported-vendors: - vendor-id: 676 + vendor-id: 690 usersync: - cookie-family-name: sspbc + cookie-family-name: gopl iframe: url: https://ssp.wp.pl/bidder/usersync?tcf=2&redirect={redirect_url} + support-cors: false uid-macro: '$UID' redirect: url: https://ssp.wp.pl/v1/sync/prebid-server/pixel?gdpr={gdpr}&gdpr_consent={gdpr_consent}&redirect={redirect_url} + support-cors: false uid-macro: '$UID' + aliases: + sspbc: + meta-info: + vendor-id: 676 + usersync: + cookie-family-name: sspbc diff --git a/src/main/resources/static/bidder-params/sspbc.json b/src/main/resources/static/bidder-params/gopl.json similarity index 90% rename from src/main/resources/static/bidder-params/sspbc.json rename to src/main/resources/static/bidder-params/gopl.json index d11704bfab0..86a80768082 100644 --- a/src/main/resources/static/bidder-params/sspbc.json +++ b/src/main/resources/static/bidder-params/gopl.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "title": "sspBC Bid Adapter Params", - "description": "A schema which validates params accepted by the sspBC bid adapter", + "title": "gopl Bid Adapter Params", + "description": "A schema which validates params accepted by the gopl bid adapter", "type": "object", "properties": { "siteid": { diff --git a/src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java b/src/test/java/org/prebid/server/bidder/gopl/GoplBidderTest.java similarity index 65% rename from src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java rename to src/test/java/org/prebid/server/bidder/gopl/GoplBidderTest.java index 94e77d0355a..6e9f5ed4412 100644 --- a/src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gopl/GoplBidderTest.java @@ -1,4 +1,4 @@ -package org.prebid.server.bidder.sspbc; +package org.prebid.server.bidder.gopl; import com.fasterxml.jackson.core.JsonProcessingException; import com.iab.openrtb.request.BidRequest; @@ -25,15 +25,15 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -public class SspbcBidderTest extends VertxTest { +public class GoplBidderTest extends VertxTest { private static final String ENDPOINT_URL = "https://randomurl.com"; - private final SspbcBidder target = new SspbcBidder(ENDPOINT_URL, jacksonMapper); + private final GoplBidder target = new GoplBidder(ENDPOINT_URL, jacksonMapper); @Test public void creationShouldFailOnInvalidEndpointUrl() { - assertThatIllegalArgumentException().isThrownBy(() -> new SspbcBidder("invalid_url", jacksonMapper)); + assertThatIllegalArgumentException().isThrownBy(() -> new GoplBidder("invalid_url", jacksonMapper)); } @Test @@ -42,13 +42,13 @@ public void makeHttpRequestsShouldCreateExpectedUrl() { final BidRequest bidRequest = givenBidRequest(identity()); // when - final Result>> result = target.makeHttpRequests(bidRequest); + final Result>> result = target.makeHttpRequests(bidRequest); // then assertThat(result.getErrors()).isEmpty(); assertThat(result.getValue()).hasSize(1) .extracting(HttpRequest::getUri) - .containsExactly("https://randomurl.com?bdver=6.0"); + .containsExactly("https://randomurl.com?bdver=7.0"); } @Test @@ -57,18 +57,18 @@ public void makeHttpRequestsShouldCreateValidPayload() { final BidRequest bidRequest = givenBidRequest(identity()); //when - final Result>> result = target.makeHttpRequests(bidRequest); + final Result>> result = target.makeHttpRequests(bidRequest); // then assertThat(result.getErrors()).isEmpty(); assertThat(result.getValue()).hasSize(1); - assertThat(result.getValue().getFirst().getPayload()).isEqualTo(SspbcRequest.of(bidRequest)); + assertThat(result.getValue().getFirst().getPayload()).isEqualTo(GoplRequest.of(bidRequest)); } @Test public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given - final BidderCall httpCall = givenHttpCall(null, "invalid"); + final BidderCall httpCall = givenHttpCall(null, "invalid"); // when final Result> result = target.makeBids(httpCall, null); @@ -85,7 +85,7 @@ public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { @Test public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(null, mapper.writeValueAsString(null)); + final BidderCall httpCall = givenHttpCall(null, mapper.writeValueAsString(null)); // when final Result> result = target.makeBids(httpCall, null); @@ -98,7 +98,7 @@ public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProces @Test public void makeBidsShouldReturnErrorWhenAdmIsEmpty() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), + final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), impBuilder -> impBuilder.id("id").tagid("tagId")), mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder @@ -117,7 +117,7 @@ public void makeBidsShouldReturnErrorWhenAdmIsEmpty() throws JsonProcessingExcep @Test public void makeBidsShouldReturnErrorWhenMTypeIsIncorrect() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), + final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), impBuilder -> impBuilder.id("id").tagid("tagId")), mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder @@ -137,7 +137,7 @@ public void makeBidsShouldReturnErrorWhenMTypeIsIncorrect() throws JsonProcessin @Test public void makeBidsShouldParseBid() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(givenBidRequest( + final BidderCall httpCall = givenHttpCall(givenBidRequest( bidRequestBuilder -> bidRequestBuilder .id("bidRequestId") .site(Site.builder() @@ -169,6 +169,69 @@ public void makeBidsShouldParseBid() throws JsonProcessingException { .containsExactly(BidType.banner); } + @Test + public void makeBidsShouldParseVideoBid() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), + impBuilder -> impBuilder.id("id").tagid("tagId")), + mapper.writeValueAsString(givenBidResponse(bidBuilder -> + bidBuilder + .impid("id") + .adm("anyAdm") + .mtype(2)))); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(BidderBid::getType) + .containsExactly(BidType.video); + } + + @Test + public void makeBidsShouldParseAudioBid() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), + impBuilder -> impBuilder.id("id").tagid("tagId")), + mapper.writeValueAsString(givenBidResponse(bidBuilder -> + bidBuilder + .impid("id") + .adm("anyAdm") + .mtype(3)))); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(BidderBid::getType) + .containsExactly(BidType.audio); + } + + @Test + public void makeBidsShouldParseNativeBid() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), + impBuilder -> impBuilder.id("id").tagid("tagId")), + mapper.writeValueAsString(givenBidResponse(bidBuilder -> + bidBuilder + .impid("id") + .adm("anyAdm") + .mtype(4)))); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(BidderBid::getType) + .containsExactly(BidType.xNative); + } + private static BidRequest givenBidRequest(UnaryOperator impCustomizer) { return givenBidRequest(identity(), impCustomizer); } @@ -191,9 +254,9 @@ private static BidResponse givenBidResponse(UnaryOperator bidCus .build(); } - private static BidderCall givenHttpCall(BidRequest bidRequest, String body) { + private static BidderCall givenHttpCall(BidRequest bidRequest, String body) { return BidderCall.succeededHttp( - HttpRequest.builder().payload(SspbcRequest.of(bidRequest)).build(), + HttpRequest.builder().payload(GoplRequest.of(bidRequest)).build(), HttpResponse.of(200, null, body), null); } diff --git a/src/test/java/org/prebid/server/it/SspbcTest.java b/src/test/java/org/prebid/server/it/GoplTest.java similarity index 55% rename from src/test/java/org/prebid/server/it/SspbcTest.java rename to src/test/java/org/prebid/server/it/GoplTest.java index f98cc06b596..a72587e87d6 100644 --- a/src/test/java/org/prebid/server/it/SspbcTest.java +++ b/src/test/java/org/prebid/server/it/GoplTest.java @@ -13,23 +13,23 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static java.util.Collections.singletonList; -public class SspbcTest extends IntegrationTest { +public class GoplTest extends IntegrationTest { @Test - public void openrtb2AuctionShouldRespondWithBidsFromTheSspbcBidder() throws IOException, JSONException { + public void openrtb2AuctionShouldRespondWithBidsFromTheGoplBidder() throws IOException, JSONException { // given - WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/sspbc-exchange")) + WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/gopl-exchange")) .withRequestBody(equalToJson( - jsonFrom("openrtb2/sspbc/test-sspbc-bid-request.json"))) + jsonFrom("openrtb2/gopl/test-gopl-bid-request.json"))) .willReturn(aResponse().withBody( - jsonFrom("openrtb2/sspbc/test-sspbc-bid-response.json")))); + jsonFrom("openrtb2/gopl/test-gopl-bid-response.json")))); // when - final Response response = responseFor("openrtb2/sspbc/test-auction-sspbc-request.json", + final Response response = responseFor("openrtb2/gopl/test-auction-gopl-request.json", Endpoint.openrtb2_auction); // then - assertJsonEquals("openrtb2/sspbc/test-auction-sspbc-response.json", response, - singletonList("sspbc")); + assertJsonEquals("openrtb2/gopl/test-auction-gopl-response.json", response, + singletonList("gopl")); } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-auction-sspbc-request.json b/src/test/resources/org/prebid/server/it/openrtb2/gopl/test-auction-gopl-request.json similarity index 95% rename from src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-auction-sspbc-request.json rename to src/test/resources/org/prebid/server/it/openrtb2/gopl/test-auction-gopl-request.json index 936226b3fa3..27a432f8f11 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-auction-sspbc-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/gopl/test-auction-gopl-request.json @@ -15,7 +15,7 @@ "h": 250 }, "ext": { - "sspbc": { + "gopl": { "siteId": "siteId", "id": "anyId", "test": 1 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-auction-sspbc-response.json b/src/test/resources/org/prebid/server/it/openrtb2/gopl/test-auction-gopl-response.json similarity index 88% rename from src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-auction-sspbc-response.json rename to src/test/resources/org/prebid/server/it/openrtb2/gopl/test-auction-gopl-response.json index 1c0db419be0..695eea2db37 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-auction-sspbc-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/gopl/test-auction-gopl-response.json @@ -24,21 +24,21 @@ "prebid": { "type": "banner", "meta": { - "adaptercode": "sspbc" + "adaptercode": "gopl" } }, "origbidcpm": 3.33 } } ], - "seat": "sspbc", + "seat": "gopl", "group": 0 } ], "cur": "USD", "ext": { "responsetimemillis": { - "sspbc": "{{ sspbc.response_time_ms }}" + "gopl": "{{ gopl.response_time_ms }}" }, "prebid": { "auctiontimestamp": 0 diff --git a/src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-sspbc-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/gopl/test-gopl-bid-request.json similarity index 100% rename from src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-sspbc-bid-request.json rename to src/test/resources/org/prebid/server/it/openrtb2/gopl/test-gopl-bid-request.json diff --git a/src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-sspbc-bid-response.json b/src/test/resources/org/prebid/server/it/openrtb2/gopl/test-gopl-bid-response.json similarity index 100% rename from src/test/resources/org/prebid/server/it/openrtb2/sspbc/test-sspbc-bid-response.json rename to src/test/resources/org/prebid/server/it/openrtb2/gopl/test-gopl-bid-response.json diff --git a/src/test/resources/org/prebid/server/it/test-application.properties b/src/test/resources/org/prebid/server/it/test-application.properties index c8dc5ef74fa..964280e52b8 100644 --- a/src/test/resources/org/prebid/server/it/test-application.properties +++ b/src/test/resources/org/prebid/server/it/test-application.properties @@ -556,8 +556,8 @@ adapters.sovrnXsp.enabled=true adapters.sovrnXsp.endpoint=http://localhost:8090/sovrnxsp-exchange adapters.sparteo.enabled=true adapters.sparteo.endpoint=http://localhost:8090/sparteo-exchange -adapters.sspbc.enabled=true -adapters.sspbc.endpoint=http://localhost:8090/sspbc-exchange +adapters.gopl.enabled=true +adapters.gopl.endpoint=http://localhost:8090/gopl-exchange adapters.sharethrough.enabled=true adapters.sharethrough.endpoint=http://localhost:8090/sharethrough-exchange adapters.showheroes.enabled=true