* The result can be safety used as the query string.
*/
public static String encodeUrl(String value) {
- return URLEncoder.encode(value, StandardCharsets.UTF_8);
+ return URLEncoder.encode(value, StandardCharsets.UTF_8)
+ .replace("+", "%20")
+ .replace("%7E", "~")
+ .replace("*", "%2A");
}
/**
- * Returns decoded value if supplied is not null, otherwise returns null.
+ * Returns decoded value if supplied is not null, otherwise returns null. The result is RFC 3986 compliant.
*/
public static String decodeUrl(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
- return URLDecoder.decode(value, StandardCharsets.UTF_8);
+
+ return URLDecoder.decode(value.replace("+", "%2B"), StandardCharsets.UTF_8);
}
/**
@@ -161,7 +181,7 @@ public static String getHostFromUrl(String url) {
return null;
}
try {
- return new URL(url).getHost();
+ return parseUrl(url).getHost();
} catch (MalformedURLException e) {
return null;
}
diff --git a/src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java b/src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java
index 35dd808c97d..51bd4405efc 100644
--- a/src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java
+++ b/src/main/java/org/prebid/server/vertx/httpclient/BasicHttpClient.java
@@ -10,6 +10,7 @@
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.RequestOptions;
import org.prebid.server.exception.PreBidException;
+import org.prebid.server.util.HttpUtil;
import org.prebid.server.vertx.httpclient.model.HttpClientResponse;
import java.net.MalformedURLException;
@@ -54,7 +55,7 @@ private Future>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=JPY&sdkname=prebidserver&adapterver=1.0.3&sdktype=0");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=0");
+ });
+
}
@Test
@@ -133,10 +145,22 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfDefaultCurrencyIsAbsent() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=GBR&sdkname=prebidserver&adapterver=1.0.3&sdktype=0");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=GBR");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=0");
+ });
+
}
@Test
@@ -151,10 +175,22 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfDeviceOsIsAndroid() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=JPY&sdkname=prebidserver&adapterver=1.0.3&sdktype=1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=1");
+ });
+
}
@Test
@@ -169,10 +205,22 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfDeviceOsIsIos() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=JPY&sdkname=prebidserver&adapterver=1.0.3&sdktype=2");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=2");
+ });
+
}
@Test
@@ -188,9 +236,22 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfAppHasBundle() {
// then
assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3¤cy=JPY&"
- + "sdkname=prebidserver&adapterver=1.0.3&appbundle=test&sdktype=0");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("appbundle=test");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=0");
+ });
+
}
@Test
@@ -206,9 +267,22 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfAppHasAppName() {
// then
assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3¤cy=JPY&"
- + "sdkname=prebidserver&adapterver=1.0.3&appname=test&sdktype=0");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("appname=test");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=0");
+ });
+
}
@Test
@@ -223,10 +297,23 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfDeviceHasIfaAndOsIsIos() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=JPY&sdkname=prebidserver&adapterver=1.0.3&sdktype=2&idfa=51s");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("idfa=51s");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=2");
+ });
+
}
@Test
@@ -241,10 +328,23 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfDeviceHasIfaAndOsIsAndroid() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=JPY&sdkname=prebidserver&adapterver=1.0.3&sdktype=1&advertising_id=51s");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("advertising_id=51s");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=1");
+ });
+
}
@Test
@@ -260,10 +360,22 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfSitePageIsNotEmpty() {
// then
assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true"
- + "&t=json3¤cy=JPY&sdkname=prebidserver&adapterver=1.0.3"
- + "&tp=http%3A%2F%2Fwww.example.com&sdktype=0");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("tp=http%3A%2F%2Fwww.example.com");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=0");
+ });
+
}
@Test
@@ -281,10 +393,23 @@ public void makeHttpRequestsShouldReturnHttpsUrlIfAdSizeIsNotEmpty() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com/?posall=SSPLOC&id=123&hb=true&t=json3&"
- + "currency=JPY&sdkname=prebidserver&adapterver=1.0.3&sizes=300x500&sdktype=0");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/");
+ assertThat(url).contains("t=json3");
+ assertThat(url).contains("sizes=300x500");
+ assertThat(url).contains("adapterver=1.0.3");
+ assertThat(url).contains("hb=true");
+ assertThat(url).contains("currency=JPY");
+ assertThat(url).contains("id=123");
+ assertThat(url).contains("posall=SSPLOC");
+ assertThat(url).contains("sdkname=prebidserver");
+ assertThat(url).contains("sdktype=0");
+ });
+
}
@Test
diff --git a/src/test/java/org/prebid/server/bidder/adkernel/AdkernelBidderTest.java b/src/test/java/org/prebid/server/bidder/adkernel/AdkernelBidderTest.java
index 8759cc04679..b879662b0f6 100644
--- a/src/test/java/org/prebid/server/bidder/adkernel/AdkernelBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/adkernel/AdkernelBidderTest.java
@@ -46,7 +46,7 @@
public class AdkernelBidderTest extends VertxTest {
- private static final String ENDPOINT_URL = "https://test.com?zone=%s";
+ private static final String ENDPOINT_URL = "https://test.com?zone={{ZoneId}}";
private final AdkernelBidder target = new AdkernelBidder(ENDPOINT_URL, jacksonMapper);
diff --git a/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java b/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java
index 910a2b6514c..970c9258dc0 100644
--- a/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidderTest.java
@@ -21,10 +21,10 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.prebid.server.VertxTest;
-import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusNativeRequest;
-import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusRequestAdUnit;
import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusMetaData;
+import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusNativeRequest;
import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusRequest;
+import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusRequestAdUnit;
import org.prebid.server.bidder.adnuntius.model.response.AdnuntiusAd;
import org.prebid.server.bidder.adnuntius.model.response.AdnuntiusAdUnit;
import org.prebid.server.bidder.adnuntius.model.response.AdnuntiusAdvertiser;
@@ -518,11 +518,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfGdprAndConsentAr
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = buildExpectedUrl(ENDPOINT_URL, null, null, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null, null, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -540,11 +536,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfGdprIsAbsent() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, null, "consent");
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null, "consent");
assertThat(result.getErrors()).isEmpty();
}
@@ -560,11 +552,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfConsentIsAbsent(
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -579,11 +567,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfExtImpNoCookiesI
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -600,11 +584,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfExtImpNoCookiesI
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -621,11 +601,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfExtImpNoCookiesI
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -641,11 +617,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriAndPopulateExtDevi
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -662,11 +634,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfExtDeviceImpNoCo
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -683,11 +651,7 @@ public void makeHttpRequestsShouldReturnRequestsWithCorrectUriIfExtDeviceImpNoCo
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -711,11 +675,7 @@ public void makeHttpRequestsShouldReturnRequestsWithBasicUriIfGdprAndConsentAreA
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = buildExpectedUrl(ENDPOINT_URL, null, null, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null, null, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -739,11 +699,7 @@ public void makeHttpRequestsShouldReturnRequestsWithBasicUriIfGdprIsAbsentWhenAl
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ENDPOINT_URL, null, "consent");
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ENDPOINT_URL, null, "consent");
assertThat(result.getErrors()).isEmpty();
}
@@ -767,11 +723,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriIfConsentIsAbs
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = buildExpectedUrl(ALTERNATIVE_URL, 1, null, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, null, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -821,11 +773,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUri() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ALTERNATIVE_URL, gdpr, consent);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, gdpr, consent);
assertThat(result.getErrors()).isEmpty();
}
@@ -847,11 +795,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriIfExtImpNoCook
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = buildExpectedUrl(ALTERNATIVE_URL, 1, null, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, null, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -874,11 +818,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriIfExtImpNoCook
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ALTERNATIVE_URL, 1, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -901,11 +841,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriIfExtImpNoCook
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ALTERNATIVE_URL, 1, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -929,11 +865,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriAndPopulateExt
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = buildExpectedUrl(ALTERNATIVE_URL, 1, null, null);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, null, null);
assertThat(result.getErrors()).isEmpty();
}
@@ -958,11 +890,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriIfExtDeviceImp
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ALTERNATIVE_URL, 1, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -987,11 +915,7 @@ public void makeHttpRequestsShouldReturnRequestsWithAlternativeUriIfExtDeviceImp
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- final String expectedUrl = givenExpectedUrl(ALTERNATIVE_URL, 1, noCookies);
-
- assertThat(result.getValue())
- .extracting(HttpRequest::getUri)
- .containsExactly(expectedUrl, expectedUrl);
+ assertExpectedUrl(result, ALTERNATIVE_URL, 1, noCookies);
assertThat(result.getErrors()).isEmpty();
}
@@ -1517,29 +1441,64 @@ private static ExtDevice givenExtDeviceNoCookies(Boolean noCookies) {
return extDevice;
}
- private static String givenExpectedUrl(String url, Integer gdpr, String consent) {
- return buildExpectedUrl(url, gdpr, consent, false);
+ private static void assertExpectedUrl(Result
>> result,
+ String url,
+ Integer gdpr,
+ String consent) {
+
+ assertExpectedUrl(result, url, gdpr, consent, false);
}
- private static String givenExpectedUrl(String url, Integer gdpr, Boolean noCookies) {
- return buildExpectedUrl(url, gdpr, null, noCookies);
+ private static void assertExpectedUrl(Result
>> result,
+ String url,
+ Integer gdpr,
+ Boolean noCookies) {
+
+ assertExpectedUrl(result, url, gdpr, null, noCookies);
}
- private static String givenExpectedUrl(String url, Boolean noCookies) {
- return buildExpectedUrl(url, null, null, noCookies);
+ private static void assertExpectedUrl(Result
>> result,
+ String url,
+ Boolean noCookies) {
+
+ assertExpectedUrl(result, url, null, null, noCookies);
}
- private static String buildExpectedUrl(String url, Integer gdpr, String consent, Boolean noCookies) {
+ private static void assertExpectedUrl(Result
>> result,
+ String url,
+ Integer gdpr,
+ String consent,
+ Boolean noCookies) {
+
final StringBuilder expectedUri = new StringBuilder(url + "?format=prebidServer&tzo=-300");
- if (gdpr != null) {
- expectedUri.append("&gdpr=").append(HttpUtil.encodeUrl(gdpr.toString()));
- }
if (consent != null) {
expectedUri.append("&consentString=").append(HttpUtil.encodeUrl(consent));
}
if (BooleanUtils.isTrue(noCookies)) {
expectedUri.append("&noCookies=").append(HttpUtil.encodeUrl(noCookies.toString()));
}
- return expectedUri.toString();
+ if (gdpr != null) {
+ expectedUri.append("&gdpr=").append(HttpUtil.encodeUrl(gdpr.toString()));
+ }
+
+ assertThat(result.getValue())
+ .extracting(HttpRequest::getUri)
+ .allSatisfy(uri -> {
+ assertThat(uri).startsWith(url);
+ assertThat(uri).contains("format=prebidServer");
+ assertThat(uri).contains("tzo=-300");
+
+ if (consent != null) {
+ assertThat(uri).contains("consentString=%s".formatted(HttpUtil.encodeUrl(consent)));
+ }
+
+ if (BooleanUtils.isTrue(noCookies)) {
+ assertThat(uri).contains("noCookies=%s".formatted(HttpUtil.encodeUrl(noCookies.toString())));
+ }
+
+ if (gdpr != null) {
+ assertThat(uri).contains("gdpr=%s".formatted(HttpUtil.encodeUrl(gdpr.toString())));
+ }
+ });
}
}
diff --git a/src/test/java/org/prebid/server/bidder/adocean/AdoceanBidderTest.java b/src/test/java/org/prebid/server/bidder/adocean/AdoceanBidderTest.java
index 9657dd88767..6d14c00735f 100644
--- a/src/test/java/org/prebid/server/bidder/adocean/AdoceanBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/adocean/AdoceanBidderTest.java
@@ -177,14 +177,36 @@ public void makeHttpRequestsShouldCreateRequestForEveryValidImp() {
assertThat(result.getErrors())
.containsExactly(BidderError.badInput("Error parsing adOceanExt parameters, "
+ "in imp with id : notValidImp"));
- assertThat(result.getValue()).hasSize(2)
+ assertThat(result.getValue())
+ .hasSize(2)
.extracting(HttpRequest::getUri)
- .containsExactly("https://myao.adocean.pl/_10000000/ad.json?pbsrv_v=1.3.0&id=masterId&nc=1"
- + "&nosecure=1&aid=adoceanmyaozpniqismex%3Aao-test&gdpr_consent=consent&gdpr=1"
- + "&hcuserid=testBuyerUid&aosspsizes=myaozpniqismex"
- + "%7E300x250_600x320", "https://em.dom/_10000000/ad.json?pbsrv_v=1.3.0&id="
- + "masterId2&nc=1&nosecure=1&aid=slaveId%3Ai2-test&gdpr_consent=consent&gdpr=1"
- + "&hcuserid=testBuyerUid&aosspsizes=slaveId%7E577x333");
+ .satisfiesExactly(
+ url -> {
+ assertThat(url).startsWith("https://myao.adocean.pl/_10000000/ad.json");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("aosspsizes=myaozpniqismex~300x250_600x320");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("id=masterId");
+ assertThat(url).contains("aid=adoceanmyaozpniqismex%3Aao-test");
+ assertThat(url).contains("gdpr=1");
+ assertThat(url).contains("hcuserid=testBuyerUid");
+ },
+ url -> {
+ assertThat(url).startsWith("https://em.dom/_10000000/ad.json");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("aosspsizes=slaveId~577x333");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("id=masterId2");
+ assertThat(url).contains("aid=slaveId%3Ai2-test");
+ assertThat(url).contains("gdpr=1");
+ assertThat(url).contains("hcuserid=testBuyerUid");
+ }
+ );
+
}
@Test
@@ -242,9 +264,20 @@ public void makeHttpRequestsShouldCreateRequestWithoutSizeIfBannerSizesNotPresen
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://myao.adocean.pl/_10000000/ad.json?pbsrv_v=1.3.0&id=masterId&nc=1&nosecure=1"
- + "&aid=adoceanmyaozpniqismex%3Aao-test&gdpr_consent=consent&gdpr=1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://myao.adocean.pl/_10000000/ad.json");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("id=masterId");
+ assertThat(url).contains("aid=adoceanmyaozpniqismex%3Aao-test");
+ assertThat(url).contains("gdpr=1");
+ });
+
}
@Test
@@ -276,11 +309,25 @@ public void makeHttpRequestsShouldUpdateRequestsForSimilarSlaveIds() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactlyInAnyOrder("https://myao.adocean.pl/_10000000/ad.json?pbsrv_v=1.3.0&id=masterId&nc=1"
- + "&nosecure=1&aid=slaveId%3Aao-test&gdpr_consent=consent&gdpr=1&hcuserid=testBuyerUid"
- + "&aosspsizes=slaveId%7E300x250_600x320&aid=slaveId2%3Ai2-test&aosspsizes=slaveId2%7E577x333");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://myao.adocean.pl/_10000000/ad.json");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("aosspsizes=slaveId~300x250_600x320");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("id=masterId");
+ assertThat(url).contains("aid=slaveId%3Aao-test");
+ assertThat(url).contains("gdpr=1");
+ assertThat(url).contains("hcuserid=testBuyerUid");
+ assertThat(url).contains("aosspsizes=slaveId2~577x333");
+ assertThat(url).contains("aid=slaveId2%3Ai2-test");
+ });
+
}
@Test
@@ -451,12 +498,25 @@ public void makeHttpRequestsShouldBuildUrlIfAppIsPresent() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactlyInAnyOrder("https://myao.adocean.pl/_10000000/ad.json?pbsrv_v=1.3.0"
- + "&id=tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7&nc=1&nosecure=1"
- + "&aid=adoceanmyaozpniqismex%3Aao-test&gdpr_consent=consent"
- + "&gdpr=1&app=1&appname=name&appbundle=bundle&appdomain=domain");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://myao.adocean.pl/_10000000/ad.json");
+ assertThat(url).contains("app=1");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("appname=name");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("appbundle=bundle");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("appdomain=domain");
+ assertThat(url).contains("id=tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7");
+ assertThat(url).contains("aid=adoceanmyaozpniqismex%3Aao-test");
+ assertThat(url).contains("gdpr=1");
+ });
+
}
@Test
@@ -481,12 +541,26 @@ public void makeHttpRequestsShouldBuildUrlIfDeviceWithIfaIsPresent() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactlyInAnyOrder("https://myao.adocean.pl/_10000000/ad.json?pbsrv_v=1.3.0"
- + "&id=tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7"
- + "&nc=1&nosecure=1&aid=adoceanmyaozpniqismex%3Aao-test"
- + "&gdpr_consent=consent&gdpr=1&ifa=ifa&devos=os&devosv=osv&devmodel=model&devmake=make");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://myao.adocean.pl/_10000000/ad.json");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("ifa=ifa");
+ assertThat(url).contains("devosv=osv");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("devos=os");
+ assertThat(url).contains("devmake=make");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("id=tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7");
+ assertThat(url).contains("aid=adoceanmyaozpniqismex%3Aao-test");
+ assertThat(url).contains("devmodel=model");
+ assertThat(url).contains("gdpr=1");
+ });
+
}
@Test
@@ -511,13 +585,26 @@ public void makeHttpRequestsShouldBuildUrlIfDeviceWithIfaIsNotPresent() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactlyInAnyOrder("https://myao.adocean.pl/_10000000/ad.json?pbsrv_v=1.3.0"
- + "&id=tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7"
- + "&nc=1&nosecure=1&aid=adoceanmyaozpniqismex%3Aao-test"
- + "&gdpr_consent=consent&gdpr=1&dpidmd5=dpidmd5&devos=os&devosv=osv"
- + "&devmodel=model&devmake=make");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://myao.adocean.pl/_10000000/ad.json");
+ assertThat(url).contains("pbsrv_v=1.3.0");
+ assertThat(url).contains("dpidmd5=dpidmd5");
+ assertThat(url).contains("nc=1");
+ assertThat(url).contains("devosv=osv");
+ assertThat(url).contains("nosecure=1");
+ assertThat(url).contains("devos=os");
+ assertThat(url).contains("devmake=make");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("id=tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7");
+ assertThat(url).contains("aid=adoceanmyaozpniqismex%3Aao-test");
+ assertThat(url).contains("devmodel=model");
+ assertThat(url).contains("gdpr=1");
+ });
+
}
private static AdoceanResponseAdUnit adoceanResponseCreator(
diff --git a/src/test/java/org/prebid/server/bidder/appnexus/AppnexusBidderTest.java b/src/test/java/org/prebid/server/bidder/appnexus/AppnexusBidderTest.java
index 445aa552a1b..b1d01c2fa68 100644
--- a/src/test/java/org/prebid/server/bidder/appnexus/AppnexusBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/appnexus/AppnexusBidderTest.java
@@ -459,7 +459,7 @@ public void makeHttpRequestsShouldReturnExpectedUrlWithMemberId() {
// then
assertThat(result.getValue())
.extracting(HttpRequest::getUri)
- .containsExactly("https://endpoint.com/?member_id=me+mber");
+ .containsExactly("https://endpoint.com/?member_id=me%20mber");
assertThat(result.getErrors()).isEmpty();
}
diff --git a/src/test/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidderTest.java b/src/test/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidderTest.java
index 2a6081c7857..8c84d8bdd14 100644
--- a/src/test/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/audiencenetwork/AudienceNetworkBidderTest.java
@@ -46,7 +46,8 @@ public class AudienceNetworkBidderTest extends VertxTest {
private static final String PLATFORM_ID = "101";
private static final String APP_SECRET = "6237";
private static final String DEFAULT_BID_CURRENCY = "USD";
- public static final String TIMEOUT_NOTIFICATION_URL_TEMPLATE = "https://url/?p=%s&a=%s&auction=%s&ortb_loss_code=2";
+ public static final String TIMEOUT_NOTIFICATION_URL_TEMPLATE =
+ "https://url/?p={{PlatformId}}&a={{PublisherId}}&auction={{RequestId}}&ortb_loss_code=2";
private final AudienceNetworkBidder target = new AudienceNetworkBidder(
ENDPOINT_URL,
diff --git a/src/test/java/org/prebid/server/bidder/bluesea/BlueSeaBidderTest.java b/src/test/java/org/prebid/server/bidder/bluesea/BlueSeaBidderTest.java
index f26abea686e..5d57c4781c4 100644
--- a/src/test/java/org/prebid/server/bidder/bluesea/BlueSeaBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/bluesea/BlueSeaBidderTest.java
@@ -97,10 +97,21 @@ public void makeHttpRequestsShouldMakeCorrectUrls() {
// then
assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue()).hasSize(2)
+ assertThat(result.getValue())
+ .hasSize(2)
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com?pubid=testPubId&token=testToken",
- "https://test.endpoint.com?pubid=testPubId2&token=testToken2");
+ .satisfiesExactly(
+ url -> {
+ assertThat(url).startsWith("https://test.endpoint.com");
+ assertThat(url).contains("pubid=testPubId");
+ assertThat(url).contains("token=testToken");
+ },
+ url -> {
+ assertThat(url).startsWith("https://test.endpoint.com");
+ assertThat(url).contains("pubid=testPubId2");
+ assertThat(url).contains("token=testToken2");
+ }
+ );
}
@Test
diff --git a/src/test/java/org/prebid/server/bidder/dxkulture/DxKultureBidderTest.java b/src/test/java/org/prebid/server/bidder/dxkulture/DxKultureBidderTest.java
index 15e4f869c36..7adfd183afb 100644
--- a/src/test/java/org/prebid/server/bidder/dxkulture/DxKultureBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/dxkulture/DxKultureBidderTest.java
@@ -99,9 +99,13 @@ public void makeHttpRequestsShouldCreateCorrectUrl() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue()).hasSize(1);
- assertThat(result.getValue())
+ assertThat(result.getValue()).first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com?publisher_id=testPublisherId&placement_id=testPlacementId");
+ .satisfies(url -> {
+ assertThat(url).startsWith(ENDPOINT_URL);
+ assertThat(url).contains("publisher_id=testPublisherId");
+ assertThat(url).contains("placement_id=testPlacementId");
+ });
}
@Test
diff --git a/src/test/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidderTest.java b/src/test/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidderTest.java
index 2ecf5d9f1b5..c55f8f4c421 100644
--- a/src/test/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/emxdigital/EmxDigitalBidderTest.java
@@ -12,7 +12,11 @@
import com.iab.openrtb.response.Bid;
import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.prebid.server.VertxTest;
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
@@ -24,7 +28,7 @@
import org.prebid.server.proto.openrtb.ext.request.emxdigital.ExtImpEmxDigital;
import java.math.BigDecimal;
-import java.time.Instant;
+import java.time.Clock;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -35,19 +39,31 @@
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.Assertions.within;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mock.Strictness.LENIENT;
import static org.prebid.server.proto.openrtb.ext.response.BidType.banner;
import static org.prebid.server.proto.openrtb.ext.response.BidType.video;
+@ExtendWith(MockitoExtension.class)
public class EmxDigitalBidderTest extends VertxTest {
- private static final String ENDPOINT_URL = "https://test.endpoint.com";
+ private static final String ENDPOINT_URL = "https://test.com?t={{URL_TIMEOUT}}&ts={{TIMESTAMP}}&src=pbserver";
- private final EmxDigitalBidder target = new EmxDigitalBidder(ENDPOINT_URL, jacksonMapper);
+ @Mock(strictness = LENIENT)
+ private Clock clock;
+
+ private EmxDigitalBidder target;
+
+ @BeforeEach
+ public void before() {
+ given(clock.millis()).willReturn(200L);
+ target = new EmxDigitalBidder(ENDPOINT_URL, clock, jacksonMapper);
+ }
@Test
public void creationShouldFailOnInvalidEndpointUrl() {
- assertThatIllegalArgumentException().isThrownBy(() -> new EmxDigitalBidder("invalid_url", jacksonMapper));
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> new EmxDigitalBidder("invalid_url", clock, jacksonMapper));
}
@Test
@@ -465,17 +481,10 @@ public void makeHttpRequestsShouldSendRequestToModifiedUrlWithHeaders() {
.makeHttpRequests(bidRequest);
// then
- final int expectedTime = (int) Instant.now().getEpochSecond();
-
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue()).hasSize(1)
.extracting(HttpRequest::getUri)
- .allSatisfy(uri -> {
- assertThat(uri).startsWith("https://test.endpoint.com?t=1000&ts=");
- assertThat(uri).endsWith("&src=pbserver");
- final String ts = uri.substring(36, uri.indexOf("&src"));
- assertThat(Integer.parseInt(ts)).isCloseTo(expectedTime, within(10));
- });
+ .containsExactly("https://test.com?t=1000&ts=200&src=pbserver");
assertThat(result.getValue()).hasSize(1)
.flatExtracting(r -> r.getHeaders().entries())
diff --git a/src/test/java/org/prebid/server/bidder/eplanning/EplanningBidderTest.java b/src/test/java/org/prebid/server/bidder/eplanning/EplanningBidderTest.java
index 8b94f14c737..0c7d65f649b 100644
--- a/src/test/java/org/prebid/server/bidder/eplanning/EplanningBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/eplanning/EplanningBidderTest.java
@@ -108,26 +108,6 @@ public void makeHttpRequestsShouldReturnErrorIfImpExtClientIdIsBlank() {
assertThat(result.getValue()).isEmpty();
}
- @Test
- public void makeHttpRequestsShouldReturnErrorIfEndpointUrlComposingFails() {
- // given
- final BidRequest bidRequest = givenBidRequest(
- requestBuilder -> requestBuilder
- .site(Site.builder().domain("invalid domain").build()),
- identity());
-
- // when
- final Result
>> result = target.makeHttpRequests(bidRequest);
-
- // then
- assertThat(result.getErrors()).hasSize(1)
- .allSatisfy(error -> {
- assertThat(error.getMessage())
- .startsWith("Invalid url: https://eplanning.com/clientId/1/invalid domain/ROS");
- assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input);
- });
- }
-
@Test
public void makeHttpRequestsShouldSendSingleGetRequestWithNullBody() {
// given
@@ -206,9 +186,15 @@ public void makeHttpRequestsShouldSetCorrectUriWithDefaults() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly(
- "https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A1x1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ });
}
@Test
@@ -225,10 +211,16 @@ public void makeHttpRequestsShouldSetCorrectUriWithSitePageAndDomain() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly(
- "https://eplanning.com/clientId/1/DOMAIN/ROS?r=pbs&ncb=1&ur=https%3A%2F%2Fwww.example.com&e="
- + "testadun_itco_de%3A1x1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/DOMAIN/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=https%3A%2F%2Fwww.example.com");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ });
+
}
@Test
@@ -245,9 +237,16 @@ public void makeHttpRequestsShouldSetCorrectUriIfSiteDomainIsBlank() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/www.example.com/ROS?r=pbs&ncb=1"
- + "&ur=https%3A%2F%2Fwww.example.com&e=testadun_itco_de%3A1x1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/www.example.com/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=https%3A%2F%2Fwww.example.com");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ });
+
}
@Test
@@ -266,9 +265,16 @@ public void makeHttpRequestsShouldSetCorrectUriWithSizeStringFromBannerWAndH() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A"
- + "300x200");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A300x200");
+ });
+
}
@Test
@@ -288,9 +294,16 @@ public void makeHttpRequestsShouldSetCorrectUriWithSizeStringFromFormatForMobile
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A"
- + "320x50");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A320x50");
+ });
+
}
@Test
@@ -310,9 +323,16 @@ public void makeHttpRequestsShouldSetCorrectUriWithSizeStringFromFormatForDeskto
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A"
- + "728x90");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A728x90");
+ });
+
}
@Test
@@ -332,9 +352,16 @@ public void makeHttpRequestsShouldTolerateAndDropInvalidFormats() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A"
- + "728x90");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A728x90");
+ });
+
}
@Test
@@ -354,9 +381,16 @@ public void makeHttpRequestsShouldSetUriWithSize1x1WhenSizeWasNotFoundInPriority
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A"
- + "1x1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ });
+
}
@Test
@@ -373,9 +407,17 @@ public void makeHttpRequestsShouldSetCorrectUriWithUserId() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A"
- + "1x1&uid=Buyer-ID");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ assertThat(url).contains("uid=Buyer-ID");
+ });
+
}
@Test
@@ -392,10 +434,17 @@ public void makeHttpRequestsShouldSetCorrectUriWithDeviceIp() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly(
- "https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&ur=FILE&e=testadun_itco_de%3A1x1"
- + "&ip=123.321.321.123");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("ur=FILE");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ assertThat(url).contains("ip=123.321.321.123");
+ });
+
}
@Test
@@ -413,9 +462,19 @@ public void makeHttpRequestsShouldSetCorrectUriWithApp() {
// then
assertThat(result.getErrors()).isEmpty();
assertThat(result.getValue())
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://eplanning.com/clientId/1/FILE/ROS?r=pbs&ncb=1&e=testadun_itco_de%3A1x1&"
- + "appn=appName&appid=id&ifa=ifa&app=1");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://eplanning.com/clientId/1/FILE/ROS");
+ assertThat(url).contains("r=pbs");
+ assertThat(url).contains("ncb=1");
+ assertThat(url).contains("e=testadun_itco_de%3A1x1");
+ assertThat(url).contains("appn=appName");
+ assertThat(url).contains("appid=id");
+ assertThat(url).contains("ifa=ifa");
+ assertThat(url).contains("app=1");
+ });
+
}
@Test
diff --git a/src/test/java/org/prebid/server/bidder/huaweiads/HuaweiEndpointResolverTest.java b/src/test/java/org/prebid/server/bidder/huaweiads/HuaweiEndpointResolverTest.java
index d831443d157..f468e46aecb 100644
--- a/src/test/java/org/prebid/server/bidder/huaweiads/HuaweiEndpointResolverTest.java
+++ b/src/test/java/org/prebid/server/bidder/huaweiads/HuaweiEndpointResolverTest.java
@@ -3,19 +3,16 @@
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
-@ExtendWith(MockitoExtension.class)
public class HuaweiEndpointResolverTest {
private static final String ENDPOINT_URL = "https://test-url.org/";
private static final String CHINESE_ENDPOINT_URL = "https://test-url.org/china";
private static final String EUROPEAN_ENDPOINT_URL = "https://test-url.org/europe";
- private static final String RUSSIAN_ENDPOINT_URL = "https://test-url.orc/russia";
+ private static final String RUSSIAN_ENDPOINT_URL = "https://test-url.org/russia";
private static final String ASIAN_ENDPOINT_URL = "https://test-url.org/asian";
private HuaweiEndpointResolver target;
diff --git a/src/test/java/org/prebid/server/bidder/nexx360/Nexx360BidderTest.java b/src/test/java/org/prebid/server/bidder/nexx360/Nexx360BidderTest.java
index 09c50589e19..92632ba7fee 100644
--- a/src/test/java/org/prebid/server/bidder/nexx360/Nexx360BidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/nexx360/Nexx360BidderTest.java
@@ -104,9 +104,16 @@ public void makeHttpRequestsShouldSetCorrectUrl() {
// then
assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .containsExactly("https://test.endpoint.com?placement=placement&tag_id=tag");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com");
+ assertThat(url).contains("placement=placement");
+ assertThat(url).contains("tag_id=tag");
+ });
+
}
@Test
diff --git a/src/test/java/org/prebid/server/bidder/oms/OmsBidderTest.java b/src/test/java/org/prebid/server/bidder/oms/OmsBidderTest.java
index 81b3186bc71..c6886cc9dd5 100644
--- a/src/test/java/org/prebid/server/bidder/oms/OmsBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/oms/OmsBidderTest.java
@@ -2,7 +2,6 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.iab.openrtb.request.Banner;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.response.Bid;
@@ -21,21 +20,18 @@
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.function.UnaryOperator;
import static java.util.Collections.singletonList;
-import static java.util.function.UnaryOperator.identity;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.prebid.server.bidder.model.BidderError.badInput;
public class OmsBidderTest extends VertxTest {
- private static final String ENDPOINT_URL = "https://randomurl.com";
+ private static final String ENDPOINT_URL = "https://randomurl.com?publisherId={{PublisherId}}";
private final OmsBidder target = new OmsBidder(ENDPOINT_URL, jacksonMapper);
@@ -58,9 +54,9 @@ public void makeHttpRequestsShouldReturnErrorWhenRequestHasInvalidImpression() {
}
@Test
- public void makeHttpRequestsShouldCreateExpectedUrl() {
+ public void makeHttpRequestsShouldCreateUrlWithPidWhenPidIsProvided() {
// given
- final ExtImpOms impExt = ExtImpOms.of("otherTagId", 12345);
+ final ExtImpOms impExt = ExtImpOms.of("otherTagId", null);
final BidRequest bidRequest = givenBidRequest(impCustomizer -> impCustomizer.ext(givenImpExt(impExt)));
// when
@@ -74,7 +70,7 @@ public void makeHttpRequestsShouldCreateExpectedUrl() {
}
@Test
- public void makeHttpRequestsShouldCreateExpectedUrlWithPublisherId() {
+ public void makeHttpRequestsShouldCreateUrlWithPublisherIdWhenPublisherIdIsProvided() {
// given
final ExtImpOms impExt = ExtImpOms.of(null, 12345);
final BidRequest bidRequest = givenBidRequest(impCustomizer -> impCustomizer.ext(givenImpExt(impExt)));
@@ -89,48 +85,13 @@ public void makeHttpRequestsShouldCreateExpectedUrlWithPublisherId() {
.containsExactly("https://randomurl.com?publisherId=12345");
}
- @Test
- public void makeHttpRequestsShouldIncludePidInRequestWhenPresent() {
- // given
- final ObjectNode bidderExt = mapper.createObjectNode().put("pid", "examplePid");
- final ObjectNode impExt = mapper.createObjectNode().set("bidder", bidderExt);
- final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(impExt));
-
- // when
- final Result
>> result = target.makeHttpRequests(bidRequest);
-
- // then
- assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue())
- .extracting(HttpRequest::getPayload)
- .flatExtracting(BidRequest::getImp)
- .extracting(Imp::getExt)
- .containsExactly(impExt);
- }
-
- @Test
- public void makeHttpRequestsShouldIncludePublisherIdInRequestWhenPresent() {
- // given
- final ObjectNode bidderExt = mapper.createObjectNode().put("publisherId", 12345);
- final ObjectNode impExt = mapper.createObjectNode().set("bidder", bidderExt);
- final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.ext(impExt));
-
- // when
- final Result
>> result = target.makeHttpRequests(bidRequest);
-
- // then
- assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue())
- .extracting(HttpRequest::getPayload)
- .flatExtracting(BidRequest::getImp)
- .extracting(Imp::getExt)
- .containsExactly(impExt);
- }
-
@Test
public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() {
// given
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -147,7 +108,7 @@ public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() {
@Test
public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException {
// given
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -160,8 +121,7 @@ public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProces
@Test
public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException {
// given
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -174,9 +134,7 @@ public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws Jso
@Test
public void makeBidsShouldReturnBannerBid() throws JsonProcessingException {
// given
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -189,9 +147,7 @@ public void makeBidsShouldReturnBannerBid() throws JsonProcessingException {
@Test
public void makeBidsShouldReturnVideoBid() throws JsonProcessingException {
// given
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -204,9 +160,7 @@ public void makeBidsShouldReturnVideoBid() throws JsonProcessingException {
@Test
public void makeBidsShouldReturnBannerWhenMTypeIsUnsupported() throws JsonProcessingException {
// given
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -216,36 +170,6 @@ public void makeBidsShouldReturnBannerWhenMTypeIsUnsupported() throws JsonProces
assertThat(result.getValue()).extracting(BidderBid::getType).containsExactly(BidType.banner);
}
- @Test
- public void makeBidsShouldExtractAllBidsFromMultipleSeatBids() throws JsonProcessingException {
- // given
- final Bid bid1 = Bid.builder().impid("bid1").mtype(1).build();
- final Bid bid2 = Bid.builder().impid("bid2").mtype(1).build();
- final Bid bid3 = Bid.builder().impid("bid3").mtype(2).build();
-
- final SeatBid seatBid1 = SeatBid.builder().bid(Arrays.asList(bid1, bid2)).build();
- final SeatBid seatBid2 = SeatBid.builder().bid(Collections.singletonList(bid3)).build();
-
- final BidResponse bidResponse = BidResponse.builder()
- .seatbid(Arrays.asList(seatBid1, seatBid2))
- .cur("USD")
- .build();
- final String bidResponseJson = mapper.writeValueAsString(bidResponse);
-
- final BidRequest bidRequest = givenBidRequest(impBuilder -> impBuilder.banner(Banner.builder().build()));
- final BidderCall
> result = target.makeBids(httpCall, bidRequest);
-
- // then
- assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue()).hasSize(3)
- .extracting(BidderBid::getType)
- .containsExactly(BidType.banner, BidType.banner, BidType.video);
- assertThat(result.getValue()).extracting(BidderBid::getBidCurrency).containsOnly("USD");
- }
-
@Test
public void makeBidsShouldReturnVideoBidWithVideoInfo() throws JsonProcessingException {
// given
@@ -258,7 +182,7 @@ public void makeBidsShouldReturnVideoBidWithVideoInfo() throws JsonProcessingExc
.seatbid(List.of(SeatBid.builder().bid(List.of(videoBid)).build()))
.cur("USD")
.build();
- final BidderCall
> result = target.makeBids(httpCall, null);
@@ -270,14 +194,8 @@ public void makeBidsShouldReturnVideoBidWithVideoInfo() throws JsonProcessingExc
}
private static BidRequest givenBidRequest(UnaryOperator
> result = target.makeBids(httpCall, null);
diff --git a/src/test/java/org/prebid/server/bidder/tappx/TappxBidderTest.java b/src/test/java/org/prebid/server/bidder/tappx/TappxBidderTest.java
index 5372c135896..0ce76f07221 100644
--- a/src/test/java/org/prebid/server/bidder/tappx/TappxBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/tappx/TappxBidderTest.java
@@ -7,7 +7,6 @@
import com.iab.openrtb.response.Bid;
import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
-import io.vertx.core.http.HttpMethod;
import org.junit.jupiter.api.Test;
import org.prebid.server.VertxTest;
import org.prebid.server.bidder.model.BidderBid;
@@ -141,12 +140,17 @@ public void makeHttpRequestsShouldMakeRequestWithUrl() {
// then
assertThat(result.getErrors()).isEmpty();
- final String expectedUri = "https://ssp.api.domain/rtb/v2/endpoint?tappxkey=tappxkey&v=1.6&type_cnn=prebid";
- assertThat(result.getValue()).hasSize(1)
- .allSatisfy(httpRequest -> {
- assertThat(httpRequest.getUri()).isEqualTo(expectedUri);
- assertThat(httpRequest.getMethod()).isEqualTo(HttpMethod.POST);
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
+ .extracting(HttpRequest::getUri)
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://ssp.api.domain/rtb/v2/endpoint");
+ assertThat(url).contains("tappxkey=tappxkey");
+ assertThat(url).contains("v=1.6");
+ assertThat(url).contains("type_cnn=prebid");
});
+
}
@Test
@@ -165,11 +169,15 @@ public void makeHttpRequestShouldBuildCorrectUriWithPathInHostParameterButWithou
// then
assertThat(result.getErrors()).isEmpty();
- final String expectedUri = "https://ssp.api.domain/rtb/v2/endpoint?tappxkey=tappxkey&v=1.6&type_cnn=prebid";
- assertThat(result.getValue()).hasSize(1)
- .allSatisfy(httpRequest -> {
- assertThat(httpRequest.getUri()).isEqualTo(expectedUri);
- assertThat(httpRequest.getMethod()).isEqualTo(HttpMethod.POST);
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
+ .extracting(HttpRequest::getUri)
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://ssp.api.domain/rtb/v2/endpoint");
+ assertThat(url).contains("tappxkey=tappxkey");
+ assertThat(url).contains("v=1.6");
+ assertThat(url).contains("type_cnn=prebid");
});
}
@@ -189,12 +197,15 @@ public void makeHttpRequestShouldBuildCorrectUriWithEndPointParameterIfMatched()
// then
assertThat(result.getErrors()).isEmpty();
- final String expectedUri =
- "https://zz855226test.pub.domain/rtb/?tappxkey=tappxkey&v=1.6&type_cnn=prebid";
- assertThat(result.getValue()).hasSize(1)
- .allSatisfy(httpRequest -> {
- assertThat(httpRequest.getUri()).isEqualTo(expectedUri);
- assertThat(httpRequest.getMethod()).isEqualTo(HttpMethod.POST);
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
+ .extracting(HttpRequest::getUri)
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://zz855226test.pub.domain/rtb/?");
+ assertThat(url).contains("tappxkey=tappxkey");
+ assertThat(url).contains("v=1.6");
+ assertThat(url).contains("type_cnn=prebid");
});
}
@@ -214,11 +225,15 @@ public void makeHttpRequestsShouldModifyUrl() {
// then
assertThat(result.getErrors()).isEmpty();
- final String expectedUri = "https://ssp.api.domain/rtb/v2/endpoint?tappxkey=tappxkey&v=1.6&type_cnn=prebid";
- assertThat(result.getValue()).hasSize(1)
- .allSatisfy(httpRequest -> {
- assertThat(httpRequest.getUri()).isEqualTo(expectedUri);
- assertThat(httpRequest.getMethod()).isEqualTo(HttpMethod.POST);
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
+ .extracting(HttpRequest::getUri)
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://ssp.api.domain/rtb/v2/endpoint");
+ assertThat(url).contains("tappxkey=tappxkey");
+ assertThat(url).contains("v=1.6");
+ assertThat(url).contains("type_cnn=prebid");
});
}
diff --git a/src/test/java/org/prebid/server/bidder/videobyte/VideobyteBidderTest.java b/src/test/java/org/prebid/server/bidder/videobyte/VideobyteBidderTest.java
index 33f454fc055..187af211ff6 100644
--- a/src/test/java/org/prebid/server/bidder/videobyte/VideobyteBidderTest.java
+++ b/src/test/java/org/prebid/server/bidder/videobyte/VideobyteBidderTest.java
@@ -90,10 +90,29 @@ public void makeHttpRequestsShouldCreateRequestsWithCorrectUri() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
- assertThat(result.getValue()).extracting(HttpRequest::getUri)
- .containsExactly(ENDPOINT_URL + "?source=pbs&pid=" + HttpUtil.encodeUrl("1 23"),
- ENDPOINT_URL + "?source=pbs&pid=456&placementId=" + HttpUtil.encodeUrl("a/bc"),
- ENDPOINT_URL + "?source=pbs&pid=789&placementId=dce&nid=" + HttpUtil.encodeUrl("A?a=BC"));
+ assertThat(result.getValue())
+ .extracting(HttpRequest::getUri)
+ .satisfiesExactly(
+ url -> {
+ assertThat(url).startsWith(ENDPOINT_URL);
+ assertThat(url).contains("pid=1%2023");
+ assertThat(url).contains("source=pbs");
+ },
+ url -> {
+ assertThat(url).startsWith(ENDPOINT_URL);
+ assertThat(url).contains("placementId=a%2Fbc");
+ assertThat(url).contains("pid=456");
+ assertThat(url).contains("source=pbs");
+ },
+ url -> {
+ assertThat(url).startsWith(ENDPOINT_URL);
+ assertThat(url).contains("placementId=dce");
+ assertThat(url).contains("nid=A%3Fa%3DBC");
+ assertThat(url).contains("pid=789");
+ assertThat(url).contains("source=pbs");
+ }
+ );
+
assertThat(result.getErrors()).isEmpty();
}
@@ -255,7 +274,9 @@ private BidRequest givenBidRequest(Site site, Imp... imps) {
private Imp givenImp(UnaryOperator
>> result = target.makeHttpRequests(bidRequest);
-
- // then
- assertThat(result.getErrors()).hasSize(1)
- .allSatisfy(error -> {
- assertThat(error.getMessage()).startsWith("Invalid url: https://test.endpoint.com/invalid path");
- assertThat(error.getType()).isEqualTo(BidderError.Type.bad_input);
- });
- }
-
@Test
public void makeHttpRequestsShouldSendRequestToModifiedUrlWithHeaders() {
// given
@@ -143,17 +119,29 @@ public void makeHttpRequestsShouldSendRequestToModifiedUrlWithHeaders() {
final long expectedTime = clock.instant().getEpochSecond();
assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .allSatisfy(uri -> {
- assertThat(uri).startsWith("https://test.endpoint.com/1?content=json&pvid=true&ts=");
- assertThat(uri).endsWith("&t=key1%3Dvalue1%26key2%3Dvalue2&sizes=1%3A1x1%7C2x2&"
- + "ids=ylid%3Abuyeruid&yl_rtb_ifa&yl_rtb_devicetype=1&gdpr=1&gdpr_consent=consent&"
- + "schain=1.0%2C1%21exchange1.com%2C1234%2521abcd%2C1%2Cbid%2Brequest%2526%25251%2C"
- + "publisher%2Cpublisher.com%2C%257B%2522freeFormData%2522%253A1%252C%2522"
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/1");
+ assertThat(url).contains("t=key1%3Dvalue1%26key2%3Dvalue2");
+ assertThat(url).contains("sizes=1%3A1x1%7C2x2");
+ assertThat(url).contains("pvid=true");
+ assertThat(url).contains("ids=ylid%3Abuyeruid");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("yl_rtb_devicetype=1");
+ assertThat(url).contains("content=json");
+ assertThat(url).contains("gdpr=1");
+ assertThat(url).contains("schain=1.0%2C1%21exchange1.com%2C1234%2521abcd%2C1%2Cbid%2520request"
+ + "%2526%25251%2Cpublisher%2Cpublisher.com%2C%257B%2522freeFormData%2522%253A1%252C%2522"
+ "nested%2522%253A%257B%2522isTrue%2522%253Atrue%257D%257D");
- final String ts = uri.substring(54, uri.indexOf("&t="));
- assertThat(Long.parseLong(ts)).isEqualTo(expectedTime);
+ assertThat(url).contains("ts=");
+
+ final int tsStart = url.indexOf("ts=");
+ final int tsEnd = url.indexOf('&', tsStart);
+ final String tsValue = tsEnd == -1 ? url.substring(tsStart + 3) : url.substring(tsStart + 3, tsEnd);
+ assertThat(Long.parseLong(tsValue)).isEqualTo(expectedTime);
});
assertThat(result.getValue()).hasSize(1)
@@ -209,12 +197,21 @@ public void constructExtImpShouldWorkWithDuplicateKeysTargeting() {
final Result
>> result = target.makeHttpRequests(bidRequest);
// then
assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue()).hasSize(1)
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
.extracting(HttpRequest::getUri)
- .allSatisfy(uri -> {
- assertThat(uri).startsWith("https://test.endpoint.com/1,2?content=json&pvid=true&ts=");
- assertThat(uri).endsWith("&t=key1%3Dvalue1&sizes=1%3A%2C2%3A&ids=ylid%3Abuyeruid&yl_rtb_ifa&"
- + "yl_rtb_devicetype=1&gdpr=1&gdpr_consent=consent");
+ .satisfies(url -> {
+ assertThat(url).startsWith("https://test.endpoint.com/1%2C2");
+ assertThat(url).contains("t=key1%3Dvalue1");
+ assertThat(url).contains("sizes=1%3A%2C2%3A");
+ assertThat(url).contains("pvid=true");
+ assertThat(url).contains("ids=ylid%3Abuyeruid");
+ assertThat(url).contains("gdpr_consent=consent");
+ assertThat(url).contains("yl_rtb_devicetype=1");
+ assertThat(url).contains("content=json");
+ assertThat(url).contains("ts=");
+ assertThat(url).contains("gdpr=1");
});
}
@@ -264,26 +261,33 @@ public void makeBidsShouldReturnCorrectBidderBid() throws JsonProcessingExceptio
// then
final String timestamp = String.valueOf(clock.instant().getEpochSecond());
final int weekNumber = Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);
- final String adm = """
- """.formatted(timestamp);
- final BidderBid expected = BidderBid.of(
- Bid.builder()
- .id("1")
- .impid("test-imp-id")
- .price(BigDecimal.valueOf(2.01))
- .crid("11234" + weekNumber)
- .dealid("1234")
- .w(728)
- .h(90)
- .adm(adm)
- .adomain(singletonList("yieldlab"))
- .build(),
- BidType.banner, "EUR");
+ assertThat(result.getValue())
+ .hasSize(1)
+ .first()
+ .satisfies(bb -> {
+ final Bid bid = bb.getBid();
+ assertThat(bid.getId()).isEqualTo("1");
+ assertThat(bid.getImpid()).isEqualTo("test-imp-id");
+ assertThat(bid.getPrice()).isEqualByComparingTo("2.01");
+ assertThat(bid.getCrid()).isEqualTo("11234" + weekNumber);
+ assertThat(bid.getDealid()).isEqualTo("1234");
+ assertThat(bid.getW()).isEqualTo(728);
+ assertThat(bid.getH()).isEqualTo(90);
+ assertThat(bid.getAdomain()).containsExactly("yieldlab");
+ assertThat(bb.getType()).isEqualTo(BidType.banner);
+ assertThat(bb.getBidCurrency()).isEqualTo("EUR");
+
+ final String admHtml = bid.getAdm();
+ assertThat(admHtml).startsWith("");
+ });
assertThat(result.getErrors()).isEmpty();
- assertThat(result.getValue()).containsExactly(expected);
}
@Test
@@ -311,22 +315,21 @@ public void makeBidsShouldReturnCorrectAdm() throws JsonProcessingException {
// then
final String timestamp = String.valueOf(clock.instant().getEpochSecond());
- final String expectedAdm = """
-