Skip to content

Commit 6fe41b6

Browse files
przemkaczmarekRitesh Ghodrao
authored andcommitted
Nextmillennium: New fields and adapter version update (prebid#4246)
1 parent 469527b commit 6fe41b6

7 files changed

Lines changed: 130 additions & 29 deletions

File tree

src/main/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidder.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public class NextMillenniumBidder implements Bidder<BidRequest> {
5050
new TypeReference<>() {
5151
};
5252

53-
private static final String NM_ADAPTER_VERSION = "v1.0.0";
53+
private static final String NM_ADAPTER_VERSION = "v1.0.1";
5454

5555
private final String endpointUrl;
5656
private final JacksonMapper mapper;
@@ -101,15 +101,15 @@ private ExtImpNextMillennium convertExt(ObjectNode impExt) {
101101
}
102102

103103
private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium extImp) {
104-
final String soredRequestId = resolveStoredRequestId(bidRequest, extImp);
104+
final String storedRequestId = resolveStoredRequestId(bidRequest, extImp);
105105
final ExtRequestPrebidServer extRequestPrebidServer = Optional.ofNullable(bidRequest.getExt())
106106
.map(ExtRequest::getPrebid)
107107
.map(ExtRequestPrebid::getServer)
108108
.orElse(null);
109109

110110
return bidRequest.toBuilder()
111-
.imp(modifyFirstImp(bidRequest.getImp(), soredRequestId))
112-
.ext(createExtRequest(soredRequestId, extRequestPrebidServer))
111+
.imp(modifyFirstImp(bidRequest.getImp(), storedRequestId))
112+
.ext(createExtRequest(storedRequestId, extRequestPrebidServer, extImp))
113113
.build();
114114
}
115115

@@ -156,7 +156,7 @@ private List<Imp> modifyFirstImp(List<Imp> imps, String storedRequestId) {
156156
.build();
157157

158158
final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of(
159-
NextMillenniumExtBidder.of(nmmFlags, null, null));
159+
NextMillenniumExtBidder.of(nmmFlags));
160160

161161
final ExtRequest extRequest = ExtRequest.of(extRequestPrebid);
162162
mapper.fillExtension(extRequest, nextMillenniumExt);
@@ -169,14 +169,21 @@ private List<Imp> modifyFirstImp(List<Imp> imps, String storedRequestId) {
169169
return modifiedImps;
170170
}
171171

172-
private ExtRequest createExtRequest(String storedRequestId, ExtRequestPrebidServer extRequestPrebidServer) {
172+
private ExtRequest createExtRequest(String storedRequestId,
173+
ExtRequestPrebidServer extRequestPrebidServer,
174+
ExtImpNextMillennium extImp) {
173175
final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder()
174176
.storedrequest(ExtStoredRequest.of(storedRequestId))
175177
.server(extRequestPrebidServer)
176178
.build();
177179

178180
final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of(
179-
NextMillenniumExtBidder.of(nmmFlags, NM_ADAPTER_VERSION, versionProvider.getNameVersionRecord()));
181+
NextMillenniumExtBidder.of(
182+
nmmFlags,
183+
extImp.getAdSlots(),
184+
extImp.getAllowedAds(),
185+
NM_ADAPTER_VERSION,
186+
versionProvider.getNameVersionRecord()));
180187

181188
final ExtRequest extRequest = ExtRequest.of(extRequestPrebid);
182189
mapper.fillExtension(extRequest, nextMillenniumExt);

src/main/java/org/prebid/server/bidder/nextmillennium/proto/NextMillenniumExtBidder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,17 @@ public class NextMillenniumExtBidder {
1111
@JsonProperty("nmmFlags")
1212
List<String> nmmFlags;
1313

14+
@JsonProperty("adSlots")
15+
List<String> adSlots;
16+
17+
@JsonProperty("allowedAds")
18+
List<String> allowedAds;
19+
1420
String nmVersion;
1521

1622
String serverVersion;
23+
24+
public static NextMillenniumExtBidder of(List<String> nmmFlags) {
25+
return of(nmmFlags, null, null, null, null);
26+
}
1727
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package org.prebid.server.proto.openrtb.ext.request.nextmillennium;
22

3+
import com.fasterxml.jackson.annotation.JsonProperty;
34
import lombok.Value;
45

6+
import java.util.List;
7+
58
@Value(staticConstructor = "of")
69
public class ExtImpNextMillennium {
710

811
String placementId;
912

1013
String groupId;
14+
15+
@JsonProperty("adSlots")
16+
List<String> adSlots;
17+
18+
@JsonProperty("allowedAds")
19+
List<String> allowedAds;
1120
}

src/main/resources/static/bidder-params/nextmillennium.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@
1313
"type": "string",
1414
"minLength": 1,
1515
"description": "An id used to identify NextMillennium placement group"
16+
},
17+
"adSlots": {
18+
"type": "array",
19+
"minItems": 1,
20+
"description": "IDs which identifies the ad slots",
21+
"items": {
22+
"type": "string"
23+
}
24+
},
25+
"allowedAds": {
26+
"type": "array",
27+
"description": "List of allowed ads",
28+
"items": {
29+
"type": "string"
30+
}
1631
}
1732
},
1833
"anyOf": [

src/test/java/org/prebid/server/bidder/nextmillennium/NextMillenniumBidderTest.java

Lines changed: 76 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.prebid.server.bidder.model.HttpRequest;
2424
import org.prebid.server.bidder.model.HttpResponse;
2525
import org.prebid.server.bidder.model.Result;
26+
import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExt;
27+
import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExtBidder;
2628
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
2729
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
2830
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
@@ -78,8 +80,8 @@ public void makeHttpRequestsShouldUseBidRequestIdForAllRequests() {
7880
// given
7981
final BidRequest bidRequest = givenBidRequest(
8082
request -> request.id("id"),
81-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null)),
82-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null)));
83+
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null)),
84+
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null)));
8385

