From 76a61bb1cd0d43257d578cd2740fc001d9cdc0d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Wed, 16 Apr 2025 18:17:47 +0200 Subject: [PATCH 1/8] Remove tagid_src ext from MobileFuse Adapter --- .../bidder/mobilefuse/MobilefuseBidder.java | 3 +-- .../request/mobilefuse/ExtImpMobilefuse.java | 3 --- .../static/bidder-params/mobilefuse.json | 4 --- .../mobilefuse/MobilefuseBidderTest.java | 27 +++---------------- .../org/prebid/server/it/MobilefuseTest.java | 2 +- .../test-auction-mobilefuse-request.json | 3 +-- 6 files changed, 7 insertions(+), 35 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index c0e4dc9e292..94ff2df556b 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -99,8 +99,7 @@ private ObjectNode parseSkadn(ObjectNode impExt) { } private String makeUrl(ExtImpMobilefuse extImp) { - final String baseUrl = endpointUrl + Objects.toString(extImp.getPublisherId(), "0"); - return "ext".equals(extImp.getTagidSrc()) ? baseUrl + "&tagid_src=ext" : baseUrl; + return endpointUrl + Objects.toString(extImp.getPublisherId(), "0"); } @Override diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java index 8fd14c9a887..d15ec94cc1d 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java @@ -16,7 +16,4 @@ public class ExtImpMobilefuse { @JsonProperty("pub_id") Integer publisherId; - - @JsonProperty("tagid_src") - String tagidSrc; } diff --git a/src/main/resources/static/bidder-params/mobilefuse.json b/src/main/resources/static/bidder-params/mobilefuse.json index aaab1aca295..713524ea51a 100644 --- a/src/main/resources/static/bidder-params/mobilefuse.json +++ b/src/main/resources/static/bidder-params/mobilefuse.json @@ -11,10 +11,6 @@ "pub_id": { "type": "integer", "description": "An ID which identifies the publisher selling the inventory." - }, - "tagid_src": { - "type": "string", - "description": "ext if passing publisher's ids, empty if passing MobileFuse IDs in placement_id field. Defaults to empty" } }, "required": [ diff --git a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java index 6de8d3f4d65..c8d57f570d6 100644 --- a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java @@ -44,7 +44,7 @@ private static Imp givenImp(Function impCustomiz return impCustomizer.apply(Imp.builder() .id("imp_id") .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, 2, "tagidSrc"))))) + ExtImpMobilefuse.of(1, 2))))) .build(); } @@ -102,25 +102,6 @@ public void creationShouldFailOnInvalidEndpointUrl() { .isThrownBy(() -> new MobilefuseBidder("invalid_url", jacksonMapper)); } - @Test - public void makeHttpRequestsShouldCreateCorrectURLWhenTagidSrcEqualsExt() { - // given - final BidRequest bidRequest = givenBidRequest( - impBuilder -> impBuilder - .banner(Banner.builder().build()) - .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, 2, "ext"))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()) - .extracting(HttpRequest::getUri) - .containsExactly("https://test.endpoint.com/openrtb?pub_id=2&tagid_src=ext"); - } - @Test public void makeHttpRequestsShouldSetPubIdToZeroIfPublisherIdNotPresentInRequest() { // given @@ -128,7 +109,7 @@ public void makeHttpRequestsShouldSetPubIdToZeroIfPublisherIdNotPresentInRequest impBuilder -> impBuilder .banner(Banner.builder().build()) .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, null, null))))); + ExtImpMobilefuse.of(1, null))))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -193,7 +174,7 @@ public void makeHttpRequestsShouldModifyImpTagId() { .banner(Banner.builder().build()) .tagid("some tag id") .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, 2, "ext"))))); + ExtImpMobilefuse.of(1, 2))))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -212,7 +193,7 @@ public void makeHttpRequestsShouldModifyImpWithAddingSkadnWhenSkadnIsPresent() { // given final ObjectNode skadn = mapper.createObjectNode().put("something", "something"); final ObjectNode impExt = mapper.createObjectNode(); - impExt.set("bidder", mapper.valueToTree(ExtImpMobilefuse.of(1, 2, "ext"))); + impExt.set("bidder", mapper.valueToTree(ExtImpMobilefuse.of(1, 2))); impExt.set("skadn", skadn); final BidRequest bidRequest = givenBidRequest( impBuilder -> impBuilder.banner(Banner.builder().build()).ext(impExt)); diff --git a/src/test/java/org/prebid/server/it/MobilefuseTest.java b/src/test/java/org/prebid/server/it/MobilefuseTest.java index e732dce775e..1e8019e9461 100644 --- a/src/test/java/org/prebid/server/it/MobilefuseTest.java +++ b/src/test/java/org/prebid/server/it/MobilefuseTest.java @@ -18,7 +18,7 @@ public class MobilefuseTest extends IntegrationTest { @Test public void openrtb2AuctionShouldRespondWithBidsFromMobilefuse() throws IOException, JSONException { // given - WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/mobilefuse-exchange/1111&tagid_src=ext")) + WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/mobilefuse-exchange/1111")) .withRequestBody(equalToJson(jsonFrom("openrtb2/mobilefuse/test-mobilefuse-bid-request.json"))) .willReturn(aResponse().withBody(jsonFrom("openrtb2/mobilefuse/test-mobilefuse-bid-response.json")))); diff --git a/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json b/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json index 7a535f22be8..6b739e426d7 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json @@ -11,8 +11,7 @@ "ext": { "mobilefuse": { "placement_id": 999999, - "pub_id": 1111, - "tagid_src": "ext" + "pub_id": 1111 } } } From 9d4869250b339cdb8ba486ac9912d68e815cfef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Tue, 22 Apr 2025 12:22:56 +0000 Subject: [PATCH 2/8] remove pub_id query param --- .../bidder/mobilefuse/MobilefuseBidder.java | 2 +- .../request/mobilefuse/ExtImpMobilefuse.java | 3 --- .../resources/bidder-config/mobilefuse.yaml | 2 +- .../static/bidder-params/mobilefuse.json | 7 +---- .../mobilefuse/MobilefuseBidderTest.java | 27 +++---------------- .../org/prebid/server/it/MobilefuseTest.java | 2 +- .../test-auction-mobilefuse-request.json | 3 +-- 7 files changed, 9 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index 94ff2df556b..847b3e1c062 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -99,7 +99,7 @@ private ObjectNode parseSkadn(ObjectNode impExt) { } private String makeUrl(ExtImpMobilefuse extImp) { - return endpointUrl + Objects.toString(extImp.getPublisherId(), "0"); + return endpointUrl; } @Override diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java index d15ec94cc1d..8f66100f650 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/mobilefuse/ExtImpMobilefuse.java @@ -13,7 +13,4 @@ public class ExtImpMobilefuse { @JsonProperty("placement_id") Integer placementId; - - @JsonProperty("pub_id") - Integer publisherId; } diff --git a/src/main/resources/bidder-config/mobilefuse.yaml b/src/main/resources/bidder-config/mobilefuse.yaml index ea6645feb96..95b5ae28460 100644 --- a/src/main/resources/bidder-config/mobilefuse.yaml +++ b/src/main/resources/bidder-config/mobilefuse.yaml @@ -1,6 +1,6 @@ adapters: mobilefuse: - endpoint: http://mfx.mobilefuse.com/openrtb?pub_id= + endpoint: http://mfx.mobilefuse.com/openrtb ortb-version: "2.6" endpoint-compression: gzip # This bidder does not operate globally. Please consider setting "disabled: true" outside of the following regions: diff --git a/src/main/resources/static/bidder-params/mobilefuse.json b/src/main/resources/static/bidder-params/mobilefuse.json index 713524ea51a..5fe5d77c311 100644 --- a/src/main/resources/static/bidder-params/mobilefuse.json +++ b/src/main/resources/static/bidder-params/mobilefuse.json @@ -7,14 +7,9 @@ "placement_id": { "type": "integer", "description": "An ID which identifies this specific inventory placement" - }, - "pub_id": { - "type": "integer", - "description": "An ID which identifies the publisher selling the inventory." } }, "required": [ - "placement_id", - "pub_id" + "placement_id" ] } diff --git a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java index c8d57f570d6..465208f008f 100644 --- a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java @@ -36,7 +36,7 @@ public class MobilefuseBidderTest extends VertxTest { - private static final String ENDPOINT_URL = "https://test.endpoint.com/openrtb?pub_id="; + private static final String ENDPOINT_URL = "https://test.endpoint.com/openrtb"; private final MobilefuseBidder target = new MobilefuseBidder(ENDPOINT_URL, jacksonMapper); @@ -44,7 +44,7 @@ private static Imp givenImp(Function impCustomiz return impCustomizer.apply(Imp.builder() .id("imp_id") .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, 2))))) + ExtImpMobilefuse.of(1))))) .build(); } @@ -102,25 +102,6 @@ public void creationShouldFailOnInvalidEndpointUrl() { .isThrownBy(() -> new MobilefuseBidder("invalid_url", jacksonMapper)); } - @Test - public void makeHttpRequestsShouldSetPubIdToZeroIfPublisherIdNotPresentInRequest() { - // given - final BidRequest bidRequest = givenBidRequest( - impBuilder -> impBuilder - .banner(Banner.builder().build()) - .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, null))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()) - .extracting(HttpRequest::getUri) - .containsExactly("https://test.endpoint.com/openrtb?pub_id=0"); - } - @Test public void makeHttpRequestsShouldReturnErrorIfNoValidImpsFound() { // given @@ -174,7 +155,7 @@ public void makeHttpRequestsShouldModifyImpTagId() { .banner(Banner.builder().build()) .tagid("some tag id") .ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpMobilefuse.of(1, 2))))); + ExtImpMobilefuse.of(1))))); // when final Result>> result = target.makeHttpRequests(bidRequest); @@ -193,7 +174,7 @@ public void makeHttpRequestsShouldModifyImpWithAddingSkadnWhenSkadnIsPresent() { // given final ObjectNode skadn = mapper.createObjectNode().put("something", "something"); final ObjectNode impExt = mapper.createObjectNode(); - impExt.set("bidder", mapper.valueToTree(ExtImpMobilefuse.of(1, 2))); + impExt.set("bidder", mapper.valueToTree(ExtImpMobilefuse.of(1))); impExt.set("skadn", skadn); final BidRequest bidRequest = givenBidRequest( impBuilder -> impBuilder.banner(Banner.builder().build()).ext(impExt)); diff --git a/src/test/java/org/prebid/server/it/MobilefuseTest.java b/src/test/java/org/prebid/server/it/MobilefuseTest.java index 1e8019e9461..3b6bd65a8e9 100644 --- a/src/test/java/org/prebid/server/it/MobilefuseTest.java +++ b/src/test/java/org/prebid/server/it/MobilefuseTest.java @@ -18,7 +18,7 @@ public class MobilefuseTest extends IntegrationTest { @Test public void openrtb2AuctionShouldRespondWithBidsFromMobilefuse() throws IOException, JSONException { // given - WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/mobilefuse-exchange/1111")) + WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/mobilefuse-exchange")) .withRequestBody(equalToJson(jsonFrom("openrtb2/mobilefuse/test-mobilefuse-bid-request.json"))) .willReturn(aResponse().withBody(jsonFrom("openrtb2/mobilefuse/test-mobilefuse-bid-response.json")))); diff --git a/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json b/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json index 6b739e426d7..bc1bf97b9b1 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/mobilefuse/test-auction-mobilefuse-request.json @@ -10,8 +10,7 @@ "tagid": "tag_id", "ext": { "mobilefuse": { - "placement_id": 999999, - "pub_id": 1111 + "placement_id": 999999 } } } From 64b827f454ba0c2adbf1511fa239598b3388bd1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Tue, 22 Apr 2025 13:20:09 +0000 Subject: [PATCH 3/8] fix unit tests --- src/test/java/org/prebid/server/it/MobilefuseTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/prebid/server/it/MobilefuseTest.java b/src/test/java/org/prebid/server/it/MobilefuseTest.java index 3b6bd65a8e9..83ab604f1f5 100644 --- a/src/test/java/org/prebid/server/it/MobilefuseTest.java +++ b/src/test/java/org/prebid/server/it/MobilefuseTest.java @@ -18,7 +18,7 @@ public class MobilefuseTest extends IntegrationTest { @Test public void openrtb2AuctionShouldRespondWithBidsFromMobilefuse() throws IOException, JSONException { // given - WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/mobilefuse-exchange")) + WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/mobilefuse-exchange/")) .withRequestBody(equalToJson(jsonFrom("openrtb2/mobilefuse/test-mobilefuse-bid-request.json"))) .willReturn(aResponse().withBody(jsonFrom("openrtb2/mobilefuse/test-mobilefuse-bid-response.json")))); From 695d694ea221be4d1bc2955b18d95e84820c2520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Tue, 13 May 2025 11:05:00 +0000 Subject: [PATCH 4/8] clean up redundant code which obtains endpoint url --- .../bidder/mobilefuse/MobilefuseBidder.java | 21 +++++-------------- .../mobilefuse/MobilefuseBidderTest.java | 2 +- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index 847b3e1c062..3f83c6ff90f 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -45,17 +45,6 @@ public MobilefuseBidder(String endpointUrl, JacksonMapper mapper) { @Override public Result>> makeHttpRequests(BidRequest request) { - final String endpoint = request.getImp().stream() - .map(this::parseImpExt) - .filter(Objects::nonNull) - .findFirst() - .map(this::makeUrl) - .orElse(null); - - if (endpoint == null) { - return Result.withError(BidderError.badInput("Invalid ExtImpMobilefuse value")); - } - final List modifiedImps = request.getImp().stream() .map(this::modifyImp) .filter(Objects::nonNull) @@ -66,7 +55,7 @@ public Result>> makeHttpRequests(BidRequest request } final BidRequest modifiedRequest = request.toBuilder().imp(modifiedImps).build(); - return Result.withValue(BidderUtil.defaultRequest(modifiedRequest, endpoint, mapper)); + return Result.withValue(BidderUtil.defaultRequest(modifiedRequest, endpointUrl, mapper)); } private Imp modifyImp(Imp imp) { @@ -75,6 +64,10 @@ private Imp modifyImp(Imp imp) { } final ExtImpMobilefuse impExt = parseImpExt(imp); + if (impExt == null) { + return null; + } + final ObjectNode skadn = parseSkadn(imp.getExt()); return imp.toBuilder() .tagid(Objects.toString(impExt.getPlacementId(), "0")) @@ -98,10 +91,6 @@ private ObjectNode parseSkadn(ObjectNode impExt) { } } - private String makeUrl(ExtImpMobilefuse extImp) { - return endpointUrl; - } - @Override public final Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { diff --git a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java index 465208f008f..c7206e591a1 100644 --- a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java @@ -92,7 +92,7 @@ public void makeHttpRequestsShouldReturnErrorIfNoValidExtFound() { // then assertThat(result.getErrors()) - .containsExactly(BidderError.badInput("Invalid ExtImpMobilefuse value")); + .containsExactly(BidderError.badInput("No valid imps")); assertThat(result.getValue()).isEmpty(); } From 2c2221178f96e479553e6d2f395f0c51332850cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Fri, 16 May 2025 09:31:07 +0000 Subject: [PATCH 5/8] remove impExt null check --- .../org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index 3f83c6ff90f..87cf0f69d04 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -64,10 +64,6 @@ private Imp modifyImp(Imp imp) { } final ExtImpMobilefuse impExt = parseImpExt(imp); - if (impExt == null) { - return null; - } - final ObjectNode skadn = parseSkadn(imp.getExt()); return imp.toBuilder() .tagid(Objects.toString(impExt.getPlacementId(), "0")) From 30334519584e50bef124b093f7e9b2f98166e52c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Mon, 19 May 2025 15:07:01 +0000 Subject: [PATCH 6/8] Restore validation for missing ExtImpMobilefuse --- .../prebid/server/bidder/mobilefuse/MobilefuseBidder.java | 8 ++++++++ .../server/bidder/mobilefuse/MobilefuseBidderTest.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index 145811ae32f..382e8c056c6 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -45,6 +45,14 @@ public MobilefuseBidder(String endpointUrl, JacksonMapper mapper) { @Override public Result>> makeHttpRequests(BidRequest request) { + final boolean hasExt = request.getImp().stream() + .map(this::parseImpExt) + .anyMatch(Objects::nonNull); + + if (!hasExt) { + return Result.withError(BidderError.badInput("Invalid ExtImpMobilefuse value")); + } + final List modifiedImps = request.getImp().stream() .map(this::modifyImp) .filter(Objects::nonNull) diff --git a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java index c7206e591a1..465208f008f 100644 --- a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java @@ -92,7 +92,7 @@ public void makeHttpRequestsShouldReturnErrorIfNoValidExtFound() { // then assertThat(result.getErrors()) - .containsExactly(BidderError.badInput("No valid imps")); + .containsExactly(BidderError.badInput("Invalid ExtImpMobilefuse value")); assertThat(result.getValue()).isEmpty(); } From 5d4c0d679a6869ae8272cbfbe17e6853b0afdfb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Wed, 28 May 2025 12:24:56 +0000 Subject: [PATCH 7/8] Align with Golang implementation --- .../bidder/mobilefuse/MobilefuseBidder.java | 47 +++++++++++-------- .../mobilefuse/MobilefuseBidderTest.java | 9 ++-- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index 382e8c056c6..dd2e15feedf 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -23,6 +23,7 @@ import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -45,18 +46,25 @@ public MobilefuseBidder(String endpointUrl, JacksonMapper mapper) { @Override public Result>> makeHttpRequests(BidRequest request) { - final boolean hasExt = request.getImp().stream() - .map(this::parseImpExt) - .anyMatch(Objects::nonNull); - - if (!hasExt) { - return Result.withError(BidderError.badInput("Invalid ExtImpMobilefuse value")); + final List modifiedImps = new ArrayList<>(); + final List errors = new ArrayList<>(); + + for (Imp imp : request.getImp()) { + try { + if (!isValidImp(imp)) { + continue; + } + + final ExtImpMobilefuse extImp = parseImpExt(imp); + modifiedImps.add(modifyImp(imp, extImp)); + } catch (PreBidException e) { + errors.add(BidderError.badInput(e.getMessage())); + } } - final List modifiedImps = request.getImp().stream() - .map(this::modifyImp) - .filter(Objects::nonNull) - .toList(); + if (!errors.isEmpty()) { + return Result.withErrors(errors); + } if (modifiedImps.isEmpty()) { return Result.withError(BidderError.badInput("No valid imps")); @@ -66,32 +74,31 @@ public Result>> makeHttpRequests(BidRequest request return Result.withValue(BidderUtil.defaultRequest(modifiedRequest, endpointUrl, mapper)); } - private Imp modifyImp(Imp imp) { - if (imp.getBanner() == null && imp.getVideo() == null && imp.getXNative() == null) { - return null; - } + private static boolean isValidImp(Imp imp) { + return imp.getBanner() != null || imp.getVideo() != null || imp.getXNative() != null; + } - final ExtImpMobilefuse impExt = parseImpExt(imp); + private Imp modifyImp(Imp imp, ExtImpMobilefuse extImp) { final ObjectNode skadn = parseSkadn(imp.getExt()); return imp.toBuilder() - .tagid(Objects.toString(impExt != null ? impExt.getPlacementId() : null, "0")) + .tagid(Objects.toString(extImp.getPlacementId(), "0")) .ext(skadn != null ? mapper.mapper().createObjectNode().set(SKADN_PROPERTY_NAME, skadn) : null) .build(); } - private ExtImpMobilefuse parseImpExt(Imp imp) { + private ExtImpMobilefuse parseImpExt(Imp imp) throws PreBidException { try { return mapper.mapper().convertValue(imp.getExt(), MOBILEFUSE_EXT_TYPE_REFERENCE).getBidder(); } catch (IllegalArgumentException e) { - return null; + throw new PreBidException("Error parsing ExtImpMobilefuse value: %s".formatted(e.getMessage())); } } - private ObjectNode parseSkadn(ObjectNode impExt) { + private ObjectNode parseSkadn(ObjectNode impExt) throws PreBidException { try { return mapper.mapper().convertValue(impExt.get(SKADN_PROPERTY_NAME), ObjectNode.class); } catch (IllegalArgumentException e) { - return null; + throw new PreBidException(e.getMessage()); } } diff --git a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java index 465208f008f..3f12e65af4e 100644 --- a/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidderTest.java @@ -84,15 +84,18 @@ public void makeHttpRequestsShouldReturnErrorIfNoValidExtFound() { // given final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder .id("456") - .banner(null) + .banner(Banner.builder().build()) .ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); // when final Result>> result = target.makeHttpRequests(bidRequest); // then - assertThat(result.getErrors()) - .containsExactly(BidderError.badInput("Invalid ExtImpMobilefuse value")); + assertThat(result.getErrors()).hasSize(1) + .allSatisfy(error -> { + assertThat(error.getMessage()).startsWith("Error parsing ExtImpMobilefuse value:"); + assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); + }); assertThat(result.getValue()).isEmpty(); } From 14153c4eb8ac7195dfbc4cbc3ca5fd450c47c141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Buga=C5=82a?= Date: Thu, 5 Jun 2025 13:00:40 +0000 Subject: [PATCH 8/8] remove throws and reorder methods --- .../bidder/mobilefuse/MobilefuseBidder.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java index dd2e15feedf..40e5cf72074 100644 --- a/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobilefuse/MobilefuseBidder.java @@ -78,6 +78,14 @@ private static boolean isValidImp(Imp imp) { return imp.getBanner() != null || imp.getVideo() != null || imp.getXNative() != null; } + private ExtImpMobilefuse parseImpExt(Imp imp) { + try { + return mapper.mapper().convertValue(imp.getExt(), MOBILEFUSE_EXT_TYPE_REFERENCE).getBidder(); + } catch (IllegalArgumentException e) { + throw new PreBidException("Error parsing ExtImpMobilefuse value: %s".formatted(e.getMessage())); + } + } + private Imp modifyImp(Imp imp, ExtImpMobilefuse extImp) { final ObjectNode skadn = parseSkadn(imp.getExt()); return imp.toBuilder() @@ -86,15 +94,7 @@ private Imp modifyImp(Imp imp, ExtImpMobilefuse extImp) { .build(); } - private ExtImpMobilefuse parseImpExt(Imp imp) throws PreBidException { - try { - return mapper.mapper().convertValue(imp.getExt(), MOBILEFUSE_EXT_TYPE_REFERENCE).getBidder(); - } catch (IllegalArgumentException e) { - throw new PreBidException("Error parsing ExtImpMobilefuse value: %s".formatted(e.getMessage())); - } - } - - private ObjectNode parseSkadn(ObjectNode impExt) throws PreBidException { + private ObjectNode parseSkadn(ObjectNode impExt) { try { return mapper.mapper().convertValue(impExt.get(SKADN_PROPERTY_NAME), ObjectNode.class); } catch (IllegalArgumentException e) {