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 426e287190e..c026a6c271b 100644 --- a/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java +++ b/src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java @@ -12,7 +12,6 @@ import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import io.vertx.core.MultiMap; -import io.vertx.core.http.HttpMethod; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -22,17 +21,22 @@ 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.nextmillennium.proto.NextMillenniumExt; +import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExtBidder; 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.ExtRequest; import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidServer; import org.prebid.server.proto.openrtb.ext.request.ExtStoredRequest; import org.prebid.server.proto.openrtb.ext.request.nextmillennium.ExtImpNextMillennium; 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 org.prebid.server.version.PrebidVersionProvider; import java.util.ArrayList; import java.util.Collection; @@ -46,15 +50,22 @@ public class NextMillenniumBidder implements Bidder { new TypeReference<>() { }; + private static final String NM_ADAPTER_VERSION = "v1.0.0"; + private final String endpointUrl; private final JacksonMapper mapper; private final List nmmFlags; + private final PrebidVersionProvider versionProvider; + + public NextMillenniumBidder(String endpointUrl, + JacksonMapper mapper, + List nmmFlags, + PrebidVersionProvider versionProvider) { - public NextMillenniumBidder(String endpointUrl, JacksonMapper mapper, List nmmFlags) { this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl)); this.mapper = Objects.requireNonNull(mapper); this.nmmFlags = nmmFlags; - + this.versionProvider = Objects.requireNonNull(versionProvider); } @Override @@ -70,7 +81,12 @@ public final Result>> makeHttpRequests(BidRequest b errors.add(BidderError.badInput(e.getMessage())); continue; } - httpRequests.add(makeHttpRequest(updateBidRequest(bidRequest, extImpNextMillennium))); + final BidRequest updatedRequest = updateBidRequest(bidRequest, extImpNextMillennium); + httpRequests.add(BidderUtil.defaultRequest( + updatedRequest, + headers(), + endpointUrl, + mapper)); } return errors.isEmpty() ? Result.withValues(httpRequests) : Result.withErrors(errors); @@ -84,31 +100,19 @@ private ExtImpNextMillennium convertExt(ObjectNode impExt) { } } - private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium ext) { - final ExtStoredRequest storedRequest = ExtStoredRequest.of(resolveStoredRequestId(bidRequest, ext)); - - final ExtRequestPrebid createdExtRequestPrebid = ExtRequestPrebid.builder() - .storedrequest(storedRequest) - .build(); - - final ExtRequestPrebid extRequestPrebid = Optional.of(bidRequest) - .map(BidRequest::getExt) + private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium extImp) { + final String soredRequestId = resolveStoredRequestId(bidRequest, extImp); + final ExtRequestPrebidServer extRequestPrebidServer = Optional.ofNullable(bidRequest.getExt()) .map(ExtRequest::getPrebid) - .map(prebid -> prebid.toBuilder().storedrequest(storedRequest).build()) - .orElse(createdExtRequestPrebid); + .map(ExtRequestPrebid::getServer) + .orElse(null); return bidRequest.toBuilder() - .imp(updateImps(bidRequest, createdExtRequestPrebid)) - .ext(ExtRequest.of(extRequestPrebid)) + .imp(modifyFirstImp(bidRequest.getImp(), soredRequestId)) + .ext(createExtRequest(soredRequestId, extRequestPrebidServer)) .build(); } - private List updateImps(BidRequest bidRequest, ExtRequestPrebid extRequestPrebid) { - return bidRequest.getImp().stream() - .map(imp -> imp.toBuilder().ext(createImpExt(extRequestPrebid)).build()) - .toList(); - } - private static String resolveStoredRequestId(BidRequest bidRequest, ExtImpNextMillennium extImpNextMillennium) { final String groupId = extImpNextMillennium.getGroupId(); if (StringUtils.isEmpty(groupId)) { @@ -146,24 +150,38 @@ private static String formatSize(Integer w, Integer h) { : null; } - private ObjectNode createImpExt(ExtRequestPrebid prebid) { - final ObjectNode impExt = mapper.mapper().createObjectNode(); - impExt.set("prebid", mapper.mapper().valueToTree(prebid)); - if (CollectionUtils.isNotEmpty(nmmFlags)) { - impExt.putObject("nextMillennium") - .set("nmmFlags", mapper.mapper().valueToTree(nmmFlags)); - } - return impExt; + private List modifyFirstImp(List imps, String storedRequestId) { + final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder() + .storedrequest(ExtStoredRequest.of(storedRequestId)) + .build(); + + final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of( + NextMillenniumExtBidder.of(nmmFlags, null, null)); + + final ExtRequest extRequest = ExtRequest.of(extRequestPrebid); + mapper.fillExtension(extRequest, nextMillenniumExt); + + final ObjectNode impExt = mapper.mapper().valueToTree(extRequest); + + final List modifiedImps = new ArrayList<>(imps); + modifiedImps.set(0, imps.getFirst().toBuilder().ext(impExt).build()); + + return modifiedImps; } - private HttpRequest makeHttpRequest(BidRequest bidRequest) { - return HttpRequest.builder() - .method(HttpMethod.POST) - .uri(endpointUrl) - .headers(headers()) - .payload(bidRequest) - .body(mapper.encodeToBytes(bidRequest)) + private ExtRequest createExtRequest(String storedRequestId, ExtRequestPrebidServer extRequestPrebidServer) { + 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())); + + final ExtRequest extRequest = ExtRequest.of(extRequestPrebid); + mapper.fillExtension(extRequest, nextMillenniumExt); + + return extRequest; } private static MultiMap headers() { diff --git a/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExt.java b/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExt.java new file mode 100644 index 00000000000..b5b8f58f6c2 --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExt.java @@ -0,0 +1,11 @@ +package org.prebid.server.bidder.nextmillennium.proto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Value; + +@Value(staticConstructor = "of") +public class NextMillenniumExt { + + @JsonProperty("nextMillennium") + NextMillenniumExtBidder nextMillennium; +} 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 new file mode 100644 index 00000000000..1673fc5114d --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExtBidder.java @@ -0,0 +1,17 @@ +package org.prebid.server.bidder.nextmillennium.proto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Value; + +import java.util.List; + +@Value(staticConstructor = "of") +public class NextMillenniumExtBidder { + + @JsonProperty("nmmFlags") + List nmmFlags; + + String nmVersion; + + String serverVersion; +} diff --git a/src/main/java/org/prebid/server/spring/config/bidder/NextMillenniumConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/NextMillenniumConfiguration.java index 16fbbb37aca..4d102b90f9c 100644 --- a/src/main/java/org/prebid/server/spring/config/bidder/NextMillenniumConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/bidder/NextMillenniumConfiguration.java @@ -10,6 +10,7 @@ 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.prebid.server.version.PrebidVersionProvider; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -34,6 +35,7 @@ NextMillenniumConfigurationProperties configurationProperties() { @Bean BidderDeps nextMillenniumBidderDeps(NextMillenniumConfigurationProperties nextMillenniumConfigurationProperties, @NotBlank @Value("${external-url}") String externalUrl, + PrebidVersionProvider prebidVersionProvider, JacksonMapper mapper) { return BidderDepsAssembler.forBidder(BIDDER_NAME) @@ -42,7 +44,8 @@ BidderDeps nextMillenniumBidderDeps(NextMillenniumConfigurationProperties nextMi .bidderCreator(config -> new NextMillenniumBidder( config.getEndpoint(), mapper, - config.getExtraInfo().getNmmFlags()) + config.getExtraInfo().getNmmFlags(), + prebidVersionProvider) ).assemble(); } 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 6f3524a5448..71dfe2a8552 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; @@ -12,7 +11,11 @@ import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import org.prebid.server.VertxTest; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -23,10 +26,12 @@ 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; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidServer; import org.prebid.server.proto.openrtb.ext.request.ExtRequestTargeting; import org.prebid.server.proto.openrtb.ext.request.ExtStoredRequest; import org.prebid.server.proto.openrtb.ext.request.nextmillennium.ExtImpNextMillennium; import org.prebid.server.proto.openrtb.ext.response.BidType; +import org.prebid.server.version.PrebidVersionProvider; import java.util.Arrays; import java.util.List; @@ -39,17 +44,33 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +@ExtendWith(MockitoExtension.class) public class NextMillenniumBidderTest extends VertxTest { private static final String ENDPOINT_URL = "https://test-url.com/"; - private final NextMillenniumBidder target = - new NextMillenniumBidder(ENDPOINT_URL, jacksonMapper, List.of("valueOne", "valueTwo")); + @Mock + private PrebidVersionProvider prebidVersionProvider; + + private NextMillenniumBidder target; + + @BeforeEach + public void setUp() { + target = new NextMillenniumBidder( + ENDPOINT_URL, + jacksonMapper, + List.of("valueOne", "valueTwo"), + prebidVersionProvider); + } @Test public void creationShouldFailOnInvalidEndpointUrl() { assertThatIllegalArgumentException().isThrownBy(() -> - new NextMillenniumBidder("invalid_url", jacksonMapper, List.of("valueOne", "valueTwo"))); + new NextMillenniumBidder( + "invalid_url", + jacksonMapper, + List.of("valueOne", "valueTwo"), + prebidVersionProvider)); } @Test @@ -258,10 +279,162 @@ public void makeHttpRequestsWithInvalidImpsShouldReturnError() { } @Test - public void makeHttpRequestsShouldReturnImpExtNextMillenniumWhenNmmFlagsConfigured() { + public void makeHttpRequestsImpExtComparison() { // given - final BidRequest bidRequest = givenBidRequest(identity(), - givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", "group1"))); + final String placementId = "6821"; + final Imp givenImp = givenImpWithExt(imp -> imp + .id("custom_imp_id") + .tagid("custom_imp_tagid") + .secure(1) + .banner(Banner.builder() + .w(728) + .h(90) + .format(singletonList(Format.builder() + .w(728) + .h(90) + .build())) + .build()), + ExtImpNextMillennium.of(placementId, null)); + + final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() + .schains(emptyList()) + .targeting(ExtRequestTargeting.builder() + .includewinners(true) + .includebidderkeys(false) + .build()) + .build()); + + final BidRequest bidRequest = givenBidRequest(b -> b + .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") + .test(1) + .tmax(845L) + .device(Device.builder().w(994).h(1768).build()) + .imp(singletonList(givenImp)) + .ext(extRequest) + .site(Site.builder().page("https://www.advfn.com").domain("www.advfn.com").build())); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getStoredrequest) + .extracting(ExtStoredRequest::getId) + .containsExactly(placementId); + } + + @Test + public void makeHttpRequestsImpShouldBeIdenticalExceptExt() { + // given + final String placementId = "6821"; + final List bannerFormat = singletonList(Format.builder() + .w(728) + .h(90) + .build()); + + final Banner banner = Banner.builder() + .w(728) + .h(90) + .format(bannerFormat) + .build(); + + final Imp givenImp = givenImpWithExt(imp -> imp + .id("custom_imp_id") + .tagid("custom_imp_tagid") + .secure(1) + .banner(banner), + ExtImpNextMillennium.of(placementId, null)); + + final BidRequest bidRequest = givenBidRequest(b -> b + .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") + .test(1) + .imp(singletonList(givenImp))); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .extracting(BidRequest::getImp) + .extracting(List::getFirst) + .element(0) + .usingRecursiveComparison() + .ignoringFields("ext") + .isEqualTo(givenImp); + } + + @Test + public void makeHttpRequestsBidRequestShouldBeIdenticalExceptImpExt() { + // given + final String placementId = "6821"; + final List bannerFormat = singletonList(Format.builder() + .w(728) + .h(90) + .build()); + final Banner banner = Banner.builder() + .w(728) + .h(90) + .format(bannerFormat) + .build(); + + final Imp initialImp = givenImpWithExt(imp -> imp + .id("custom_imp_id") + .tagid("custom_imp_tagid") + .secure(1) + .banner(banner), + ExtImpNextMillennium.of(placementId, null)); + + final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() + .schains(emptyList()) + .targeting(ExtRequestTargeting.builder() + .includewinners(true) + .includebidderkeys(false) + .build()) + .build()); + + final BidRequest bidRequest = givenBidRequest(b -> b + .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") + .test(1) + .tmax(845L) + .device(Device.builder().w(994).h(1768).build()) + .imp(singletonList(initialImp)) + .ext(extRequest) + .site(Site.builder().page("https://www.advfn.com").domain("www.advfn.com").build())); + // when + final Result>> result = target.makeHttpRequests(bidRequest); + // then + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .element(0) + .usingRecursiveComparison() + .ignoringFields("imp", "ext") + .isEqualTo(bidRequest); + } + + @Test + public void makeHttpRequestsShouldPreserveExtPrebidServer() { + // given + final ExtRequestPrebidServer extRequestPrebidServer = ExtRequestPrebidServer.of( + "http://localhost:8080", + 1, + "dc-test", + "/openrtb2/auction"); + + final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() + .server(extRequestPrebidServer) + .build()); + + final BidRequest bidRequest = BidRequest.builder() + .id("test-request") + .imp(singletonList(givenImpWithExt( + imp -> imp.banner(Banner.builder().w(300).h(250).build()), + ExtImpNextMillennium.of("placement_id", null)))) + .ext(extRequest) + .build(); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -270,9 +443,10 @@ public void makeHttpRequestsShouldReturnImpExtNextMillenniumWhenNmmFlagsConfigur assertThat(result.getErrors()).isEmpty(); assertThat(result.getValue()) .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getExt) - .containsExactly(createImpExt(List.of("valueOne", "valueTwo"))); + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getServer) + .containsExactly(extRequestPrebidServer); } @Test @@ -377,12 +551,6 @@ public void makeBidsWithZeroSeatBidsShouldReturnNoErrorsAndNoValues() throws Jso assertThat(result.getValue()).isEmpty(); } - private static BidRequest givenBidRequest(UnaryOperator bidRequestCustomizer, - Imp... imps) { - - return bidRequestCustomizer.apply(BidRequest.builder().imp(asList(imps))).build(); - } - @Test public void makeBidsWithUnparsableBidResponseShouldReturnError() { // given @@ -401,145 +569,10 @@ public void makeBidsWithUnparsableBidResponseShouldReturnError() { }); } - @Test - public void makeHttpRequestsImpExtComparison() { - // given - final String placementId = "6821"; - final Imp givenImp = givenImpWithExt(imp -> imp - .id("custom_imp_id") - .tagid("custom_imp_tagid") - .secure(1) - .banner(Banner.builder() - .w(728) - .h(90) - .format(singletonList(Format.builder() - .w(728) - .h(90) - .build())) - .build()), - ExtImpNextMillennium.of(placementId, null)); - - final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() - .schains(emptyList()) - .targeting(ExtRequestTargeting.builder() - .includewinners(true) - .includebidderkeys(false) - .build()) - .build()); - - final BidRequest bidRequest = givenBidRequest(b -> b - .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") - .test(1) - .tmax(845L) - .device(Device.builder().w(994).h(1768).build()) - .imp(singletonList(givenImp)) - .ext(extRequest) - .site(Site.builder().page("https://www.advfn.com").domain("www.advfn.com").build())); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - // then - assertThat(result.getValue()) - .extracting(HttpRequest::getPayload) - .extracting(BidRequest::getImp) - .extracting(imps -> imps.getFirst()) - .extracting(Imp::getExt) - .isNotEqualTo(givenImp.getExt()) - .extracting(jsonNodes -> mapper.treeToValue(jsonNodes, ExtRequest.class)) - .extracting(ExtRequest::getPrebid) - .extracting(ExtRequestPrebid::getStoredrequest) - .extracting(ExtStoredRequest::getId) - .element(0) - .isEqualTo(placementId); - } - - @Test - public void makeHttpRequestsImpShouldBeIdenticalExceptExt() { - // given - final String placementId = "6821"; - final List bannerFormat = singletonList(Format.builder() - .w(728) - .h(90) - .build()); - - final Banner banner = Banner.builder() - .w(728) - .h(90) - .format(bannerFormat) - .build(); - - final Imp givenImp = givenImpWithExt(imp -> imp - .id("custom_imp_id") - .tagid("custom_imp_tagid") - .secure(1) - .banner(banner), - ExtImpNextMillennium.of(placementId, null)); - - final BidRequest bidRequest = givenBidRequest(b -> b - .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") - .test(1) - .imp(singletonList(givenImp))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getValue()) - .extracting(HttpRequest::getPayload) - .extracting(BidRequest::getImp) - .extracting(imps -> imps.getFirst()) - .element(0) - .usingRecursiveComparison() - .ignoringFields("ext") - .isEqualTo(givenImp); - } - - @Test - public void makeHttpRequestsBidRequestShouldBeIdenticalExceptImpExt() { - // given - final String placementId = "6821"; - final List bannerFormat = singletonList(Format.builder() - .w(728) - .h(90) - .build()); - final Banner banner = Banner.builder() - .w(728) - .h(90) - .format(bannerFormat) - .build(); - - final Imp initialImp = givenImpWithExt(imp -> imp - .id("custom_imp_id") - .tagid("custom_imp_tagid") - .secure(1) - .banner(banner), - ExtImpNextMillennium.of(placementId, null)); - - final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder() - .schains(emptyList()) - .targeting(ExtRequestTargeting.builder() - .includewinners(true) - .includebidderkeys(false) - .build()) - .build()); + private static BidRequest givenBidRequest(UnaryOperator bidRequestCustomizer, + Imp... imps) { - final BidRequest bidRequest = givenBidRequest(b -> b - .id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2") - .test(1) - .tmax(845L) - .device(Device.builder().w(994).h(1768).build()) - .imp(singletonList(initialImp)) - .ext(extRequest) - .site(Site.builder().page("https://www.advfn.com").domain("www.advfn.com").build())); - // when - final Result>> result = target.makeHttpRequests(bidRequest); - // then - assertThat(result.getValue()) - .extracting(HttpRequest::getPayload) - .element(0) - .usingRecursiveComparison() - .ignoringFields("imp", "ext") - .isEqualTo(bidRequest); + return bidRequestCustomizer.apply(BidRequest.builder().imp(asList(imps))).build(); } private static Imp givenImp(UnaryOperator impCustomizer) { @@ -570,13 +603,4 @@ private static Imp givenImpWithExt(UnaryOperator impCustomizer, return givenImp(impCustomizer.andThen(imp -> imp.ext(mapper.valueToTree( ExtPrebid.of(null, extImpNextMillennium))))::apply); } - - private static ObjectNode createImpExt(List values) { - final ObjectNode objectNode = mapper.createObjectNode(); - objectNode.set("prebid", mapper.valueToTree(ExtRequestPrebid.builder() - .storedrequest(ExtStoredRequest.of("ggroup1;;")).build())); - objectNode.putObject("nextMillennium") - .set("nmmFlags", mapper.valueToTree(values)); - return objectNode; - } } 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 24a61053439..6802911a251 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 @@ -3,28 +3,23 @@ "imp": [ { "id": "imp_id", - "secure": 1, "banner": { "w": 300, "h": 250 }, + "secure": 1, "ext": { + "nextMillennium" : { + "nmmFlags" : [ "1" ] + }, "prebid": { "storedrequest": { "id": "placement_id" } - }, - "nextMillennium": { - "nmmFlags": [ - "1" - ] } } } ], - "source": { - "tid": "${json-unit.any-string}" - }, "site": { "domain": "www.example.com", "page": "http://www.example.com", @@ -44,6 +39,9 @@ "cur": [ "USD" ], + "source": { + "tid": "${json-unit.any-string}" + }, "regs": { "ext": { "gdpr": 0 @@ -60,6 +58,11 @@ "datacenter": "local", "endpoint": "/openrtb2/auction" } + }, + "nextMillennium": { + "nmmFlags": [ "1" ], + "nm_version": "v1.0.0", + "server_version": "${json-unit.any-string}" } } }