8486
// when
8587
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -97,8 +99,8 @@ public void makeHttpRequestsShouldUseBidRequestTestForAllRequests() {
9799
// given
98100
final BidRequest bidRequest = givenBidRequest(
99101
request -> request.test(1),
100-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null)),
101-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null)));
102+
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null)),
103+
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, null, null, null)));
102104

103105
// when
104106
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -116,8 +118,8 @@ public void makeHttpRequestsShouldUseImpExtBidderPlacementIdForStoredRequestId()
116118
// given
117119
final BidRequest bidRequest = givenBidRequest(
118120
identity(),
119-
givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", null)),
120-
givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", null)));
121+
givenImpWithExt(identity(), givenExtImpWithPlacementId("placement1")),
122+
givenImpWithExt(identity(), givenExtImpWithPlacementId("placement2")));
121123

122124
// when
123125
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -138,8 +140,8 @@ public void makeHttpRequestsShouldUseImpExtBidderGroupIdForStoredRequestId() {
138140
// given
139141
final BidRequest bidRequest = givenBidRequest(
140142
identity(),
141-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1")),
142-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2")));
143+
givenImpWithExt(identity(), givenExtImpWithGroupId("group1")),
144+
givenImpWithExt(identity(), givenExtImpWithGroupId("group2")));
143145

144146
// when
145147
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -168,10 +170,10 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId
168170
.w(5)
169171
.h(6)
170172
.build()),
171-
ExtImpNextMillennium.of(null, "group1")),
173+
givenExtImpWithGroupId("group1")),
172174
givenImpWithExt(
173175
imp -> imp.banner(Banner.builder().w(7).h(8).build()),
174-
ExtImpNextMillennium.of(null, "group2")));
176+
givenExtImpWithGroupId("group2")));
175177

