From 79604dddb8c639e6f50ea21866098398bb4c7f8e Mon Sep 17 00:00:00 2001 From: Gabriel Mougard Date: Mon, 22 Dec 2025 18:40:18 +0100 Subject: [PATCH] Mobkoi: Always set the TagID with our placementID MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have a discrepancy between our Prebid Server and our Tag/PrebidJS integration. It’s not replacing the `bidrequest.Imp[0].TagID` with our internal value when a TagID is already present. We are able to deliver because the value is set in the `bidrequest.Imp[0].Ext.placementID` field, but this creates discrepancies between the connectors, and it’s not ideal. --- .../server/bidder/mobkoi/MobkoiBidder.java | 8 ++--- .../bidder/mobkoi/MobkoiBidderTest.java | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java b/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java index dbf82da1b4f..699f9dca4c6 100644 --- a/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java +++ b/src/main/java/org/prebid/server/bidder/mobkoi/MobkoiBidder.java @@ -75,14 +75,14 @@ private ExtImpMobkoi parseExtImp(Imp imp) { } private Imp modifyImp(Imp firstImp, ExtImpMobkoi extImpMobkoi) { - if (StringUtils.isNotBlank(firstImp.getTagid())) { - return firstImp; - } - if (StringUtils.isNotBlank(extImpMobkoi.getPlacementId())) { return firstImp.toBuilder().tagid(extImpMobkoi.getPlacementId()).build(); } + if (StringUtils.isNotBlank(firstImp.getTagid())) { + return firstImp; + } + throw new PreBidException("invalid because it comes with neither request.imp[0].tagId nor " + "req.imp[0].ext.Bidder.placementId"); } diff --git a/src/test/java/org/prebid/server/bidder/mobkoi/MobkoiBidderTest.java b/src/test/java/org/prebid/server/bidder/mobkoi/MobkoiBidderTest.java index 7d46ce2a0a8..1b559e579b7 100644 --- a/src/test/java/org/prebid/server/bidder/mobkoi/MobkoiBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/mobkoi/MobkoiBidderTest.java @@ -95,6 +95,38 @@ public void makeHttpRequestsShouldAddPlacementIdOnlyInFirstImpressionTagId() { .containsExactly("pid", null); } + @Test + public void makeHttpRequestsShouldOverrideExistingTagIdWithPlacementId() { + final ObjectNode mobkoiExt = impExt("placement-id-from-ext"); + final Imp givenImp1 = givenImp(impBuilder -> impBuilder.tagid("existing-tag-id").ext(mobkoiExt)); + final Imp givenImp2 = givenImp(identity()); + final BidRequest bidRequest = BidRequest.builder().imp(asList(givenImp1, givenImp2)).build(); + final Result>> result = target.makeHttpRequests(bidRequest); + + assertThat(result.getValue()) + .extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class)) + .flatExtracting(BidRequest::getImp) + .extracting(imp -> imp.getTagid()) + .containsExactly("placement-id-from-ext", null); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void makeHttpRequestsShouldKeepExistingTagIdWhenPlacementIdIsMissing() { + final ObjectNode mobkoiExt = impExt(null); + final Imp givenImp1 = givenImp(impBuilder -> impBuilder.tagid("existing-tag-id").ext(mobkoiExt)); + final Imp givenImp2 = givenImp(identity()); + final BidRequest bidRequest = BidRequest.builder().imp(asList(givenImp1, givenImp2)).build(); + final Result>> result = target.makeHttpRequests(bidRequest); + + assertThat(result.getValue()) + .extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class)) + .flatExtracting(BidRequest::getImp) + .extracting(imp -> imp.getTagid()) + .containsExactly("existing-tag-id", null); + assertThat(result.getErrors()).isEmpty(); + } + @Test public void makeHttpRequestsShouldOverrideUserExtAndSetConsent() { // given