From ec3bcbf2203d4e5371a2d83c2e41c5e2c273c6c4 Mon Sep 17 00:00:00 2001 From: Anton Babak <76536883+AntoxaAntoxic@users.noreply.github.com> Date: Mon, 17 Nov 2025 20:54:19 +0100 Subject: [PATCH 1/4] BidTheatre: Update endpoint and add redirect user sync (#4283) --- src/main/resources/bidder-config/bidtheatre.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/bidder-config/bidtheatre.yaml b/src/main/resources/bidder-config/bidtheatre.yaml index 903778e884a..fd3f7d24d87 100644 --- a/src/main/resources/bidder-config/bidtheatre.yaml +++ b/src/main/resources/bidder-config/bidtheatre.yaml @@ -1,6 +1,6 @@ adapters: bidtheatre: - endpoint: https://prebidjs-bids.bidtheatre.net/prebidjsbid + endpoint: https://client-bids.adsby.bidtheatre.com/prebidjsbid modifying-vast-xml-allowed: true meta-info: maintainer-email: operations@bidtheatre.com @@ -12,3 +12,9 @@ adapters: - video supported-vendors: vendor-id: 30 + usersync: + cookie-family-name: bidtheatre + redirect: + url: https://match.adsby.bidtheatre.com/prebidmatch?gdpr={{gdpr}}&gdpr_consent={{gdpr_consent}}&redir={{redirect_url}} + support-cors: false + uid-macro: '$UID' From bc27e37c49ae439b98ed782b7ed2f7656fcc3b3f Mon Sep 17 00:00:00 2001 From: Anton Babak <76536883+AntoxaAntoxic@users.noreply.github.com> Date: Mon, 17 Nov 2025 20:54:29 +0100 Subject: [PATCH 2/4] Adnuntius: Pass targeting to ad server (#4282) --- .../bidder/adnuntius/AdnuntiusBidder.java | 35 ++++++++++----- .../model/request/AdnuntiusRequestAdUnit.java | 14 ++++++ .../request/adnuntius/ExtImpAdnuntius.java | 2 + .../adnuntius/ExtImpAdnuntiusTargeting.java | 28 ++++++++++++ .../bidder/adnuntius/AdnuntiusBidderTest.java | 44 +++++++++++++++++++ 5 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java diff --git a/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java b/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java index 1603cdc855b..127d02ae000 100644 --- a/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java +++ b/src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java @@ -52,6 +52,7 @@ import org.prebid.server.proto.openrtb.ext.request.ExtSite; import org.prebid.server.proto.openrtb.ext.request.ExtUser; import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntius; +import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntiusTargeting; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidDsa; import org.prebid.server.util.BidderUtil; @@ -158,12 +159,8 @@ private static String resolveNetwork(ExtImpAdnuntius extImpAdnuntius) { } private static AdnuntiusRequestAdUnit makeBannerAdUnit(Imp imp, ExtImpAdnuntius extImpAdnuntius) { - final String auId = extImpAdnuntius.getAuId(); - return AdnuntiusRequestAdUnit.builder() - .auId(auId) - .targetId(targetId(auId, imp.getId(), "banner")) + return makeAdUnitBuilder(imp, extImpAdnuntius, "banner") .dimensions(createDimensions(imp.getBanner())) - .maxDeals(resolveMaxDeals(extImpAdnuntius)) .build(); } @@ -197,13 +194,9 @@ private static List> createDimensions(Banner banner) { } private AdnuntiusRequestAdUnit makeNativeAdUnit(Imp imp, ExtImpAdnuntius extImpAdnuntius) { - final String auId = extImpAdnuntius.getAuId(); - return AdnuntiusRequestAdUnit.builder() - .auId(auId) - .adType("NATIVE") - .targetId(targetId(auId, imp.getId(), "native")) - .maxDeals(resolveMaxDeals(extImpAdnuntius)) + return makeAdUnitBuilder(imp, extImpAdnuntius, "native") .nativeRequest(AdnuntiusNativeRequest.of(parseNativeRequest(imp))) + .adType("NATIVE") .build(); } @@ -215,6 +208,26 @@ private ObjectNode parseNativeRequest(Imp imp) { } } + private static AdnuntiusRequestAdUnit.AdnuntiusRequestAdUnitBuilder makeAdUnitBuilder( + Imp imp, + ExtImpAdnuntius extImpAdnuntius, + String bidType) { + + final String auId = extImpAdnuntius.getAuId(); + final ExtImpAdnuntiusTargeting targeting = ObjectUtils.defaultIfNull( + extImpAdnuntius.getTargeting(), + ExtImpAdnuntiusTargeting.builder().build()); + return AdnuntiusRequestAdUnit.builder() + .auId(auId) + .targetId(targetId(auId, imp.getId(), bidType)) + .maxDeals(resolveMaxDeals(extImpAdnuntius)) + .category(targeting.getCategory()) + .segments(targeting.getSegments()) + .keywords(targeting.getKeywords()) + .keyValues(targeting.getKeyValues()) + .adUnitMatchingLabel(targeting.getAdUnitMatchingLabel()); + } + private static Integer resolveMaxDeals(ExtImpAdnuntius extImpAdnuntius) { final Integer maxDeals = extImpAdnuntius.getMaxDeals(); return maxDeals != null && maxDeals > 0 ? maxDeals : null; diff --git a/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java b/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java index 03e9b586c72..88a37a2dc3b 100644 --- a/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java +++ b/src/main/java/org/prebid/server/bidder/adnuntius/model/request/AdnuntiusRequestAdUnit.java @@ -5,6 +5,7 @@ import lombok.Value; import java.util.List; +import java.util.Map; @Builder(toBuilder = true) @Value @@ -26,4 +27,17 @@ public class AdnuntiusRequestAdUnit { @JsonProperty("adType") String adType; + + @JsonProperty("c") + List category; + + List segments; + + List keywords; + + @JsonProperty("kv") + Map> keyValues; + + @JsonProperty("auml") + List adUnitMatchingLabel; } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java index c54dab4b520..e110b122bb0 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntius.java @@ -21,4 +21,6 @@ public class ExtImpAdnuntius { @JsonProperty("bidType") String bidType; + + ExtImpAdnuntiusTargeting targeting; } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java new file mode 100644 index 00000000000..508fcb0dfba --- /dev/null +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/adnuntius/ExtImpAdnuntiusTargeting.java @@ -0,0 +1,28 @@ +package org.prebid.server.proto.openrtb.ext.request.adnuntius; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Value; + +import java.util.List; +import java.util.Map; + +@Value +@Builder +public class ExtImpAdnuntiusTargeting { + + @JsonProperty("c") + List category; + + List segments; + + List keywords; + + @JsonProperty("kv") + Map> keyValues; + + @JsonProperty("auml") + List adUnitMatchingLabel; + + +} diff --git a/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java b/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java index 910a2b6514c..b2f1f9e4342 100644 --- a/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java @@ -45,6 +45,7 @@ import org.prebid.server.proto.openrtb.ext.request.ExtSite; import org.prebid.server.proto.openrtb.ext.request.ExtUser; import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntius; +import org.prebid.server.proto.openrtb.ext.request.adnuntius.ExtImpAdnuntiusTargeting; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.HttpUtil; @@ -201,6 +202,49 @@ public void makeHttpRequestsShouldNotReturnAdTypeForBannerImp() { .containsNull(); } + @Test + public void makeHttpRequestsShouldReturnTargetingFieldsWhenTargetingIsPresent() { + // given + final ExtImpAdnuntiusTargeting targeting = ExtImpAdnuntiusTargeting.builder() + .category(List.of("1", "2")) + .keywords(List.of("3", "4")) + .segments(List.of("5", "6")) + .adUnitMatchingLabel(List.of("7", "8")) + .keyValues(Map.of("9", List.of("10", "11"))) + .build(); + final BidRequest bidRequest = givenBidRequest(givenBannerAndNativeImp( + ExtImpAdnuntius.builder().targeting(targeting).build(), + identity())); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(AdnuntiusRequest::getAdUnits) + .extracting( + AdnuntiusRequestAdUnit::getCategory, + AdnuntiusRequestAdUnit::getKeywords, + AdnuntiusRequestAdUnit::getSegments, + AdnuntiusRequestAdUnit::getKeyValues, + AdnuntiusRequestAdUnit::getAdUnitMatchingLabel) + .containsExactly( + tuple( + List.of("1", "2"), + List.of("3", "4"), + List.of("5", "6"), + Map.of("9", List.of("10", "11")), + List.of("7", "8")), + tuple( + List.of("1", "2"), + List.of("3", "4"), + List.of("5", "6"), + Map.of("9", List.of("10", "11")), + List.of("7", "8"))); + } + @Test public void makeHttpRequestsShouldReturnRequestsWithDimensionsIfBannerHighAndWidthArePresent() { // given From 3a5c0c37a2ec4402457ddab3b27bdc138e6a97f3 Mon Sep 17 00:00:00 2001 From: Oleksandr Zhevedenko <720803+Net-burst@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:54:38 -0500 Subject: [PATCH 3/4] Housekeeping: Bump Groovy-related dependencies (#4276) --- extra/pom.xml | 4 ++-- pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/pom.xml b/extra/pom.xml index 9ba138fb1a7..87a9ef24d4b 100644 --- a/extra/pom.xml +++ b/extra/pom.xml @@ -24,7 +24,7 @@ 3.1.1 - 3.14.0 + 3.14.1 3.5.3 ${maven-surefire-plugin.version} 0.8.13 @@ -60,7 +60,7 @@ 3.12.1 - 2.4-M5-groovy-4.0 + 2.4-M6-groovy-4.0 5.15.0 diff --git a/pom.xml b/pom.xml index d2851e0de74..325051ea9e9 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 2.0.0 9.0.1 - 4.1.1 + 4.2.1 1.7.1 3.6.0 0.6.1 From 4f64c15278ebbd57fa6576c07e69b1f759406a5a Mon Sep 17 00:00:00 2001 From: przemkaczmarek <167743744+przemkaczmarek@users.noreply.github.com> Date: Mon, 17 Nov 2025 20:54:48 +0100 Subject: [PATCH 4/4] Nextmillennium: New fields and adapter version update (#4246) --- .../nextmillennium/NextMillenniumBidder.java | 21 ++-- .../proto/NextMillenniumExtBidder.java | 10 ++ .../nextmillennium/ExtImpNextMillennium.java | 9 ++ .../static/bidder-params/nextmillennium.json | 15 +++ .../NextMillenniumBidderTest.java | 96 +++++++++++++++---- .../test-auction-nextmillennium-request.json | 4 +- .../test-nextmillennium-bid-request.json | 4 +- 7 files changed, 130 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java b/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java index c026a6c271b..57f5200f786 100644 --- a/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java +++ b/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java @@ -50,7 +50,7 @@ public class NextMillenniumBidder implements Bidder { new TypeReference<>() { }; - private static final String NM_ADAPTER_VERSION = "v1.0.0"; + private static final String NM_ADAPTER_VERSION = "v1.0.1"; private final String endpointUrl; private final JacksonMapper mapper; @@ -101,15 +101,15 @@ private ExtImpNextMillennium convertExt(ObjectNode impExt) { } private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium extImp) { - final String soredRequestId = resolveStoredRequestId(bidRequest, extImp); + final String storedRequestId = resolveStoredRequestId(bidRequest, extImp); final ExtRequestPrebidServer extRequestPrebidServer = Optional.ofNullable(bidRequest.getExt()) .map(ExtRequest::getPrebid) .map(ExtRequestPrebid::getServer) .orElse(null); return bidRequest.toBuilder() - .imp(modifyFirstImp(bidRequest.getImp(), soredRequestId)) - .ext(createExtRequest(soredRequestId, extRequestPrebidServer)) + .imp(modifyFirstImp(bidRequest.getImp(), storedRequestId)) + .ext(createExtRequest(storedRequestId, extRequestPrebidServer, extImp)) .build(); } @@ -156,7 +156,7 @@ private List modifyFirstImp(List imps, String storedRequestId) { .build(); final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of( - NextMillenniumExtBidder.of(nmmFlags, null, null)); + NextMillenniumExtBidder.of(nmmFlags)); final ExtRequest extRequest = ExtRequest.of(extRequestPrebid); mapper.fillExtension(extRequest, nextMillenniumExt); @@ -169,14 +169,21 @@ private List modifyFirstImp(List imps, String storedRequestId) { return modifiedImps; } - private ExtRequest createExtRequest(String storedRequestId, ExtRequestPrebidServer extRequestPrebidServer) { + private ExtRequest createExtRequest(String storedRequestId, + ExtRequestPrebidServer extRequestPrebidServer, + ExtImpNextMillennium extImp) { final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder() .storedrequest(ExtStoredRequest.of(storedRequestId)) .server(extRequestPrebidServer) .build(); final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of( - NextMillenniumExtBidder.of(nmmFlags, NM_ADAPTER_VERSION, versionProvider.getNameVersionRecord())); + NextMillenniumExtBidder.of( + nmmFlags, + extImp.getAdSlots(), + extImp.getAllowedAds(), + NM_ADAPTER_VERSION, + versionProvider.getNameVersionRecord())); final ExtRequest extRequest = ExtRequest.of(extRequestPrebid); mapper.fillExtension(extRequest, nextMillenniumExt); diff --git a/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExtBidder.java b/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExtBidder.java index 1673fc5114d..910896950ca 100644 --- a/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExtBidder.java +++ b/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExtBidder.java @@ -11,7 +11,17 @@ public class NextMillenniumExtBidder { @JsonProperty("nmmFlags") List nmmFlags; + @JsonProperty("adSlots") + List adSlots; + + @JsonProperty("allowedAds") + List allowedAds; + String nmVersion; String serverVersion; + + public static NextMillenniumExtBidder of(List nmmFlags) { + return of(nmmFlags, null, null, null, null); + } } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/nextmillennium/ExtImpNextMillennium.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/nextmillennium/ExtImpNextMillennium.java index ed67279ea9a..d262fe0bfbe 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/nextmillennium/ExtImpNextMillennium.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/nextmillennium/ExtImpNextMillennium.java @@ -1,11 +1,20 @@ package org.prebid.server.proto.openrtb.ext.request.nextmillennium; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Value; +import java.util.List; + @Value(staticConstructor = "of") public class ExtImpNextMillennium { String placementId; String groupId; + + @JsonProperty("adSlots") + List adSlots; + + @JsonProperty("allowedAds") + List allowedAds; } diff --git a/src/main/resources/static/bidder-params/nextmillennium.json b/src/main/resources/static/bidder-params/nextmillennium.json index 743d72f89ef..7b03c5087d2 100644 --- a/src/main/resources/static/bidder-params/nextmillennium.json +++ b/src/main/resources/static/bidder-params/nextmillennium.json @@ -13,6 +13,21 @@ "type": "string", "minLength": 1, "description": "An id used to identify NextMillennium placement group" + }, + "adSlots": { + "type": "array", + "minItems": 1, + "description": "IDs which identifies the ad slots", + "items": { + "type": "string" + } + }, + "allowedAds": { + "type": "array", + "description": "List of allowed ads", + "items": { + "type": "string" + } } }, "anyOf": [ diff --git a/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java b/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java index 71dfe2a8552..84a31090509 100644 --- a/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java @@ -23,6 +23,8 @@ 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.bidder.nextmillennium.proto.NextMillenniumExt; +import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExtBidder; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.ExtRequest; import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid; @@ -78,8 +80,8 @@ public void makeHttpRequestsShouldUseBidRequestIdForAllRequests() { // given final BidRequest bidRequest = givenBidRequest( request -> request.id("id"), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null))); + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null)), + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -97,8 +99,8 @@ public void makeHttpRequestsShouldUseBidRequestTestForAllRequests() { // given final BidRequest bidRequest = givenBidRequest( request -> request.test(1), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null))); + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null)), + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -116,8 +118,8 @@ public void makeHttpRequestsShouldUseImpExtBidderPlacementIdForStoredRequestId() // given final BidRequest bidRequest = givenBidRequest( identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", null))); + givenImpWithExt(identity(), givenExtImpWithPlacementId("placement1")), + givenImpWithExt(identity(), givenExtImpWithPlacementId("placement2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -138,8 +140,8 @@ public void makeHttpRequestsShouldUseImpExtBidderGroupIdForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1")), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2"))); + givenImpWithExt(identity(), givenExtImpWithGroupId("group1")), + givenImpWithExt(identity(), givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -168,10 +170,10 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId .w(5) .h(6) .build()), - ExtImpNextMillennium.of(null, "group1")), + givenExtImpWithGroupId("group1")), givenImpWithExt( imp -> imp.banner(Banner.builder().w(7).h(8).build()), - ExtImpNextMillennium.of(null, "group2"))); + givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -187,6 +189,48 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId .containsExactly("ggroup1;1x2;", "ggroup2;1x2;"); } + @Test + public void makeHttpRequestsShouldIncludeAdSlotsAndAllowedAdsOnlyInRequestExt() { + // given + final List adSlots = List.of("slot1", "slot2"); + final List allowedAds = List.of("ad1", "ad2"); + + final ExtImpNextMillennium extImp = ExtImpNextMillennium.of("placement123", null, adSlots, allowedAds); + + final BidRequest bidRequest = givenBidRequest( + identity(), + givenImpWithExt(identity(), extImp)); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1); + + final BidRequest actualRequest = result.getValue().getFirst().getPayload(); + + final NextMillenniumExtBidder requestExt = jacksonMapper.mapper() + .convertValue( + jacksonMapper.mapper().convertValue(actualRequest + .getExt(), NextMillenniumExt.class).getNextMillennium(), + NextMillenniumExtBidder.class); + + final NextMillenniumExtBidder impExt = jacksonMapper.mapper() + .convertValue( + jacksonMapper.mapper().convertValue(actualRequest + .getImp().getFirst().getExt(), NextMillenniumExt.class).getNextMillennium(), + NextMillenniumExtBidder.class); + + assertThat(requestExt) + .extracting(NextMillenniumExtBidder::getAdSlots, NextMillenniumExtBidder::getAllowedAds) + .containsExactly(adSlots, allowedAds); + + assertThat(impExt.getAdSlots()).isNull(); + assertThat(impExt.getAllowedAds()).isNull(); + assertThat(impExt.getNmmFlags()).containsExactly("valueOne", "valueTwo"); + } + @Test public void makeHttpRequestsShouldUseFirstImpBannerSizeForStoredRequestIds() { // given @@ -194,12 +238,12 @@ public void makeHttpRequestsShouldUseFirstImpBannerSizeForStoredRequestIds() { identity(), givenImpWithExt( imp -> imp.banner(Banner.builder().w(7).h(8).build()), - ExtImpNextMillennium.of(null, "group1")), + givenExtImpWithGroupId("group1")), givenImpWithExt( imp -> imp.banner(Banner.builder() .format(singletonList(Format.builder().w(1).h(2).build())) .build()), - ExtImpNextMillennium.of(null, "group2"))); + givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -220,8 +264,8 @@ public void makeHttpRequestsShouldUseAppDomainForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( request -> request.app(App.builder().domain("appDomain").build()), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1")), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2"))); + givenImpWithExt(identity(), givenExtImpWithGroupId("group1")), + givenImpWithExt(identity(), givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -242,8 +286,8 @@ public void makeHttpRequestsShouldUseSiteDomainForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( request -> request.site(Site.builder().domain("siteDomain").build()), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", "group1")), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", "group2"))); + givenImpWithExt(identity(), givenExtImpWithPlacementIdAndGroupId("placement1", "group1")), + givenImpWithExt(identity(), givenExtImpWithPlacementIdAndGroupId("placement2", "group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -294,7 +338,7 @@ public void makeHttpRequestsImpExtComparison() { .h(90) .build())) .build()), - ExtImpNextMillennium.of(placementId, null)); + ExtImpNextMillennium.of(placementId, null, null, null)); final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() .schains(emptyList()) @@ -346,7 +390,7 @@ public void makeHttpRequestsImpShouldBeIdenticalExceptExt() { .tagid("custom_imp_tagid") .secure(1) .banner(banner), - ExtImpNextMillennium.of(placementId, null)); + ExtImpNextMillennium.of(placementId, null, null, null)); final BidRequest bidRequest = givenBidRequest(b -> b .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") @@ -386,7 +430,7 @@ public void makeHttpRequestsBidRequestShouldBeIdenticalExceptImpExt() { .tagid("custom_imp_tagid") .secure(1) .banner(banner), - ExtImpNextMillennium.of(placementId, null)); + ExtImpNextMillennium.of(placementId, null, null, null)); final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() .schains(emptyList()) @@ -432,7 +476,7 @@ public void makeHttpRequestsShouldPreserveExtPrebidServer() { .id("test-request") .imp(singletonList(givenImpWithExt( imp -> imp.banner(Banner.builder().w(300).h(250).build()), - ExtImpNextMillennium.of("placement_id", null)))) + ExtImpNextMillennium.of("placement_id", null, null, null)))) .ext(extRequest) .build(); @@ -603,4 +647,16 @@ private static Imp givenImpWithExt(UnaryOperator impCustomizer, return givenImp(impCustomizer.andThen(imp -> imp.ext(mapper.valueToTree( ExtPrebid.of(null, extImpNextMillennium))))::apply); } + + private static ExtImpNextMillennium givenExtImpWithGroupId(String groupId) { + return ExtImpNextMillennium.of(null, groupId, null, null); + } + + private static ExtImpNextMillennium givenExtImpWithPlacementId(String placementId) { + return ExtImpNextMillennium.of(placementId, null, null, null); + } + + private static ExtImpNextMillennium givenExtImpWithPlacementIdAndGroupId(String placementId, String groupId) { + return ExtImpNextMillennium.of(placementId, groupId, null, null); + } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-auction-nextmillennium-request.json b/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-auction-nextmillennium-request.json index 8309481141e..989d0611c29 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-auction-nextmillennium-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-auction-nextmillennium-request.json @@ -9,7 +9,9 @@ }, "ext": { "nextmillennium" : { - "placement_id": "placement_id" + "placement_id": "placement_id", + "adSlots": ["slot-1", "slot-2"], + "allowedAds": ["banner", "native"] } } } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-nextmillennium-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-nextmillennium-bid-request.json index 6802911a251..31715c6975d 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-nextmillennium-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-nextmillennium-bid-request.json @@ -61,7 +61,9 @@ }, "nextMillennium": { "nmmFlags": [ "1" ], - "nm_version": "v1.0.0", + "adSlots": ["slot-1", "slot-2"], + "allowedAds": ["banner", "native"], + "nm_version": "v1.0.1", "server_version": "${json-unit.any-string}" } }