176178
// when
177179
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -187,19 +189,61 @@ public void makeHttpRequestsShouldUseFirstImpBannerFirstFormatForStoredRequestId
187189
.containsExactly("ggroup1;1x2;", "ggroup2;1x2;");
188190
}
189191

192+
@Test
193+
public void makeHttpRequestsShouldIncludeAdSlotsAndAllowedAdsOnlyInRequestExt() {
194+
// given
195+
final List<String> adSlots = List.of("slot1", "slot2");
196+
final List<String> allowedAds = List.of("ad1", "ad2");
197+
198+
final ExtImpNextMillennium extImp = ExtImpNextMillennium.of("placement123", null, adSlots, allowedAds);
199+
200+
final BidRequest bidRequest = givenBidRequest(
201+
identity(),
202+
givenImpWithExt(identity(), extImp));
203+
204+
// when
205+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
206+
207+
// then
208+
assertThat(result.getErrors()).isEmpty();
209+
assertThat(result.getValue()).hasSize(1);
210+
211+
final BidRequest actualRequest = result.getValue().getFirst().getPayload();
212+
213+
final NextMillenniumExtBidder requestExt = jacksonMapper.mapper()
214+
.convertValue(
215+
jacksonMapper.mapper().convertValue(actualRequest
216+
.getExt(), NextMillenniumExt.class).getNextMillennium(),
217+
NextMillenniumExtBidder.class);
218+
219+
final NextMillenniumExtBidder impExt = jacksonMapper.mapper()
220+
.convertValue(
221+
jacksonMapper.mapper().convertValue(actualRequest
222+
.getImp().getFirst().getExt(), NextMillenniumExt.class).getNextMillennium(),
223+
NextMillenniumExtBidder.class);
224+
225+
assertThat(requestExt)
226+
.extracting(NextMillenniumExtBidder::getAdSlots, NextMillenniumExtBidder::getAllowedAds)
227+
.containsExactly(adSlots, allowedAds);
228+
229+
assertThat(impExt.getAdSlots()).isNull();
230+
assertThat(impExt.getAllowedAds()).isNull();
231+
assertThat(impExt.getNmmFlags()).containsExactly("valueOne", "valueTwo");
232+
}
233+
190234
@Test
191235
public void makeHttpRequestsShouldUseFirstImpBannerSizeForStoredRequestIds() {
192236
// given
193237
final BidRequest bidRequest = givenBidRequest(
194238
identity(),
195239
givenImpWithExt(
196240
imp -> imp.banner(Banner.builder().w(7).h(8).build()),
197-
ExtImpNextMillennium.of(null, "group1")),
241+
givenExtImpWithGroupId("group1")),
198242
givenImpWithExt(
199243
imp -> imp.banner(Banner.builder()
200244
.format(singletonList(Format.builder().w(1).h(2).build()))
201245
.build()),
202-
ExtImpNextMillennium.of(null, "group2")));
246+
givenExtImpWithGroupId("group2")));
203247

204248
// when
205249
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -220,8 +264,8 @@ public void makeHttpRequestsShouldUseAppDomainForStoredRequestId() {
220264
// given
221265
final BidRequest bidRequest = givenBidRequest(
222266
request -> request.app(App.builder().domain("appDomain").build()),
223-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group1")),
224-
givenImpWithExt(identity(), ExtImpNextMillennium.of(null, "group2")));
267+
givenImpWithExt(identity(), givenExtImpWithGroupId("group1")),
268+
givenImpWithExt(identity(), givenExtImpWithGroupId("group2")));
225269

226270
// when
227271
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -242,8 +286,8 @@ public void makeHttpRequestsShouldUseSiteDomainForStoredRequestId() {
242286
// given
243287
final BidRequest bidRequest = givenBidRequest(
244288
request -> request.site(Site.builder().domain("siteDomain").build()),
245-
givenImpWithExt(identity(), ExtImpNextMillennium.of("placement1", "group1")),
246-
givenImpWithExt(identity(), ExtImpNextMillennium.of("placement2", "group2")));
289+
givenImpWithExt(identity(), givenExtImpWithPlacementIdAndGroupId("placement1", "group1")),
290+
givenImpWithExt(identity(), givenExtImpWithPlacementIdAndGroupId("placement2", "group2")));
247291

