From 7b8d8435e9e485bb005578d4af62e6891dd34b5b Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Tue, 22 Apr 2025 15:08:18 -0700 Subject: [PATCH 1/8] initial commit for kueez --- .../server/bidder/kueezrtb/KueezBidder.java | 121 +++++++++++ .../ext/request/kueezrtb/KueezImpExt.java | 12 ++ .../config/bidder/KueezConfiguration.java | 40 ++++ .../resources/bidder-config/kueezrtb.yaml | 21 ++ .../static/bidder-params/kueezrtb.json | 17 ++ .../server/bidder/kueez/KueezBidderTest.java | 193 ++++++++++++++++++ 6 files changed, 404 insertions(+) create mode 100644 src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java create mode 100644 src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java create mode 100644 src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java create mode 100644 src/main/resources/bidder-config/kueezrtb.yaml create mode 100644 src/main/resources/static/bidder-params/kueezrtb.json create mode 100644 src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java diff --git a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java new file mode 100644 index 00000000000..96ea3262636 --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java @@ -0,0 +1,121 @@ +package org.prebid.server.bidder.kueezrtb; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.iab.openrtb.request.BidRequest; +import com.iab.openrtb.request.Imp; +import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; +import com.iab.openrtb.response.SeatBid; +import org.apache.commons.lang3.StringUtils; +import org.prebid.server.bidder.Bidder; +import org.prebid.server.bidder.model.BidderBid; +import org.prebid.server.bidder.model.BidderCall; +import org.prebid.server.bidder.model.BidderError; +import org.prebid.server.bidder.model.HttpRequest; +import org.prebid.server.bidder.model.Result; +import org.prebid.server.exception.PreBidException; +import org.prebid.server.json.DecodeException; +import org.prebid.server.json.JacksonMapper; +import org.prebid.server.proto.openrtb.ext.ExtPrebid; +import org.prebid.server.proto.openrtb.ext.request.kueezrtb.KueezImpExt; +import org.prebid.server.proto.openrtb.ext.response.BidType; +import org.prebid.server.util.BidderUtil; +import org.prebid.server.util.HttpUtil; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public class KueezBidder implements Bidder { + + private static final TypeReference> TYPE_REFERENCE = new TypeReference<>() { }; + + private final String endpointUrl; + private final JacksonMapper mapper; + + public KueezBidder(String endpointUrl, JacksonMapper mapper) { + this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl)); + this.mapper = Objects.requireNonNull(mapper); + } + + @Override + public Result>> makeHttpRequests(BidRequest bidRequest) { + final List> requests = new ArrayList<>(); + final List errors = new ArrayList<>(); + + for (Imp imp : bidRequest.getImp()) { + try { + final KueezImpExt impExt = parseImpExt(imp); + requests.add(makeHttpRequest(bidRequest, imp, impExt)); + } catch (PreBidException e) { + errors.add(BidderError.badInput(e.getMessage())); + } + } + return Result.of(requests, errors); + } + + private KueezImpExt parseImpExt(Imp imp) throws PreBidException { + try { + return mapper.mapper().convertValue(imp.getExt(), TYPE_REFERENCE).getBidder(); + } catch (IllegalArgumentException e) { + throw new PreBidException(e.getMessage()); + } + } + + private HttpRequest makeHttpRequest(BidRequest bidRequest, Imp imp, KueezImpExt impExt) { + final BidRequest modifiedBidRequest = bidRequest.toBuilder().imp(Collections.singletonList(imp)).build(); + final String uri = endpointUrl + HttpUtil.encodeUrl(StringUtils.defaultString(impExt.getConnectionId()).trim()); + + return BidderUtil.defaultRequest(modifiedBidRequest, uri, mapper); + } + + @Override + public final Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { + final List errors = new ArrayList<>(); + try { + final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); + return Result.of(extractBids(bidResponse, errors), errors); + } catch (DecodeException | PreBidException e) { + return Result.withError(BidderError.badServerResponse(e.getMessage())); + } + } + + private static List extractBids(BidResponse bidResponse, List errors) { + if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { + return Collections.emptyList(); + } + return bidResponse.getSeatbid().stream() + .filter(Objects::nonNull) + .map(SeatBid::getBid) + .filter(Objects::nonNull) + .flatMap(Collection::stream) + .map(bid -> makeBid(bid, bidResponse.getCur(), errors)) + .filter(Objects::nonNull) + .toList(); + } + + private static BidderBid makeBid(Bid bid, String currency, List errors) { + try { + final BidType mediaType = getMediaTypeForBid(bid); + return BidderBid.of(bid, mediaType, currency); + } catch (PreBidException e) { + errors.add(BidderError.badServerResponse(e.getMessage())); + return null; + } + } + + private static BidType getMediaTypeForBid(Bid bid) { + final Integer mType = bid.getMtype(); + if (mType == null) { + throw new PreBidException("Missing MType for bid: " + bid.getId()); + } + return switch (mType) { + case 1 -> BidType.banner; + case 2 -> BidType.video; + default -> throw new PreBidException("Could not define bid type for imp: " + bid.getImpid()); + }; + } +} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java new file mode 100644 index 00000000000..c47fd674ece --- /dev/null +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java @@ -0,0 +1,12 @@ +package org.prebid.server.proto.openrtb.ext.request.kueezrtb; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Value; + +@Value(staticConstructor = "of") +public class KueezImpExt { + + @JsonProperty("cId") + String connectionId; + +} diff --git a/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java new file mode 100644 index 00000000000..a470b47eb34 --- /dev/null +++ b/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java @@ -0,0 +1,40 @@ +package org.prebid.server.spring.config.bidder; + +import org.prebid.server.bidder.BidderDeps; +import org.prebid.server.bidder.kueezrtb.KueezBidder; +import org.prebid.server.json.JacksonMapper; +import org.prebid.server.spring.config.bidder.model.BidderConfigurationProperties; +import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler; +import org.prebid.server.spring.config.bidder.util.UsersyncerCreator; +import org.prebid.server.spring.env.YamlPropertySourceFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +import jakarta.validation.constraints.NotBlank; + +@Configuration +@PropertySource(value = "classpath:/bidder-config/kueezrtb.yaml", factory = YamlPropertySourceFactory.class) +public class KueezConfiguration { + + private static final String BIDDER_NAME = "kueezrtb"; + + @Bean("kueezrtbConfigurationProperties") + @ConfigurationProperties("adapters.kueez") + BidderConfigurationProperties configurationProperties() { + return new BidderConfigurationProperties(); + } + + @Bean + BidderDeps kueezrtbBidderDeps(BidderConfigurationProperties kueezrtbConfigurationProperties, + @NotBlank @Value("${external-url}") String externalUrl, + JacksonMapper mapper) { + return BidderDepsAssembler.forBidder(BIDDER_NAME) + .withConfig(kueezrtbConfigurationProperties) + .usersyncerCreator(UsersyncerCreator.create(externalUrl)) + .bidderCreator(config -> new KueezBidder(config.getEndpoint(), mapper)) + .assemble(); + } +} diff --git a/src/main/resources/bidder-config/kueezrtb.yaml b/src/main/resources/bidder-config/kueezrtb.yaml new file mode 100644 index 00000000000..bc9281f3d74 --- /dev/null +++ b/src/main/resources/bidder-config/kueezrtb.yaml @@ -0,0 +1,21 @@ +adapters: + kueezrtb: + endpoint: https://prebidsrvr.kueezrtb.com/openrtb/ + endpoint-compression: gzip + ortb-version: "2.6" + meta-info: + maintainer-email: rtb@kueez.com + app-media-types: + - banner + - video + site-media-types: + - banner + - video + supported-vendors: + vendor-id: 1165 + usersync: + cookie-family-name: kueezrtb + iframe: + url: https://sync.kueezrtb.com/api/user/html/62ce79e7dd15099534ae5e04?pbs=true&gdpr={{gdpr}}&gdpr_consent={{gdpr_consent}}&us_privacy={{us_privacy}}&redirect={{redirect_url}}&gpp={{gpp}}&gpp_sid={{gpp_sid}} + support-cors: false + uid-macro: '${userId}' diff --git a/src/main/resources/static/bidder-params/kueezrtb.json b/src/main/resources/static/bidder-params/kueezrtb.json new file mode 100644 index 00000000000..e11a79e028d --- /dev/null +++ b/src/main/resources/static/bidder-params/kueezrtb.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Kueez RTB Adapter Params", + "description": "A schema which validates params accepted by the Kueez RTB adapter", + "type": "object", + "properties": { + "cId": { + "type": "string", + "description": "The connection id.", + "minLength": 1, + "pattern": "^[a-zA-Z0-9_]+$" + } + }, + "required": [ + "cId" + ] +} diff --git a/src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java b/src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java new file mode 100644 index 00000000000..fbc3e60e27f --- /dev/null +++ b/src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java @@ -0,0 +1,193 @@ +package org.prebid.server.bidder.kueez; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.iab.openrtb.request.BidRequest; +import com.iab.openrtb.request.Imp; +import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; +import com.iab.openrtb.response.SeatBid; +import org.junit.jupiter.api.Test; +import org.prebid.server.VertxTest; +import org.prebid.server.bidder.kueezrtb.KueezBidder; +import org.prebid.server.bidder.model.BidderBid; +import org.prebid.server.bidder.model.BidderCall; +import org.prebid.server.bidder.model.BidderError; +import org.prebid.server.bidder.model.HttpRequest; +import org.prebid.server.bidder.model.HttpResponse; +import org.prebid.server.bidder.model.Result; +import org.prebid.server.proto.openrtb.ext.ExtPrebid; +import org.prebid.server.proto.openrtb.ext.request.kueezrtb.KueezImpExt; +import org.prebid.server.proto.openrtb.ext.response.BidType; + +import java.util.List; +import java.util.function.UnaryOperator; + +import static java.util.Collections.singletonList; +import static java.util.function.UnaryOperator.identity; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.prebid.server.bidder.model.BidderError.badServerResponse; +import static org.prebid.server.proto.openrtb.ext.response.BidType.banner; +import static org.prebid.server.util.HttpUtil.APPLICATION_JSON_CONTENT_TYPE; +import static org.prebid.server.util.HttpUtil.CONTENT_TYPE_HEADER; + +class KueezBidderTest extends VertxTest { + + private static final String ENDPOINT_URL = "https://test.host.com/prebid/bid/"; + + private final KueezBidder target = new KueezBidder(ENDPOINT_URL, jacksonMapper); + + @Test + public void creationShouldFailOnInvalidEndpoint() { + assertThatIllegalArgumentException().isThrownBy(() -> new KueezBidder("invalid_url", jacksonMapper)); + } + + @Test + public void makeHttpRequestsShouldMakeOneRequestPerImp() { + // given + final Imp imp1 = givenImp(imp -> imp.id("imp1")); + final Imp imp2 = givenImp(imp -> imp.id("imp2")); + final BidRequest request = BidRequest.builder().imp(List.of(imp1, imp2)).build(); + + // when + final Result>> result = target.makeHttpRequests(request); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(2) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) + .containsExactlyInAnyOrder(imp1, imp2); + } + + @Test + public void makeHttpRequestsShouldContainExpectedHeaders() { + // given + final BidRequest request = givenBidRequest(identity()); + + // when + final Result>> result = target.makeHttpRequests(request); + + // then + assertThat(result.getValue()).hasSize(1).first() + .extracting(HttpRequest::getHeaders) + .satisfies(headers -> assertThat(headers.get(CONTENT_TYPE_HEADER)) + .isEqualTo(APPLICATION_JSON_CONTENT_TYPE)); + } + + @Test + public void makeHttpRequestsShouldUseCorrectUri() { + // given + final BidRequest bidRequest = givenBidRequest(identity()); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(HttpRequest::getUri) + .containsExactly("https://test.host.com/prebid/bid/cid"); + } + + @Test + public void makeHttpRequestsShouldReturnErrorOnInvalidImp() { + // given + final BidRequest bidRequest = givenBidRequest(imp -> + imp.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).hasSize(1); + assertThat(result.getErrors().getFirst().getMessage()).startsWith("Cannot deserialize value"); + assertThat(result.getValue()).isEmpty(); + } + + @Test + public void makeBidsShouldReturnErrorIfResponseBodyInvalid() { + // given + final BidderCall httpCall = givenHttpCall("invalid"); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).hasSize(1) + .allSatisfy(error -> { + assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response); + assertThat(error.getMessage()).startsWith("Failed to decode: Unrecognized token"); + }); + } + + @Test + public void makeBidsShouldReturnBidsWithTypesSuccessfully() throws JsonProcessingException { + // given + final Bid bannerBid = Bid.builder().impid("imp1").mtype(1).build(); + final Bid videoBid = Bid.builder().impid("imp2").mtype(2).build(); + final BidderCall httpCall = givenHttpCall(givenBidResponse(bannerBid, videoBid)); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(2) + .containsExactlyInAnyOrder(BidderBid.of(bannerBid, BidType.banner, "USD"), + BidderBid.of(videoBid, BidType.video, "USD")); + } + + @Test + public void makeBidsShouldReturnErrorWhenImpTypeIsNotSupported() throws JsonProcessingException { + // given + final Bid bannerBid = Bid.builder().id("bidId1").impid("id1").mtype(1).build(); + final Bid bidWithoutMtype = Bid.builder().id("bidId2").impid("id2").mtype(null).build(); + final Bid audioBid = Bid.builder().id("bidId3").impid("id3").mtype(3).build(); + final Bid nativeBid = Bid.builder().id("bidId4").impid("id4").mtype(4).build(); + + final BidderCall httpCall = givenHttpCall( + givenBidResponse(bannerBid, bidWithoutMtype, audioBid, nativeBid)); + + // when + final Result> result = target.makeBids(httpCall, null); + // then + assertThat(result.getErrors()).containsExactlyInAnyOrder( + badServerResponse("Missing MType for bid: bidId2"), + badServerResponse("Could not define bid type for imp: id3"), + badServerResponse("Could not define bid type for imp: id4")); + assertThat(result.getValue()).containsOnly(BidderBid.of(bannerBid, banner, "USD")); + } + + private static BidRequest givenBidRequest( + UnaryOperator bidRequestCustomizer, + UnaryOperator impCustomizer) { + + return bidRequestCustomizer.apply(BidRequest.builder().imp(singletonList(givenImp(impCustomizer)))).build(); + } + + private static BidRequest givenBidRequest(UnaryOperator impCustomizer) { + return givenBidRequest(identity(), impCustomizer); + } + + private static Imp givenImp(UnaryOperator impCustomizer) { + return impCustomizer.apply(Imp.builder() + .id("impId") + .ext(mapper.valueToTree(ExtPrebid.of(null, KueezImpExt.of("cid"))))) + .build(); + } + + private static BidderCall givenHttpCall(String body) { + return BidderCall.succeededHttp( + HttpRequest.builder().build(), + HttpResponse.of(200, null, body), + null); + } + + private static String givenBidResponse(Bid... bids) throws JsonProcessingException { + return mapper.writeValueAsString(BidResponse.builder() + .cur("USD") + .seatbid(singletonList(SeatBid.builder().bid(List.of(bids)).build())) + .build()); + } +} From f5d098e45a2c40b87e5583a97d0944d9e04a6505 Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:55:25 -0700 Subject: [PATCH 2/8] S2S-2404: add integration test --- .../config/bidder/KueezConfiguration.java | 2 +- .../java/org/prebid/server/it/KueezTest.java | 33 ++++++++++++ .../test-auction-kueezrtb-request.json | 24 +++++++++ .../test-auction-kueezrtb-response.json | 43 +++++++++++++++ .../kueezrtb/test-kueezrtb-bid-request.json | 54 +++++++++++++++++++ .../kueezrtb/test-kueezrtb-bid-response.json | 24 +++++++++ .../server/it/test-application.properties | 2 + 7 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/prebid/server/it/KueezTest.java create mode 100644 src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-request.json create mode 100644 src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-response.json create mode 100644 src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json create mode 100644 src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-response.json diff --git a/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java index a470b47eb34..f0910f4c999 100644 --- a/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java @@ -22,7 +22,7 @@ public class KueezConfiguration { private static final String BIDDER_NAME = "kueezrtb"; @Bean("kueezrtbConfigurationProperties") - @ConfigurationProperties("adapters.kueez") + @ConfigurationProperties("adapters.kueezrtb") BidderConfigurationProperties configurationProperties() { return new BidderConfigurationProperties(); } diff --git a/src/test/java/org/prebid/server/it/KueezTest.java b/src/test/java/org/prebid/server/it/KueezTest.java new file mode 100644 index 00000000000..79a02c2fa39 --- /dev/null +++ b/src/test/java/org/prebid/server/it/KueezTest.java @@ -0,0 +1,33 @@ +package org.prebid.server.it; + +import io.restassured.response.Response; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.prebid.server.model.Endpoint; + +import java.io.IOException; +import java.util.List; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; + +public class KueezTest extends IntegrationTest { + + @Test + public void openrtb2AuctionShouldRespondWithBidsFromKueez() throws IOException, JSONException { + // given + WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/kueezrtb-exchange/test_cid_123")) + .withRequestBody(equalToJson(jsonFrom("openrtb2/kueezrtb/test-kueezrtb-bid-request.json"))) + .willReturn(aResponse().withBody(jsonFrom("openrtb2/kueezrtb/test-kueezrtb-bid-response.json")))); + + // when + final Response response = responseFor( + "openrtb2/kueezrtb/test-auction-kueezrtb-request.json", + Endpoint.openrtb2_auction); + + // then + assertJsonEquals("openrtb2/kueezrtb/test-auction-kueezrtb-response.json", response, List.of("kueezrtb")); + } +} diff --git a/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-request.json b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-request.json new file mode 100644 index 00000000000..846277abcde --- /dev/null +++ b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-request.json @@ -0,0 +1,24 @@ +{ + "id": "some-request-id", + "imp": [ + { + "id": "some-impression-id", + "secure": 1, + "banner": { + "w": 320, + "h": 250 + }, + "ext": { + "kueezrtb": { + "cId": "test_cid_123" + } + } + } + ], + "tmax": 5000, + "regs": { + "ext": { + "gdpr": 0 + } + } +} diff --git a/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-response.json b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-response.json new file mode 100644 index 00000000000..c1c319df7c3 --- /dev/null +++ b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-auction-kueezrtb-response.json @@ -0,0 +1,43 @@ +{ + "id": "some-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "some-bid-id", + "impid": "some-impression-id", + "exp": 300, + "price": 1, + "adm": "
Some creative
", + "adid": "some-ad-id", + "cid": "test", + "crid": "some-creative-id", + "w": 320, + "h": 250, + "mtype": 1, + "ext": { + "prebid": { + "type": "banner", + "meta": { + "adaptercode": "kueezrtb" + } + }, + "origbidcpm": 1 + } + } + ], + "seat": "kueezrtb", + "group": 0 + } + ], + "cur": "USD", + "ext": { + "responsetimemillis": { + "kueezrtb": "{{ kueezrtb.response_time_ms }}" + }, + "prebid": { + "auctiontimestamp": 0 + }, + "tmaxrequest": 5000 + } +} diff --git a/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json new file mode 100644 index 00000000000..32ccede64b8 --- /dev/null +++ b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json @@ -0,0 +1,54 @@ +{ + "id": "some-request-id", + "imp": [ + { + "id": "some-impression-id", + "banner": { + "w": 320, + "h": 250 + }, + "secure": 1, + "ext": { + "tid": "${json-unit.any-string}", + "bidder": { + "cId": "test_cid_123" + } + } + } + ], + "site": { + "domain": "www.example.com", + "page": "http://www.example.com", + "publisher": { + "domain": "example.com" + }, + "ext": { + "amp": 0 + } + }, + "device": { + "ua": "userAgent", + "ip": "193.168.244.1" + }, + "at": 1, + "tmax": "${json-unit.any-number}", + "cur": [ + "USD" + ], + "source": { + "tid": "${json-unit.any-string}" + }, + "regs": { + "gdpr": 0 + }, + "ext": { + "prebid": { + "server": { + "externalurl": "http://localhost:8080", + "gvlid": 1, + "datacenter": "local", + "endpoint": "/openrtb2/auction" + } + } + } +} diff --git a/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-response.json b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-response.json new file mode 100644 index 00000000000..36bff877013 --- /dev/null +++ b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-response.json @@ -0,0 +1,24 @@ +{ + "id": "some-request-id", + "cur": "", + "bidid": "some-bid-id", + "seatbid": [ + { + "bid": [ + { + "adm": "
Some creative
", + "id": "some-bid-id", + "impid": "some-impression-id", + "h": 250, + "w": 320, + "price": 1, + "adid": "some-ad-id", + "cid": "test", + "crid": "some-creative-id", + "mtype": 1 + } + ], + "type": "banner" + } + ] +} 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 5403ed93dc4..2ebd675b75e 100644 --- a/src/test/resources/org/prebid/server/it/test-application.properties +++ b/src/test/resources/org/prebid/server/it/test-application.properties @@ -580,6 +580,8 @@ adapters.zmaticoo.enabled=true adapters.zmaticoo.endpoint=http://localhost:8090/zmaticoo-exchange adapters.yearxero.enabled=true adapters.yearxero.endpoint=http://localhost:8090/yearxero-exchange +adapters.kueezrtb.enabled=true +adapters.kueezrtb.endpoint=http://localhost:8090/kueezrtb-exchange/ http-client.circuit-breaker.enabled=true http-client.circuit-breaker.idle-expire-hours=24 http-client.circuit-breaker.opening-threshold=1000 From 8a7014db4a36dae6f57a8485c054e9d4bbf10861 Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Wed, 23 Apr 2025 15:15:19 -0700 Subject: [PATCH 3/8] Update KueezBidderTest.java --- .../{kueez => kueezrtb}/KueezBidderTest.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) rename src/test/java/org/prebid/server/bidder/{kueez => kueezrtb}/KueezBidderTest.java (93%) diff --git a/src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java b/src/test/java/org/prebid/server/bidder/kueezrtb/KueezBidderTest.java similarity index 93% rename from src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java rename to src/test/java/org/prebid/server/bidder/kueezrtb/KueezBidderTest.java index fbc3e60e27f..cc132f9f21f 100644 --- a/src/test/java/org/prebid/server/bidder/kueez/KueezBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/kueezrtb/KueezBidderTest.java @@ -1,4 +1,4 @@ -package org.prebid.server.bidder.kueez; +package org.prebid.server.bidder.kueezrtb; import com.fasterxml.jackson.core.JsonProcessingException; import com.iab.openrtb.request.BidRequest; @@ -8,7 +8,6 @@ import com.iab.openrtb.response.SeatBid; import org.junit.jupiter.api.Test; import org.prebid.server.VertxTest; -import org.prebid.server.bidder.kueezrtb.KueezBidder; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; @@ -121,6 +120,19 @@ public void makeBidsShouldReturnErrorIfResponseBodyInvalid() { }); } + @Test + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { + // given + final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder().build())); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).isEmpty(); + } + @Test public void makeBidsShouldReturnBidsWithTypesSuccessfully() throws JsonProcessingException { // given From 85013e057357029bb486df756e341145d6ec7914 Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Fri, 9 May 2025 10:18:02 -0700 Subject: [PATCH 4/8] renaming kueez files --- .../{KueezBidder.java => KueezRtbBidder.java} | 19 +++++------ .../{KueezImpExt.java => KueezRtbImpExt.java} | 2 +- ...ration.java => KueezRtbConfiguration.java} | 6 ++-- .../static/bidder-params/kueezrtb.json | 3 +- ...idderTest.java => KueezRtbBidderTest.java} | 33 ++++++++++++------- .../it/{KueezTest.java => KueezRtbTest.java} | 2 +- .../server/it/test-application.properties | 4 +-- 7 files changed, 38 insertions(+), 31 deletions(-) rename src/main/java/org/prebid/server/bidder/kueezrtb/{KueezBidder.java => KueezRtbBidder.java} (87%) rename src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/{KueezImpExt.java => KueezRtbImpExt.java} (88%) rename src/main/java/org/prebid/server/spring/config/bidder/{KueezConfiguration.java => KueezRtbConfiguration.java} (90%) rename src/test/java/org/prebid/server/bidder/kueezrtb/{KueezBidderTest.java => KueezRtbBidderTest.java} (89%) rename src/test/java/org/prebid/server/it/{KueezTest.java => KueezRtbTest.java} (96%) diff --git a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java similarity index 87% rename from src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java rename to src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java index 96ea3262636..647c9f57201 100644 --- a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezBidder.java +++ b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java @@ -17,7 +17,7 @@ import org.prebid.server.json.DecodeException; import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.ExtPrebid; -import org.prebid.server.proto.openrtb.ext.request.kueezrtb.KueezImpExt; +import org.prebid.server.proto.openrtb.ext.request.kueezrtb.KueezRtbImpExt; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; @@ -29,14 +29,14 @@ import java.util.List; import java.util.Objects; -public class KueezBidder implements Bidder { +public class KueezRtbBidder implements Bidder { - private static final TypeReference> TYPE_REFERENCE = new TypeReference<>() { }; + private static final TypeReference> TYPE_REFERENCE = new TypeReference<>() { }; private final String endpointUrl; private final JacksonMapper mapper; - public KueezBidder(String endpointUrl, JacksonMapper mapper) { + public KueezRtbBidder(String endpointUrl, JacksonMapper mapper) { this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl)); this.mapper = Objects.requireNonNull(mapper); } @@ -48,7 +48,7 @@ public Result>> makeHttpRequests(BidRequest bidRequ for (Imp imp : bidRequest.getImp()) { try { - final KueezImpExt impExt = parseImpExt(imp); + final KueezRtbImpExt impExt = parseImpExt(imp); requests.add(makeHttpRequest(bidRequest, imp, impExt)); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); @@ -57,7 +57,7 @@ public Result>> makeHttpRequests(BidRequest bidRequ return Result.of(requests, errors); } - private KueezImpExt parseImpExt(Imp imp) throws PreBidException { + private KueezRtbImpExt parseImpExt(Imp imp) throws PreBidException { try { return mapper.mapper().convertValue(imp.getExt(), TYPE_REFERENCE).getBidder(); } catch (IllegalArgumentException e) { @@ -65,7 +65,7 @@ private KueezImpExt parseImpExt(Imp imp) throws PreBidException { } } - private HttpRequest makeHttpRequest(BidRequest bidRequest, Imp imp, KueezImpExt impExt) { + private HttpRequest makeHttpRequest(BidRequest bidRequest, Imp imp, KueezRtbImpExt impExt) { final BidRequest modifiedBidRequest = bidRequest.toBuilder().imp(Collections.singletonList(imp)).build(); final String uri = endpointUrl + HttpUtil.encodeUrl(StringUtils.defaultString(impExt.getConnectionId()).trim()); @@ -109,13 +109,10 @@ private static BidderBid makeBid(Bid bid, String currency, List err private static BidType getMediaTypeForBid(Bid bid) { final Integer mType = bid.getMtype(); - if (mType == null) { - throw new PreBidException("Missing MType for bid: " + bid.getId()); - } return switch (mType) { case 1 -> BidType.banner; case 2 -> BidType.video; - default -> throw new PreBidException("Could not define bid type for imp: " + bid.getImpid()); + case null, default -> throw new PreBidException("Could not define bid type for imp: " + bid.getImpid()); }; } } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezRtbImpExt.java similarity index 88% rename from src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java rename to src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezRtbImpExt.java index c47fd674ece..5abaf1be0f5 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezImpExt.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/kueezrtb/KueezRtbImpExt.java @@ -4,7 +4,7 @@ import lombok.Value; @Value(staticConstructor = "of") -public class KueezImpExt { +public class KueezRtbImpExt { @JsonProperty("cId") String connectionId; diff --git a/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java similarity index 90% rename from src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java rename to src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java index f0910f4c999..b25cb042a6c 100644 --- a/src/main/java/org/prebid/server/spring/config/bidder/KueezConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java @@ -1,7 +1,7 @@ package org.prebid.server.spring.config.bidder; import org.prebid.server.bidder.BidderDeps; -import org.prebid.server.bidder.kueezrtb.KueezBidder; +import org.prebid.server.bidder.kueezrtb.KueezRtbBidder; import org.prebid.server.json.JacksonMapper; import org.prebid.server.spring.config.bidder.model.BidderConfigurationProperties; import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler; @@ -17,7 +17,7 @@ @Configuration @PropertySource(value = "classpath:/bidder-config/kueezrtb.yaml", factory = YamlPropertySourceFactory.class) -public class KueezConfiguration { +public class KueezRtbConfiguration { private static final String BIDDER_NAME = "kueezrtb"; @@ -34,7 +34,7 @@ BidderDeps kueezrtbBidderDeps(BidderConfigurationProperties kueezrtbConfiguratio return BidderDepsAssembler.forBidder(BIDDER_NAME) .withConfig(kueezrtbConfigurationProperties) .usersyncerCreator(UsersyncerCreator.create(externalUrl)) - .bidderCreator(config -> new KueezBidder(config.getEndpoint(), mapper)) + .bidderCreator(config -> new KueezRtbBidder(config.getEndpoint(), mapper)) .assemble(); } } diff --git a/src/main/resources/static/bidder-params/kueezrtb.json b/src/main/resources/static/bidder-params/kueezrtb.json index e11a79e028d..29685df6f00 100644 --- a/src/main/resources/static/bidder-params/kueezrtb.json +++ b/src/main/resources/static/bidder-params/kueezrtb.json @@ -13,5 +13,6 @@ }, "required": [ "cId" - ] + ], + "additionalProperties": false } diff --git a/src/test/java/org/prebid/server/bidder/kueezrtb/KueezBidderTest.java b/src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java similarity index 89% rename from src/test/java/org/prebid/server/bidder/kueezrtb/KueezBidderTest.java rename to src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java index cc132f9f21f..4cc31c699a0 100644 --- a/src/test/java/org/prebid/server/bidder/kueezrtb/KueezBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java @@ -15,7 +15,7 @@ import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; import org.prebid.server.proto.openrtb.ext.ExtPrebid; -import org.prebid.server.proto.openrtb.ext.request.kueezrtb.KueezImpExt; +import org.prebid.server.proto.openrtb.ext.request.kueezrtb.KueezRtbImpExt; import org.prebid.server.proto.openrtb.ext.response.BidType; import java.util.List; @@ -30,15 +30,15 @@ import static org.prebid.server.util.HttpUtil.APPLICATION_JSON_CONTENT_TYPE; import static org.prebid.server.util.HttpUtil.CONTENT_TYPE_HEADER; -class KueezBidderTest extends VertxTest { +class KueezRtbBidderTest extends VertxTest { private static final String ENDPOINT_URL = "https://test.host.com/prebid/bid/"; - private final KueezBidder target = new KueezBidder(ENDPOINT_URL, jacksonMapper); + private final KueezRtbBidder target = new KueezRtbBidder(ENDPOINT_URL, jacksonMapper); @Test public void creationShouldFailOnInvalidEndpoint() { - assertThatIllegalArgumentException().isThrownBy(() -> new KueezBidder("invalid_url", jacksonMapper)); + assertThatIllegalArgumentException().isThrownBy(() -> new KueezRtbBidder("invalid_url", jacksonMapper)); } @Test @@ -152,22 +152,31 @@ public void makeBidsShouldReturnBidsWithTypesSuccessfully() throws JsonProcessin @Test public void makeBidsShouldReturnErrorWhenImpTypeIsNotSupported() throws JsonProcessingException { + // given + final Bid audioBid = Bid.builder().id("bidId3").impid("id3").mtype(3).build(); + + final BidderCall httpCall = givenHttpCall(givenBidResponse(audioBid)); + + // when + final Result> result = target.makeBids(httpCall, null); + // then + assertThat(result.getErrors()).containsOnly(badServerResponse("Could not define bid type for imp: id3")); + assertThat(result.getValue()).isEmpty(); + } + + @Test + public void makeBidsShouldReturnErrorWhenMTypeIsNotIncluded() throws JsonProcessingException { // given final Bid bannerBid = Bid.builder().id("bidId1").impid("id1").mtype(1).build(); final Bid bidWithoutMtype = Bid.builder().id("bidId2").impid("id2").mtype(null).build(); - final Bid audioBid = Bid.builder().id("bidId3").impid("id3").mtype(3).build(); - final Bid nativeBid = Bid.builder().id("bidId4").impid("id4").mtype(4).build(); final BidderCall httpCall = givenHttpCall( - givenBidResponse(bannerBid, bidWithoutMtype, audioBid, nativeBid)); + givenBidResponse(bannerBid, bidWithoutMtype)); // when final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getErrors()).containsExactlyInAnyOrder( - badServerResponse("Missing MType for bid: bidId2"), - badServerResponse("Could not define bid type for imp: id3"), - badServerResponse("Could not define bid type for imp: id4")); + assertThat(result.getErrors()).containsOnly(badServerResponse("Could not define bid type for imp: id2")); assertThat(result.getValue()).containsOnly(BidderBid.of(bannerBid, banner, "USD")); } @@ -185,7 +194,7 @@ private static BidRequest givenBidRequest(UnaryOperator impCusto private static Imp givenImp(UnaryOperator impCustomizer) { return impCustomizer.apply(Imp.builder() .id("impId") - .ext(mapper.valueToTree(ExtPrebid.of(null, KueezImpExt.of("cid"))))) + .ext(mapper.valueToTree(ExtPrebid.of(null, KueezRtbImpExt.of("cid"))))) .build(); } diff --git a/src/test/java/org/prebid/server/it/KueezTest.java b/src/test/java/org/prebid/server/it/KueezRtbTest.java similarity index 96% rename from src/test/java/org/prebid/server/it/KueezTest.java rename to src/test/java/org/prebid/server/it/KueezRtbTest.java index 79a02c2fa39..94b1d597ca2 100644 --- a/src/test/java/org/prebid/server/it/KueezTest.java +++ b/src/test/java/org/prebid/server/it/KueezRtbTest.java @@ -13,7 +13,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -public class KueezTest extends IntegrationTest { +public class KueezRtbTest extends IntegrationTest { @Test public void openrtb2AuctionShouldRespondWithBidsFromKueez() throws IOException, JSONException { 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 2ebd675b75e..f5c90c89afa 100644 --- a/src/test/resources/org/prebid/server/it/test-application.properties +++ b/src/test/resources/org/prebid/server/it/test-application.properties @@ -281,6 +281,8 @@ adapters.kobler.enabled=true adapters.kobler.endpoint=http://localhost:8090/kobler-exchange adapters.krushmedia.enabled=true adapters.krushmedia.endpoint=http://localhost:8090/krushmedia-exchange +adapters.kueezrtb.enabled=true +adapters.kueezrtb.endpoint=http://localhost:8090/kueezrtb-exchange/ adapters.lemmadigital.enabled=true adapters.lemmadigital.endpoint=http://localhost:8090/lemmadigital-exchange/{{PublisherID}}/{{AdUnit}} adapters.vungle.enabled=true @@ -580,8 +582,6 @@ adapters.zmaticoo.enabled=true adapters.zmaticoo.endpoint=http://localhost:8090/zmaticoo-exchange adapters.yearxero.enabled=true adapters.yearxero.endpoint=http://localhost:8090/yearxero-exchange -adapters.kueezrtb.enabled=true -adapters.kueezrtb.endpoint=http://localhost:8090/kueezrtb-exchange/ http-client.circuit-breaker.enabled=true http-client.circuit-breaker.idle-expire-hours=24 http-client.circuit-breaker.opening-threshold=1000 From 2db681d3036a300902087ef579cbc10d4991ec23 Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Tue, 13 May 2025 11:26:19 -0700 Subject: [PATCH 5/8] Update KueezRtbBidderTest.java --- .../bidder/kueezrtb/KueezRtbBidderTest.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java b/src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java index 4cc31c699a0..d98e0d65958 100644 --- a/src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidderTest.java @@ -134,20 +134,33 @@ public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws Jso } @Test - public void makeBidsShouldReturnBidsWithTypesSuccessfully() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBidWithTypeSuccessfully() throws JsonProcessingException { // given final Bid bannerBid = Bid.builder().impid("imp1").mtype(1).build(); + final BidderCall httpCall = givenHttpCall(givenBidResponse(bannerBid)); + + // when + final Result> result = target.makeBids(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1) + .containsOnly(BidderBid.of(bannerBid, BidType.banner, "USD")); + } + + @Test + public void makeBidsShouldReturnVideoBidWithTypeSuccessfully() throws JsonProcessingException { + // given final Bid videoBid = Bid.builder().impid("imp2").mtype(2).build(); - final BidderCall httpCall = givenHttpCall(givenBidResponse(bannerBid, videoBid)); + final BidderCall httpCall = givenHttpCall(givenBidResponse(videoBid)); // when final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(2) - .containsExactlyInAnyOrder(BidderBid.of(bannerBid, BidType.banner, "USD"), - BidderBid.of(videoBid, BidType.video, "USD")); + assertThat(result.getValue()).hasSize(1) + .containsOnly(BidderBid.of(videoBid, BidType.video, "USD")); } @Test From a5c2f4ca095259d9d28a87981625669efa1a14be Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Fri, 16 May 2025 10:56:14 -0700 Subject: [PATCH 6/8] requested changes --- .../java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java | 1 + .../server/spring/config/bidder/KueezRtbConfiguration.java | 1 + src/main/resources/bidder-config/kueezrtb.yaml | 1 - 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java index 647c9f57201..2cc1e3bfe5a 100644 --- a/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java +++ b/src/main/java/org/prebid/server/bidder/kueezrtb/KueezRtbBidder.java @@ -92,6 +92,7 @@ private static List extractBids(BidResponse bidResponse, List makeBid(bid, bidResponse.getCur(), errors)) .filter(Objects::nonNull) .toList(); diff --git a/src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java index b25cb042a6c..06e89467d0c 100644 --- a/src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/bidder/KueezRtbConfiguration.java @@ -31,6 +31,7 @@ BidderConfigurationProperties configurationProperties() { BidderDeps kueezrtbBidderDeps(BidderConfigurationProperties kueezrtbConfigurationProperties, @NotBlank @Value("${external-url}") String externalUrl, JacksonMapper mapper) { + return BidderDepsAssembler.forBidder(BIDDER_NAME) .withConfig(kueezrtbConfigurationProperties) .usersyncerCreator(UsersyncerCreator.create(externalUrl)) diff --git a/src/main/resources/bidder-config/kueezrtb.yaml b/src/main/resources/bidder-config/kueezrtb.yaml index bc9281f3d74..b26c7ad4ea8 100644 --- a/src/main/resources/bidder-config/kueezrtb.yaml +++ b/src/main/resources/bidder-config/kueezrtb.yaml @@ -2,7 +2,6 @@ adapters: kueezrtb: endpoint: https://prebidsrvr.kueezrtb.com/openrtb/ endpoint-compression: gzip - ortb-version: "2.6" meta-info: maintainer-email: rtb@kueez.com app-media-types: From 0725eda53976a678f35976252e038b8b03cd0870 Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Mon, 19 May 2025 11:47:29 -0700 Subject: [PATCH 7/8] Update test-kueezrtb-bid-request.json --- .../it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json index 32ccede64b8..67311c43097 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/kueezrtb/test-kueezrtb-bid-request.json @@ -39,7 +39,9 @@ "tid": "${json-unit.any-string}" }, "regs": { - "gdpr": 0 + "ext": { + "gdpr": 0 + } }, "ext": { "prebid": { From 6717122140f1954c6c1e52de281190b2edf868ee Mon Sep 17 00:00:00 2001 From: kim-ng93 <76963037+kim-ng93@users.noreply.github.com> Date: Tue, 27 May 2025 13:11:55 -0700 Subject: [PATCH 8/8] Update BidderParams.groovy --- .../functional/model/response/biddersparams/BidderParams.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/groovy/org/prebid/server/functional/model/response/biddersparams/BidderParams.groovy b/src/test/groovy/org/prebid/server/functional/model/response/biddersparams/BidderParams.groovy index 140f25c410f..3b6df42c7de 100644 --- a/src/test/groovy/org/prebid/server/functional/model/response/biddersparams/BidderParams.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/response/biddersparams/BidderParams.groovy @@ -17,4 +17,5 @@ class BidderParams { def appid def placementid def dependencies + def additionalProperties }