diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java index ffd6c08d184..8f69bda893f 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java @@ -75,6 +75,7 @@ public class PubmaticBidder implements Bidder { private static final String BIDDER_NAME = "pubmatic"; private static final String AE = "ae"; private static final String GP_ID = "gpid"; + private static final String SKADN = "skadn"; private static final String IMP_EXT_PBADSLOT = "pbadslot"; private static final String IMP_EXT_ADSERVER = "adserver"; private static final List IMP_EXT_DATA_RESERVED_FIELD = List.of(IMP_EXT_PBADSLOT, IMP_EXT_ADSERVER); @@ -294,6 +295,9 @@ private ObjectNode makeKeywords(PubmaticBidderImpExt impExt) { if (impExt.getGpId() != null) { keywordsNode.put(GP_ID, impExt.getGpId()); } + if (impExt.getSkadn() != null) { + keywordsNode.set(SKADN, impExt.getSkadn()); + } return keywordsNode; } diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java index bdfd08a9dae..0a248ff8a5b 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java @@ -16,4 +16,6 @@ public class PubmaticBidderImpExt { @JsonProperty("gpid") String gpId; + + ObjectNode skadn; } diff --git a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java index 054d2f2d13e..daf0c96c679 100644 --- a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java @@ -544,6 +544,7 @@ public void makeHttpRequestsShouldAddImpExtAddUnitKeyKeyWordFromDataAdSlotIfAdSe ExtImpPubmatic.builder().build(), extData, null, + null, null ))) .build())) @@ -577,6 +578,7 @@ public void makeHttpRequestsShouldAddImpExtAddUnitKeyKeyWordFromAdServerAdSlotIf ExtImpPubmatic.builder().build(), extData, null, + null, null ))) .build())) @@ -611,6 +613,7 @@ public void makeHttpRequestsShouldAddImpExtWithKeyValWithDctrAndExtDataExceptFor ExtImpPubmatic.builder().dctr("dctr").build(), extData, null, + null, null ))) .build())) @@ -648,6 +651,7 @@ public void makeHttpRequestsShouldAddImpExtWithKeyValWithExtDataWhenDctrIsAbsent ExtImpPubmatic.builder().dctr(null).build(), extData, null, + null, null ))) .build())) @@ -675,7 +679,7 @@ public void makeHttpRequestsShouldAddImpExtAddAE() { .id("123") .banner(Banner.builder().build()) .ext(mapper.valueToTree(PubmaticBidderImpExt.of( - ExtImpPubmatic.builder().build(), null, 1, null))) + ExtImpPubmatic.builder().build(), null, 1, null, null))) .build())) .build(); @@ -700,7 +704,7 @@ public void makeHttpRequestsShouldAddImpExtAddGpId() { .id("123") .banner(Banner.builder().build()) .ext(mapper.valueToTree(PubmaticBidderImpExt.of( - ExtImpPubmatic.builder().build(), null, null, "gpId"))) + ExtImpPubmatic.builder().build(), null, null, "gpId", null))) .build())) .build(); @@ -717,6 +721,34 @@ public void makeHttpRequestsShouldAddImpExtAddGpId() { .containsExactly(expectedImpExt); } + @Test + public void makeHttpRequestsShouldAddImpExtAddSkadn() { + // given + final ObjectNode skadn = mapper.createObjectNode() + .put("field1", 1) + .put("field2", "value"); + final BidRequest bidRequest = BidRequest.builder() + .imp(singletonList(Imp.builder() + .id("123") + .banner(Banner.builder().build()) + .ext(mapper.valueToTree(PubmaticBidderImpExt.of( + ExtImpPubmatic.builder().build(), null, null, null, skadn))) + .build())) + .build(); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + final ObjectNode expectedImpExt = mapper.createObjectNode().set("skadn", skadn); + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getExt) + .containsExactly(expectedImpExt); + } + @Test public void makeHttpRequestsShouldSetImpExtFromKeywordsSkippingKeysWithEmptyValues() { // given