248292
// when
249293
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
@@ -294,7 +338,7 @@ public void makeHttpRequestsImpExtComparison() {
294338
.h(90)
295339
.build()))
296340
.build()),
297-
ExtImpNextMillennium.of(placementId, null));
341+
ExtImpNextMillennium.of(placementId, null, null, null));
298342

299343
final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder()
300344
.schains(emptyList())
@@ -346,7 +390,7 @@ public void makeHttpRequestsImpShouldBeIdenticalExceptExt() {
346390
.tagid("custom_imp_tagid")
347391
.secure(1)
348392
.banner(banner),
349-
ExtImpNextMillennium.of(placementId, null));
393+
ExtImpNextMillennium.of(placementId, null, null, null));
350394

351395
final BidRequest bidRequest = givenBidRequest(b -> b
352396
.id("c868fd0b-960c-4f49-a8d6-2b3e938b41f2")
@@ -386,7 +430,7 @@ public void makeHttpRequestsBidRequestShouldBeIdenticalExceptImpExt() {
386430
.tagid("custom_imp_tagid")
387431
.secure(1)
388432
.banner(banner),
389-
ExtImpNextMillennium.of(placementId, null));
433+
ExtImpNextMillennium.of(placementId, null, null, null));
390434

391435
final ExtRequest extRequest = ExtRequest.of(ExtRequestPrebid.builder()
392436
.schains(emptyList())
@@ -432,7 +476,7 @@ public void makeHttpRequestsShouldPreserveExtPrebidServer() {
432476
.id("test-request")
433477
.imp(singletonList(givenImpWithExt(
434478
imp -> imp.banner(Banner.builder().w(300).h(250).build()),
435-
ExtImpNextMillennium.of("placement_id", null))))
479+
ExtImpNextMillennium.of("placement_id", null, null, null))))
436480
.ext(extRequest)
437481
.build();
438482

@@ -603,4 +647,16 @@ private static Imp givenImpWithExt(UnaryOperator<Imp.ImpBuilder> impCustomizer,
603647
return givenImp(impCustomizer.andThen(imp -> imp.ext(mapper.valueToTree(
604648
ExtPrebid.of(null, extImpNextMillennium))))::apply);
605649
}
650+
651+
private static ExtImpNextMillennium givenExtImpWithGroupId(String groupId) {
652+
return ExtImpNextMillennium.of(null, groupId, null, null);
653+
}
654+
655+
private static ExtImpNextMillennium givenExtImpWithPlacementId(String placementId) {
656+
return ExtImpNextMillennium.of(placementId, null, null, null);
657+
}
658+
659+
private static ExtImpNextMillennium givenExtImpWithPlacementIdAndGroupId(String placementId, String groupId) {
660+
return ExtImpNextMillennium.of(placementId, groupId, null, null);
661+
}
606662
}

src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-auction-nextmillennium-request.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
},
1010
"ext": {
1111
"nextmillennium" : {
12-
"placement_id": "placement_id"
12+
"placement_id": "placement_id",
13+
"adSlots": ["slot-1", "slot-2"],
14+
"allowedAds": ["banner", "native"]
1315
}
1416
}
1517
}

src/test/resources/org/prebid/server/it/openrtb2/nextmillennium/test-nextmillennium-bid-request.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@
6161
},
6262
"nextMillennium": {
6363
"nmmFlags": [ "1" ],
64-
"nm_version": "v1.0.0",
64+
"adSlots": ["slot-1", "slot-2"],
65+
"allowedAds": ["banner", "native"],
66+
"nm_version": "v1.0.1",
6567
"server_version": "${json-unit.any-string}"
6668
}
6769
}

0 commit comments

Comments
 (0)