Skip to content

Commit 4cdb2d1

Browse files
authored
Ogury: Allow inventory mapping for in-app traffic. (#4321)
1 parent 18899b8 commit 4cdb2d1

File tree

2 files changed

+47
-13
lines changed

2 files changed

+47
-13
lines changed

src/main/java/org/prebid/server/bidder/ogury/OguryBidder.java

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

33
import com.fasterxml.jackson.databind.node.ObjectNode;
4+
import com.iab.openrtb.request.App;
45
import com.iab.openrtb.request.BidRequest;
56
import com.iab.openrtb.request.Device;
67
import com.iab.openrtb.request.Imp;
@@ -71,14 +72,10 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest bidRequ
7172
}
7273

7374
if (CollectionUtils.isEmpty(impsWithOguryParams)) {
74-
if (bidRequest.getApp() != null) {
75-
errors.add(BidderError.badInput("Invalid request. assetKey/adUnitId required"));
76-
return Result.withErrors(errors);
77-
}
78-
// for "site" request we can serve ads with just publisher.id
75+
// we can serve ads with just publisher.id
7976
if (!hasPublisherId(bidRequest)) {
8077
errors.add(BidderError.badInput(
81-
"Invalid request. assetKey/adUnitId or request.site.publisher.id required"));
78+
"Invalid request. assetKey/adUnitId or request.site/app.publisher.id required"));
8279
return Result.withErrors(errors);
8380
}
8481
}
@@ -145,12 +142,23 @@ private boolean hasOguryParams(Imp imp) {
145142
}
146143

147144
private boolean hasPublisherId(BidRequest request) {
145+
return hasSitePublisherId(request) || hasAppPublisherId(request);
146+
}
147+
148+
private boolean hasSitePublisherId(BidRequest request) {
148149
return Optional.ofNullable(request.getSite())
149150
.map(Site::getPublisher)
150151
.map(Publisher::getId)
151152
.isPresent();
152153
}
153154

155+
private boolean hasAppPublisherId(BidRequest request) {
156+
return Optional.ofNullable(request.getApp())
157+
.map(App::getPublisher)
158+
.map(Publisher::getId)
159+
.isPresent();
160+
}
161+
154162
private MultiMap resolveHeaders(Device device) {
155163
final MultiMap headers = HttpUtil.headers();
156164

src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,9 @@ public void makeHttpRequestsShouldReturnErrorWhenRequestDoesNotHaveOguryKeys() {
124124

125125
// when
126126
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidrequest);
127-
128127
// then
129128
assertThat(result.getErrors()).containsExactly(
130-
BidderError.badInput("Invalid request. assetKey/adUnitId or request.site.publisher.id required"));
129+
BidderError.badInput("Invalid request. assetKey/adUnitId or request.site/app.publisher.id required"));
131130
}
132131

133132
@Test
@@ -189,7 +188,7 @@ public void makeHttpRequestsShouldNotSendImpsWhenHasNotPublisherIdAndImpsWithOgu
189188
assertThat(result.getValue()).isEmpty();
190189

191190
assertThat(result.getErrors()).containsExactly(
192-
BidderError.badInput("Invalid request. assetKey/adUnitId or request.site.publisher.id required"));
191+
BidderError.badInput("Invalid request. assetKey/adUnitId or request.site/app.publisher.id required"));
193192
}
194193

195194
@Test
@@ -214,7 +213,7 @@ public void makeHttpRequestsAppShouldSendOnlyImpsWithOguryParamsIfPresent() {
214213
}
215214

216215
@Test
217-
public void makeHttpRequestsAppShouldNotSendImpsWhenImpsWithOguryIsEmpty() {
216+
public void makeHttpRequestsAppShouldSendAllImpsWhenHasPublisherIdAndImpsWithOguryIsEmpty() {
218217
// given
219218
final ObjectNode emptyImpExt = givenEmptyImpExt();
220219

@@ -226,11 +225,33 @@ public void makeHttpRequestsAppShouldNotSendImpsWhenImpsWithOguryIsEmpty() {
226225
// when
227226
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidrequest);
228227

228+
// then
229+
assertThat(result.getValue()).hasSize(1)
230+
.extracting(HttpRequest::getPayload)
231+
.flatExtracting(BidRequest::getImp)
232+
.hasSize(2);
233+
234+
assertThat(result.getErrors()).isEmpty();
235+
}
236+
237+
@Test
238+
public void makeHttpRequestsAppShouldNotSendImpsWhenHasNotPublisherIdAndImpsWithOguryIsEmpty() {
239+
// given
240+
final ObjectNode emptyImpExt = givenEmptyImpExt();
241+
242+
final BidRequest bidrequest = givenBidRequest(
243+
bidRequest -> bidRequest.app(App.builder().bundle("app_bundle").build()),
244+
givenImp(imp -> imp.id("id1").ext(emptyImpExt)),
245+
givenImp(imp -> imp.id("id2").ext(emptyImpExt)));
246+
247+
// when
248+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidrequest);
249+
229250
// then
230251
assertThat(result.getValue()).isEmpty();
231252

232253
assertThat(result.getErrors()).containsExactly(
233-
BidderError.badInput("Invalid request. assetKey/adUnitId required"));
254+
BidderError.badInput("Invalid request. assetKey/adUnitId or request.site/app.publisher.id required"));
234255
}
235256

236257
@Test
@@ -260,7 +281,7 @@ public void makeHttpRequestsShouldCleanImpExtWithoutLostExtraFields() {
260281
extWithOguryKeys.put("extra_field", "extra_value");
261282

262283
final BidRequest bidrequest = givenBidRequest(
263-
identity(),
284+
bidRequest -> bidRequest.site(givenSite()),
264285
givenImp(imp -> imp.id("id1").ext(extWithOguryKeys)));
265286

266287
// when
@@ -607,7 +628,12 @@ private Site givenSite() {
607628
}
608629

609630
private App givenApp() {
610-
return App.builder().bundle("app_bundle").build();
631+
return App.builder()
632+
.bundle("app_bundle")
633+
.publisher(Publisher.builder()
634+
.id("publiser_id")
635+
.build())
636+
.build();
611637
}
612638

613639
private ObjectNode givenEmptyImpExt() {

0 commit comments

Comments
 (0)