Skip to content

Commit 9e66886

Browse files
CpmStar: Adapter Update bidder implementation to allow imp.ext passth… (#4228)
1 parent 9976884 commit 9e66886

4 files changed

Lines changed: 55 additions & 5 deletions

File tree

src/main/java/org/prebid/server/bidder/cpmstar/CpmStarBidder.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.prebid.server.bidder.cpmstar;
22

33
import com.fasterxml.jackson.core.type.TypeReference;
4+
import com.fasterxml.jackson.databind.JsonNode;
5+
import com.fasterxml.jackson.databind.node.ObjectNode;
46
import com.iab.openrtb.request.BidRequest;
57
import com.iab.openrtb.request.Imp;
68
import com.iab.openrtb.response.Bid;
@@ -79,7 +81,17 @@ private Imp createImp(ExtImpCpmStar extImpCpmStar, Imp imp) {
7981
if (extImpCpmStar == null) {
8082
throw new PreBidException("imp id=%s: bidder.ext is null".formatted(imp.getId()));
8183
}
82-
return imp.toBuilder().ext(mapper.mapper().valueToTree(extImpCpmStar)).build();
84+
85+
final ObjectNode impExt = imp.getExt() != null
86+
? imp.getExt().deepCopy()
87+
: mapper.mapper().createObjectNode();
88+
89+
final JsonNode bidderNode = impExt.remove("bidder");
90+
if (bidderNode != null && bidderNode.isObject()) {
91+
bidderNode.fields().forEachRemaining(entry -> impExt.set(entry.getKey(), entry.getValue()));
92+
}
93+
94+
return imp.toBuilder().ext(impExt).build();
8395
}
8496

8597
@Override

src/test/java/org/prebid/server/bidder/cpmstar/CpmStarBidderTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.prebid.server.bidder.cpmstar;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.node.ObjectNode;
45
import com.iab.openrtb.request.Audio;
56
import com.iab.openrtb.request.Banner;
67
import com.iab.openrtb.request.BidRequest;
@@ -87,6 +88,41 @@ public void makeHttpRequestsShouldSkipInvalidImpressionAndAddError() {
8788
assertThat(result.getValue()).isEmpty();
8889
}
8990

91+
@Test
92+
public void makeHttpRequestsShouldPreserveExistingExtFieldsWhenFlatteningBidder() throws JsonProcessingException {
93+
// given:
94+
final ObjectNode ext = mapper.createObjectNode();
95+
ext.set("bidder", mapper.valueToTree(ExtImpCpmStar.of(12, 123)));
96+
ext.put("gpid", "abc-123");
97+
98+
final Imp imp = Imp.builder()
99+
.id("123")
100+
.banner(Banner.builder().w(300).h(250).build())
101+
.ext(ext)
102+
.build();
103+
104+
final BidRequest bidRequest = BidRequest.builder()
105+
.imp(singletonList(imp))
106+
.build();
107+
108+
final CpmStarBidder target = new CpmStarBidder("https://test.endpoint.com", jacksonMapper);
109+
110+
// when
111+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
112+
113+
// then
114+
assertThat(result.getErrors()).isEmpty();
115+
116+
final BidRequest outgoing = result.getValue().getFirst().getPayload();
117+
final ObjectNode outgoingExt = outgoing.getImp().getFirst().getExt();
118+
119+
assertThat(outgoingExt.has("gpid")).isTrue();
120+
assertThat(outgoingExt.get("gpid").asText()).isEqualTo("abc-123");
121+
assertThat(outgoingExt.has("bidder")).isFalse();
122+
assertThat(outgoingExt.get("placementId").asInt()).isEqualTo(12);
123+
assertThat(outgoingExt.get("subpoolId").asInt()).isEqualTo(123);
124+
}
125+
90126
@Test
91127
public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() {
92128
// given

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@
2121
"gdpr": 0
2222
}
2323
}
24-
}
24+
}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@
99
"h": 250
1010
},
1111
"ext": {
12+
"tid": "${json-unit.any-string}",
1213
"placementId": 1234,
1314
"subpoolId": 1234
1415
}
1516
}
1617
],
17-
"source": {
18-
"tid": "${json-unit.any-string}"
19-
},
2018
"site": {
2119
"domain": "www.example.com",
2220
"page": "http://www.example.com",
@@ -36,6 +34,9 @@
3634
"cur": [
3735
"USD"
3836
],
37+
"source": {
38+
"tid": "${json-unit.any-string}"
39+
},
3940
"regs": {
4041
"ext": {
4142
"gdpr": 0
@@ -52,3 +53,4 @@
5253
}
5354
}
5455
}
56+

0 commit comments

Comments
 (0)