From 29a1efa11981ce80a16d3182c46595ae4ce7efd3 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Sat, 18 Oct 2025 19:20:53 +0200 Subject: [PATCH 1/3] Nextmillennium: New fields and adapter version update --- .../nextmillennium/NextMillenniumBidder.java | 19 +++-- .../proto/NextMillenniumExtBidder.java | 6 ++ .../nextmillennium/ExtImpNextMillennium.java | 9 +++ .../static/bidder-params/nextmillennium.json | 15 ++++ .../NextMillenniumBidderTest.java | 75 ++++++++++++++----- .../test-auction-nextmillennium-request.json | 4 +- .../test-nextmillennium-bid-request.json | 8 +- 7 files changed, 106 insertions(+), 30 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..859c75c25ef 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; @@ -108,8 +108,8 @@ private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium .orElse(null); return bidRequest.toBuilder() - .imp(modifyFirstImp(bidRequest.getImp(), soredRequestId)) - .ext(createExtRequest(soredRequestId, extRequestPrebidServer)) + .imp(modifyFirstImp(bidRequest.getImp(), soredRequestId, extImp)) + .ext(createExtRequest(soredRequestId, extRequestPrebidServer, extImp)) .build(); } @@ -150,13 +150,14 @@ private static String formatSize(Integer w, Integer h) { : null; } - private List modifyFirstImp(List imps, String storedRequestId) { + private List modifyFirstImp(List imps, String storedRequestId, ExtImpNextMillennium extImp) { final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder() .storedrequest(ExtStoredRequest.of(storedRequestId)) .build(); final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of( - NextMillenniumExtBidder.of(nmmFlags, null, null)); + NextMillenniumExtBidder.of( + nmmFlags, extImp.getAdSlots(), extImp.getAllowedAds(), null, null)); final ExtRequest extRequest = ExtRequest.of(extRequestPrebid); mapper.fillExtension(extRequest, nextMillenniumExt); @@ -169,14 +170,18 @@ 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..ef2d2380287 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,6 +11,12 @@ public class NextMillenniumExtBidder { @JsonProperty("nmmFlags") List nmmFlags; + @JsonProperty("adSlots") + List adSlots; + + @JsonProperty("allowedAds") + List allowedAds; + String nmVersion; String serverVersion; 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..15160937e46 100644 --- a/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java @@ -1,6 +1,7 @@ package org.prebid.server.bidder.nextmillennium; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.App; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; @@ -78,8 +79,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 +98,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 +117,8 @@ public void makeHttpRequestsShouldUseImpExtBidderPlacementIdForStoredRequestId() // given final BidRequest bidRequest = givenBidRequest( identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", null))); + givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", null, null, null)), + givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", null, null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -138,8 +139,8 @@ public void makeHttpRequestsShouldUseImpExtBidderGroupIdForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1")), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2"))); + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1", null, null)), + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2", null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -168,10 +169,10 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId .w(5) .h(6) .build()), - ExtImpNextMillennium.of(null, "group1")), + ExtImpNextMillennium.of(null, "group1", null, null)), givenImpWithExt( imp -> imp.banner(Banner.builder().w(7).h(8).build()), - ExtImpNextMillennium.of(null, "group2"))); + ExtImpNextMillennium.of(null, "group2", null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -187,6 +188,40 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId .containsExactly("ggroup1;1x2;", "ggroup2;1x2;"); } + @Test + public void makeHttpRequestsShouldIncludeAdSlotsAndAllowedAdsInRequestAndImpExt() { + // 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 ObjectNode requestExtNode = mapper.valueToTree(actualRequest.getExt()); + assertThat(requestExtNode.at("/nextMillennium/adSlots/0").asText()).isEqualTo("slot1"); + assertThat(requestExtNode.at("/nextMillennium/adSlots/1").asText()).isEqualTo("slot2"); + assertThat(requestExtNode.at("/nextMillennium/allowedAds/0").asText()).isEqualTo("ad1"); + assertThat(requestExtNode.at("/nextMillennium/allowedAds/1").asText()).isEqualTo("ad2"); + + final ObjectNode impExtNode = (ObjectNode) actualRequest.getImp().getFirst().getExt(); + assertThat(impExtNode.at("/nextMillennium/adSlots/0").asText()).isEqualTo("slot1"); + assertThat(impExtNode.at("/nextMillennium/adSlots/1").asText()).isEqualTo("slot2"); + assertThat(impExtNode.at("/nextMillennium/allowedAds/0").asText()).isEqualTo("ad1"); + assertThat(impExtNode.at("/nextMillennium/allowedAds/1").asText()).isEqualTo("ad2"); + } + @Test public void makeHttpRequestsShouldUseFirstImpBannerSizeForStoredRequestIds() { // given @@ -194,12 +229,12 @@ public void makeHttpRequestsShouldUseFirstImpBannerSizeForStoredRequestIds() { identity(), givenImpWithExt( imp -> imp.banner(Banner.builder().w(7).h(8).build()), - ExtImpNextMillennium.of(null, "group1")), + ExtImpNextMillennium.of(null, "group1", null, null)), givenImpWithExt( imp -> imp.banner(Banner.builder() .format(singletonList(Format.builder().w(1).h(2).build())) .build()), - ExtImpNextMillennium.of(null, "group2"))); + ExtImpNextMillennium.of(null, "group2", null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -220,8 +255,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(), ExtImpNextMillennium.of(null, "group1", null, null)), + givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2", null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -242,8 +277,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(), ExtImpNextMillennium.of("placement1", "group1", null, null)), + givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", "group2", null, null))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -294,7 +329,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 +381,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 +421,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 +467,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(); 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..aa35d109ab4 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 @@ -10,7 +10,9 @@ "secure": 1, "ext": { "nextMillennium" : { - "nmmFlags" : [ "1" ] + "nmmFlags" : [ "1" ], + "adSlots": ["slot-1", "slot-2"], + "allowedAds": ["banner", "native"] }, "prebid": { "storedrequest": { @@ -61,7 +63,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}" } } From 4824fc49b323fb51e13ffe29b648293e11ed09d7 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Mon, 27 Oct 2025 17:21:48 +0100 Subject: [PATCH 2/3] fix comments --- .../NextMillenniumBidderTest.java | 67 ++++++++++++------- 1 file changed, 43 insertions(+), 24 deletions(-) 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 15160937e46..3dd357d7bd7 100644 --- a/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java @@ -1,7 +1,6 @@ package org.prebid.server.bidder.nextmillennium; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.App; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; @@ -24,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; @@ -117,8 +118,8 @@ public void makeHttpRequestsShouldUseImpExtBidderPlacementIdForStoredRequestId() // given final BidRequest bidRequest = givenBidRequest( identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", null, null, null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", null, null, null))); + givenImpWithExt(identity(), givenExtImpWithPlacementId("placement1")), + givenImpWithExt(identity(), givenExtImpWithPlacementId("placement2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -139,8 +140,8 @@ public void makeHttpRequestsShouldUseImpExtBidderGroupIdForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1", null, null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2", null, null))); + givenImpWithExt(identity(), givenExtImpWithGroupId("group1")), + givenImpWithExt(identity(), givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -169,10 +170,10 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId .w(5) .h(6) .build()), - ExtImpNextMillennium.of(null, "group1", null, null)), + givenExtImpWithGroupId("group1")), givenImpWithExt( imp -> imp.banner(Banner.builder().w(7).h(8).build()), - ExtImpNextMillennium.of(null, "group2", null, null))); + givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -209,17 +210,23 @@ public void makeHttpRequestsShouldIncludeAdSlotsAndAllowedAdsInRequestAndImpExt( final BidRequest actualRequest = result.getValue().getFirst().getPayload(); - final ObjectNode requestExtNode = mapper.valueToTree(actualRequest.getExt()); - assertThat(requestExtNode.at("/nextMillennium/adSlots/0").asText()).isEqualTo("slot1"); - assertThat(requestExtNode.at("/nextMillennium/adSlots/1").asText()).isEqualTo("slot2"); - assertThat(requestExtNode.at("/nextMillennium/allowedAds/0").asText()).isEqualTo("ad1"); - assertThat(requestExtNode.at("/nextMillennium/allowedAds/1").asText()).isEqualTo("ad2"); - - final ObjectNode impExtNode = (ObjectNode) actualRequest.getImp().getFirst().getExt(); - assertThat(impExtNode.at("/nextMillennium/adSlots/0").asText()).isEqualTo("slot1"); - assertThat(impExtNode.at("/nextMillennium/adSlots/1").asText()).isEqualTo("slot2"); - assertThat(impExtNode.at("/nextMillennium/allowedAds/0").asText()).isEqualTo("ad1"); - assertThat(impExtNode.at("/nextMillennium/allowedAds/1").asText()).isEqualTo("ad2"); + 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) + .extracting(NextMillenniumExtBidder::getAdSlots, NextMillenniumExtBidder::getAllowedAds) + .containsExactly(adSlots, allowedAds); } @Test @@ -229,12 +236,12 @@ public void makeHttpRequestsShouldUseFirstImpBannerSizeForStoredRequestIds() { identity(), givenImpWithExt( imp -> imp.banner(Banner.builder().w(7).h(8).build()), - ExtImpNextMillennium.of(null, "group1", null, null)), + givenExtImpWithGroupId("group1")), givenImpWithExt( imp -> imp.banner(Banner.builder() .format(singletonList(Format.builder().w(1).h(2).build())) .build()), - ExtImpNextMillennium.of(null, "group2", null, null))); + givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -255,8 +262,8 @@ public void makeHttpRequestsShouldUseAppDomainForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( request -> request.app(App.builder().domain("appDomain").build()), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1", null, null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2", null, null))); + givenImpWithExt(identity(), givenExtImpWithGroupId("group1")), + givenImpWithExt(identity(), givenExtImpWithGroupId("group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -277,8 +284,8 @@ public void makeHttpRequestsShouldUseSiteDomainForStoredRequestId() { // given final BidRequest bidRequest = givenBidRequest( request -> request.site(Site.builder().domain("siteDomain").build()), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", "group1", null, null)), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", "group2", null, null))); + givenImpWithExt(identity(), givenExtImpWithPlacementIdAndGroupId("placement1", "group1")), + givenImpWithExt(identity(), givenExtImpWithPlacementIdAndGroupId("placement2", "group2"))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -638,4 +645,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); + } } From 47b9321c80805cf6725bec2b6d3318b294c60881 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Mon, 27 Oct 2025 17:41:14 +0100 Subject: [PATCH 3/3] fix comments --- .../bidder/nextmillennium/NextMillenniumBidderTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 3dd357d7bd7..267744921ca 100644 --- a/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java @@ -212,12 +212,14 @@ public void makeHttpRequestsShouldIncludeAdSlotsAndAllowedAdsInRequestAndImpExt( final NextMillenniumExtBidder requestExt = jacksonMapper.mapper() .convertValue( - jacksonMapper.mapper().convertValue(actualRequest.getExt(), NextMillenniumExt.class).getNextMillennium(), + 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(), + jacksonMapper.mapper().convertValue(actualRequest + .getImp().getFirst().getExt(), NextMillenniumExt.class).getNextMillennium(), NextMillenniumExtBidder.class); assertThat(requestExt)