diff --git a/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java b/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java index c84a857533a..c8d4e1023a9 100644 --- a/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java +++ b/src/main/java/org/prebid/server/bidder/sspbc/SspbcBidder.java @@ -1,16 +1,8 @@ package org.prebid.server.bidder.sspbc; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; -import com.iab.openrtb.request.Format; -import com.iab.openrtb.request.Imp; -import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; -import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.client.utils.URIBuilder; @@ -20,191 +12,40 @@ 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.bidder.sspbc.request.SspbcRequestType; 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.sspbc.ExtImpSspbc; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; -import org.prebid.server.util.ObjectUtil; import java.net.URISyntaxException; -import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; -import java.util.Map; import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; import java.util.function.UnaryOperator; -import java.util.stream.Collectors; public class SspbcBidder implements Bidder { - private static final TypeReference> SSPBC_EXT_TYPE_REFERENCE = - new TypeReference<>() { - }; - private static final String ADAPTER_VERSION = "5.8"; - private static final String IMP_FALLBACK_SIZE = "1x1"; - private static final String PREBID_SERVER_INTEGRATION_TYPE = "4"; - private static final String BANNER_TEMPLATE = """ -
"""; + private static final String ADAPTER_VERSION = "6.0"; private final String endpointUrl; private final JacksonMapper mapper; public SspbcBidder(String endpointUrl, JacksonMapper mapper) { - this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl)); + this.endpointUrl = HttpUtil.validateUrlSyntax(Objects.requireNonNull(endpointUrl)); this.mapper = Objects.requireNonNull(mapper); } @Override public Result>> makeHttpRequests(BidRequest request) { - if (request.getSite() == null) { - return Result.withError(BidderError.badInput("BidRequest.site not provided")); - } - - final Map impToExt; - - try { - impToExt = createImpToExt(request); - } catch (PreBidException e) { - return Result.withError(BidderError.badInput(e.getMessage())); - } - - final SspbcRequestType requestType = getRequestType(impToExt); - final List imps = new ArrayList<>(); - String siteId = ""; - - for (Imp imp : request.getImp()) { - final ExtImpSspbc extImpSspbc = impToExt.get(imp); - final String extImpSspbcSiteId = extImpSspbc.getSiteId(); - if (StringUtils.isNotEmpty(extImpSspbcSiteId)) { - siteId = extImpSspbcSiteId; - } - - imps.add(updateImp(imp, requestType, extImpSspbc)); - } - try { - return Result.withValue(createRequest(updateBidRequest(request, imps, requestType, siteId))); + return Result.withValue(createRequest(request)); } catch (PreBidException e) { return Result.withError(BidderError.badInput(e.getMessage())); } } - private Map createImpToExt(BidRequest request) { - return request.getImp() - .stream() - .collect(Collectors.toMap(Function.identity(), this::parseImpExt)); - } - - private ExtImpSspbc parseImpExt(Imp imp) { - try { - return mapper.mapper().convertValue(imp.getExt(), SSPBC_EXT_TYPE_REFERENCE).getBidder(); - } catch (IllegalArgumentException e) { - throw new PreBidException(e.getMessage()); - } - } - - private Imp updateImp(Imp imp, SspbcRequestType requestType, ExtImpSspbc extImpSspbc) { - final String originalImpId = imp.getId(); - - return imp.toBuilder() - .id(resolveImpId(originalImpId, extImpSspbc.getId(), requestType)) - .tagid(originalImpId) - .ext(createImpExt(imp)) - .build(); - } - - private String resolveImpId(String originalImpId, String extImpId, SspbcRequestType requestType) { - return StringUtils.isNotEmpty(extImpId) && requestType != SspbcRequestType.REQUEST_TYPE_ONE_CODE - ? extImpId - : originalImpId; - } - - private ObjectNode createImpExt(Imp imp) { - return mapper.mapper().createObjectNode() - .set("data", mapper.mapper().createObjectNode() - .put("pbslot", imp.getTagid()) - .put("pbsize", getImpSize(imp))); - } - - private BidRequest updateBidRequest(BidRequest bidRequest, - List imps, - SspbcRequestType requestType, - String siteId) { - - return bidRequest.toBuilder() - .imp(imps) - .site(updateSite(bidRequest.getSite(), requestType, siteId)) - .test(updateTest(requestType, bidRequest.getTest())) - .build(); - } - - private Site updateSite(Site site, SspbcRequestType requestType, String siteId) { - return site.toBuilder() - .id(resolveSiteId(requestType, siteId)) - .domain(getUri(site.getPage()).getHost()) - .build(); - } - - private static String resolveSiteId(SspbcRequestType requestType, String siteId) { - return requestType == SspbcRequestType.REQUEST_TYPE_ONE_CODE || StringUtils.isBlank(siteId) - ? StringUtils.EMPTY - : siteId; - } - - private static Integer updateTest(SspbcRequestType requestType, Integer test) { - return requestType == SspbcRequestType.REQUEST_TYPE_TEST ? 1 : test; - } - - private String getImpSize(Imp imp) { - final List formats = ObjectUtil.getIfNotNull(imp.getBanner(), Banner::getFormat); - if (CollectionUtils.isEmpty(formats)) { - return IMP_FALLBACK_SIZE; - } - - return formats.stream() - .max(Comparator.comparing(SspbcBidder::formatToArea)) - .filter(format -> formatToArea(format) > 0) - .map(format -> String.format("%dx%d", format.getW(), format.getH())) - .orElse(IMP_FALLBACK_SIZE); - } - - private static int formatToArea(Format format) { - final Integer w = ObjectUtil.getIfNotNull(format, Format::getW); - final Integer h = ObjectUtil.getIfNotNull(format, Format::getH); - - return w != null && h != null ? w * h : 0; - } - - private SspbcRequestType getRequestType(Map impToExt) { - for (ExtImpSspbc extImpSspbc : impToExt.values()) { - if (extImpSspbc.getTest() != 0) { - return SspbcRequestType.REQUEST_TYPE_TEST; - } - - if (StringUtils.isAnyEmpty(extImpSspbc.getSiteId(), extImpSspbc.getId())) { - return SspbcRequestType.REQUEST_TYPE_ONE_CODE; - } - } - - return SspbcRequestType.REQUEST_TYPE_STANDARD; - } - private HttpRequest createRequest(BidRequest request) { return BidderUtil.defaultRequest(request, updateUrl(getUri(endpointUrl)), mapper); } @@ -222,7 +63,6 @@ private static URIBuilder getUri(String endpointUrl) { private String updateUrl(URIBuilder uriBuilder) { return uriBuilder .addParameter("bdver", ADAPTER_VERSION) - .addParameter("inver", PREBID_SERVER_INTEGRATION_TYPE) .toString(); } @@ -246,72 +86,33 @@ private List extractBids(BidResponse bidResponse, BidRequest bidReque .map(seatBid -> CollectionUtils.emptyIfNull(seatBid.getBid()) .stream() .filter(Objects::nonNull) - .map(bid -> toBidderBid(bid, seatBid.getSeat(), bidResponse.getCur(), bidRequest))) + .map(bid -> toBidderBid(bid, seatBid.getSeat(), bidResponse.getCur()) + )) .flatMap(UnaryOperator.identity()) .toList(); } - private BidderBid toBidderBid(Bid bid, String seat, String currency, BidRequest bidRequest) { + private BidderBid toBidderBid(Bid bid, String seat, String currency) { if (StringUtils.isEmpty(bid.getAdm())) { throw new PreBidException("Bid format is not supported"); } - final ObjectNode bidExt = bid.getExt(); - final Bid updatedBid = bid.toBuilder() - .impid(getImpTagId(bidRequest.getImp(), bid)) - .adm(createBannerAd( - bid, - stringOrNull(bidExt, "adlabel"), - stringOrNull(bidExt, "pubid"), - stringOrNull(bidExt, "siteid"), - stringOrNull(bidExt, "slotid"), - seat, - bidRequest)) - .build(); - - return BidderBid.of(updatedBid, BidType.banner, currency); - } - - private static String stringOrNull(ObjectNode bidExt, String property) { - return Optional.ofNullable(bidExt) - .map(ext -> ext.get(property)) - .map(JsonNode::asText) - .orElse(StringUtils.EMPTY); - } - - private static String getImpTagId(List imps, Bid bid) { - return imps.stream() - .filter(imp -> Objects.equals(imp.getId(), bid.getImpid())) - .map(Imp::getTagid) - .findAny() - .orElseThrow(() -> new PreBidException("imp not found")); - } - - private String createBannerAd(Bid bid, - String adlabel, - String pubid, - String siteid, - String slotid, - String seat, - BidRequest bidRequest) { - if (bid.getAdm().contains("")) { - return bid.getAdm(); + return BidderBid.of(bid, getBidType(bid), currency); + } + + private BidType getBidType(Bid bid) { + switch (bid.getMtype()) { + case 1: + return BidType.banner; + case 2: + return BidType.video; + case 3: + return BidType.audio; + case 4: + return BidType.xNative; + default: + throw new PreBidException("Bid type not supported: %s.".formatted(bid.getMtype())); } - - final ObjectNode mcad = mapper.mapper().createObjectNode() - .put("id", bidRequest.getId()) - .put("seat", seat) - .set("seatbid", mapper.mapper() - .convertValue(SeatBid.builder().bid(Collections.singletonList(bid)).build(), JsonNode.class)); - - return BANNER_TEMPLATE - .replace("{{.SiteId}}", siteid) - .replace("{{.SlotId}}", slotid) - .replace("{{.AdLabel}}", adlabel) - .replace("{{.PubId}}", pubid) - .replace("{{.Page}}", bidRequest.getSite().getPage()) - .replace("{{.Referer}}", bidRequest.getSite().getRef()) - .replace("{{.McAd}}", mcad.toString()) - .replace("{{.Inver}}", PREBID_SERVER_INTEGRATION_TYPE); } + } diff --git a/src/main/java/org/prebid/server/bidder/sspbc/request/SspbcRequestType.java b/src/main/java/org/prebid/server/bidder/sspbc/request/SspbcRequestType.java deleted file mode 100644 index b78b4abbdb3..00000000000 --- a/src/main/java/org/prebid/server/bidder/sspbc/request/SspbcRequestType.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.prebid.server.bidder.sspbc.request; - -public enum SspbcRequestType { - - REQUEST_TYPE_STANDARD(1), - REQUEST_TYPE_ONE_CODE(2), - REQUEST_TYPE_TEST(3); - - private final Integer value; - - SspbcRequestType(Integer value) { - this.value = value; - } - - public Integer getValue() { - return value; - } -} diff --git a/src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java b/src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java index e3224b99811..0996f64472a 100644 --- a/src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/sspbc/SspbcBidderTest.java @@ -20,6 +20,7 @@ import org.prebid.server.bidder.model.Result; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.sspbc.ExtImpSspbc; +import org.prebid.server.proto.openrtb.ext.response.BidType; import java.util.List; import java.util.function.UnaryOperator; @@ -52,233 +53,7 @@ public void makeHttpRequestsShouldCreateExpectedUrl() { assertThat(result.getErrors()).isEmpty(); assertThat(result.getValue()).hasSize(1) .extracting(HttpRequest::getUri) - .containsExactly("https://randomurl.com?bdver=5.8&inver=4"); - } - - @Test - public void makeHttpRequestsShouldThrowErrorWhenSiteNull() { - // given - final BidRequest bidRequest = givenBidRequest(bidRequestBuilder -> bidRequestBuilder.site(null), identity()); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getValue()).isEmpty(); - assertThat(result.getErrors()).hasSize(1) - .allSatisfy(error -> { - assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); - assertThat(error.getMessage()).startsWith("BidRequest.site not provided"); - }); - } - - @Test - public void makeHttpRequestsShouldReturnErrorsOfNotValidExtImps() { - // given - final BidRequest bidRequest = givenBidRequest( - impBuilder -> impBuilder - .ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).hasSize(1) - .allSatisfy(error -> { - assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); - assertThat(error.getMessage()).startsWith("Cannot deserialize value of type"); - }); - } - - @Test - public void makeHttpRequestsShouldUpdateBidRequestTestTo1WhenBidRequestTest3AndImpExtTestIsNotEmpty() { - // given - final BidRequest bidRequest = givenBidRequest(bidRequestBuilder -> bidRequestBuilder.test(3), - identity()); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .extracting(BidRequest::getTest) - .containsExactly(1); - } - - @Test - public void makeHttpRequestsShouldUpdateSiteIdToEmptyStringWhenImpExtTestZeroAndImpExtSiteIdNotEmpty() { - // given - final BidRequest bidRequest = givenBidRequest( - bidRequestBuilder -> bidRequestBuilder - .site(Site.builder() - .id("AnySiteId") - .page("https://test.page/") - .build()), - impBuilder -> impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpSspbc - .of("extSiteId", null, 0))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .extracting(BidRequest::getSite) - .extracting(Site::getId) - .containsExactly(StringUtils.EMPTY); - } - - @Test - public void makeHttpRequestsShouldUpdateSiteIdToEmptyStringWhenImpExtTestZeroAndImpExtIdNotEmpty() { - // given - final BidRequest bidRequest = givenBidRequest( - bidRequestBuilder -> bidRequestBuilder - .site(Site.builder() - .id("AnySiteId") - .page("https://test.page/") - .build()), - impBuilder -> impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpSspbc - .of(null, "ExtImpId", 0))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .extracting(BidRequest::getSite) - .extracting(Site::getId) - .containsExactly(StringUtils.EMPTY); - } - - @Test - public void makeHttpRequestsShouldReplaceSiteIdFromImpExtSiteIdWhenImpExtTestZeroAndImpExtIdAndSiteIdNotEmpty() { - // given - final String expectedSiteId = "siteId"; - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder - .ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpSspbc - .of(expectedSiteId, "ExtImpId", 0))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .extracting(BidRequest::getSite) - .extracting(Site::getId) - .containsExactly(expectedSiteId); - } - - @Test - public void makeHttpRequestsShouldReplaceImpIdOnImpExtIdWhenImpExtSiteAndIdIsNotEmpty() { - // given - final String expectedId = "AnyId"; - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.id("randomImpId") - .ext(mapper.valueToTree( - ExtPrebid.of(null, ExtImpSspbc.of("SiteId", expectedId, 1))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getId) - .containsExactly(expectedId); - } - - @Test - public void makeHttpRequestsShouldReplaceImpTagIdOnImpIdWhenImpExtIdNull() { - // given - final String expectedId = "impId"; - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder - .id(expectedId) - .tagid("randomTagId") - .ext(mapper.valueToTree(ExtPrebid - .of(null, ExtImpSspbc.of("siteId", null, 123))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getTagid) - .containsExactly(expectedId); - } - - @Test - public void makeHttpRequestsShouldUpdateImpExtWithData() { - // given - final String expectedPbSlot = "randomTagId"; - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder - .tagid(expectedPbSlot)); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getExt) - .containsExactly(mapper.createObjectNode() - .set("data", mapper.createObjectNode() - .put("pbslot", expectedPbSlot) - .put("pbsize", "1x1"))); - } - - @Test - public void makeHttpRequestsShouldUpdateImpExtDataPbSizeWithBannerFormatWandH() { - // given - final String expectedPbSlot = "randomTagId"; - final Integer bannerFormatW = 25; - final Integer bannerFormatH = 45; - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder - .banner(Banner.builder() - .format(singletonList(Format.builder() - .w(bannerFormatW) - .h(bannerFormatH).build())).build()) - .tagid(expectedPbSlot)); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getExt) - .containsExactly(mapper.createObjectNode() - .set("data", mapper.createObjectNode() - .put("pbslot", expectedPbSlot) - .put("pbsize", String.format("%dx%d", bannerFormatW, bannerFormatH)))); - } - - @Test - public void makeHttpRequestsShouldReturnErrorWhenSitePageIsInvalid() { - // given - final BidRequest bidRequest = givenBidRequest(bidRequestBuilder -> bidRequestBuilder - .site(Site.builder().page("invalid_url////[' and ']").build()), identity()); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getValue()).isEmpty(); - assertThat(result.getErrors()).hasSize(1) - .containsExactly(BidderError.badInput("Malformed URL: invalid_url////[' and '].")); + .containsExactly("https://randomurl.com?bdver=6.0"); } @Test @@ -327,19 +102,14 @@ public void makeBidsShouldReturnErrorWhenImpIdNotEqualsBidImpId() throws JsonPro } @Test - public void makeBidsShouldReturnErrorWhenBidAmdIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnErrorWhenAdmIsEmpty() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), impBuilder -> impBuilder.id("id").tagid("tagId")), mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder .impid("id") - .adm(null) - .ext(mapper.createObjectNode() - .put("adlabel", "anyAdLabel") - .put("pubid", "anyPubId") - .put("siteid", "anySiteId") - .put("slotid", "anySlotId"))))); + .adm(null)))); // when final Result> result = target.makeBids(httpCall, null); @@ -351,38 +121,27 @@ public void makeBidsShouldReturnErrorWhenBidAmdIsNull() throws JsonProcessingExc } @Test - public void makeBidsShouldNotUpdateBidAdmWhenBidAdmContainPreformattedValue() throws JsonProcessingException { + public void makeBidsShouldReturnErrorWhenMTypeIsIncorrect() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(givenBidRequest( - bidRequestBuilder -> bidRequestBuilder.site( - Site.builder() - .page("AnyPage") - .ref("anyRef") - .build()), + final BidderCall httpCall = givenHttpCall(givenBidRequest(identity(), impBuilder -> impBuilder.id("id").tagid("tagId")), mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder .impid("id") - .adm("any") - .ext(mapper.createObjectNode() - .put("adlabel", "anyAdLabel") - .put("pubid", "anyPubId") - .put("siteid", "anySiteId") - .put("slotid", "anySlotId"))))); + .adm("anyAdm") + .mtype(100)))); // when final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()) - .extracting(BidderBid::getBid) - .extracting(Bid::getAdm) - .containsExactly("any"); + assertThat(result.getValue()).isEmpty(); + assertThat(result.getErrors()) + .containsExactly(BidderError.badServerResponse("Bid type not supported: 100.")); } @Test - public void makeBidsShouldNotUpdateBidAdmWhenBidAdmNotContainPreformattedValue() throws JsonProcessingException { + public void makeBidsShouldParseBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(givenBidRequest( bidRequestBuilder -> bidRequestBuilder @@ -396,11 +155,7 @@ public void makeBidsShouldNotUpdateBidAdmWhenBidAdmNotContainPreformattedValue() bidBuilder .impid("id") .adm("anyAdm") - .ext(mapper.createObjectNode() - .put("adlabel", "anyAdLabel") - .put("pubid", "anyPubId") - .put("siteid", "anySiteId") - .put("slotid", "anySlotId"))))); + .mtype(BidType.banner.ordinal())))); // when final Result> result = target.makeBids(httpCall, null); @@ -410,18 +165,14 @@ public void makeBidsShouldNotUpdateBidAdmWhenBidAdmNotContainPreformattedValue() assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) - .containsExactly("" - + "
"); + .containsExactly("anyAdm"); + assertThat(result.getValue()) + .extracting(BidderBid::getBid) + .extracting(Bid::getMtype) + .containsExactly(1); + assertThat(result.getValue()) + .extracting(BidderBid::getType) + .containsExactly(BidType.banner); } private static BidRequest givenBidRequest(UnaryOperator impCustomizer) { @@ -434,10 +185,7 @@ private static BidRequest givenBidRequest( return bidRequestCustomizer.apply(BidRequest.builder() .site(Site.builder().page("https://test.page/").build()) .test(0) - .imp(singletonList(impCustomizer.apply(Imp.builder().id("123") - .ext(mapper.valueToTree(ExtPrebid - .of(null, ExtImpSspbc - .of("siteId", "AnyId", 123))))).build()))) + .imp(singletonList(impCustomizer.apply(Imp.builder().id("123")).build()))) .build(); }