From 6513ab2eacb3d7dcbb70ceecb60b2933780be705 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Wed, 12 Mar 2025 12:06:10 +0530 Subject: [PATCH 1/9] initial changes --- .../server/bidder/gumgum/GumgumBidder.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index cecb9e3c473..200e0dd51e6 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -83,7 +83,12 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err for (Imp imp : bidRequest.getImp()) { try { final ExtImpGumgum extImp = parseImpExt(imp); - modifiedImps.add(modifyImp(imp, extImp)); + + //extract AdUnitID also confirm for imp.tagId + String adUnitId = extractAdUnitId(imp); + + //modify Imp to include AdUnitID in ext + modifiedImps.add(modifyImp(imp, extImp, adUnitId)); final String extZone = extImp.getZone(); if (StringUtils.isNotEmpty(extZone)) { @@ -108,6 +113,13 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err .build(); } + private String extractAdUnitId(Imp imp) { + if (imp.getExt() != null && imp.getExt().has("adunitid")) { + return imp.getExt().get("adunitid").asText(); + } + return null; + } + private ExtImpGumgum parseImpExt(Imp imp) { try { return mapper.mapper().convertValue(imp.getExt(), GUMGUM_EXT_TYPE_REFERENCE).getBidder(); @@ -116,15 +128,23 @@ private ExtImpGumgum parseImpExt(Imp imp) { } } - private Imp modifyImp(Imp imp, ExtImpGumgum extImp) { + private Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { final Imp.ImpBuilder impBuilder = imp.toBuilder(); final String product = extImp.getProduct(); + ObjectNode updatedExt = imp.getExt(); + if (StringUtils.isNotEmpty(product)) { - final ObjectNode productExt = mapper.mapper().createObjectNode().put(REQUEST_EXT_PRODUCT, product); - impBuilder.ext(productExt); + updatedExt = mapper.mapper().createObjectNode().put(REQUEST_EXT_PRODUCT, product); } + //add Ad Unit ID to ext if available + if (StringUtils.isNotEmpty(adUnitId)) { + updatedExt.put("ad_unit_id", adUnitId); + } + + impBuilder.ext(updatedExt); + final Banner banner = imp.getBanner(); if (banner != null) { final Banner resolvedBanner = resolveBanner(banner, extImp); From 7741385b8018c0df0a66ca3f530d410e812dcb29 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Tue, 18 Mar 2025 13:45:39 +0530 Subject: [PATCH 2/9] Setting adUnitId to imp.tagId instead of in the imp.ext --- .../java/org/prebid/server/bidder/gumgum/GumgumBidder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index 200e0dd51e6..f0919044118 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -138,9 +138,9 @@ private Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { updatedExt = mapper.mapper().createObjectNode().put(REQUEST_EXT_PRODUCT, product); } - //add Ad Unit ID to ext if available + //set AdUnitID to imp.tagId if (StringUtils.isNotEmpty(adUnitId)) { - updatedExt.put("ad_unit_id", adUnitId); + impBuilder.tagid(adUnitId); } impBuilder.ext(updatedExt); From 6f3c348d6726569b765d2451eb14cc30c3ec3a11 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Tue, 25 Mar 2025 14:02:16 +0530 Subject: [PATCH 3/9] initial test cases --- .../bidder/gumgum/GumgumBidderTest.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java index 2595b6d903a..b07e4726da8 100644 --- a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java @@ -31,6 +31,7 @@ import java.util.function.Function; import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.function.Function.identity; import static org.assertj.core.api.Assertions.assertThat; @@ -45,6 +46,87 @@ public class GumgumBidderTest extends VertxTest { private final GumgumBidder target = new GumgumBidder(ENDPOINT_URL, jacksonMapper); + @Test + public void makeHttpRequestsShouldReturnErrorIfImpHasNoBannerOrVideo() { + + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.banner(null).video(null)); + + final Result>> result = target.makeHttpRequests(bidRequest); + + assertThat(result.getErrors()).hasSize(1) + .allSatisfy(error -> { + assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); + assertThat(error.getMessage()).isEqualTo("Invalid impression: missing banner and video"); + }); + assertThat(result.getValue()).isEmpty(); + } + + @Test + public void makeBidsShouldReturnErrorIfCurrencyIsMissing() throws JsonProcessingException { + // given + final BidRequest bidRequest = BidRequest.builder() + .imp(singletonList(Imp.builder().id("123").build())) + .build(); + final BidResponse bidResponse = BidResponse.builder() + .seatbid(singletonList(SeatBid.builder() + .bid(singletonList(Bid.builder().impid("123").price(BigDecimal.valueOf(5)).build())) + .build())) + .build(); + + final BidderCall httpCall = givenHttpCall(bidRequest, mapper.writeValueAsString(bidResponse)); + + // when + final Result> result = target.makeBids(httpCall, bidRequest); + + // then + assertThat(result.getErrors()).hasSize(1) + .allSatisfy(error -> { + assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response); + assertThat(error.getMessage()).isEqualTo("Bid response currency is missing"); + }); + assertThat(result.getValue()).isEmpty(); + } + + @Test + public void makeHttpRequestsShouldHandleMultipleImpressions() { + // given + final BidRequest bidRequest = BidRequest.builder() + .imp(asList( + givenImp(impBuilder -> impBuilder.banner(Banner.builder().w(300).h(250).build())), + givenImp(impBuilder -> impBuilder.video(Video.builder().w(640).h(360).build())) + )) + .build(); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1); + } + + @Test + public void makeBidsShouldReturnEmptyListIfNoValidBidsArePresent() throws JsonProcessingException { + // given + final BidRequest bidRequest = BidRequest.builder() + .imp(singletonList(Imp.builder().id("123").build())) + .build(); + final BidResponse bidResponse = BidResponse.builder() + .seatbid(singletonList(SeatBid.builder().bid(emptyList()).build())) + .build(); + + final BidderCall httpCall = givenHttpCall(bidRequest, mapper.writeValueAsString(bidResponse)); + + // when + final Result> result = target.makeBids(httpCall, bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).isEmpty(); + } + + @Test public void creationShouldFailOnInvalidEndpointUrl() { assertThatIllegalArgumentException().isThrownBy(() -> new GumgumBidder("invalid_url", jacksonMapper)); From 7d1891db4262257916c979bd192cf05dc7e69524 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Fri, 4 Apr 2025 11:24:50 +0530 Subject: [PATCH 4/9] working on test cases --- .../server/bidder/gumgum/GumgumBidder.java | 79 ++- .../bidder/gumgum/GumgumBidderTest.java | 636 ++++++++++++++++-- 2 files changed, 661 insertions(+), 54 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index f0919044118..2a549d5f48c 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -75,7 +75,55 @@ public Result>> makeHttpRequests(BidRequest bidRequ errors); } - private BidRequest createBidRequest(BidRequest bidRequest, List errors) { +// + +// protected BidRequest createBidRequest(BidRequest bidRequest, List errors) { +// final List modifiedImps = new ArrayList<>(); +// String zone = null; +// BigInteger pubId = null; +// +// for (Imp imp : bidRequest.getImp()) { +// try { +// final ExtImpGumgum extImp = parseImpExt(imp); +// +// //extract AdUnitID also confirm for imp.tagId +// final String adUnitId = extractAdUnitId(imp); +// +// //modify Imp to include AdUnitID in ext +// modifiedImps.add(modifyImp(imp, extImp, adUnitId)); +// +// final String extZone = extImp.getZone(); +// if (StringUtils.isNotEmpty(extZone)) { +// zone = extZone; +// } +// final BigInteger extPubId = extImp.getPubId(); +// if (extPubId != null && !extPubId.equals(BigInteger.ZERO)) { +// pubId = extPubId; +// } +// } catch (PreBidException e) { +// errors.add(BidderError.badInput(e.getMessage())); +// } +// } +// +// if (modifiedImps.isEmpty()) { +// throw new PreBidException("No valid impressions"); +// } +// +// return bidRequest.toBuilder() +// .imp(modifiedImps) +// .site(modifySite(bidRequest.getSite(), zone, pubId)) +// .build(); +// } + +// protected String extractAdUnitId(Imp imp) { +// if (imp.getExt() != null && imp.getExt().has("adunitid")) { +// return imp.getExt().get("adunitid").asText(); +// } +// return null; +// } + + + protected BidRequest createBidRequest(BidRequest bidRequest, List errors) { final List modifiedImps = new ArrayList<>(); String zone = null; BigInteger pubId = null; @@ -83,21 +131,26 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err for (Imp imp : bidRequest.getImp()) { try { final ExtImpGumgum extImp = parseImpExt(imp); + if (extImp == null) { + throw new PreBidException("Cannot parse extImp from imp.ext"); + } - //extract AdUnitID also confirm for imp.tagId - String adUnitId = extractAdUnitId(imp); + // extract AdUnitID also confirm for imp.tagId + final String adUnitId = extractAdUnitId(imp); - //modify Imp to include AdUnitID in ext + // modify Imp to include AdUnitID in ext modifiedImps.add(modifyImp(imp, extImp, adUnitId)); final String extZone = extImp.getZone(); if (StringUtils.isNotEmpty(extZone)) { zone = extZone; } + final BigInteger extPubId = extImp.getPubId(); if (extPubId != null && !extPubId.equals(BigInteger.ZERO)) { pubId = extPubId; } + } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); } @@ -113,9 +166,10 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err .build(); } - private String extractAdUnitId(Imp imp) { - if (imp.getExt() != null && imp.getExt().has("adunitid")) { - return imp.getExt().get("adunitid").asText(); + + protected String extractAdUnitId(Imp imp) { + if (imp.getExt() != null && imp.getExt().has("bidder") && imp.getExt().get("bidder").has("adunitid")) { + return imp.getExt().get("bidder").get("adunitid").asText(); } return null; } @@ -128,9 +182,18 @@ private ExtImpGumgum parseImpExt(Imp imp) { } } - private Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { + + protected Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { final Imp.ImpBuilder impBuilder = imp.toBuilder(); + // Debugging: Check the adUnitId and extImp + System.out.println("adUnitId: " + adUnitId); // Debugging + System.out.println("extImp.getZone(): " + extImp.getZone()); // Debugging + + if (extImp == null) { + extImp = ExtImpGumgum.of(null, null, null, null, null); // Create an empty ExtImpGumgum object + } + final String product = extImp.getProduct(); ObjectNode updatedExt = imp.getExt(); diff --git a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java index b07e4726da8..d3033796e6d 100644 --- a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java @@ -1,6 +1,7 @@ package org.prebid.server.bidder.gumgum; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; @@ -12,7 +13,13 @@ import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; +import org.assertj.core.api.Assertions; +import org.junit.Before; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.prebid.server.VertxTest; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -20,13 +27,18 @@ import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; +import org.prebid.server.exception.PreBidException; +import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgum; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumBanner; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumVideo; +import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.Function; @@ -37,6 +49,14 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.tuple; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.doReturn; import static org.prebid.server.proto.openrtb.ext.response.BidType.banner; import static org.prebid.server.proto.openrtb.ext.response.BidType.video; @@ -46,87 +66,423 @@ public class GumgumBidderTest extends VertxTest { private final GumgumBidder target = new GumgumBidder(ENDPOINT_URL, jacksonMapper); - @Test - public void makeHttpRequestsShouldReturnErrorIfImpHasNoBannerOrVideo() { +// @Test +// public void createBidRequestShouldReturnErrorsIfImpExtCouldNotBeParsed() { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); +// +// // when +// final List errors = target.createBidRequest(bidRequest, errorsList()); +// +// // then +// assertThat(errors).hasSize(1) +// .anySatisfy(error -> { +// assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); +// assertThat(error.getMessage()).startsWith("Cannot deserialize value"); +// }); +// } + + @Test + public void makeHttpRequestsShouldReturnErrorsIfImpExtCouldNotBeParsed1() { + // given final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.banner(null).video(null)); + impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); + // when final Result>> result = target.makeHttpRequests(bidRequest); - assertThat(result.getErrors()).hasSize(1) - .allSatisfy(error -> { + // then + assertThat(result.getErrors()).hasSize(2) + .anySatisfy(error -> { assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); - assertThat(error.getMessage()).isEqualTo("Invalid impression: missing banner and video"); + assertThat(error.getMessage()).startsWith("Cannot deserialize value"); }); - assertThat(result.getValue()).isEmpty(); } + +// @Test +// public void makeHttpRequestsShouldModifyImpressions_WhenValidInput() { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); +// +// // when +// final Result>> result = target.makeHttpRequests(bidRequest); +// +// // then +//// assertThat(result.getErrors()).isEmpty(); +//// assertThat(result.getValue()).hasSize(1); +// assertThat(result.getImp()).hasSize(1); +// assertThat(result.getImp()) +// .extracting(Imp::getTagid) +// .containsExactly("zone"); +// } +// +// +// @Test +// public void createBidRequestShouldModifyImpressions_WhenValidInput() { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "product", "irisId", null))))); +// +// // when +// final BidRequest result = target.createBidRequest(bidRequest, errorsList()); +// +// // then +// assertThat(result.getImp()).hasSize(1); +// assertThat(result.getImp()) +// .extracting(Imp::getTagid) +// .containsExactly("zone"); +// } + @Test - public void makeBidsShouldReturnErrorIfCurrencyIsMissing() throws JsonProcessingException { + public void makeHttpRequestsShouldModifyImpressions_WhenValidInput9() throws IOException { // given - final BidRequest bidRequest = BidRequest.builder() - .imp(singletonList(Imp.builder().id("123").build())) - .build(); - final BidResponse bidResponse = BidResponse.builder() - .seatbid(singletonList(SeatBid.builder() - .bid(singletonList(Bid.builder().impid("123").price(BigDecimal.valueOf(5)).build())) - .build())) - .build(); - - final BidderCall httpCall = givenHttpCall(bidRequest, mapper.writeValueAsString(bidResponse)); + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); // when - final Result> result = target.makeBids(httpCall, bidRequest); + final Result>> result = target.makeHttpRequests(bidRequest); // then - assertThat(result.getErrors()).hasSize(1) - .allSatisfy(error -> { - assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response); - assertThat(error.getMessage()).isEqualTo("Bid response currency is missing"); - }); - assertThat(result.getValue()).isEmpty(); + assertThat(result.getErrors()).isEmpty(); // This can be uncommented if you want to check for errors + assertThat(result.getValue()).hasSize(1); + + // Deserialize byte[] body into BidRequest + byte[] requestBody = result.getValue().get(0).getBody(); // Get the byte array + BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); // Deserialize the byte[] to BidRequest + + assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct + assertThat(modifiedRequest.getImp()) + .extracting(Imp::getTagid) + .containsExactly("zone"); // Validate that the tagId has been set correctly } + +// @Test +// public void makeHttpRequestsShouldModifyImpressions_WhenValidInput() throws IOException { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); +// +// // when +// final Result>> result = target.makeHttpRequests(bidRequest); +// +// // Deserialize byte[] body into BidRequest +// byte[] requestBody = result.getValue().get(0).getBody(); +// BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); +// +// // then +// assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct +// +// // Debugging: Check if the tagid was set correctly +// System.out.println("Modified Imp tagid: " + modifiedRequest.getImp().get(0).getTagid()); // Debugging +// +// assertThat(modifiedRequest.getImp()) +// .extracting(Imp::getTagid) +// .containsExactly("zone"); // Validate that the tagId has been set correctly +// } +@Test +public void makeHttpRequestsShouldModifyImpressions_WhenValidInput() throws IOException { + // given + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // Deserialize byte[] body into BidRequest + byte[] requestBody = result.getValue().get(0).getBody(); + BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); + + // then + assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct + + //check if the tagid was set correctly + System.out.println("Modified Imp tagid: " + modifiedRequest.getImp().get(0).getTagid()); + + assertThat(modifiedRequest.getImp()) + .extracting(Imp::getTagid) + .containsExactly("zone"); // Validate that the tagId has been set correctly +} + + + + + + + + @Test - public void makeHttpRequestsShouldHandleMultipleImpressions() { + public void makeHttpRequestsShouldModifyImpressionsWhenValidInput1() throws IOException { // given - final BidRequest bidRequest = BidRequest.builder() - .imp(asList( - givenImp(impBuilder -> impBuilder.banner(Banner.builder().w(300).h(250).build())), - givenImp(impBuilder -> impBuilder.video(Video.builder().w(640).h(360).build())) - )) - .build(); + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); + + // Add adunitid to the ext field + extImp.with("bidder").put("adunitid", "adUnit123"); // Setting adunitid within bidder object + + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(extImp)); // Pass the modified extImp with adunitid // when final Result>> result = target.makeHttpRequests(bidRequest); + // Deserialize byte[] body into BidRequest + byte[] requestBody = result.getValue().get(0).getBody(); + BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); + // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).hasSize(1); + assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct + + // Debugging: Check if the tagid was set correctly + System.out.println("Modified Imp tagid: " + modifiedRequest.getImp().get(0).getTagid()); // Debugging + + // Validate that the tagId is correctly set to adUnitid (which was set to "adUnit123") + assertThat(modifiedRequest.getImp()) + .extracting(Imp::getTagid) + .containsExactly("adUnit123"); // Validate that tagid is set to "adUnit123" } + + + + +// @Test +// public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOException { +// //given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "product", 12345L, null))))); +// +// //when +// final Result>> result = target.makeHttpRequests(bidRequest); +// +// //then +// assertThat(result.getErrors()).isEmpty(); +// assertThat(result.getValue()).hasSize(1); +// +// //deserialize response body before extracting Imp +// final BidRequest modifiedBidRequest = mapper.readValue(result.getValue().get(0).getBody(), BidRequest.class); +// +// //verify Imp.ext contains correct values +// for (Imp imp : modifiedBidRequest.getImp()) { +// try { +// ExtImpGumgum extractedExt = mapper.treeToValue(imp.getExt(), ExtImpGumgum.class); +// assertThat(extractedExt.getZone()).isEqualTo("zone"); +// } catch (JsonProcessingException e) { +// Assertions.fail("Failed to parse Imp.ext"); +// } +// } +// +// //ensure tagid is correctly set +// assertThat(modifiedBidRequest.getImp()) +// .extracting(Imp::getTagid) +// .containsExactly("zone"); +// } +// + +// @Test +// public void testMakeHttpRequestsShouldSetTagIdFromZoneWhenAdUnitIdIsMissing() throws IOException { +// // Given: Imp without adunitid but with zone +// ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone123", BigInteger.TEN, "productA", null, "zone123"))); +// +// Imp imp = Imp.builder() +// .id("imp1") +// .banner(Banner.builder().w(300).h(250).build()) +// .ext(extImp) +// .build(); +// +// BidRequest bidRequest = BidRequest.builder() +// .id("test-bid-request") +// .imp(Collections.singletonList(imp)) +// .site(Site.builder().id("test-site").build()) +// .build(); +// +//// GumgumBidder bidder = new GumgumBidder("https://test.endpoint.com", mapper); +// +// // When: Calling makeHttpRequests +// Result>> result = target.makeHttpRequests(bidRequest); +// +// // Then: Validate the request was modified correctly +// assertNotNull(result); +// assertFalse(result.getValue().isEmpty()); +// +// // Deserialize byte[] body into BidRequest +// byte[] requestBody = result.getValue().get(0).getBody(); +// BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); +// +// assertFalse(modifiedRequest.getImp().isEmpty()); +// +// Imp modifiedImp = modifiedRequest.getImp().get(0); +// assertEquals("zone123", modifiedImp.getTagid(), "Imp.tagid should be set to zone value"); +// } + + @Test - public void makeBidsShouldReturnEmptyListIfNoValidBidsArePresent() throws JsonProcessingException { - // given - final BidRequest bidRequest = BidRequest.builder() - .imp(singletonList(Imp.builder().id("123").build())) + public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() throws IOException { + // Given: Imp without adUnitId but with zone + ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone123", BigInteger.TEN, "productA", null, "zone123"))); + + Imp imp = Imp.builder() + .id("imp1") + .banner(Banner.builder().w(300).h(250).build()) + .ext(extImp) .build(); - final BidResponse bidResponse = BidResponse.builder() - .seatbid(singletonList(SeatBid.builder().bid(emptyList()).build())) + + BidRequest bidRequest = BidRequest.builder() + .id("test-bid-request") + .imp(Collections.singletonList(imp)) + .site(Site.builder().id("test-site").build()) .build(); - final BidderCall httpCall = givenHttpCall(bidRequest, mapper.writeValueAsString(bidResponse)); + System.out.println("Before makeHttpRequests: " + bidRequest); + + // When: Calling makeHttpRequests + Result>> result = target.makeHttpRequests(bidRequest); + + // Then: Validate the request was modified correctly + assertNotNull(result); + assertFalse(result.getValue().isEmpty()); + + // Deserialize byte[] body into BidRequest + byte[] requestBody = result.getValue().get(0).getBody(); + BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); + + System.out.println("After makeHttpRequests: " + modifiedRequest); + + assertFalse(modifiedRequest.getImp().isEmpty()); + + Imp modifiedImp = modifiedRequest.getImp().get(0); + +// assertNull(modifiedImp.getTagid(),null ); + + assertNull(modifiedImp.getTagid()); + + + ExtImpGumgum extractedExtImp = mapper.convertValue(modifiedImp.getExt(), ExtImpGumgum.class); +// assertEquals("zone123", extractedExtImp.getZone(), "Zone should still be present in ExtImpGumgum"); + + assertEquals("test-site", modifiedRequest.getSite().getId(), "zone123"); + } + + + @Test + public void makeHttpRequestsShouldReturnErrorsWhenNoValidImpressions() { + // given + final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(mapper.createObjectNode())); // when - final Result> result = target.makeBids(httpCall, bidRequest); + final Result>> result = target.makeHttpRequests(bidRequest); // then - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()).isEmpty(); + assertThat(result.getErrors()).hasSize(1) + .anySatisfy(error -> { + assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); + assertThat(error.getMessage()).isEqualTo("No valid impressions"); + }); } +// @Test +// public void makeHttpRequestsShouldUseZoneAndPubIdWhenPresent() throws IOException { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone1", BigInteger.valueOf(1001), "product1", 12345L, null)))), +// Site.builder() +// .id("existingZone") // Set a default site ID +// .publisher(Publisher.builder().id("existingPubId").build()) +// .build()); +// +// // Log original request +// System.out.println("Original BidRequest: " + mapper.writeValueAsString(bidRequest)); +// +// // when +// final Result>> result = target.makeHttpRequests(bidRequest); +// +// // then +// assertThat(result.getErrors()).isEmpty(); +// +// // Deserialize the response body from byte[] to BidRequest +// final BidRequest modifiedBidRequest = mapper.readValue(result.getValue().get(0).getBody(), BidRequest.class); +// +// // Log modified request +// System.out.println("Modified BidRequest: " + mapper.writeValueAsString(modifiedBidRequest)); +// +// //Ensure Site is not null +// assertThat(modifiedBidRequest.getSite()).isNotNull(); +// +// // Ensure Publisher is not null +// assertThat(modifiedBidRequest.getSite().getPublisher()).isNotNull(); +// +// // Assertions +// assertThat(modifiedBidRequest.getSite().getPublisher().getId()).isEqualTo("1001"); +// assertThat(modifiedBidRequest.getSite().getId()).isEqualTo("zone1"); +// } + + +// +// @Test +// public void makeHttpRequestsShouldModifyVideoExtIfIrisIdIsPresent() { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.video(Video.builder().w(20).h(30).build()) +// .ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "product", "irisId", null))))); +// +// // when +// final Result>> result = target.makeHttpRequests(bidRequest); +// +// // then +// final ObjectNode expectedVideoExt = mapper.valueToTree(ExtImpGumgumVideo.of("irisId")); +// assertThat(result.getErrors()).isEmpty(); +// assertThat(result.getValue().get(0).getBody().getImp()) +// .extracting(Imp::getVideo) +// .extracting(Video::getExt) +// .containsExactly(expectedVideoExt); +// } +// +// @Test +// public void makeHttpRequestsShouldNotChangeBannerSizeIfAlreadyPresent() { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.banner(Banner.builder() +// .format(singletonList(Format.builder().w(300).h(450).build())) +// .w(600).h(900) +// .build())); +// +// // when +// final Result>> result = target.makeHttpRequests(bidRequest); +// +// // then +// assertThat(result.getErrors()).isEmpty(); +// assertThat(result.getValue().get(0).getBody().getImp()) +// .extracting(Imp::getBanner) +// .extracting(Banner::getW, Banner::getH) +// .containsExactly(tuple(600, 900)); +// } +// +// +// +// +// +// +// +// + + + + @Test public void creationShouldFailOnInvalidEndpointUrl() { assertThatIllegalArgumentException().isThrownBy(() -> new GumgumBidder("invalid_url", jacksonMapper)); @@ -467,6 +823,174 @@ public void makeBidsShouldTolerateWithNullSeatOrBidValues() throws JsonProcessin assertThat(result.getValue()).hasSize(1); } +//nnn + @Test + public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput() { + // given + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); + + final List errors = new ArrayList<>(); + + // when + final BidRequest result = target.createBidRequest(bidRequest, errors); + + // then + assertThat(errors).isEmpty(); + assertThat(result.getImp()).hasSize(1); + assertThat(result.getImp()) + .extracting(Imp::getTagid) + .containsExactly("zone"); + } + +// @Test +// public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput23() { +// // given +// final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); +// extImp.with("bidder").put("adunitid", "zone"); // call modify Imps +// +// final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); +// +// final List errors = new ArrayList<>(); +// +// // when +// final BidRequest result = target.createBidRequest(bidRequest, errors); +// +// // then +// assertThat(errors).isEmpty(); +// assertThat(result.getImp()).hasSize(1); +// assertThat(result.getImp()) +// .extracting(Imp::getTagid) +// .containsExactly("zone"); +// } + + + @Test + public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput23() { + // given + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); + extImp.with("bidder").put("adunitid", "adUnit123"); // Set adunitid + + final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); + + final List errors = new ArrayList<>(); + + // when + final BidRequest result = target.createBidRequest(bidRequest, errors); + + // then + assertThat(errors).isEmpty(); + assertThat(result.getImp()).hasSize(1); + assertThat(result.getImp()) + .extracting(Imp::getTagid) + .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 + } + + @Test + public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput2() { + // given + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); + extImp.with("bidder").put("adunitid", "adUnit123"); // Set adunitid + + final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); + + final List errors = new ArrayList<>(); + + // when + final BidRequest result = target.createBidRequest(bidRequest, errors); + + // then + assertThat(errors).isEmpty(); + assertThat(result.getImp()).hasSize(1); + assertThat(result.getImp()) + .extracting(Imp::getTagid) + .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 + } + +// @Test +// public void createBidRequestShouldReturnErrorsWhenImpExtCouldNotBeParsed() { +// // given +// final BidRequest bidRequest = givenBidRequest(impBuilder -> +// impBuilder.ext(mapper.createObjectNode())); +// +// final List errors = new ArrayList<>(); +// +// // when +// final BidRequest result = target.createBidRequest(bidRequest, errors);//create an empty object +// +// // then +// assertThat(errors).hasSize(1) +// .anySatisfy(error -> { +// assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); +// assertThat(error.getMessage()).startsWith("Cannot deserialize value"); +// }); +// } + + + @Test + public void createBidRequestShouldReturnErrorsWhenImpExtCouldNotBeParsed1() { + // given: bid request with empty or malformed ext + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(mapper.createObjectNode())); // empty object node simulates bad input + + final List errors = new ArrayList<>(); + + // when + final BidRequest result = target.createBidRequest(bidRequest, errors); + + // then: should not crash, should return an error + assertThat(errors).hasSize(1) + .anySatisfy(error -> { + assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); + assertThat(error.getMessage()).contains("Cannot parse extImp"); + }); + } + + + @Test + public void createBidRequestShouldThrowExceptionWhenNoValidImpressions() { + // given + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(mapper.createObjectNode())); + + final List errors = new ArrayList<>(); + + // when & then + Assertions.assertThatThrownBy(() -> target.createBidRequest(bidRequest, errors)) + .isInstanceOf(PreBidException.class) + .hasMessage("No valid impressions"); + } + + @Test + public void extractAdUnitIdShouldReturnAdUnitIdWhenPresent() { + // given + final ObjectNode ext = mapper.createObjectNode().put("adunitid", "adUnit123"); + final Imp imp = Imp.builder().ext(ext).build(); + + // when + final String adUnitId = target.extractAdUnitId(imp); + + // then + assertThat(adUnitId).isEqualTo("adUnit123"); + } + + @Test + public void extractAdUnitIdShouldReturnNullWhenAdUnitIdNotPresent() { + // given + final ObjectNode ext = mapper.createObjectNode(); + final Imp imp = Imp.builder().ext(ext).build(); + + // when + final String adUnitId = target.extractAdUnitId(imp); + + // then + assertThat(adUnitId).isNull(); + } + private static BidRequest givenBidRequest( Function bidRequestCustomizer, Function impCustomizer) { @@ -476,14 +1000,30 @@ private static BidRequest givenBidRequest( .build(); } +// private static BidRequest givenBidRequest(Function impCustomizer) { +// return givenBidRequest(identity(), impCustomizer); +// } + private static BidRequest givenBidRequest(Function impCustomizer) { - return givenBidRequest(identity(), impCustomizer); + return BidRequest.builder() + .imp(Collections.singletonList(givenImp(impCustomizer))) + .site(Site.builder().build()) + .build(); } +// private static Imp givenImp(Function impCustomizer) { +// return impCustomizer.apply(Imp.builder() +// .id("123") +// .banner(Banner.builder().id("banner_id").build()) +// .ext(mapper.valueToTree(ExtPrebid.of(null, +// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", 1L, null))))) +// .build(); +// } + private static Imp givenImp(Function impCustomizer) { return impCustomizer.apply(Imp.builder() .id("123") - .banner(Banner.builder().id("banner_id").build()) + .banner(Banner.builder().build()) .ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", 1L, null))))) .build(); @@ -504,4 +1044,8 @@ private static BidderCall givenHttpCall(BidRequest bidRequest, Strin HttpResponse.of(200, null, body), null); } + + + + } From e380cea9a2e755e2dcc67ab585cd154a124c48f7 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Tue, 15 Apr 2025 11:36:11 +0530 Subject: [PATCH 5/9] Pushing test cases and final changes --- .../server/bidder/gumgum/GumgumBidder.java | 59 +- .../bidder/gumgum/GumgumBidderTest.java | 619 +++--------------- 2 files changed, 86 insertions(+), 592 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index 2a549d5f48c..aeb0b4f71c8 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -75,54 +75,6 @@ public Result>> makeHttpRequests(BidRequest bidRequ errors); } -// - -// protected BidRequest createBidRequest(BidRequest bidRequest, List errors) { -// final List modifiedImps = new ArrayList<>(); -// String zone = null; -// BigInteger pubId = null; -// -// for (Imp imp : bidRequest.getImp()) { -// try { -// final ExtImpGumgum extImp = parseImpExt(imp); -// -// //extract AdUnitID also confirm for imp.tagId -// final String adUnitId = extractAdUnitId(imp); -// -// //modify Imp to include AdUnitID in ext -// modifiedImps.add(modifyImp(imp, extImp, adUnitId)); -// -// final String extZone = extImp.getZone(); -// if (StringUtils.isNotEmpty(extZone)) { -// zone = extZone; -// } -// final BigInteger extPubId = extImp.getPubId(); -// if (extPubId != null && !extPubId.equals(BigInteger.ZERO)) { -// pubId = extPubId; -// } -// } catch (PreBidException e) { -// errors.add(BidderError.badInput(e.getMessage())); -// } -// } -// -// if (modifiedImps.isEmpty()) { -// throw new PreBidException("No valid impressions"); -// } -// -// return bidRequest.toBuilder() -// .imp(modifiedImps) -// .site(modifySite(bidRequest.getSite(), zone, pubId)) -// .build(); -// } - -// protected String extractAdUnitId(Imp imp) { -// if (imp.getExt() != null && imp.getExt().has("adunitid")) { -// return imp.getExt().get("adunitid").asText(); -// } -// return null; -// } - - protected BidRequest createBidRequest(BidRequest bidRequest, List errors) { final List modifiedImps = new ArrayList<>(); String zone = null; @@ -135,10 +87,10 @@ protected BidRequest createBidRequest(BidRequest bidRequest, List e throw new PreBidException("Cannot parse extImp from imp.ext"); } - // extract AdUnitID also confirm for imp.tagId + //extract AdUnitID also confirm for imp.tagId final String adUnitId = extractAdUnitId(imp); - // modify Imp to include AdUnitID in ext + //modify Imp to include AdUnitID in ext modifiedImps.add(modifyImp(imp, extImp, adUnitId)); final String extZone = extImp.getZone(); @@ -182,16 +134,11 @@ private ExtImpGumgum parseImpExt(Imp imp) { } } - protected Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { final Imp.ImpBuilder impBuilder = imp.toBuilder(); - // Debugging: Check the adUnitId and extImp - System.out.println("adUnitId: " + adUnitId); // Debugging - System.out.println("extImp.getZone(): " + extImp.getZone()); // Debugging - if (extImp == null) { - extImp = ExtImpGumgum.of(null, null, null, null, null); // Create an empty ExtImpGumgum object + extImp = ExtImpGumgum.of(null, null, null, null, null); //create an empty ExtImpGumgum object } final String product = extImp.getProduct(); diff --git a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java index d3033796e6d..8b94892ca9c 100644 --- a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java @@ -1,7 +1,6 @@ package org.prebid.server.bidder.gumgum; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; @@ -14,12 +13,7 @@ import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import org.assertj.core.api.Assertions; -import org.junit.Before; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.prebid.server.VertxTest; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; @@ -28,7 +22,6 @@ import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; import org.prebid.server.exception.PreBidException; -import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgum; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumBanner; @@ -43,20 +36,15 @@ import java.util.function.Function; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.function.Function.identity; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.tuple; -import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.doReturn; import static org.prebid.server.proto.openrtb.ext.response.BidType.banner; import static org.prebid.server.proto.openrtb.ext.response.BidType.video; @@ -66,34 +54,16 @@ public class GumgumBidderTest extends VertxTest { private final GumgumBidder target = new GumgumBidder(ENDPOINT_URL, jacksonMapper); - -// @Test -// public void createBidRequestShouldReturnErrorsIfImpExtCouldNotBeParsed() { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); -// -// // when -// final List errors = target.createBidRequest(bidRequest, errorsList()); -// -// // then -// assertThat(errors).hasSize(1) -// .anySatisfy(error -> { -// assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); -// assertThat(error.getMessage()).startsWith("Cannot deserialize value"); -// }); -// } - @Test - public void makeHttpRequestsShouldReturnErrorsIfImpExtCouldNotBeParsed1() { - // given + public void makeHttpRequestsShouldReturnErrorIfImpExtCouldNotBeParsed() { + //given final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); - // when + //when final Result>> result = target.makeHttpRequests(bidRequest); - // then + //then assertThat(result.getErrors()).hasSize(2) .anySatisfy(error -> { assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); @@ -101,235 +71,38 @@ public void makeHttpRequestsShouldReturnErrorsIfImpExtCouldNotBeParsed1() { }); } - -// @Test -// public void makeHttpRequestsShouldModifyImpressions_WhenValidInput() { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); -// -// // when -// final Result>> result = target.makeHttpRequests(bidRequest); -// -// // then -//// assertThat(result.getErrors()).isEmpty(); -//// assertThat(result.getValue()).hasSize(1); -// assertThat(result.getImp()).hasSize(1); -// assertThat(result.getImp()) -// .extracting(Imp::getTagid) -// .containsExactly("zone"); -// } -// -// -// @Test -// public void createBidRequestShouldModifyImpressions_WhenValidInput() { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "product", "irisId", null))))); -// -// // when -// final BidRequest result = target.createBidRequest(bidRequest, errorsList()); -// -// // then -// assertThat(result.getImp()).hasSize(1); -// assertThat(result.getImp()) -// .extracting(Imp::getTagid) -// .containsExactly("zone"); -// } - @Test - public void makeHttpRequestsShouldModifyImpressions_WhenValidInput9() throws IOException { - // given - final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getErrors()).isEmpty(); // This can be uncommented if you want to check for errors - assertThat(result.getValue()).hasSize(1); - - // Deserialize byte[] body into BidRequest - byte[] requestBody = result.getValue().get(0).getBody(); // Get the byte array - BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); // Deserialize the byte[] to BidRequest - - assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct - assertThat(modifiedRequest.getImp()) - .extracting(Imp::getTagid) - .containsExactly("zone"); // Validate that the tagId has been set correctly - } - - -// @Test -// public void makeHttpRequestsShouldModifyImpressions_WhenValidInput() throws IOException { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); -// -// // when -// final Result>> result = target.makeHttpRequests(bidRequest); -// -// // Deserialize byte[] body into BidRequest -// byte[] requestBody = result.getValue().get(0).getBody(); -// BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); -// -// // then -// assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct -// -// // Debugging: Check if the tagid was set correctly -// System.out.println("Modified Imp tagid: " + modifiedRequest.getImp().get(0).getTagid()); // Debugging -// -// assertThat(modifiedRequest.getImp()) -// .extracting(Imp::getTagid) -// .containsExactly("zone"); // Validate that the tagId has been set correctly -// } -@Test -public void makeHttpRequestsShouldModifyImpressions_WhenValidInput() throws IOException { - // given - final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // Deserialize byte[] body into BidRequest - byte[] requestBody = result.getValue().get(0).getBody(); - BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - - // then - assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct - - //check if the tagid was set correctly - System.out.println("Modified Imp tagid: " + modifiedRequest.getImp().get(0).getTagid()); - - assertThat(modifiedRequest.getImp()) - .extracting(Imp::getTagid) - .containsExactly("zone"); // Validate that the tagId has been set correctly -} - - - - - - - - - @Test - public void makeHttpRequestsShouldModifyImpressionsWhenValidInput1() throws IOException { - // given + public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOException { + //given final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - // Add adunitid to the ext field - extImp.with("bidder").put("adunitid", "adUnit123"); // Setting adunitid within bidder object + //add adunitid to the ext field + extImp.with("bidder").put("adunitid", "adUnit123"); //setting adunitid within bidder object final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(extImp)); // Pass the modified extImp with adunitid + impBuilder.ext(extImp)); //pass the modified extImp with adunitid - // when + //when final Result>> result = target.makeHttpRequests(bidRequest); - // Deserialize byte[] body into BidRequest + //deserialize byte[] body into BidRequest byte[] requestBody = result.getValue().get(0).getBody(); BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - // then - assertThat(modifiedRequest.getImp()).hasSize(1); // Check that the number of impressions is correct + //then + assertThat(modifiedRequest.getImp()).hasSize(1); //check that the number of impressions is correct - // Debugging: Check if the tagid was set correctly - System.out.println("Modified Imp tagid: " + modifiedRequest.getImp().get(0).getTagid()); // Debugging - // Validate that the tagId is correctly set to adUnitid (which was set to "adUnit123") + //validate that the tagId is correctly set to adUnitid (which was set to "adUnit123") assertThat(modifiedRequest.getImp()) .extracting(Imp::getTagid) - .containsExactly("adUnit123"); // Validate that tagid is set to "adUnit123" + .containsExactly("adUnit123"); //validate that tagid is set to "adUnit123" } - - - - -// @Test -// public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOException { -// //given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "product", 12345L, null))))); -// -// //when -// final Result>> result = target.makeHttpRequests(bidRequest); -// -// //then -// assertThat(result.getErrors()).isEmpty(); -// assertThat(result.getValue()).hasSize(1); -// -// //deserialize response body before extracting Imp -// final BidRequest modifiedBidRequest = mapper.readValue(result.getValue().get(0).getBody(), BidRequest.class); -// -// //verify Imp.ext contains correct values -// for (Imp imp : modifiedBidRequest.getImp()) { -// try { -// ExtImpGumgum extractedExt = mapper.treeToValue(imp.getExt(), ExtImpGumgum.class); -// assertThat(extractedExt.getZone()).isEqualTo("zone"); -// } catch (JsonProcessingException e) { -// Assertions.fail("Failed to parse Imp.ext"); -// } -// } -// -// //ensure tagid is correctly set -// assertThat(modifiedBidRequest.getImp()) -// .extracting(Imp::getTagid) -// .containsExactly("zone"); -// } -// - -// @Test -// public void testMakeHttpRequestsShouldSetTagIdFromZoneWhenAdUnitIdIsMissing() throws IOException { -// // Given: Imp without adunitid but with zone -// ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone123", BigInteger.TEN, "productA", null, "zone123"))); -// -// Imp imp = Imp.builder() -// .id("imp1") -// .banner(Banner.builder().w(300).h(250).build()) -// .ext(extImp) -// .build(); -// -// BidRequest bidRequest = BidRequest.builder() -// .id("test-bid-request") -// .imp(Collections.singletonList(imp)) -// .site(Site.builder().id("test-site").build()) -// .build(); -// -//// GumgumBidder bidder = new GumgumBidder("https://test.endpoint.com", mapper); -// -// // When: Calling makeHttpRequests -// Result>> result = target.makeHttpRequests(bidRequest); -// -// // Then: Validate the request was modified correctly -// assertNotNull(result); -// assertFalse(result.getValue().isEmpty()); -// -// // Deserialize byte[] body into BidRequest -// byte[] requestBody = result.getValue().get(0).getBody(); -// BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); -// -// assertFalse(modifiedRequest.getImp().isEmpty()); -// -// Imp modifiedImp = modifiedRequest.getImp().get(0); -// assertEquals("zone123", modifiedImp.getTagid(), "Imp.tagid should be set to zone value"); -// } - - @Test public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() throws IOException { - // Given: Imp without adUnitId but with zone + //given:Imp without adUnitId but with zone ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone123", BigInteger.TEN, "productA", null, "zone123"))); @@ -345,143 +118,104 @@ public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() .site(Site.builder().id("test-site").build()) .build(); - System.out.println("Before makeHttpRequests: " + bidRequest); - - // When: Calling makeHttpRequests + //when: Calling makeHttpRequests Result>> result = target.makeHttpRequests(bidRequest); - // Then: Validate the request was modified correctly + //then: Validate the request was modified correctly assertNotNull(result); assertFalse(result.getValue().isEmpty()); - // Deserialize byte[] body into BidRequest + //deserialize byte[] body into BidRequest byte[] requestBody = result.getValue().get(0).getBody(); BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - System.out.println("After makeHttpRequests: " + modifiedRequest); - assertFalse(modifiedRequest.getImp().isEmpty()); Imp modifiedImp = modifiedRequest.getImp().get(0); -// assertNull(modifiedImp.getTagid(),null ); - assertNull(modifiedImp.getTagid()); - - ExtImpGumgum extractedExtImp = mapper.convertValue(modifiedImp.getExt(), ExtImpGumgum.class); -// assertEquals("zone123", extractedExtImp.getZone(), "Zone should still be present in ExtImpGumgum"); - assertEquals("test-site", modifiedRequest.getSite().getId(), "zone123"); } - @Test public void makeHttpRequestsShouldReturnErrorsWhenNoValidImpressions() { - // given + //given final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(mapper.createObjectNode())); - // when + //when final Result>> result = target.makeHttpRequests(bidRequest); - // then - assertThat(result.getErrors()).hasSize(1) + //then + assertThat(result.getErrors()).hasSize(2) .anySatisfy(error -> { assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); assertThat(error.getMessage()).isEqualTo("No valid impressions"); }); } + @Test + public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput() { + //given + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); + extImp.with("bidder").put("adunitid", "adUnit123"); // Set adunitid + + final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); + + final List errors = new ArrayList<>(); + + //when + final BidRequest result = target.createBidRequest(bidRequest, errors); + + //then + assertThat(errors).isEmpty(); + assertThat(result.getImp()).hasSize(1); + assertThat(result.getImp()) + .extracting(Imp::getTagid) + .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 + } + + @Test + public void createBidRequestShouldThrowExceptionWhenNoValidImpressions() { + //given + final BidRequest bidRequest = givenBidRequest(impBuilder -> + impBuilder.ext(mapper.createObjectNode())); -// @Test -// public void makeHttpRequestsShouldUseZoneAndPubIdWhenPresent() throws IOException { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone1", BigInteger.valueOf(1001), "product1", 12345L, null)))), -// Site.builder() -// .id("existingZone") // Set a default site ID -// .publisher(Publisher.builder().id("existingPubId").build()) -// .build()); -// -// // Log original request -// System.out.println("Original BidRequest: " + mapper.writeValueAsString(bidRequest)); -// -// // when -// final Result>> result = target.makeHttpRequests(bidRequest); -// -// // then -// assertThat(result.getErrors()).isEmpty(); -// -// // Deserialize the response body from byte[] to BidRequest -// final BidRequest modifiedBidRequest = mapper.readValue(result.getValue().get(0).getBody(), BidRequest.class); -// -// // Log modified request -// System.out.println("Modified BidRequest: " + mapper.writeValueAsString(modifiedBidRequest)); -// -// //Ensure Site is not null -// assertThat(modifiedBidRequest.getSite()).isNotNull(); -// -// // Ensure Publisher is not null -// assertThat(modifiedBidRequest.getSite().getPublisher()).isNotNull(); -// -// // Assertions -// assertThat(modifiedBidRequest.getSite().getPublisher().getId()).isEqualTo("1001"); -// assertThat(modifiedBidRequest.getSite().getId()).isEqualTo("zone1"); -// } - - -// -// @Test -// public void makeHttpRequestsShouldModifyVideoExtIfIrisIdIsPresent() { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.video(Video.builder().w(20).h(30).build()) -// .ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "product", "irisId", null))))); -// -// // when -// final Result>> result = target.makeHttpRequests(bidRequest); -// -// // then -// final ObjectNode expectedVideoExt = mapper.valueToTree(ExtImpGumgumVideo.of("irisId")); -// assertThat(result.getErrors()).isEmpty(); -// assertThat(result.getValue().get(0).getBody().getImp()) -// .extracting(Imp::getVideo) -// .extracting(Video::getExt) -// .containsExactly(expectedVideoExt); -// } -// -// @Test -// public void makeHttpRequestsShouldNotChangeBannerSizeIfAlreadyPresent() { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.banner(Banner.builder() -// .format(singletonList(Format.builder().w(300).h(450).build())) -// .w(600).h(900) -// .build())); -// -// // when -// final Result>> result = target.makeHttpRequests(bidRequest); -// -// // then -// assertThat(result.getErrors()).isEmpty(); -// assertThat(result.getValue().get(0).getBody().getImp()) -// .extracting(Imp::getBanner) -// .extracting(Banner::getW, Banner::getH) -// .containsExactly(tuple(600, 900)); -// } -// -// -// -// -// -// -// -// + final List errors = new ArrayList<>(); + //when & then + Assertions.assertThatThrownBy(() -> target.createBidRequest(bidRequest, errors)) + .isInstanceOf(PreBidException.class) + .hasMessage("No valid impressions"); + } + @Test + public void extractAdUnitIdShouldReturnAdUnitIdWhenPresent() { + //given + final ObjectNode bidderNode = mapper.createObjectNode().put("adunitid", "adUnit123"); + final ObjectNode ext = mapper.createObjectNode().set("bidder", bidderNode); + final Imp imp = Imp.builder().ext(ext).build(); + //when + final String adUnitId = target.extractAdUnitId(imp); + + //then + assertThat(adUnitId).isEqualTo("adUnit123"); + } + + @Test + public void extractAdUnitIdShouldReturnNullWhenAdUnitIdNotPresent() { + //given + final ObjectNode ext = mapper.createObjectNode(); + final Imp imp = Imp.builder().ext(ext).build(); + + //when + final String adUnitId = target.extractAdUnitId(imp); + + //then + assertThat(adUnitId).isNull(); + } @Test public void creationShouldFailOnInvalidEndpointUrl() { @@ -823,174 +557,6 @@ public void makeBidsShouldTolerateWithNullSeatOrBidValues() throws JsonProcessin assertThat(result.getValue()).hasSize(1); } -//nnn - @Test - public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput() { - // given - final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, - ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))))); - - final List errors = new ArrayList<>(); - - // when - final BidRequest result = target.createBidRequest(bidRequest, errors); - - // then - assertThat(errors).isEmpty(); - assertThat(result.getImp()).hasSize(1); - assertThat(result.getImp()) - .extracting(Imp::getTagid) - .containsExactly("zone"); - } - -// @Test -// public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput23() { -// // given -// final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); -// extImp.with("bidder").put("adunitid", "zone"); // call modify Imps -// -// final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); -// -// final List errors = new ArrayList<>(); -// -// // when -// final BidRequest result = target.createBidRequest(bidRequest, errors); -// -// // then -// assertThat(errors).isEmpty(); -// assertThat(result.getImp()).hasSize(1); -// assertThat(result.getImp()) -// .extracting(Imp::getTagid) -// .containsExactly("zone"); -// } - - - @Test - public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput23() { - // given - final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, - ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - extImp.with("bidder").put("adunitid", "adUnit123"); // Set adunitid - - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); - - final List errors = new ArrayList<>(); - - // when - final BidRequest result = target.createBidRequest(bidRequest, errors); - - // then - assertThat(errors).isEmpty(); - assertThat(result.getImp()).hasSize(1); - assertThat(result.getImp()) - .extracting(Imp::getTagid) - .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 - } - - @Test - public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput2() { - // given - final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, - ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - extImp.with("bidder").put("adunitid", "adUnit123"); // Set adunitid - - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); - - final List errors = new ArrayList<>(); - - // when - final BidRequest result = target.createBidRequest(bidRequest, errors); - - // then - assertThat(errors).isEmpty(); - assertThat(result.getImp()).hasSize(1); - assertThat(result.getImp()) - .extracting(Imp::getTagid) - .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 - } - -// @Test -// public void createBidRequestShouldReturnErrorsWhenImpExtCouldNotBeParsed() { -// // given -// final BidRequest bidRequest = givenBidRequest(impBuilder -> -// impBuilder.ext(mapper.createObjectNode())); -// -// final List errors = new ArrayList<>(); -// -// // when -// final BidRequest result = target.createBidRequest(bidRequest, errors);//create an empty object -// -// // then -// assertThat(errors).hasSize(1) -// .anySatisfy(error -> { -// assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); -// assertThat(error.getMessage()).startsWith("Cannot deserialize value"); -// }); -// } - - - @Test - public void createBidRequestShouldReturnErrorsWhenImpExtCouldNotBeParsed1() { - // given: bid request with empty or malformed ext - final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(mapper.createObjectNode())); // empty object node simulates bad input - - final List errors = new ArrayList<>(); - - // when - final BidRequest result = target.createBidRequest(bidRequest, errors); - - // then: should not crash, should return an error - assertThat(errors).hasSize(1) - .anySatisfy(error -> { - assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); - assertThat(error.getMessage()).contains("Cannot parse extImp"); - }); - } - - - @Test - public void createBidRequestShouldThrowExceptionWhenNoValidImpressions() { - // given - final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(mapper.createObjectNode())); - - final List errors = new ArrayList<>(); - - // when & then - Assertions.assertThatThrownBy(() -> target.createBidRequest(bidRequest, errors)) - .isInstanceOf(PreBidException.class) - .hasMessage("No valid impressions"); - } - - @Test - public void extractAdUnitIdShouldReturnAdUnitIdWhenPresent() { - // given - final ObjectNode ext = mapper.createObjectNode().put("adunitid", "adUnit123"); - final Imp imp = Imp.builder().ext(ext).build(); - - // when - final String adUnitId = target.extractAdUnitId(imp); - - // then - assertThat(adUnitId).isEqualTo("adUnit123"); - } - - @Test - public void extractAdUnitIdShouldReturnNullWhenAdUnitIdNotPresent() { - // given - final ObjectNode ext = mapper.createObjectNode(); - final Imp imp = Imp.builder().ext(ext).build(); - - // when - final String adUnitId = target.extractAdUnitId(imp); - - // then - assertThat(adUnitId).isNull(); - } - private static BidRequest givenBidRequest( Function bidRequestCustomizer, Function impCustomizer) { @@ -1000,30 +566,14 @@ private static BidRequest givenBidRequest( .build(); } -// private static BidRequest givenBidRequest(Function impCustomizer) { -// return givenBidRequest(identity(), impCustomizer); -// } - private static BidRequest givenBidRequest(Function impCustomizer) { - return BidRequest.builder() - .imp(Collections.singletonList(givenImp(impCustomizer))) - .site(Site.builder().build()) - .build(); + return givenBidRequest(identity(), impCustomizer); } -// private static Imp givenImp(Function impCustomizer) { -// return impCustomizer.apply(Imp.builder() -// .id("123") -// .banner(Banner.builder().id("banner_id").build()) -// .ext(mapper.valueToTree(ExtPrebid.of(null, -// ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", 1L, null))))) -// .build(); -// } - private static Imp givenImp(Function impCustomizer) { return impCustomizer.apply(Imp.builder() .id("123") - .banner(Banner.builder().build()) + .banner(Banner.builder().id("banner_id").build()) .ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", 1L, null))))) .build(); @@ -1045,7 +595,4 @@ private static BidderCall givenHttpCall(BidRequest bidRequest, Strin null); } - - - } From c1e2260406d61c62d8e071537d72a48ef980fdd2 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Tue, 15 Apr 2025 15:31:01 +0530 Subject: [PATCH 6/9] changes --- .../java/org/prebid/server/bidder/gumgum/GumgumBidder.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index aeb0b4f71c8..cc083e85552 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.annotations.VisibleForTesting; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Format; @@ -75,6 +76,7 @@ public Result>> makeHttpRequests(BidRequest bidRequ errors); } + @VisibleForTesting protected BidRequest createBidRequest(BidRequest bidRequest, List errors) { final List modifiedImps = new ArrayList<>(); String zone = null; @@ -118,7 +120,7 @@ protected BidRequest createBidRequest(BidRequest bidRequest, List e .build(); } - + @VisibleForTesting protected String extractAdUnitId(Imp imp) { if (imp.getExt() != null && imp.getExt().has("bidder") && imp.getExt().get("bidder").has("adunitid")) { return imp.getExt().get("bidder").get("adunitid").asText(); @@ -134,6 +136,7 @@ private ExtImpGumgum parseImpExt(Imp imp) { } } + @VisibleForTesting protected Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { final Imp.ImpBuilder impBuilder = imp.toBuilder(); From 5e840556b409ea48869412baf5833350beeef6cd Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Mon, 12 May 2025 12:36:20 +0530 Subject: [PATCH 7/9] added changes as per PR comments --- .../server/bidder/gumgum/GumgumBidder.java | 52 ++++----- .../bidder/gumgum/GumgumBidderTest.java | 100 ++++++------------ 2 files changed, 53 insertions(+), 99 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index cc083e85552..385a2047578 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.annotations.VisibleForTesting; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Format; @@ -27,6 +26,7 @@ import org.prebid.server.json.DecodeException; import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.ExtPrebid; +import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgum; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumBanner; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumVideo; @@ -43,6 +43,7 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.Optional; public class GumgumBidder implements Bidder { @@ -52,6 +53,10 @@ public class GumgumBidder implements Bidder { new TypeReference<>() { }; + private static final TypeReference> GUMGUM_EXT_PREBID_TYPE_REFERENCE = + new TypeReference<>() { + }; + private final String endpointUrl; private final JacksonMapper mapper; @@ -76,8 +81,7 @@ public Result>> makeHttpRequests(BidRequest bidRequ errors); } - @VisibleForTesting - protected BidRequest createBidRequest(BidRequest bidRequest, List errors) { + private BidRequest createBidRequest(BidRequest bidRequest, List errors) { final List modifiedImps = new ArrayList<>(); String zone = null; BigInteger pubId = null; @@ -85,15 +89,10 @@ protected BidRequest createBidRequest(BidRequest bidRequest, List e for (Imp imp : bidRequest.getImp()) { try { final ExtImpGumgum extImp = parseImpExt(imp); - if (extImp == null) { - throw new PreBidException("Cannot parse extImp from imp.ext"); - } - //extract AdUnitID also confirm for imp.tagId - final String adUnitId = extractAdUnitId(imp); + final String adUnitCode = extractAdUnitCode(imp); - //modify Imp to include AdUnitID in ext - modifiedImps.add(modifyImp(imp, extImp, adUnitId)); + modifiedImps.add(modifyImp(imp, extImp, adUnitCode)); final String extZone = extImp.getZone(); if (StringUtils.isNotEmpty(extZone)) { @@ -120,12 +119,13 @@ protected BidRequest createBidRequest(BidRequest bidRequest, List e .build(); } - @VisibleForTesting - protected String extractAdUnitId(Imp imp) { - if (imp.getExt() != null && imp.getExt().has("bidder") && imp.getExt().get("bidder").has("adunitid")) { - return imp.getExt().get("bidder").get("adunitid").asText(); - } - return null; + private String extractAdUnitCode(Imp imp) { + final ExtPrebid extPrebid = mapper.mapper() + .convertValue(imp.getExt(), GUMGUM_EXT_PREBID_TYPE_REFERENCE); + + return Optional.ofNullable(extPrebid.getPrebid()) + .map(ExtImpPrebid::getAdUnitCode) + .orElse(null); } private ExtImpGumgum parseImpExt(Imp imp) { @@ -136,28 +136,19 @@ private ExtImpGumgum parseImpExt(Imp imp) { } } - @VisibleForTesting - protected Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { + private Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitCode) { final Imp.ImpBuilder impBuilder = imp.toBuilder(); - if (extImp == null) { - extImp = ExtImpGumgum.of(null, null, null, null, null); //create an empty ExtImpGumgum object - } - final String product = extImp.getProduct(); - ObjectNode updatedExt = imp.getExt(); - if (StringUtils.isNotEmpty(product)) { - updatedExt = mapper.mapper().createObjectNode().put(REQUEST_EXT_PRODUCT, product); + final ObjectNode productExt = mapper.mapper().createObjectNode().put(REQUEST_EXT_PRODUCT, product); + impBuilder.ext(productExt); } - //set AdUnitID to imp.tagId - if (StringUtils.isNotEmpty(adUnitId)) { - impBuilder.tagid(adUnitId); + if (StringUtils.isNotEmpty(adUnitCode)) { + impBuilder.tagid(adUnitCode); } - impBuilder.ext(updatedExt); - final Banner banner = imp.getBanner(); if (banner != null) { final Banner resolvedBanner = resolveBanner(banner, extImp); @@ -174,6 +165,7 @@ protected Imp modifyImp(Imp imp, ExtImpGumgum extImp, String adUnitId) { impBuilder.video(resolvedVideo); } } + return impBuilder.build(); } diff --git a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java index 8b94892ca9c..02d9bfa8968 100644 --- a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java @@ -12,7 +12,6 @@ import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.prebid.server.VertxTest; import org.prebid.server.bidder.model.BidderBid; @@ -21,7 +20,6 @@ import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; -import org.prebid.server.exception.PreBidException; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgum; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumBanner; @@ -30,7 +28,6 @@ import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.Function; @@ -76,9 +73,7 @@ public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOExc //given final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - - //add adunitid to the ext field - extImp.with("bidder").put("adunitid", "adUnit123"); //setting adunitid within bidder object + extImp.with("prebid").put("adunitcode", "adUnit123"); final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); //pass the modified extImp with adunitid @@ -91,13 +86,12 @@ public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOExc BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); //then - assertThat(modifiedRequest.getImp()).hasSize(1); //check that the number of impressions is correct + assertThat(modifiedRequest.getImp()).hasSize(1); - //validate that the tagId is correctly set to adUnitid (which was set to "adUnit123") assertThat(modifiedRequest.getImp()) .extracting(Imp::getTagid) - .containsExactly("adUnit123"); //validate that tagid is set to "adUnit123" + .containsExactly("adUnit123"); } @Test @@ -139,82 +133,50 @@ public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() } @Test - public void makeHttpRequestsShouldReturnErrorsWhenNoValidImpressions() { - //given - final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(mapper.createObjectNode())); - - //when - final Result>> result = target.makeHttpRequests(bidRequest); - - //then - assertThat(result.getErrors()).hasSize(2) - .anySatisfy(error -> { - assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); - assertThat(error.getMessage()).isEqualTo("No valid impressions"); - }); - } - - @Test - public void createBidRequestShouldReturnModifiedBidRequestWhenValidInput() { - //given + public void makeHttpRequestsShouldReturnModifiedBidRequestWhenValidInput() throws IOException { + // given final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - extImp.with("bidder").put("adunitid", "adUnit123"); // Set adunitid + extImp.with("prebid").put("adunitcode", "adUnit123"); final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); - final List errors = new ArrayList<>(); + // when + final Result>> result = target.makeHttpRequests(bidRequest); - //when - final BidRequest result = target.createBidRequest(bidRequest, errors); + // deserialize the modified request + final byte[] requestBody = result.getValue().get(0).getBody(); + final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - //then - assertThat(errors).isEmpty(); - assertThat(result.getImp()).hasSize(1); - assertThat(result.getImp()) + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(modifiedRequest.getImp()).hasSize(1); + assertThat(modifiedRequest.getImp()) .extracting(Imp::getTagid) .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 } @Test - public void createBidRequestShouldThrowExceptionWhenNoValidImpressions() { - //given - final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(mapper.createObjectNode())); - - final List errors = new ArrayList<>(); - - //when & then - Assertions.assertThatThrownBy(() -> target.createBidRequest(bidRequest, errors)) - .isInstanceOf(PreBidException.class) - .hasMessage("No valid impressions"); - } - - @Test - public void extractAdUnitIdShouldReturnAdUnitIdWhenPresent() { - //given - final ObjectNode bidderNode = mapper.createObjectNode().put("adunitid", "adUnit123"); - final ObjectNode ext = mapper.createObjectNode().set("bidder", bidderNode); - final Imp imp = Imp.builder().ext(ext).build(); - - //when - final String adUnitId = target.extractAdUnitId(imp); + public void makeHttpRequestsShouldExtractAdUnitIdWhenPresent() throws IOException { + // given + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); + extImp.with("prebid").put("adunitcode", "adUnit123"); - //then - assertThat(adUnitId).isEqualTo("adUnit123"); - } + final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); - @Test - public void extractAdUnitIdShouldReturnNullWhenAdUnitIdNotPresent() { - //given - final ObjectNode ext = mapper.createObjectNode(); - final Imp imp = Imp.builder().ext(ext).build(); + // when + final Result>> result = target.makeHttpRequests(bidRequest); - //when - final String adUnitId = target.extractAdUnitId(imp); + // deserialize the modified request + final byte[] requestBody = result.getValue().get(0).getBody(); + final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - //then - assertThat(adUnitId).isNull(); + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(modifiedRequest.getImp()) + .extracting(Imp::getTagid) + .containsExactly("adUnit123"); } @Test From 48ee12ab9e7020cb09e8f60bea168ef04ea8ec80 Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Mon, 2 Jun 2025 11:34:59 +0530 Subject: [PATCH 8/9] changes --- .../server/bidder/gumgum/GumgumBidder.java | 9 +++----- .../bidder/gumgum/GumgumBidderTest.java | 21 ++++++++----------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index 385a2047578..93818a70fd5 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -53,10 +53,6 @@ public class GumgumBidder implements Bidder { new TypeReference<>() { }; - private static final TypeReference> GUMGUM_EXT_PREBID_TYPE_REFERENCE = - new TypeReference<>() { - }; - private final String endpointUrl; private final JacksonMapper mapper; @@ -120,10 +116,11 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err } private String extractAdUnitCode(Imp imp) { - final ExtPrebid extPrebid = mapper.mapper() - .convertValue(imp.getExt(), GUMGUM_EXT_PREBID_TYPE_REFERENCE); + final ExtPrebid extPrebid = mapper.mapper() + .convertValue(imp.getExt(), GUMGUM_EXT_TYPE_REFERENCE); return Optional.ofNullable(extPrebid.getPrebid()) + .map(prebid -> mapper.mapper().convertValue(prebid, ExtImpPrebid.class)) .map(ExtImpPrebid::getAdUnitCode) .orElse(null); } diff --git a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java index 02d9bfa8968..1104278e7c4 100644 --- a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java @@ -82,13 +82,11 @@ public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOExc final Result>> result = target.makeHttpRequests(bidRequest); //deserialize byte[] body into BidRequest - byte[] requestBody = result.getValue().get(0).getBody(); - BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); + final byte[] requestBody = result.getValue().get(0).getBody(); + final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); //then assertThat(modifiedRequest.getImp()).hasSize(1); - - assertThat(modifiedRequest.getImp()) .extracting(Imp::getTagid) .containsExactly("adUnit123"); @@ -97,38 +95,37 @@ public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOExc @Test public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() throws IOException { //given:Imp without adUnitId but with zone - ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone123", BigInteger.TEN, "productA", null, "zone123"))); - Imp imp = Imp.builder() + final Imp imp = Imp.builder() .id("imp1") .banner(Banner.builder().w(300).h(250).build()) .ext(extImp) .build(); - BidRequest bidRequest = BidRequest.builder() + final BidRequest bidRequest = BidRequest.builder() .id("test-bid-request") .imp(Collections.singletonList(imp)) .site(Site.builder().id("test-site").build()) .build(); //when: Calling makeHttpRequests - Result>> result = target.makeHttpRequests(bidRequest); + final Result>> result = target.makeHttpRequests(bidRequest); //then: Validate the request was modified correctly assertNotNull(result); assertFalse(result.getValue().isEmpty()); //deserialize byte[] body into BidRequest - byte[] requestBody = result.getValue().get(0).getBody(); - BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); + final byte[] requestBody = result.getValue().get(0).getBody(); + final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); assertFalse(modifiedRequest.getImp().isEmpty()); - Imp modifiedImp = modifiedRequest.getImp().get(0); + final Imp modifiedImp = modifiedRequest.getImp().get(0); assertNull(modifiedImp.getTagid()); - assertEquals("test-site", modifiedRequest.getSite().getId(), "zone123"); } From 0da7ec3a20f349a6fd05e6c99652d1196d93355c Mon Sep 17 00:00:00 2001 From: ShayanK16 Date: Tue, 10 Jun 2025 13:02:54 +0530 Subject: [PATCH 9/9] changes after comments --- .../server/bidder/gumgum/GumgumBidder.java | 30 +++----- .../bidder/gumgum/GumgumBidderTest.java | 70 +++++++++---------- 2 files changed, 43 insertions(+), 57 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java index 93818a70fd5..344004a575f 100644 --- a/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java +++ b/src/main/java/org/prebid/server/bidder/gumgum/GumgumBidder.java @@ -49,7 +49,7 @@ public class GumgumBidder implements Bidder { private static final String REQUEST_EXT_PRODUCT = "product"; - private static final TypeReference> GUMGUM_EXT_TYPE_REFERENCE = + private static final TypeReference> GUMGUM_EXT_TYPE_REFERENCE = new TypeReference<>() { }; @@ -84,18 +84,20 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err for (Imp imp : bidRequest.getImp()) { try { - final ExtImpGumgum extImp = parseImpExt(imp); + final ExtPrebid extImp = parseImpExt(imp); + final ExtImpGumgum extImpGumgum = extImp.getBidder(); + final String adUnitCode = Optional.ofNullable(extImp.getPrebid()) + .map(ExtImpPrebid::getAdUnitCode) + .orElse(null); - final String adUnitCode = extractAdUnitCode(imp); + modifiedImps.add(modifyImp(imp, extImpGumgum, adUnitCode)); - modifiedImps.add(modifyImp(imp, extImp, adUnitCode)); - - final String extZone = extImp.getZone(); + final String extZone = extImpGumgum.getZone(); if (StringUtils.isNotEmpty(extZone)) { zone = extZone; } - final BigInteger extPubId = extImp.getPubId(); + final BigInteger extPubId = extImpGumgum.getPubId(); if (extPubId != null && !extPubId.equals(BigInteger.ZERO)) { pubId = extPubId; } @@ -115,19 +117,9 @@ private BidRequest createBidRequest(BidRequest bidRequest, List err .build(); } - private String extractAdUnitCode(Imp imp) { - final ExtPrebid extPrebid = mapper.mapper() - .convertValue(imp.getExt(), GUMGUM_EXT_TYPE_REFERENCE); - - return Optional.ofNullable(extPrebid.getPrebid()) - .map(prebid -> mapper.mapper().convertValue(prebid, ExtImpPrebid.class)) - .map(ExtImpPrebid::getAdUnitCode) - .orElse(null); - } - - private ExtImpGumgum parseImpExt(Imp imp) { + private ExtPrebid parseImpExt(Imp imp) { try { - return mapper.mapper().convertValue(imp.getExt(), GUMGUM_EXT_TYPE_REFERENCE).getBidder(); + return mapper.mapper().convertValue(imp.getExt(), GUMGUM_EXT_TYPE_REFERENCE); } catch (IllegalArgumentException e) { throw new PreBidException(e.getMessage()); } diff --git a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java index 1104278e7c4..2b00840ed26 100644 --- a/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/gumgum/GumgumBidderTest.java @@ -21,6 +21,7 @@ import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; import org.prebid.server.proto.openrtb.ext.ExtPrebid; +import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgum; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumBanner; import org.prebid.server.proto.openrtb.ext.request.gumgum.ExtImpGumgumVideo; @@ -53,14 +54,14 @@ public class GumgumBidderTest extends VertxTest { @Test public void makeHttpRequestsShouldReturnErrorIfImpExtCouldNotBeParsed() { - //given + // given final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(mapper.valueToTree(ExtPrebid.of(null, mapper.createArrayNode())))); - //when + // when final Result>> result = target.makeHttpRequests(bidRequest); - //then + // then assertThat(result.getErrors()).hasSize(2) .anySatisfy(error -> { assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input); @@ -69,32 +70,29 @@ public void makeHttpRequestsShouldReturnErrorIfImpExtCouldNotBeParsed() { } @Test - public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() throws IOException { - //given - final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + public void makeHttpRequestsShouldModifyImpressionsWhenValidInput() { + // given + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of( + ExtImpPrebid.builder().adUnitCode("adUnit123").build(), ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - extImp.with("prebid").put("adunitcode", "adUnit123"); final BidRequest bidRequest = givenBidRequest(impBuilder -> - impBuilder.ext(extImp)); //pass the modified extImp with adunitid + impBuilder.ext(extImp)); - //when + // when final Result>> result = target.makeHttpRequests(bidRequest); - //deserialize byte[] body into BidRequest - final byte[] requestBody = result.getValue().get(0).getBody(); - final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - - //then - assertThat(modifiedRequest.getImp()).hasSize(1); - assertThat(modifiedRequest.getImp()) + // then + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) .extracting(Imp::getTagid) .containsExactly("adUnit123"); } @Test public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() throws IOException { - //given:Imp without adUnitId but with zone + // given final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, ExtImpGumgum.of("zone123", BigInteger.TEN, "productA", null, "zone123"))); @@ -110,14 +108,13 @@ public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() .site(Site.builder().id("test-site").build()) .build(); - //when: Calling makeHttpRequests + // when final Result>> result = target.makeHttpRequests(bidRequest); - //then: Validate the request was modified correctly + // then assertNotNull(result); assertFalse(result.getValue().isEmpty()); - //deserialize byte[] body into BidRequest final byte[] requestBody = result.getValue().get(0).getBody(); final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); @@ -130,48 +127,45 @@ public void testMakeHttpRequestsShouldNotSetTagIdFromZoneWhenAdUnitIdIsMissing() } @Test - public void makeHttpRequestsShouldReturnModifiedBidRequestWhenValidInput() throws IOException { + public void makeHttpRequestsShouldReturnModifiedBidRequestWhenValidInput() { // given - final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of( + ExtImpPrebid.builder().adUnitCode("adUnit123").build(), ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - extImp.with("prebid").put("adunitcode", "adUnit123"); final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); // when final Result>> result = target.makeHttpRequests(bidRequest); - // deserialize the modified request - final byte[] requestBody = result.getValue().get(0).getBody(); - final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - // then assertThat(result.getErrors()).isEmpty(); - assertThat(modifiedRequest.getImp()).hasSize(1); - assertThat(modifiedRequest.getImp()) + + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) .extracting(Imp::getTagid) - .containsExactly("adUnit123"); // Validate that tagid is set to adUnit123 + .containsExactly("adUnit123"); } @Test - public void makeHttpRequestsShouldExtractAdUnitIdWhenPresent() throws IOException { + public void makeHttpRequestsShouldExtractAdUnitIdWhenPresent() { // given - final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of(null, + final ObjectNode extImp = mapper.valueToTree(ExtPrebid.of( + ExtImpPrebid.builder().adUnitCode("adUnit123").build(), ExtImpGumgum.of("zone", BigInteger.TEN, "irisId", null, "product"))); - extImp.with("prebid").put("adunitcode", "adUnit123"); final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(extImp)); // when final Result>> result = target.makeHttpRequests(bidRequest); - // deserialize the modified request - final byte[] requestBody = result.getValue().get(0).getBody(); - final BidRequest modifiedRequest = mapper.readValue(requestBody, BidRequest.class); - // then assertThat(result.getErrors()).isEmpty(); - assertThat(modifiedRequest.getImp()) + + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .flatExtracting(BidRequest::getImp) .extracting(Imp::getTagid) .containsExactly("adUnit123"); }