diff --git a/config/checkstyle/checkstyle-suppressions.xml b/config/checkstyle/checkstyle-suppressions.xml
index b0cdd9c5..d1897346 100644
--- a/config/checkstyle/checkstyle-suppressions.xml
+++ b/config/checkstyle/checkstyle-suppressions.xml
@@ -7,6 +7,7 @@
+
diff --git a/src/main/java/dev/sorn/fmp4j/FmpClient.java b/src/main/java/dev/sorn/fmp4j/FmpClient.java
index 62df0be3..45ac8c19 100644
--- a/src/main/java/dev/sorn/fmp4j/FmpClient.java
+++ b/src/main/java/dev/sorn/fmp4j/FmpClient.java
@@ -1,9 +1,6 @@
package dev.sorn.fmp4j;
-import static dev.sorn.fmp4j.http.FmpHttpClientImpl.FMP_HTTP_CLIENT;
-
import dev.sorn.fmp4j.cfg.FmpConfig;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
import dev.sorn.fmp4j.clients.FmpBulkClient;
import dev.sorn.fmp4j.clients.FmpCalendarClient;
import dev.sorn.fmp4j.clients.FmpChartClient;
@@ -38,10 +35,6 @@ public class FmpClient {
protected final FmpSecFilingsSearchClient fmpSecFilingsSearchClient;
protected final FmpStatementClient fmpStatementClient;
- public FmpClient() {
- this(new FmpConfigImpl(), FMP_HTTP_CLIENT);
- }
-
public FmpClient(FmpConfig fmpConfig, FmpHttpClient fmpHttpClient) {
this(
fmpConfig,
diff --git a/src/main/java/dev/sorn/fmp4j/clients/FmpQuoteClient.java b/src/main/java/dev/sorn/fmp4j/clients/FmpQuoteClient.java
index 18391f81..280d111e 100644
--- a/src/main/java/dev/sorn/fmp4j/clients/FmpQuoteClient.java
+++ b/src/main/java/dev/sorn/fmp4j/clients/FmpQuoteClient.java
@@ -5,9 +5,9 @@
import dev.sorn.fmp4j.models.FmpFullQuote;
import dev.sorn.fmp4j.models.FmpPartialQuote;
import dev.sorn.fmp4j.models.FmpStockPriceChange;
+import dev.sorn.fmp4j.services.FmpPartialQuoteService;
import dev.sorn.fmp4j.services.FmpQuoteService;
import dev.sorn.fmp4j.services.FmpService;
-import dev.sorn.fmp4j.services.FmpShortQuoteService;
import dev.sorn.fmp4j.services.FmpStockPriceChangeService;
import dev.sorn.fmp4j.types.FmpSymbol;
@@ -18,7 +18,7 @@ public class FmpQuoteClient {
public FmpQuoteClient(FmpConfig fmpConfig, FmpHttpClient fmpHttpClient) {
this.quoteService = new FmpQuoteService(fmpConfig, fmpHttpClient);
- this.shortQuoteService = new FmpShortQuoteService(fmpConfig, fmpHttpClient);
+ this.shortQuoteService = new FmpPartialQuoteService(fmpConfig, fmpHttpClient);
this.stockPriceChangeService = new FmpStockPriceChangeService(fmpConfig, fmpHttpClient);
}
diff --git a/src/main/java/dev/sorn/fmp4j/csv/FmpCsvDeserializer.java b/src/main/java/dev/sorn/fmp4j/csv/FmpCsvDeserializer.java
index c1c5b01b..d5c84196 100644
--- a/src/main/java/dev/sorn/fmp4j/csv/FmpCsvDeserializer.java
+++ b/src/main/java/dev/sorn/fmp4j/csv/FmpCsvDeserializer.java
@@ -6,6 +6,7 @@
import com.fasterxml.jackson.core.json.JsonReadFeature;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
+import dev.sorn.fmp4j.exceptions.FmpDeserializationException;
import dev.sorn.fmp4j.http.FmpDeserializer;
import dev.sorn.fmp4j.json.FmpJsonModule;
import java.io.IOException;
@@ -14,7 +15,6 @@
public final class FmpCsvDeserializer implements FmpDeserializer {
public static final FmpCsvDeserializer FMP_CSV_DESERIALIZER = new FmpCsvDeserializer();
-
private static final CsvMapper CSV_MAPPER = (CsvMapper) new CsvMapper()
.findAndRegisterModules()
.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
@@ -22,7 +22,9 @@ public final class FmpCsvDeserializer implements FmpDeserializer {
.configure(JsonReadFeature.ALLOW_TRAILING_COMMA.mappedFeature(), true)
.registerModule(new FmpJsonModule());
- private FmpCsvDeserializer() {}
+ private FmpCsvDeserializer() {
+ // prevent direct instantiation
+ }
private String removeByteOrderMark(String content) {
if (content.startsWith("\uFEFF")) {
@@ -46,7 +48,7 @@ public T deserialize(String content, TypeReference type) {
range(0, list.size()).forEach(i -> Array.set(array, i, list.get(i)));
return (T) array;
} catch (IOException e) {
- throw new FmpCsvException(
+ throw new FmpDeserializationException(
e, "Failed to deserialize CSV to '%s': %s", type.getType().getTypeName(), content);
}
}
diff --git a/src/main/java/dev/sorn/fmp4j/csv/FmpCsvException.java b/src/main/java/dev/sorn/fmp4j/csv/FmpCsvException.java
deleted file mode 100644
index 0638f472..00000000
--- a/src/main/java/dev/sorn/fmp4j/csv/FmpCsvException.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package dev.sorn.fmp4j.csv;
-
-import static java.lang.String.format;
-
-public class FmpCsvException extends RuntimeException {
- public FmpCsvException(Throwable t, String message, Object... args) {
- super(format(message, args), t);
- }
-}
diff --git a/src/main/java/dev/sorn/fmp4j/exceptions/FmpDeserializationException.java b/src/main/java/dev/sorn/fmp4j/exceptions/FmpDeserializationException.java
new file mode 100644
index 00000000..a3f09e46
--- /dev/null
+++ b/src/main/java/dev/sorn/fmp4j/exceptions/FmpDeserializationException.java
@@ -0,0 +1,11 @@
+package dev.sorn.fmp4j.exceptions;
+
+public class FmpDeserializationException extends FmpException {
+ public FmpDeserializationException(Throwable cause, String message, Object... args) {
+ super(cause, message, args);
+ }
+
+ public FmpDeserializationException(String message, Object... args) {
+ super(message, args);
+ }
+}
diff --git a/src/main/java/dev/sorn/fmp4j/exceptions/FmpException.java b/src/main/java/dev/sorn/fmp4j/exceptions/FmpException.java
index 915c8fed..ee0650b4 100644
--- a/src/main/java/dev/sorn/fmp4j/exceptions/FmpException.java
+++ b/src/main/java/dev/sorn/fmp4j/exceptions/FmpException.java
@@ -3,6 +3,10 @@
import static java.lang.String.format;
public class FmpException extends RuntimeException {
+ public FmpException(Throwable t, String message, Object... args) {
+ super(format(message, args), t);
+ }
+
public FmpException(String message, Object... args) {
super(format(message, args));
}
diff --git a/src/main/java/dev/sorn/fmp4j/http/FmpContentType.java b/src/main/java/dev/sorn/fmp4j/http/FmpContentType.java
new file mode 100644
index 00000000..24835b9e
--- /dev/null
+++ b/src/main/java/dev/sorn/fmp4j/http/FmpContentType.java
@@ -0,0 +1,27 @@
+package dev.sorn.fmp4j.http;
+
+import dev.sorn.fmp4j.types.FmpValueObject;
+
+public enum FmpContentType implements FmpValueObject {
+ CSV("text/csv"),
+ JSON("application/json");
+
+ private final String value;
+
+ FmpContentType(String value) {
+ this.value = value;
+ }
+
+ public static FmpContentType fromContentTypeHeader(String header) {
+ for (final var contentType : values()) {
+ if (header != null && header.equals(contentType.value())) {
+ return contentType;
+ }
+ }
+ throw new IllegalArgumentException("Unsupported content type: " + header);
+ }
+
+ public String value() {
+ return value;
+ }
+}
diff --git a/src/main/java/dev/sorn/fmp4j/http/FmpDeserializationRegistry.java b/src/main/java/dev/sorn/fmp4j/http/FmpDeserializationRegistry.java
new file mode 100644
index 00000000..4ec7b0a1
--- /dev/null
+++ b/src/main/java/dev/sorn/fmp4j/http/FmpDeserializationRegistry.java
@@ -0,0 +1,6 @@
+package dev.sorn.fmp4j.http;
+
+@FunctionalInterface
+public interface FmpDeserializationRegistry {
+ FmpDeserializer resolve(FmpContentType contentType);
+}
diff --git a/src/main/java/dev/sorn/fmp4j/http/FmpHttpClientImpl.java b/src/main/java/dev/sorn/fmp4j/http/FmpHttpClientImpl.java
index 82aaa67b..cee6a908 100644
--- a/src/main/java/dev/sorn/fmp4j/http/FmpHttpClientImpl.java
+++ b/src/main/java/dev/sorn/fmp4j/http/FmpHttpClientImpl.java
@@ -1,15 +1,10 @@
package dev.sorn.fmp4j.http;
-import static dev.sorn.fmp4j.csv.FmpCsvDeserializer.FMP_CSV_DESERIALIZER;
import static dev.sorn.fmp4j.http.FmpUriUtils.uriWithParams;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.Objects.requireNonNull;
import com.fasterxml.jackson.core.type.TypeReference;
-import dev.sorn.fmp4j.csv.FmpCsvDeserializer;
-import dev.sorn.fmp4j.csv.FmpCsvException;
-import dev.sorn.fmp4j.json.FmpJsonDeserializer;
-import dev.sorn.fmp4j.json.FmpJsonException;
+import dev.sorn.fmp4j.exceptions.FmpDeserializationException;
import dev.sorn.fmp4j.types.FmpApiKey;
import java.io.IOException;
import java.net.URI;
@@ -18,65 +13,47 @@
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.classic.methods.HttpGet;
-import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.io.entity.EntityUtils;
-public class FmpHttpClientImpl implements FmpHttpClient {
- public static final FmpHttpClient FMP_HTTP_CLIENT = new FmpHttpClientImpl();
+public final class FmpHttpClientImpl implements FmpHttpClient {
private final HttpClient http;
- private final FmpJsonDeserializer jsonDeserializer;
- private final FmpCsvDeserializer csvDeserializer;
+ private final FmpDeserializationRegistry deserializationRegistry;
- private FmpHttpClientImpl() {
- this(HttpClients.createDefault(), FMP_JSON_DESERIALIZER, FMP_CSV_DESERIALIZER);
- }
-
- public FmpHttpClientImpl(HttpClient httpClient, FmpJsonDeserializer jsonDeserializer) {
- this(httpClient, jsonDeserializer, FMP_CSV_DESERIALIZER);
- }
-
- public FmpHttpClientImpl(
- HttpClient httpClient, FmpJsonDeserializer jsonDeserializer, FmpCsvDeserializer csvDeserializer) {
+ public FmpHttpClientImpl(HttpClient httpClient, FmpDeserializationRegistry deserializationRegistry) {
this.http = requireNonNull(httpClient, "'httpClient' is required");
- this.jsonDeserializer = requireNonNull(jsonDeserializer, "'jsonDeserializer' is required");
- this.csvDeserializer = requireNonNull(csvDeserializer, "'csvDeserializer' is required");
+ this.deserializationRegistry = requireNonNull(deserializationRegistry, "'deserializationRegistry' is required");
}
@Override
public T get(TypeReference type, URI uri, Map headers, Map queryParams) {
try {
+ requireNonNull(headers, "'headers' is required");
+ final var contentType = headers.get("Content-Type");
final var request = buildRequest(uri, headers, queryParams);
final var responsePair = executeRequest(request);
final var statusCode = responsePair.getLeft();
final var responseBody = responsePair.getRight();
+ if (responseBody.isBlank()) {
+ throw new FmpHttpException(
+ "Empty response for type [%s], uri [%s], headers [%s], queryParams [%s]",
+ type.getType(), uri, headers, queryParams);
+ }
if (statusCode == 401 || statusCode == 403) {
throw new FmpUnauthorizedException(
- "Unauthorized for type [%s], uri [%s], headers [%s], queryParams [%s];\nresponseBody: %s",
+ "Unauthorized for type [%s], uri [%s], headers [%s], queryParams [%s]",
type.getType(), uri, headers, queryParams, responseBody);
}
-
- String contentType = headers != null ? headers.get("Content-Type") : null;
- if ("text/csv".equals(contentType)) {
- return csvDeserializer.deserialize(responseBody, type);
- } else {
- return jsonDeserializer.deserialize(responseBody, type);
- }
- } catch (FmpUnauthorizedException e) {
+ return deserializationRegistry
+ .resolve(FmpContentType.fromContentTypeHeader(contentType))
+ .deserialize(responseBody, type);
+ } catch (FmpHttpException e) {
throw e;
- } catch (FmpJsonException e) {
- throw new FmpHttpException(
- e,
- "JSON deserialization failed for type [%s], uri [%s], headers [%s], queryParams [%s]",
- type.getType(),
- uri,
- headers,
- queryParams);
- } catch (FmpCsvException e) {
+ } catch (FmpDeserializationException e) {
throw new FmpHttpException(
e,
- "CSV deserialization failed for type [%s], uri [%s], headers [%s], queryParams [%s]",
+ "Deserialization failed for type [%s], uri [%s], headers [%s], queryParams [%s]",
type.getType(),
uri,
headers,
@@ -86,7 +63,7 @@ public T get(TypeReference type, URI uri, Map headers, Ma
}
}
- protected HttpGet buildRequest(URI uri, Map headers, Map queryParams) {
+ HttpGet buildRequest(URI uri, Map headers, Map queryParams) {
final var copy = new HashMap<>(queryParams);
final var key = (FmpApiKey) queryParams.get("apikey");
copy.put("apikey", key.value());
@@ -98,7 +75,7 @@ protected HttpGet buildRequest(URI uri, Map headers, Map executeRequest(HttpGet request) throws IOException, ParseException {
+ Pair executeRequest(HttpGet request) throws IOException, ParseException {
try (ClassicHttpResponse response = http.executeOpen(null, request, null)) {
return Pair.of(response.getCode(), EntityUtils.toString(response.getEntity()));
}
diff --git a/src/main/java/dev/sorn/fmp4j/json/FmpJsonDeserializer.java b/src/main/java/dev/sorn/fmp4j/json/FmpJsonDeserializer.java
index 997c3586..daa7c7e9 100644
--- a/src/main/java/dev/sorn/fmp4j/json/FmpJsonDeserializer.java
+++ b/src/main/java/dev/sorn/fmp4j/json/FmpJsonDeserializer.java
@@ -5,6 +5,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import dev.sorn.fmp4j.exceptions.FmpDeserializationException;
import dev.sorn.fmp4j.http.FmpDeserializer;
import java.io.IOException;
@@ -24,7 +25,7 @@ public T deserialize(String json, TypeReference type) {
try {
return OBJECT_MAPPER.readValue(json, type);
} catch (IOException e) {
- throw new FmpJsonException(
+ throw new FmpDeserializationException(
e, "Failed to deserialize JSON to '%s': %s", type.getType().getTypeName(), json);
}
}
diff --git a/src/main/java/dev/sorn/fmp4j/json/FmpJsonException.java b/src/main/java/dev/sorn/fmp4j/json/FmpJsonException.java
deleted file mode 100644
index af0b89e3..00000000
--- a/src/main/java/dev/sorn/fmp4j/json/FmpJsonException.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package dev.sorn.fmp4j.json;
-
-import static java.lang.String.format;
-
-public class FmpJsonException extends RuntimeException {
- public FmpJsonException(Throwable t, String message, Object... args) {
- super(format(message, args), t);
- }
-}
diff --git a/src/main/java/dev/sorn/fmp4j/services/FmpShortQuoteService.java b/src/main/java/dev/sorn/fmp4j/services/FmpPartialQuoteService.java
similarity index 81%
rename from src/main/java/dev/sorn/fmp4j/services/FmpShortQuoteService.java
rename to src/main/java/dev/sorn/fmp4j/services/FmpPartialQuoteService.java
index 132bd438..f1c9b021 100644
--- a/src/main/java/dev/sorn/fmp4j/services/FmpShortQuoteService.java
+++ b/src/main/java/dev/sorn/fmp4j/services/FmpPartialQuoteService.java
@@ -8,8 +8,8 @@
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
-public class FmpShortQuoteService extends FmpService {
- public FmpShortQuoteService(FmpConfig cfg, FmpHttpClient http) {
+public class FmpPartialQuoteService extends FmpService {
+ public FmpPartialQuoteService(FmpConfig cfg, FmpHttpClient http) {
super(cfg, http, typeRef(FmpPartialQuote[].class));
}
diff --git a/src/main/java/dev/sorn/fmp4j/services/FmpService.java b/src/main/java/dev/sorn/fmp4j/services/FmpService.java
index 8260f0b1..85097665 100644
--- a/src/main/java/dev/sorn/fmp4j/services/FmpService.java
+++ b/src/main/java/dev/sorn/fmp4j/services/FmpService.java
@@ -1,5 +1,7 @@
package dev.sorn.fmp4j.services;
+import static java.util.Objects.requireNonNull;
+
import com.fasterxml.jackson.core.type.TypeReference;
import dev.sorn.fmp4j.cfg.FmpConfig;
import dev.sorn.fmp4j.http.FmpHttpClient;
@@ -16,10 +18,10 @@ public abstract class FmpService {
protected final TypeReference typeRef;
protected FmpService(FmpConfig cfg, FmpHttpClient http, TypeReference typeRef) {
- this.cfg = cfg;
- this.http = http;
- this.typeRef = typeRef;
- this.params.put("apikey", cfg.fmpApiKey());
+ this.cfg = requireNonNull(cfg, "'cfg' is required");
+ this.http = requireNonNull(http, "'http' is required");
+ this.typeRef = requireNonNull(typeRef, "'typeRef' is required");
+ this.params.put("apikey", requireNonNull(cfg.fmpApiKey(), "'apikey' is required"));
}
protected abstract String relativeUrl();
diff --git a/src/test/java/dev/sorn/fmp4j/FmpClientTest.java b/src/test/java/dev/sorn/fmp4j/FmpClientTest.java
index d6d444d0..b1a6e36c 100644
--- a/src/test/java/dev/sorn/fmp4j/FmpClientTest.java
+++ b/src/test/java/dev/sorn/fmp4j/FmpClientTest.java
@@ -1,9 +1,6 @@
package dev.sorn.fmp4j;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
-import static dev.sorn.fmp4j.TestUtils.csvTestResource;
-import static dev.sorn.fmp4j.TestUtils.jsonTestResource;
-import static dev.sorn.fmp4j.json.FmpJsonUtils.typeRef;
import static dev.sorn.fmp4j.types.FmpCik.cik;
import static dev.sorn.fmp4j.types.FmpCusip.cusip;
import static dev.sorn.fmp4j.types.FmpInterval.interval;
@@ -26,15 +23,8 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import com.fasterxml.jackson.core.type.TypeReference;
-import dev.sorn.fmp4j.cfg.FmpConfig;
import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
import dev.sorn.fmp4j.models.FmpBalanceSheetStatement;
import dev.sorn.fmp4j.models.FmpBalanceSheetStatementGrowth;
import dev.sorn.fmp4j.models.FmpCashFlowStatement;
@@ -85,12 +75,9 @@
import dev.sorn.fmp4j.models.FmpStock;
import dev.sorn.fmp4j.models.FmpStockPriceChange;
import dev.sorn.fmp4j.models.FmpTreasuryRate;
-import dev.sorn.fmp4j.types.FmpApiKey;
+import dev.sorn.fmp4j.services.HttpTest;
import dev.sorn.fmp4j.types.FmpSymbol;
-import java.net.URI;
import java.time.LocalDate;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
@@ -100,43 +87,33 @@
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpClientTest {
- private static final String BASE_URL = "https://financialmodelingprep.com/stable";
- private static final FmpApiKey API_KEY = new FmpApiKey("ABCDEf0ghIjklmNO1pqRsT2u34VWx5y6");
- private final FmpConfig fmpConfig = mock(FmpConfig.class);
- private final FmpHttpClient fmpHttpClient = mock(FmpHttpClient.class);
+class FmpClientTest extends HttpTest {
private FmpClient fmpClient;
@BeforeEach
void setUp() {
- when(fmpConfig.fmpBaseUrl()).thenReturn(BASE_URL);
- when(fmpConfig.fmpApiKey()).thenReturn(API_KEY);
- fmpClient = new FmpClient(fmpConfig, fmpHttpClient);
+ fmpClient = new FmpClient(config, client);
}
@Test
void testConstructor_doesNotThrowAndCreatesInstance() {
+ // given
setProperty(FmpConfigImpl.FMP4J_API_KEY_ENV, "ABCDEf0ghIjklmNO1pqRsT2u34VWx5y6");
setProperty(FmpConfigImpl.FMP4J_BASE_URL_ENV, "https://financialmodelingprep.com/stable");
- assertDoesNotThrow(() -> new FmpClient());
- FmpClient client = new FmpClient();
- assertNotNull(client);
+ // when // then
+ assertNotNull(assertDoesNotThrow(() -> new FmpClient(config, client)));
}
@Test
void searchPressReleases() {
// given
var symbol = symbol("V");
- var typeRef = typeRef(FmpSearchPressRelease[].class);
var endpoint = "news/press-releases";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbols", symbol));
var file = format("stable/%s/?symbols=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.search().pressReleases(symbol);
// then
@@ -147,15 +124,11 @@ void searchPressReleases() {
void searchByIsin() {
// given
var isin = isin("NL0012969182");
- var typeRef = typeRef(FmpSearchByIsin[].class);
var endpoint = "search-isin";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("isin", isin));
var file = format("stable/%s/?isin=%s.json", endpoint, isin);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.search().byIsin(isin);
// then
@@ -166,15 +139,11 @@ void searchByIsin() {
void searchByName() {
// given
var query = "ADYEN";
- var typeRef = typeRef(FmpSearchByName[].class);
var endpoint = "search-name";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("query", query));
var file = format("stable/%s/?query=%s.json", endpoint, query);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.search().byName(query);
// then
@@ -187,15 +156,11 @@ void cashFlowStatementGrowthBulk(String p) {
// given
var year = year("2025");
var period = period(p);
- var typeRef = typeRef(FmpCashFlowStatementGrowth[].class);
var endpoint = "cash-flow-statement-growth-bulk";
- var uri = buildUri(endpoint);
- var headers = Map.of("Content-Type", "text/csv");
- var params = buildParams(Map.of("year", year, "period", period));
var file = format("stable/%s/?year=%s&period=%s.csv", endpoint, year, period);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.bulk().cashFlowStatementGrowth(year, period);
// then
@@ -206,15 +171,11 @@ void cashFlowStatementGrowthBulk(String p) {
void searchByCusip() {
// given
var cusip = cusip("037833100");
- var typeRef = typeRef(FmpSearchByCusip[].class);
var endpoint = "search-cusip";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("cusip", cusip));
var file = format("stable/%s/?cusip=%s.json", endpoint, cusip);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.search().byCusip(cusip);
// then
@@ -225,15 +186,11 @@ void searchByCusip() {
void searchBySymbol() {
// given
var query = symbol("ADYEN");
- var typeRef = typeRef(FmpSearchBySymbol[].class);
var endpoint = "search-symbol";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("query", query));
var file = format("stable/%s/?query=%s.json", endpoint, query);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.search().bySymbol(query);
// then
@@ -244,15 +201,11 @@ void searchBySymbol() {
void searchByCik() {
// given
var cik = cik("0000320193");
- var typeRef = typeRef(FmpSearchByCik[].class);
var endpoint = "search-cik";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("cik", cik));
var file = format("stable/%s/?cik=%s.json", endpoint, cik);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.search().byCik(cik);
// then
@@ -262,15 +215,11 @@ void searchByCik() {
@Test
void stockDirectory() {
// given
- var typeRef = typeRef(FmpStock[].class);
var endpoint = "stock-list";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of());
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.directory().stocks();
// then
@@ -280,15 +229,11 @@ void stockDirectory() {
@Test
void etfDirectory() {
// given
- var typeRef = typeRef(FmpEtf[].class);
var endpoint = "etf-list";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of());
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.directory().etfs();
// then
@@ -298,15 +243,11 @@ void etfDirectory() {
@Test
void dividends_calendar() {
// given
- var typeRef = typeRef(FmpDividendsCalendar[].class);
var endpoint = "dividends-calendar";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of());
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().dividends();
// then
@@ -316,16 +257,12 @@ void dividends_calendar() {
@Test
void dividends() {
// given
- var typeRef = typeRef(FmpDividend[].class);
var endpoint = "dividends";
var symbol = symbol("AAPL");
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().dividends(symbol);
// then
@@ -335,15 +272,11 @@ void dividends() {
@Test
void earnings_calendar() {
// given
- var typeRef = typeRef(FmpEarningsCalendar[].class);
var endpoint = "earnings-calendar";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of());
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().earnings();
// then
@@ -357,16 +290,12 @@ void earnings_calendar() {
@Test
void earnings() {
// given
- var typeRef = typeRef(FmpEarning[].class);
var endpoint = "earnings";
var symbol = symbol("AAPL");
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().earnings(symbol);
// then
@@ -379,15 +308,11 @@ void iposCalendar() {
// given
var from = Optional.of(LocalDate.parse("2024-02-28"));
var to = Optional.of(LocalDate.parse("2025-02-28"));
- var typeRef = typeRef(FmpIposCalendar[].class);
var endpoint = "ipos-calendar";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("from", from, "to", to));
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().ipos(from, to);
// then
@@ -399,15 +324,11 @@ void iposDisclosure() {
// given
var from = Optional.of(LocalDate.parse("2024-02-28"));
var to = Optional.of(LocalDate.parse("2025-02-28"));
- var typeRef = typeRef(FmpIposDisclosure[].class);
var endpoint = "ipos-disclosure";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("from", from, "to", to));
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().disclosures(from, to);
// then
@@ -419,15 +340,11 @@ void iposProspectus() {
// given
var from = Optional.of(LocalDate.parse("2024-02-28"));
var to = Optional.of(LocalDate.parse("2025-02-28"));
- var typeRef = typeRef(FmpIposProspectus[].class);
var endpoint = "ipos-prospectus";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("from", from, "to", to));
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.calendar().prospectus(from, to);
// then
@@ -437,18 +354,14 @@ void iposProspectus() {
@Test
void historicalPriceEodLight() {
// given
- var typeRef = typeRef(FmpHistoricalPriceEodLight[].class);
var endpoint = "historical-price-eod/light";
var symbol = symbol("AAPL");
var from = LocalDate.parse("2024-02-22");
var to = LocalDate.parse("2024-02-28");
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "from", from, "to", to));
var file = format("stable/%s/?symbol=%s&from=%s&to=%s.json", endpoint, symbol, from, to);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.chart().historicalPriceEodLight(symbol, Optional.of(from), Optional.of(to));
// then
@@ -458,18 +371,14 @@ void historicalPriceEodLight() {
@Test
void historicalPriceEodFull() {
// given
- var typeRef = typeRef(FmpHistoricalPriceEodFull[].class);
var endpoint = "historical-price-eod/full";
var symbol = symbol("AAPL");
var from = LocalDate.parse("2024-02-22");
var to = LocalDate.parse("2024-02-28");
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "from", from, "to", to));
var file = format("stable/%s/?symbol=%s&from=%s&to=%s.json", endpoint, symbol, from, to);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.chart().historicalPriceEodFull(symbol, Optional.of(from), Optional.of(to));
// then
@@ -477,25 +386,18 @@ void historicalPriceEodFull() {
}
@ParameterizedTest
- @ValueSource(
- strings = {
- "1min", "5min", "15min", "30min", "1hour", "4hour",
- })
+ @ValueSource(strings = {"1min", "5min", "15min", "30min", "1hour", "4hour"})
void historicalChart(String intervalStr) {
// given
- var typeRef = typeRef(FmpHistoricalChart[].class);
var endpoint = "historical-chart/" + intervalStr;
var symbol = symbol("AAPL");
var interval = interval(intervalStr);
var from = LocalDate.parse("2024-01-01");
var to = LocalDate.parse("2024-01-02");
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "from", from, "to", to));
var file = format("stable/%s/?symbol=%s&from=%s&to=%s.json", endpoint, symbol, from, to);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.chart().historical(symbol, interval, Optional.of(from), Optional.of(to));
// then
@@ -506,15 +408,11 @@ void historicalChart(String intervalStr) {
void company() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpCompany[].class);
var endpoint = "profile";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.company().bySymbol(symbol);
// then
@@ -525,15 +423,11 @@ void company() {
void companies() {
// given
var part = part("0");
- var typeRef = typeRef(FmpCompanies[].class);
var endpoint = "profile-bulk";
- var uri = buildUri(endpoint);
- var headers = Map.of("Content-Type", "text/csv");
- var params = buildParams(Map.of("part", part));
var file = format("stable/%s/?part=%s.csv", endpoint, part);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.bulk().companies(part);
// then
@@ -547,15 +441,11 @@ void incomeStatements(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(3);
- var typeRef = typeRef(FmpIncomeStatement[].class);
var endpoint = "income-statement";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().income(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -567,15 +457,11 @@ void incomeStatementTtm() {
// given
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpIncomeStatement[].class);
var endpoint = "income-statement-ttm";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "limit", limit));
var file = format("stable/%s/?symbol=%s&limit=%s.json", endpoint, symbol, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().incomeTtm(symbol, Optional.of(limit));
// then
@@ -589,15 +475,11 @@ void incomeStatementGrowth(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpIncomeStatementGrowth[].class);
var endpoint = "income-statement-growth";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().incomeGrowth(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -611,15 +493,11 @@ void incomeStatementsAsReported(String p) {
var period = period(p);
var symbol = symbol("KO");
var limit = limit(2);
- var typeRef = typeRef(FmpFinancialStatementAsReported[].class);
var endpoint = "income-statement-as-reported";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().incomeAsReported(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -633,15 +511,11 @@ void balanceSheetStatements(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(3);
- var typeRef = typeRef(FmpBalanceSheetStatement[].class);
var endpoint = "balance-sheet-statement";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().balanceSheet(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -654,15 +528,11 @@ void balanceSheetStatementsBulk(String periodType) {
// given
var period = period(periodType);
var year = year("2023");
- var typeRef = typeRef(FmpBalanceSheetStatement[].class);
var endpoint = "balance-sheet-statement-bulk";
- var uri = buildUri(endpoint);
- var headers = Map.of("Content-Type", "text/csv");
- var params = buildParams(Map.of("year", year, "period", period));
var file = String.format("stable/%s/?year=%s&period=%s.csv", endpoint, year, period);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.bulk().balanceSheetStatements(year, period);
// then
@@ -674,15 +544,11 @@ void balanceSheetStatementTtm() {
// given
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpBalanceSheetStatement[].class);
var endpoint = "balance-sheet-statement-ttm";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "limit", limit));
var file = format("stable/%s/?symbol=%s&limit=%s.json", endpoint, symbol, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().balanceSheetTtm(symbol, Optional.of(limit));
// then
@@ -697,15 +563,11 @@ void balanceSheetStatementGrowth(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpBalanceSheetStatementGrowth[].class);
var endpoint = "balance-sheet-statement-growth";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().balanceSheetGrowth(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -719,15 +581,11 @@ void balanceSheetStatementsAsReported(String p) {
var period = period(p);
var symbol = symbol("KO");
var limit = limit(2);
- var typeRef = typeRef(FmpFinancialStatementAsReported[].class);
var endpoint = "balance-sheet-statement-as-reported";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().balanceSheetAsReported(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -741,15 +599,11 @@ void cashFlowStatements(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(3);
- var typeRef = typeRef(FmpCashFlowStatement[].class);
var endpoint = "cash-flow-statement";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().cashFlow(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -762,15 +616,11 @@ void cashFlowStatementsBulk(String p) {
// given
var period = period(p);
var year = year("2023");
- var typeRef = typeRef(FmpCashFlowStatement[].class);
var endpoint = "cash-flow-statement-bulk";
- var uri = buildUri(endpoint);
- var headers = Map.of("Content-Type", "text/csv");
- var params = buildParams(Map.of("year", year, "period", period));
var file = String.format("stable/%s/?year=%s&period=%s.csv", endpoint, year, period);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.bulk().cashFlowStatements(year, period);
// then
@@ -782,15 +632,11 @@ void cashFlowStatementTtm() {
// given
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpCashFlowStatement[].class);
var endpoint = "cash-flow-statement-ttm";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "limit", limit));
var file = format("stable/%s/?symbol=%s&limit=%s.json", endpoint, symbol, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().cashFlowTtm(symbol, Optional.of(limit));
// then
@@ -804,15 +650,11 @@ void cashFlowStatementGrowth(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpCashFlowStatementGrowth[].class);
var endpoint = "cash-flow-statement-growth";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().cashFlowGrowth(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -826,15 +668,11 @@ void cashFlowStatementsAsReported(String p) {
var period = period(p);
var symbol = symbol("KO");
var limit = limit(2);
- var typeRef = typeRef(FmpFinancialStatementAsReported[].class);
var endpoint = "cash-flow-statement-as-reported";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().cashFlowAsReported(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -848,15 +686,11 @@ void financialGrowth(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(2);
- var typeRef = typeRef(FmpFinancialGrowth[].class);
var endpoint = "financial-growth";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().financialGrowth(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -879,15 +713,11 @@ void ratios(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(3);
- var typeRef = typeRef(FmpRatio[].class);
var endpoint = "ratios";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().ratios(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -898,15 +728,11 @@ void ratios(String p) {
void ratiosTtm() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpRatioTtm[].class);
var endpoint = "ratios-ttm";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().ratiosTtm(symbol);
// then
@@ -920,15 +746,11 @@ void keyMetrics(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(3);
- var typeRef = typeRef(FmpKeyMetric[].class);
var endpoint = "key-metrics";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().keyMetrics(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -939,15 +761,11 @@ void keyMetrics(String p) {
void keyMetricsTtm() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpKeyMetricTtm[].class);
var endpoint = "key-metrics-ttm";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().keyMetricsTtm(symbol);
// then
@@ -961,15 +779,11 @@ void enterpriseValues(String p) {
var period = period(p);
var symbol = symbol("AAPL");
var limit = limit(3);
- var typeRef = typeRef(FmpEnterpriseValue[].class);
var endpoint = "enterprise-values";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "limit", limit));
var file = format("stable/%s/?symbol=%s&period=%s&limit=%s.json", endpoint, symbol, period, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.statement().enterpriseValues(symbol, Optional.of(period), Optional.of(limit));
// then
@@ -983,15 +797,11 @@ void revenueProductSegmentation(String p, int expectedCount) {
var period = period(p);
var symbol = symbol("AAPL");
var structure = FLAT;
- var typeRef = typeRef(FmpRevenueProductSegmentation[].class);
var endpoint = "revenue-product-segmentation";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "structure", structure));
var file = format("stable/%s/?symbol=%s&period=%s&structure=%s.json", endpoint, symbol, period, structure);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result =
fmpClient.statement().revenueProductSegmentations(symbol, Optional.of(period), Optional.of(structure));
@@ -1006,15 +816,11 @@ void revenueGeographicSegmentation(String p, int expectedCount) {
var period = period(p);
var symbol = symbol("AAPL");
var structure = FLAT;
- var typeRef = typeRef(FmpRevenueGeographicSegmentation[].class);
var endpoint = "revenue-geographic-segmentation";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "period", period, "structure", structure));
var file = format("stable/%s/?symbol=%s&period=%s&structure=%s.json", endpoint, symbol, period, structure);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient
.statement()
.revenueGeographicSegmentations(symbol, Optional.of(period), Optional.of(structure));
@@ -1027,15 +833,11 @@ void revenueGeographicSegmentation(String p, int expectedCount) {
void etfAssetExposure() {
// given
var symbol = symbol("NVO");
- var typeRef = typeRef(FmpEtfAssetExposure[].class);
var endpoint = "etf/asset-exposure";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.etf().assetExposure(symbol);
// then
@@ -1046,15 +848,11 @@ void etfAssetExposure() {
void etfCountryWeightings() {
// given
var symbol = symbol("SPY");
- var typeRef = typeRef(FmpEtfCountryWeighting[].class);
var endpoint = "etf/country-weightings";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.etf().countryWeightings(symbol);
// then
@@ -1068,15 +866,11 @@ void etfCountryWeightings() {
})
void etfHoldings(FmpSymbol symbol, int holdings) {
// given
- var typeRef = typeRef(FmpEtfHolding[].class);
var endpoint = "etf/holdings";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.etf().holdings(symbol);
// then
@@ -1087,15 +881,11 @@ void etfHoldings(FmpSymbol symbol, int holdings) {
void etfInfo() {
// given
var symbol = symbol("SPY");
- var typeRef = typeRef(FmpEtfInfo[].class);
var endpoint = "etf/info";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.etf().info(symbol);
// then
@@ -1106,19 +896,13 @@ void etfInfo() {
void cryptoNews() {
// given
var symbols = Set.of(symbol("BTCUSD"));
- var typeRef = typeRef(FmpNews[].class);
var endpoint = "news/crypto";
- var page = page(0);
- var limit = limit(100);
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbols", symbols, "page", page, "limit", limit));
var file = format(
"stable/%s/?symbols=%s.json",
endpoint, join(",", symbols.stream().map(FmpSymbol::value).toList()));
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.news().crypto(symbols);
// then
@@ -1131,19 +915,13 @@ void cryptoNews_multiple() {
var symbols = new TreeSet(); // guarantee order
symbols.add(symbol("BTCUSD"));
symbols.add(symbol("ETHUSD"));
- var typeRef = typeRef(FmpNews[].class);
var endpoint = "news/crypto";
- var page = page(0);
- var limit = limit(100);
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbols", symbols, "page", page, "limit", limit));
var file = format(
"stable/%s/?symbols=%s.json",
endpoint, join(",", symbols.stream().map(FmpSymbol::value).toList()));
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.news().crypto(symbols);
// then
@@ -1154,19 +932,13 @@ void cryptoNews_multiple() {
void forexNews() {
// given
var symbols = Set.of(symbol("EURUSD"));
- var typeRef = typeRef(FmpNews[].class);
var endpoint = "news/forex";
- var page = page(0);
- var limit = limit(100);
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbols", symbols, "page", page, "limit", limit));
var file = format(
"stable/%s/?symbols=%s.json",
endpoint, join(",", symbols.stream().map(FmpSymbol::value).toList()));
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.news().forex(symbols);
// then
@@ -1177,19 +949,13 @@ void forexNews() {
void stockNews() {
// given
var symbols = Set.of(symbol("AAPL"));
- var typeRef = typeRef(FmpNews[].class);
var endpoint = "news/stock";
- var page = page(0);
- var limit = limit(100);
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbols", symbols, "page", page, "limit", limit));
var file = format(
"stable/%s/?symbols=%s.json",
endpoint, join(",", symbols.stream().map(FmpSymbol::value).toList()));
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.news().stock(symbols);
// then
@@ -1205,22 +971,13 @@ void cryptoNews_withFromTo() {
var page = page(0);
var limit = limit(100);
var endpoint = "news/crypto";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
-
- var params = buildParams(Map.of(
- "symbols", symbols,
- "from", from.get(),
- "to", to.get(),
- "page", page,
- "limit", limit));
var file = format(
"stable/%s/?symbols=%s.json",
endpoint, join(",", symbols.stream().map(FmpSymbol::value).toList()));
// when
- mockHttpGet(uri, headers, params, file, typeRef(FmpNews[].class));
+ mockHttpGetFromFile(file);
var result = fmpClient.news().crypto(symbols, from, to, Optional.of(page), Optional.of(limit));
// then
@@ -1231,15 +988,11 @@ void cryptoNews_withFromTo() {
void etfSectorWeightings() {
// given
var symbol = symbol("SPY");
- var typeRef = typeRef(FmpEtfSectorWeighting[].class);
var endpoint = "etf/sector-weightings";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.etf().sectorWeightings(symbol);
// then
@@ -1250,15 +1003,11 @@ void etfSectorWeightings() {
void fullQuotes() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpFullQuote[].class);
var endpoint = "quote";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.quote().full(symbol);
// then
@@ -1269,15 +1018,11 @@ void fullQuotes() {
void partialQuotes() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpPartialQuote[].class);
var endpoint = "quote-short";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.quote().partial(symbol);
// then
@@ -1288,15 +1033,11 @@ void partialQuotes() {
void priceChange() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpStockPriceChange[].class);
var endpoint = "stock-price-change";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.quote().priceChange(symbol);
// then
@@ -1311,17 +1052,13 @@ void secFilingsSearchBySymbol() {
var to = LocalDate.parse("2025-01-01");
var page = page(0);
var limit = limit(2);
- var typeRef = typeRef(FmpSecFilingsSearchBySymbol[].class);
var endpoint = "sec-filings-search/symbol";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "from", from, "to", to, "page", page, "limit", limit));
var file = format(
"stable/%s/?symbol=%s&from=%s&to=%s&page=%d&limit=%s.json",
endpoint, symbol, from, to, page.value(), limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.secFilingsSearch().bySymbol(symbol, from, to, Optional.of(page), Optional.of(limit));
// then
@@ -1333,16 +1070,11 @@ void treasuryRates() {
// given
var from = LocalDate.parse("2024-12-30");
var to = LocalDate.parse("2025-01-01");
-
- var typeRef = typeRef(FmpTreasuryRate[].class);
var endpoint = "treasury-rates";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("from", from, "to", to));
var file = format("stable/%s/?from=%s&to=%s.json", endpoint, from, to);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.economics().treasuryRates(from, to);
// then
@@ -1355,15 +1087,11 @@ void earningCallTranscript() {
var symbol = symbol("AAPL");
var year = year(2020);
var quarter = quarter(3);
- var typeRef = typeRef(FmpEarningsCallTranscript[].class);
var endpoint = "earning-call-transcript";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol, "year", year, "quarter", quarter));
var file = format("stable/%s/?symbol=%s&year=%s&quarter=%s.json", endpoint, symbol, year, quarter);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.earnings().transcripts(symbol, year, quarter, empty());
// then
@@ -1374,15 +1102,11 @@ void earningCallTranscript() {
void earningCallTranscriptDates() {
// given
var symbol = symbol("AAPL");
- var typeRef = typeRef(FmpEarningsCallTranscriptDate[].class);
var endpoint = "earning-call-transcript-dates";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("symbol", symbol));
var file = format("stable/%s/?symbol=%s.json", endpoint, symbol);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.earnings().dates(symbol);
// then
@@ -1394,15 +1118,11 @@ void earningCallTranscriptLatest() {
// given
var page = page(0);
var limit = limit(2);
- var typeRef = typeRef(FmpEarningsCallTranscriptLatest[].class);
var endpoint = "earning-call-transcript-latest";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of("page", page, "limit", limit));
var file = format("stable/%s/?page=%s&limit=%s.json", endpoint, page, limit);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.earnings().latest(Optional.of(limit), Optional.of(page));
// then
@@ -1412,49 +1132,17 @@ void earningCallTranscriptLatest() {
@Test
void earningsTranscriptList() {
// given
- var typeRef = typeRef(FmpEarningsCallTranscriptList[].class);
var endpoint = "earnings-transcript-list";
- var uri = buildUri(endpoint);
- var headers = defaultHeaders();
- var params = buildParams(Map.of());
var file = format("stable/%s/excerpt.json", endpoint);
// when
- mockHttpGet(uri, headers, params, file, typeRef);
+ mockHttpGetFromFile(file);
var result = fmpClient.earnings().list();
// then
assertValidResult(result, 4, FmpEarningsCallTranscriptList.class);
}
- private URI buildUri(String endpoint) {
- return URI.create(BASE_URL + "/" + endpoint);
- }
-
- private Map defaultHeaders() {
- return Map.of("Content-Type", "application/json");
- }
-
- private Map buildParams(Map customParams) {
- return new HashMap<>() {
- {
- putAll(customParams);
- put("apikey", API_KEY);
- }
- };
- }
-
- private synchronized void mockHttpGet(
- URI uri, Map headers, Map params, String file, TypeReference typeRef) {
- if (file.endsWith(".json")) {
- when(fmpHttpClient.get(any(), eq(uri), eq(headers), eq(params)))
- .thenReturn(jsonTestResource(typeRef, file));
- }
- if (file.endsWith(".csv")) {
- when(fmpHttpClient.get(any(), eq(uri), eq(headers), eq(params))).thenReturn(csvTestResource(typeRef, file));
- }
- }
-
private void assertValidResult(T[] result, int expectedLength, Class> expectedType) {
assertValidResult(result, expectedLength, expectedType, emptySet());
}
diff --git a/src/test/java/dev/sorn/fmp4j/TestDeserializationRegistry.java b/src/test/java/dev/sorn/fmp4j/TestDeserializationRegistry.java
new file mode 100644
index 00000000..1f8cf358
--- /dev/null
+++ b/src/test/java/dev/sorn/fmp4j/TestDeserializationRegistry.java
@@ -0,0 +1,20 @@
+package dev.sorn.fmp4j;
+
+import static dev.sorn.fmp4j.csv.FmpCsvDeserializer.FMP_CSV_DESERIALIZER;
+import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
+
+import dev.sorn.fmp4j.http.FmpContentType;
+import dev.sorn.fmp4j.http.FmpDeserializationRegistry;
+import dev.sorn.fmp4j.http.FmpDeserializer;
+
+public class TestDeserializationRegistry implements FmpDeserializationRegistry {
+ public static final TestDeserializationRegistry TEST_DESERIALIZATION_REGISTRY = new TestDeserializationRegistry();
+
+ @Override
+ public FmpDeserializer resolve(FmpContentType contentType) {
+ return switch (contentType) {
+ case CSV -> FMP_CSV_DESERIALIZER;
+ case JSON -> FMP_JSON_DESERIALIZER;
+ };
+ }
+}
diff --git a/src/test/java/dev/sorn/fmp4j/csv/FmpCsvDeserializerTest.java b/src/test/java/dev/sorn/fmp4j/csv/FmpCsvDeserializerTest.java
index 276ed242..2090e393 100644
--- a/src/test/java/dev/sorn/fmp4j/csv/FmpCsvDeserializerTest.java
+++ b/src/test/java/dev/sorn/fmp4j/csv/FmpCsvDeserializerTest.java
@@ -7,6 +7,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import dev.sorn.fmp4j.TestCsvObject;
+import dev.sorn.fmp4j.exceptions.FmpDeserializationException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -121,7 +122,7 @@ void deserialize_array_fails_on_malformed_csv() {
// when // then
var e = assertThrows(
- FmpCsvException.class,
+ FmpDeserializationException.class,
() -> FMP_CSV_DESERIALIZER.deserialize(malformedCsv, typeRef(TestCsvObject[].class)));
assertEquals(
"""
diff --git a/src/test/java/dev/sorn/fmp4j/http/FmpHttpClientTest.java b/src/test/java/dev/sorn/fmp4j/http/FmpHttpClientTest.java
index 090a180e..c75ddf97 100644
--- a/src/test/java/dev/sorn/fmp4j/http/FmpHttpClientTest.java
+++ b/src/test/java/dev/sorn/fmp4j/http/FmpHttpClientTest.java
@@ -1,6 +1,6 @@
package dev.sorn.fmp4j.http;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
+import static dev.sorn.fmp4j.TestDeserializationRegistry.TEST_DESERIALIZATION_REGISTRY;
import static dev.sorn.fmp4j.json.FmpJsonUtils.typeRef;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -12,7 +12,6 @@
import dev.sorn.fmp4j.TestObject;
import dev.sorn.fmp4j.TestObjectValue;
-import dev.sorn.fmp4j.json.FmpJsonDeserializer;
import dev.sorn.fmp4j.types.FmpApiKey;
import java.io.IOException;
import java.net.URI;
@@ -31,20 +30,19 @@
@ExtendWith(MockitoExtension.class)
class FmpHttpClientTest {
private final HttpClient httpClient = mock(HttpClient.class);
- private final FmpJsonDeserializer deserializer = FMP_JSON_DESERIALIZER;
private final ClassicHttpResponse httpResponse = mock(ClassicHttpResponse.class);
private final URI testUri = URI.create("https://financialmodelingprep.com/stable");
private FmpHttpClientImpl client;
@BeforeEach
void setUp() {
- client = new FmpHttpClientImpl(httpClient, deserializer);
+ client = new FmpHttpClientImpl(httpClient, TEST_DESERIALIZATION_REGISTRY);
}
@Test
void get_successful_request_object() throws Exception {
// given
- var headers = Map.of("Authorization", "Bearer token");
+ var headers = Map.of("Authorization", "Bearer token", "Content-Type", "application/json");
var params = Map.of("apikey", new FmpApiKey("ABCDEf0ghIjklmNO1pqRsT2u34VWx5y6"));
var jsonResponse =
"""
@@ -59,6 +57,7 @@ void get_successful_request_object() throws Exception {
var expected = new TestObject("fmp4j", new TestObjectValue(42));
when(httpClient.executeOpen(any(), any(HttpGet.class), any())).thenReturn(httpResponse);
when(httpResponse.getEntity()).thenReturn(new StringEntity(jsonResponse));
+ when(httpResponse.getCode()).thenReturn(200);
// when
var result = client.get(typeRef(TestObject.class), testUri, headers, params);
@@ -72,7 +71,7 @@ void get_successful_request_object() throws Exception {
@Test
void get_successful_request_array() throws IOException {
// given
- var headers = Map.of("some", "header");
+ var headers = Map.of("some", "header", "Content-Type", "application/json");
var params = Map.of("apikey", new FmpApiKey("ABCDEf0ghIjklmNO1pqRsT2u34VWx5y6"));
var jsonResponse =
"""
@@ -97,6 +96,7 @@ void get_successful_request_array() throws IOException {
};
when(httpClient.executeOpen(any(), any(HttpGet.class), any())).thenReturn(httpResponse);
when(httpResponse.getEntity()).thenReturn(new StringEntity(jsonResponse));
+ when(httpResponse.getCode()).thenReturn(200);
// when
var result = client.get(typeRef(TestObject[].class), testUri, headers, params);
@@ -135,7 +135,7 @@ void get_handles_entity_exception() throws Exception {
@ValueSource(ints = {401, 403})
void throws_unauthorized_for_code(int code) throws IOException {
// given
- var headers = Map.of("some", "header");
+ var headers = Map.of("some", "header");
var params = Map.of("apikey", new FmpApiKey("ABCDEf0ghIjklmNO1pqRsT2u34VWx5y6"));
// when
@@ -148,7 +148,7 @@ void throws_unauthorized_for_code(int code) throws IOException {
FmpUnauthorizedException.class,
() -> client.get(typeRef(TestObject[].class), testUri, headers, params));
assertEquals(
- "Unauthorized for type [class [Ldev.sorn.fmp4j.TestObject;], uri [https://financialmodelingprep.com/stable], headers [{some=header}], queryParams [{apikey=AB****************************y6}];\nresponseBody: {}",
+ "Unauthorized for type [class [Ldev.sorn.fmp4j.TestObject;], uri [https://financialmodelingprep.com/stable], headers [{some=header}], queryParams [{apikey=AB****************************y6}]",
e.getMessage());
}
@@ -169,7 +169,7 @@ void json_deserialization_of_wrong_type_throws_correct_exception() throws IOExce
var e = assertThrows(
FmpHttpException.class, () -> client.get(typeRef(TestObject[].class), testUri, headers, params));
assertEquals(
- "JSON deserialization failed for type [class [Ldev.sorn.fmp4j.TestObject;], uri [https://financialmodelingprep.com/stable], headers [{Content-Type=application/json}], queryParams [{apikey=AB****************************y6}]",
+ "Deserialization failed for type [class [Ldev.sorn.fmp4j.TestObject;], uri [https://financialmodelingprep.com/stable], headers [{Content-Type=application/json}], queryParams [{apikey=AB****************************y6}]",
e.getMessage());
}
@@ -190,7 +190,7 @@ void csv_deserialization_of_wrong_type_throws_correct_exception() throws IOExcep
var e = assertThrows(
FmpHttpException.class, () -> client.get(typeRef(TestObject[].class), testUri, headers, params));
assertEquals(
- "CSV deserialization failed for type [class [Ldev.sorn.fmp4j.TestObject;], uri [https://financialmodelingprep.com/stable], headers [{Content-Type=text/csv}], queryParams [{apikey=AB****************************y6}]",
+ "Deserialization failed for type [class [Ldev.sorn.fmp4j.TestObject;], uri [https://financialmodelingprep.com/stable], headers [{Content-Type=text/csv}], queryParams [{apikey=AB****************************y6}]",
e.getMessage());
}
}
diff --git a/src/test/java/dev/sorn/fmp4j/json/FmpJsonDeserializerTest.java b/src/test/java/dev/sorn/fmp4j/json/FmpJsonDeserializerTest.java
index ada127c8..899919cf 100644
--- a/src/test/java/dev/sorn/fmp4j/json/FmpJsonDeserializerTest.java
+++ b/src/test/java/dev/sorn/fmp4j/json/FmpJsonDeserializerTest.java
@@ -7,6 +7,7 @@
import dev.sorn.fmp4j.TestObject;
import dev.sorn.fmp4j.TestObjectValue;
+import dev.sorn.fmp4j.exceptions.FmpDeserializationException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -78,7 +79,7 @@ void deserialize_object_failsOnMalformedJson() {
// when // then
var e = assertThrows(
- FmpJsonException.class,
+ FmpDeserializationException.class,
() -> FMP_JSON_DESERIALIZER.deserialize(malformedJson, typeRef(TestObject.class)));
assertEquals("Failed to deserialize JSON to 'dev.sorn.fmp4j.TestObject': {", e.getMessage());
}
@@ -90,7 +91,7 @@ void deserialize_array_failsOnMalformedJson() {
// when // then
var e = assertThrows(
- FmpJsonException.class,
+ FmpDeserializationException.class,
() -> FMP_JSON_DESERIALIZER.deserialize(malformedJson, typeRef(TestObject[].class)));
assertEquals("Failed to deserialize JSON to 'dev.sorn.fmp4j.TestObject[]': [", e.getMessage());
}
@@ -108,7 +109,7 @@ void deserialize_object_failsOnTypeMismatch() {
// when // then
var e = assertThrows(
- FmpJsonException.class,
+ FmpDeserializationException.class,
() -> FMP_JSON_DESERIALIZER.deserialize(mismatchedJson, typeRef(TestObject.class)));
assertEquals(
"""
@@ -133,7 +134,7 @@ void deserialize_array_failsOnElementTypeMismatch() {
// when // then
var e = assertThrows(
- FmpJsonException.class,
+ FmpDeserializationException.class,
() -> FMP_JSON_DESERIALIZER.deserialize(invalidElementJson, typeRef(TestObject[].class)));
assertEquals(
"""
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementGrowthServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementGrowthServiceTest.java
index 45ea5336..ae23d1e9 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementGrowthServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementGrowthServiceTest.java
@@ -1,32 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.BalanceSheetStatementGrowthTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpBalanceSheetStatementGrowth;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpBalanceSheetStatementGrowthServiceTest implements BalanceSheetStatementGrowthTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpBalanceSheetStatementGrowthService(new FmpConfigImpl(), http);
+class FmpBalanceSheetStatementGrowthServiceTest extends HttpTest implements BalanceSheetStatementGrowthTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBalanceSheetStatementGrowthService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementServiceTest.java
index 9e833777..ae4ec8bd 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementServiceTest.java
@@ -1,32 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.BalanceSheetStatementTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpBalanceSheetStatement;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpBalanceSheetStatementServiceTest implements BalanceSheetStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpBalanceSheetStatementService(new FmpConfigImpl(), http);
+class FmpBalanceSheetStatementServiceTest extends HttpTest implements BalanceSheetStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBalanceSheetStatementService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementTtmServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementTtmServiceTest.java
index ff9e8ed3..79069be5 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementTtmServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBalanceSheetStatementTtmServiceTest.java
@@ -1,30 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.BalanceSheetStatementTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpBalanceSheetStatement;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpBalanceSheetStatementTtmServiceTest implements BalanceSheetStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpBalanceSheetStatementTtmService(new FmpConfigImpl(), http);
+class FmpBalanceSheetStatementTtmServiceTest extends HttpTest implements BalanceSheetStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBalanceSheetStatementTtmService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBulkBalanceSheetStatementServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBulkBalanceSheetStatementServiceTest.java
index 6e27f7c4..4bf16250 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBulkBalanceSheetStatementServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBulkBalanceSheetStatementServiceTest.java
@@ -1,33 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.csv.FmpCsvDeserializer.FMP_CSV_DESERIALIZER;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpPeriod.period;
import static dev.sorn.fmp4j.types.FmpYear.year;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.BalanceSheetStatementTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpBalanceSheetStatement;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpYear;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpBulkBalanceSheetStatementServiceTest implements BalanceSheetStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER, FMP_CSV_DESERIALIZER);
- private final FmpService service =
- new FmpBulkBalanceSheetStatementService(new FmpConfigImpl(), http);
+class FmpBulkBalanceSheetStatementServiceTest extends HttpTest implements BalanceSheetStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBulkBalanceSheetStatementService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementGrowthServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementGrowthServiceTest.java
index 9068c64a..4127ace7 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementGrowthServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementGrowthServiceTest.java
@@ -1,29 +1,26 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpPeriod.period;
import static dev.sorn.fmp4j.types.FmpYear.year;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCashFlowStatementGrowth;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpYear;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpBulkCashFlowStatementGrowthServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpBulkCashFlowStatementGrowthService(new FmpConfigImpl(), http);
+class FmpBulkCashFlowStatementGrowthServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBulkCashFlowStatementGrowthService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementServiceTest.java
index 1ea46128..005d1e87 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBulkCashFlowStatementServiceTest.java
@@ -1,32 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.csv.FmpCsvDeserializer.FMP_CSV_DESERIALIZER;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpPeriod.period;
import static dev.sorn.fmp4j.types.FmpYear.year;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCashFlowStatement;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpYear;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpBulkCashFlowStatementServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER, FMP_CSV_DESERIALIZER);
- private final FmpService service =
- new FmpBulkCashFlowStatementService(new FmpConfigImpl(), http);
+class FmpBulkCashFlowStatementServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBulkCashFlowStatementService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpBulkCompaniesServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpBulkCompaniesServiceTest.java
index f1e1bc5c..f34af433 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpBulkCompaniesServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpBulkCompaniesServiceTest.java
@@ -1,26 +1,23 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.csv.FmpCsvDeserializer.FMP_CSV_DESERIALIZER;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCompanies;
import dev.sorn.fmp4j.types.FmpPart;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpBulkCompaniesServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER, FMP_CSV_DESERIALIZER);
- private final FmpService service = new FmpBulkCompaniesService(new FmpConfigImpl(), http);
+class FmpBulkCompaniesServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpBulkCompaniesService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementGrowthServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementGrowthServiceTest.java
index 20c77fe5..59cf5cba 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementGrowthServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementGrowthServiceTest.java
@@ -1,32 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.CashFlowStatementGrowthTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCashFlowStatementGrowth;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpCashFlowStatementGrowthServiceTest implements CashFlowStatementGrowthTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpCashFlowStatementGrowthService(new FmpConfigImpl(), http);
+class FmpCashFlowStatementGrowthServiceTest extends HttpTest implements CashFlowStatementGrowthTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpCashFlowStatementGrowthService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementServiceTest.java
index 83e94883..2a4464de 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementServiceTest.java
@@ -1,32 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.CashFlowStatementTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCashFlowStatement;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpCashFlowStatementServiceTest implements CashFlowStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpCashFlowStatementService(new FmpConfigImpl(), http);
+class FmpCashFlowStatementServiceTest extends HttpTest implements CashFlowStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpCashFlowStatementService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementTtmServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementTtmServiceTest.java
index 5154b4ea..e23c901b 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementTtmServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpCashFlowStatementTtmServiceTest.java
@@ -1,29 +1,26 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.CashFlowStatementTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCashFlowStatement;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpCashFlowStatementTtmServiceTest implements CashFlowStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpCashFlowStatementTtmService(new FmpConfigImpl(), http);
+class FmpCashFlowStatementTtmServiceTest extends HttpTest implements CashFlowStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpCashFlowStatementTtmService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpCompanyServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpCompanyServiceTest.java
index 019acc8c..63e657de 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpCompanyServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpCompanyServiceTest.java
@@ -1,26 +1,24 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpCompany;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpCompanyServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpCompanyService(new FmpConfigImpl(), http);
+class FmpCompanyServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpCompanyService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpDividendServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpDividendServiceTest.java
index 7adc184c..b1c8e2aa 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpDividendServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpDividendServiceTest.java
@@ -1,28 +1,26 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpDividend;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpDividendServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpDividendService(new FmpConfigImpl(), http);
+class FmpDividendServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpDividendService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpDividendsCalendarServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpDividendsCalendarServiceTest.java
index a82128b1..2db03acc 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpDividendsCalendarServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpDividendsCalendarServiceTest.java
@@ -1,27 +1,24 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpDividendsCalendar;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpDividendsCalendarServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpDividendsCalendarService(new FmpConfigImpl(), http);
+class FmpDividendsCalendarServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpDividendsCalendarService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEarningServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEarningServiceTest.java
index ad023fef..cb7cb4dd 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEarningServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEarningServiceTest.java
@@ -1,28 +1,26 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEarning;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEarningServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEarningService(new FmpConfigImpl(), http);
+class FmpEarningServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEarningService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCalendarServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCalendarServiceTest.java
index 9d6b2fee..17f36788 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCalendarServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCalendarServiceTest.java
@@ -1,26 +1,24 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEarningsCalendar;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEarningsCalendarServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEarningsCalendarService(new FmpConfigImpl(), http);
+class FmpEarningsCalendarServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEarningsCalendarService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptDatesServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptDatesServiceTest.java
index 50cc2ee2..374446ad 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptDatesServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptDatesServiceTest.java
@@ -1,29 +1,26 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.Collections.emptySet;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEarningsCallTranscriptDate;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEarningsCallTranscriptDatesServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpEarningsCallTranscriptDatesService(new FmpConfigImpl(), http);
+class FmpEarningsCallTranscriptDatesServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEarningsCallTranscriptDatesService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptLatestServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptLatestServiceTest.java
index cdf031c5..d4869a3e 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptLatestServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptLatestServiceTest.java
@@ -1,9 +1,7 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpLimit.limit;
import static dev.sorn.fmp4j.types.FmpPage.page;
import static java.util.Collections.emptySet;
@@ -11,21 +9,20 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEarningsCallTranscriptLatest;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPage;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEarningsCallTranscriptLatestServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpEarningsCallTranscriptLatestService(new FmpConfigImpl(), http);
+class FmpEarningsCallTranscriptLatestServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEarningsCallTranscriptLatestService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptListServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptListServiceTest.java
index 1a2dea8b..8bb2027f 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptListServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptListServiceTest.java
@@ -1,27 +1,24 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.Collections.emptySet;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEarningsCallTranscriptList;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEarningsCallTranscriptListServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpEarningsCallTranscriptListService(new FmpConfigImpl(), http);
+class FmpEarningsCallTranscriptListServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEarningsCallTranscriptListService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptServiceTest.java
index bf438b48..d956ffa1 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEarningsCallTranscriptServiceTest.java
@@ -1,9 +1,7 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpQuarter.quarter;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static dev.sorn.fmp4j.types.FmpYear.year;
@@ -12,23 +10,22 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEarningsCallTranscript;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpQuarter;
import dev.sorn.fmp4j.types.FmpSymbol;
import dev.sorn.fmp4j.types.FmpYear;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEarningsCallTranscriptServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpEarningsCallTranscriptService(new FmpConfigImpl(), http);
+class FmpEarningsCallTranscriptServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEarningsCallTranscriptService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEnterpriseValuesServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEnterpriseValuesServiceTest.java
index 7b09a778..40e523b2 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEnterpriseValuesServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEnterpriseValuesServiceTest.java
@@ -1,32 +1,30 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.Collections.emptySet;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEnterpriseValue;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpEnterpriseValuesServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEnterpriseValuesService(new FmpConfigImpl(), http);
+class FmpEnterpriseValuesServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEnterpriseValuesService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEtfAssetExposureServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEtfAssetExposureServiceTest.java
index c6e19146..33a24b7f 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEtfAssetExposureServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEtfAssetExposureServiceTest.java
@@ -1,31 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEtfAssetExposure;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEtfAssetExposureServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEtfAssetExposureService(new FmpConfigImpl(), http);
+class FmpEtfAssetExposureServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEtfAssetExposureService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEtfCountryWeightingServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEtfCountryWeightingServiceTest.java
index a8093841..2558d3cd 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEtfCountryWeightingServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEtfCountryWeightingServiceTest.java
@@ -1,32 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEtfCountryWeighting;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEtfCountryWeightingServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpEtfCountryWeightingService(new FmpConfigImpl(), http);
+class FmpEtfCountryWeightingServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEtfCountryWeightingService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -35,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -44,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEtfHoldingServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEtfHoldingServiceTest.java
index d515cf9b..61c77708 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEtfHoldingServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEtfHoldingServiceTest.java
@@ -1,32 +1,30 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEtfHolding;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEtfHoldingServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEtfHoldingService(new FmpConfigImpl(), http);
+class FmpEtfHoldingServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEtfHoldingService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -35,7 +33,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -44,7 +42,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEtfInfoServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEtfInfoServiceTest.java
index d64a6641..2350a646 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEtfInfoServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEtfInfoServiceTest.java
@@ -1,30 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEtfInfo;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEtfInfoServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEtfInfoService(new FmpConfigImpl(), http);
+class FmpEtfInfoServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEtfInfoService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -33,7 +31,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -42,7 +40,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEtfListServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEtfListServiceTest.java
index 4cdb5dec..e55ee98c 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEtfListServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEtfListServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEtf;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEtfListServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpEtfListService(new FmpConfigImpl(), http);
+class FmpEtfListServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEtfListService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -41,7 +39,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpEtfSectorWeightingServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpEtfSectorWeightingServiceTest.java
index 276631fa..14980efc 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpEtfSectorWeightingServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpEtfSectorWeightingServiceTest.java
@@ -1,32 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpEtfSectorWeighting;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpEtfSectorWeightingServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpEtfSectorWeightingService(new FmpConfigImpl(), http);
+class FmpEtfSectorWeightingServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpEtfSectorWeightingService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -35,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -44,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpFinancialGrowthServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpFinancialGrowthServiceTest.java
index 046ba1a6..60253b26 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpFinancialGrowthServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpFinancialGrowthServiceTest.java
@@ -1,32 +1,30 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.FinancialGrowthTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpFinancialGrowth;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpFinancialGrowthServiceTest implements FinancialGrowthTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpFinancialGrowthService(new FmpConfigImpl(), http);
+class FmpFinancialGrowthServiceTest extends HttpTest implements FinancialGrowthTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpFinancialGrowthService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpFinancialStatementAsReportedServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpFinancialStatementAsReportedServiceTest.java
index cfe27cb2..eef78bab 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpFinancialStatementAsReportedServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpFinancialStatementAsReportedServiceTest.java
@@ -1,17 +1,11 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.FinancialStatementAsReportedTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
@@ -24,15 +18,12 @@
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpFinancialStatementAsReportedServiceTest implements FinancialStatementAsReportedTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
-
+class FmpFinancialStatementAsReportedServiceTest extends HttpTest implements FinancialStatementAsReportedTestData {
@ParameterizedTest
@ValueSource(strings = {"income", "balance-sheet", "cash-flow"})
void relative_url(String type) {
// given
- var service = new FmpFinancialStatementAsReportedService(new FmpConfigImpl(), http, type);
+ var service = new FmpFinancialStatementAsReportedService(config, client, type);
// when
var relativeUrl = service.relativeUrl();
@@ -45,7 +36,7 @@ void relative_url(String type) {
@ValueSource(strings = {"income", "balance-sheet", "cash-flow"})
void required_params(String type) {
// given
- var service = new FmpFinancialStatementAsReportedService(new FmpConfigImpl(), http, type);
+ var service = new FmpFinancialStatementAsReportedService(config, client, type);
// when
var params = service.requiredParams();
@@ -58,7 +49,7 @@ void required_params(String type) {
@ValueSource(strings = {"income", "balance-sheet", "cash-flow"})
void optional_params(String type) {
// given
- var service = new FmpFinancialStatementAsReportedService(new FmpConfigImpl(), http, type);
+ var service = new FmpFinancialStatementAsReportedService(config, client, type);
// when
var params = service.optionalParams();
@@ -71,7 +62,7 @@ void optional_params(String type) {
@MethodSource("reportCompanyProvider")
void successful_download(String type, FmpSymbol symbol, String period) {
// given
- var service = new FmpFinancialStatementAsReportedService(new FmpConfigImpl(), http, type);
+ var service = new FmpFinancialStatementAsReportedService(config, client, type);
var limit = 2;
service.param("symbol", symbol);
httpStub.configureResponse()
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpFullQuoteServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpFullQuoteServiceTest.java
index 34882bc0..1c84fe55 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpFullQuoteServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpFullQuoteServiceTest.java
@@ -1,30 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.lang.String.format;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.QuoteTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpFullQuote;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpFullQuoteServiceTest implements QuoteTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpQuoteService(new FmpConfigImpl(), http);
+class FmpFullQuoteServiceTest extends HttpTest implements QuoteTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpQuoteService(config, client);
+ }
@Test
void relative_url() {
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalChartServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalChartServiceTest.java
index c5c654ae..d4bd55e2 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalChartServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalChartServiceTest.java
@@ -1,9 +1,7 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpInterval.interval;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.Collections.emptySet;
@@ -11,10 +9,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpHistoricalChart;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.time.LocalDate;
@@ -22,9 +16,7 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpHistoricalChartServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
+class FmpHistoricalChartServiceTest extends HttpTest {
@ParameterizedTest
@ValueSource(
@@ -33,7 +25,7 @@ class FmpHistoricalChartServiceTest {
})
void relative_url(String interval) {
// given
- var service = new FmpHistoricalChartService(new FmpConfigImpl(), http, interval(interval));
+ var service = new FmpHistoricalChartService(config, client, interval(interval));
// when
var relativeUrl = service.relativeUrl();
@@ -49,7 +41,7 @@ void relative_url(String interval) {
})
void required_params(String interval) {
// given
- var service = new FmpHistoricalChartService(new FmpConfigImpl(), http, interval(interval));
+ var service = new FmpHistoricalChartService(config, client, interval(interval));
// when
var params = service.requiredParams();
@@ -65,7 +57,7 @@ void required_params(String interval) {
})
void optional_params(String interval) {
// given
- var service = new FmpHistoricalChartService(new FmpConfigImpl(), http, interval(interval));
+ var service = new FmpHistoricalChartService(config, client, interval(interval));
// when
var params = service.optionalParams();
@@ -81,7 +73,7 @@ void optional_params(String interval) {
})
void successful_download(String interval) {
// given
- var service = new FmpHistoricalChartService(new FmpConfigImpl(), http, interval(interval));
+ var service = new FmpHistoricalChartService(config, client, interval(interval));
var symbol = symbol("AAPL");
var from = LocalDate.parse("2024-01-01");
var to = LocalDate.parse("2024-01-02");
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodFullServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodFullServiceTest.java
index b6293bb8..be4f5385 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodFullServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodFullServiceTest.java
@@ -1,34 +1,31 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.Collections.emptySet;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpHistoricalPriceEodFull;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.time.LocalDate;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpHistoricalPriceEodFullServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpHistoricalPriceEodFullService(new FmpConfigImpl(), http);
+class FmpHistoricalPriceEodFullServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpHistoricalPriceEodFullService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -37,7 +34,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -46,7 +43,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodLightServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodLightServiceTest.java
index e66eff19..41faab58 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodLightServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpHistoricalPriceEodLightServiceTest.java
@@ -1,34 +1,31 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.Collections.emptySet;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpHistoricalPriceEodLight;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.time.LocalDate;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpHistoricalPriceEodLightServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpHistoricalPriceEodLightService(new FmpConfigImpl(), http);
+class FmpHistoricalPriceEodLightServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpHistoricalPriceEodLightService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -37,7 +34,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -46,7 +43,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementGrowthServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementGrowthServiceTest.java
index db463b9c..dcfa173b 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementGrowthServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementGrowthServiceTest.java
@@ -1,36 +1,33 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.IncomeStatementGrowthTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpIncomeStatementGrowth;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpIncomeStatementGrowthServiceTest implements IncomeStatementGrowthTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpIncomeStatementGrowthService(new FmpConfigImpl(), http);
+class FmpIncomeStatementGrowthServiceTest extends HttpTest implements IncomeStatementGrowthTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpIncomeStatementGrowthService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -39,7 +36,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -48,7 +45,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementServiceTest.java
index 96c08b6a..22feb87f 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementServiceTest.java
@@ -1,38 +1,36 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpLimit.limit;
import static dev.sorn.fmp4j.types.FmpPeriod.period;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.IncomeStatementTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpIncomeStatement;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
-class FmpIncomeStatementServiceTest implements IncomeStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpIncomeStatementService(new FmpConfigImpl(), http);
+class FmpIncomeStatementServiceTest extends HttpTest implements IncomeStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpIncomeStatementService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -41,7 +39,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -50,7 +48,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementTtmServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementTtmServiceTest.java
index 244cef42..9410c3ac 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementTtmServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpIncomeStatementTtmServiceTest.java
@@ -1,33 +1,30 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.IncomeStatementTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpIncomeStatement;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpIncomeStatementTtmServiceTest implements IncomeStatementTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpIncomeStatementTtmService(new FmpConfigImpl(), http);
+class FmpIncomeStatementTtmServiceTest extends HttpTest implements IncomeStatementTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpIncomeStatementTtmService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -36,7 +33,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -45,7 +42,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpIposCalendarServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpIposCalendarServiceTest.java
index 51bc9e1b..5d52561e 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpIposCalendarServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpIposCalendarServiceTest.java
@@ -1,31 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpIposCalendar;
import java.time.LocalDate;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class FmpIposCalendarServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpIposCalendarService(new FmpConfigImpl(), http);
+public class FmpIposCalendarServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpIposCalendarService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpIposDisclosureServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpIposDisclosureServiceTest.java
index 98ee7884..dc4a9daa 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpIposDisclosureServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpIposDisclosureServiceTest.java
@@ -1,31 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpIposDisclosure;
import java.time.LocalDate;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class FmpIposDisclosureServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpIposDisclosureService(new FmpConfigImpl(), http);
+public class FmpIposDisclosureServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpIposDisclosureService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpIposProspectusServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpIposProspectusServiceTest.java
index 1b963abc..027fdcd7 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpIposProspectusServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpIposProspectusServiceTest.java
@@ -1,31 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpIposProspectus;
import java.time.LocalDate;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class FmpIposProspectusServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpIposProspectusService(new FmpConfigImpl(), http);
+public class FmpIposProspectusServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpIposProspectusService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricServiceTest.java
index 8a42ad3b..d4ac16bc 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricServiceTest.java
@@ -1,35 +1,33 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.KeyMetricTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpKeyMetric;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-public class FmpKeyMetricServiceTest implements KeyMetricTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpKeyMetricService(new FmpConfigImpl(), http);
+public class FmpKeyMetricServiceTest extends HttpTest implements KeyMetricTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpKeyMetricService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricTtmServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricTtmServiceTest.java
index d50ed907..460b493b 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricTtmServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpKeyMetricTtmServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.KeyMetricTtmTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpKeyMetricTtm;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class FmpKeyMetricTtmServiceTest implements KeyMetricTtmTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpKeyMetricTtmService(new FmpConfigImpl(), http);
+public class FmpKeyMetricTtmServiceTest extends HttpTest implements KeyMetricTtmTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpKeyMetricTtmService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -41,7 +39,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpNewsServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpNewsServiceTest.java
index 31395c92..35ea52bc 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpNewsServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpNewsServiceTest.java
@@ -1,17 +1,11 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.NewsTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPage;
import dev.sorn.fmp4j.types.FmpSymbol;
@@ -21,15 +15,13 @@
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpNewsServiceTest implements NewsTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
+class FmpNewsServiceTest extends HttpTest implements NewsTestData {
@ParameterizedTest
@ValueSource(strings = {"crypto", "forex", "stock"})
void relative_url(String type) {
// given
- var service = new FmpNewsService(new FmpConfigImpl(), http, type);
+ var service = new FmpNewsService(config, client, type);
// when
var relativeUrl = service.relativeUrl();
@@ -42,7 +34,7 @@ void relative_url(String type) {
@ValueSource(strings = {"crypto", "forex", "stock"})
void required_params(String path) {
// given
- var service = new FmpNewsService(new FmpConfigImpl(), http, path);
+ var service = new FmpNewsService(config, client, path);
// when
var params = service.requiredParams();
@@ -55,7 +47,7 @@ void required_params(String path) {
@ValueSource(strings = {"crypto", "forex", "stock"})
void optional_params(String type) {
// given
- var service = new FmpNewsService(new FmpConfigImpl(), http, type);
+ var service = new FmpNewsService(config, client, type);
// when
var params = service.optionalParams();
@@ -74,7 +66,7 @@ void optional_params(String type) {
})
void successful_download(String type, FmpSymbol symbol) {
// given
- var service = new FmpNewsService(new FmpConfigImpl(), http, type);
+ var service = new FmpNewsService(config, client, type);
service.param("symbols", symbol);
httpStub.configureResponse()
.body(testResource("stable/news/%s/?symbols=%s.json", type, symbol))
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpPartialQuoteServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpPartialQuoteServiceTest.java
index e701711f..43edb950 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpPartialQuoteServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpPartialQuoteServiceTest.java
@@ -1,34 +1,32 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.lang.String.format;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.QuoteTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpPartialQuote;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpPartialQuoteServiceTest implements QuoteTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpShortQuoteService(new FmpConfigImpl(), http);
+class FmpPartialQuoteServiceTest extends HttpTest implements QuoteTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpPartialQuoteService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -37,7 +35,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -46,7 +44,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpRatioServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpRatioServiceTest.java
index 007db238..91266a24 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpRatioServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpRatioServiceTest.java
@@ -1,35 +1,33 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.RatioTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpRatio;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
-class FmpRatioServiceTest implements RatioTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpRatioService(new FmpConfigImpl(), http);
+class FmpRatioServiceTest extends HttpTest implements RatioTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpRatioService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -38,7 +36,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -47,7 +45,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpRatioTtmServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpRatioTtmServiceTest.java
index 2a6d86e1..bd8fdd7f 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpRatioTtmServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpRatioTtmServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.RatioTtmTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpRatioTtm;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpRatioTtmServiceTest implements RatioTtmTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpRatioTtmService(new FmpConfigImpl(), http);
+class FmpRatioTtmServiceTest extends HttpTest implements RatioTtmTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpRatioTtmService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpRevenueGeographicSegmentationServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpRevenueGeographicSegmentationServiceTest.java
index 20596645..ed1defa9 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpRevenueGeographicSegmentationServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpRevenueGeographicSegmentationServiceTest.java
@@ -1,35 +1,33 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.RevenueGeographicSegmentationTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpRevenueGeographicSegmentation;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpStructure;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class FmpRevenueGeographicSegmentationServiceTest implements RevenueGeographicSegmentationTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpRevenueGeographicSegmentationService(new FmpConfigImpl(), http);
+public class FmpRevenueGeographicSegmentationServiceTest extends HttpTest
+ implements RevenueGeographicSegmentationTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpRevenueGeographicSegmentationService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -38,7 +36,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -47,7 +45,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpRevenueProductSegmentationServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpRevenueProductSegmentationServiceTest.java
index f8e859f0..eb97a508 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpRevenueProductSegmentationServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpRevenueProductSegmentationServiceTest.java
@@ -1,35 +1,32 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.RevenueProductSegmentationTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpRevenueProductSegmentation;
import dev.sorn.fmp4j.types.FmpPeriod;
import dev.sorn.fmp4j.types.FmpStructure;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpRevenueProductSegmentationServiceTest implements RevenueProductSegmentationTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpRevenueProductSegmentationService(new FmpConfigImpl(), http);
+class FmpRevenueProductSegmentationServiceTest extends HttpTest implements RevenueProductSegmentationTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpRevenueProductSegmentationService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -38,7 +35,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -47,7 +44,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSearchBycikServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByCikServiceTest.java
similarity index 68%
rename from src/test/java/dev/sorn/fmp4j/services/FmpSearchBycikServiceTest.java
rename to src/test/java/dev/sorn/fmp4j/services/FmpSearchByCikServiceTest.java
index 3419c0a0..a540ed5f 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSearchBycikServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByCikServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSearchByCik;
import dev.sorn.fmp4j.types.FmpCik;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-public class FmpSearchBycikServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSearchByCikService(new FmpConfigImpl(), http);
+public class FmpSearchByCikServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSearchByCikService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -41,7 +39,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSearchByCusipServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByCusipServiceTest.java
index 43fc5714..2e1801bb 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSearchByCusipServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByCusipServiceTest.java
@@ -1,31 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpCusip.cusip;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSearchByCusip;
import dev.sorn.fmp4j.types.FmpCusip;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSearchByCusipServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSearchByCusipService(new FmpConfigImpl(), http);
+class FmpSearchByCusipServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSearchByCusipService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSearchByIsinServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByIsinServiceTest.java
index 34a9349c..06f94108 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSearchByIsinServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByIsinServiceTest.java
@@ -1,31 +1,29 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpIsin.isin;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSearchByIsin;
import dev.sorn.fmp4j.types.FmpIsin;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSearchByIsinServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSearchByIsinService(new FmpConfigImpl(), http);
+class FmpSearchByIsinServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSearchByIsinService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +32,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +41,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSearchByNameServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByNameServiceTest.java
index 5f22cf9d..372b7fec 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSearchByNameServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSearchByNameServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSearchByName;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSearchByNameServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSearchByNameService(new FmpConfigImpl(), http);
+class FmpSearchByNameServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSearchByNameService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -41,7 +39,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSearchBySymbolServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSearchBySymbolServiceTest.java
index e6b64dfa..28646494 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSearchBySymbolServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSearchBySymbolServiceTest.java
@@ -1,30 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSearchBySymbol;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSearchBySymbolServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSearchBySymbolService(new FmpConfigImpl(), http);
+class FmpSearchBySymbolServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSearchBySymbolService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -33,7 +31,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -42,7 +40,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSearchPressReleasesServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSearchPressReleasesServiceTest.java
index dd4ce720..a473bbb6 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSearchPressReleasesServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSearchPressReleasesServiceTest.java
@@ -1,31 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.FmpSearchPressReleaseTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSearchPressRelease;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSearchPressReleasesServiceTest implements FmpSearchPressReleaseTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpSearchPressReleasesService(new FmpConfigImpl(), http);
+class FmpSearchPressReleasesServiceTest extends HttpTest implements FmpSearchPressReleaseTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSearchPressReleasesService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -34,7 +31,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -43,7 +40,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSecFilingsSearchBySymbolServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSecFilingsSearchBySymbolServiceTest.java
index c18e2cc3..47a35caa 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSecFilingsSearchBySymbolServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSecFilingsSearchBySymbolServiceTest.java
@@ -1,9 +1,7 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpLimit.limit;
import static dev.sorn.fmp4j.types.FmpPage.page;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
@@ -11,27 +9,26 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.sorn.fmp4j.FinancialGrowthTestData;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSecFilingsSearchBySymbol;
import dev.sorn.fmp4j.types.FmpLimit;
import dev.sorn.fmp4j.types.FmpPage;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.time.LocalDate;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSecFilingsSearchBySymbolServiceTest implements FinancialGrowthTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service =
- new FmpSecFilingsSearchBySymbolService(new FmpConfigImpl(), http);
+class FmpSecFilingsSearchBySymbolServiceTest extends HttpTest implements FinancialGrowthTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSecFilingsSearchBySymbolService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -40,7 +37,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -49,7 +46,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpServiceTest.java
index 55fdde38..83b7fb64 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpServiceTest.java
@@ -6,6 +6,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.openMocks;
import com.fasterxml.jackson.core.type.TypeReference;
import dev.sorn.fmp4j.cfg.FmpConfig;
@@ -22,7 +23,6 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
class FmpServiceTest {
@@ -35,37 +35,34 @@ class FmpServiceTest {
private ConcreteFmpService service;
@BeforeEach
- void setUp() {
- MockitoAnnotations.openMocks(this);
+ void setup() {
+ openMocks(this);
when(mockConfig.fmpApiKey()).thenReturn(new FmpApiKey("abcdefghij1234567890abcdefghij12"));
service = new ConcreteFmpService(mockConfig, mockHttpClient);
}
@Test
- @DisplayName("Should accept List with correct element type")
- void shouldAcceptListWithCorrectType() {
+ void accepts_list_with_correct_type() {
// given
List symbols = List.of(symbol("AAPL"), symbol("GOOGL"), symbol("MSFT"));
- // then
+ // when // then
assertDoesNotThrow(() -> service.param("symbol", symbols));
assertEquals(symbols, service.params.get("symbol"));
}
@Test
- @DisplayName("Should accept Set with correct element type")
- void shouldAcceptSetWithCorrectType() {
+ void accepts_set_with_correct_type() {
// given
Set symbols = Set.of(symbol("AAPL"), symbol("APPL"), symbol("MSFT"));
- // then
+ // when // then
assertDoesNotThrow(() -> service.param("symbol", symbols));
assertEquals(symbols, service.params.get("symbol"));
}
@Test
- @DisplayName("Should reject Collection with incorrect element type")
- void shouldRejectCollectionWithIncorrectType() {
+ void rejects_collection_with_incorrect_type() {
// given
List invalidList = Arrays.asList(1, 2, 3);
@@ -80,27 +77,25 @@ void shouldRejectCollectionWithIncorrectType() {
}
@Test
- @DisplayName("Should handle empty Collection gracefully")
- void shouldHandleEmptyCollection() {
- // given when then
+ void handles_empty_collection() {
+ // given // when // then
assertDoesNotThrow(() -> service.param("symbol", List.of()));
assertEquals(List.of(), service.params.get("symbol"));
}
@Test
@DisplayName("Should accept Optional with correct type")
- void shouldAcceptOptionalWithCorrectType() {
+ void accepts_optional_with_correct_type() {
// given
Optional optionalSymbol = Optional.of(symbol("AAPL"));
- // then
+ // when // then
assertDoesNotThrow(() -> service.param("symbol", optionalSymbol));
assertEquals(optionalSymbol, service.params.get("symbol"));
}
@Test
- @DisplayName("Should reject Optional with incorrect type")
- void shouldRejectOptionalWithIncorrectType() {
+ void rejects_optional_with_incorrect_type() {
// given
Optional invalidOptional = Optional.of(123);
@@ -115,8 +110,7 @@ void shouldRejectOptionalWithIncorrectType() {
}
@Test
- @DisplayName("Should handle empty Optional gracefully")
- void shouldHandleEmptyOptional() {
+ void handles_empty_optional() {
// given
Optional emptyOptional = Optional.empty();
@@ -126,28 +120,25 @@ void shouldHandleEmptyOptional() {
}
@Test
- @DisplayName("Should reject invalid type for optional parameter")
- void shouldRejectInvalidTypeForOptionalParam() {
+ void rejects_invalid_type_for_optional_param() {
assertThrows(FmpServiceException.class, () -> service.param("from", "2025-01-01"));
}
@Test
- @DisplayName("Should throw NPE for null key")
- void shouldHandleNullKey() {
+ void handles_null_key() {
assertThrows(NullPointerException.class, () -> service.param(null, "value"));
}
@Test
@DisplayName("Should reject nested Collection")
- void shouldValidateNestedCollections() {
- // given a nested list
+ void validates_nested_collections() {
+ // given: a nested list
List> nestedList = Arrays.asList(Arrays.asList("AAPL", "GOOGL"));
- // when then
+ // when // then
assertThrows(FmpServiceException.class, () -> service.param("symbol", nestedList));
}
- // Concrete implementation for testing
private static class ConcreteFmpService extends FmpService {
public ConcreteFmpService(FmpConfig cfg, FmpHttpClient http) {
super(cfg, http, new TypeReference() {});
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSplitServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSplitServiceTest.java
index b1624c6e..94422b8d 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSplitServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSplitServiceTest.java
@@ -1,30 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSplit;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSplitServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSplitService(new FmpConfigImpl(), http);
+class FmpSplitServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSplitService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -33,7 +31,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -42,7 +40,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpSplitsCalendarServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpSplitsCalendarServiceTest.java
index 6a9e6c49..76c8e714 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpSplitsCalendarServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpSplitsCalendarServiceTest.java
@@ -1,30 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpSplitsCalendar;
import java.util.Map;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpSplitsCalendarServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpSplitsCalendarService(new FmpConfigImpl(), http);
+class FmpSplitsCalendarServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpSplitsCalendarService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -33,7 +31,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -42,7 +40,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpStockListServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpStockListServiceTest.java
index 90cea6cd..98e46553 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpStockListServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpStockListServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpStock;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpStockListServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpStockListService(new FmpConfigImpl(), http);
+class FmpStockListServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpStockListService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -41,7 +39,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpStockPriceChangeServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpStockPriceChangeServiceTest.java
index 6070900b..1a6bf6a2 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpStockPriceChangeServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpStockPriceChangeServiceTest.java
@@ -1,29 +1,27 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static dev.sorn.fmp4j.types.FmpSymbol.symbol;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import dev.sorn.fmp4j.HttpClientStub;
import dev.sorn.fmp4j.StockPriceChangeTestData;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpStockPriceChange;
import dev.sorn.fmp4j.types.FmpSymbol;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpStockPriceChangeServiceTest implements StockPriceChangeTestData {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpStockPriceChangeService(new FmpConfigImpl(), http);
+class FmpStockPriceChangeServiceTest extends HttpTest implements StockPriceChangeTestData {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpStockPriceChangeService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -32,7 +30,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -41,7 +39,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/FmpTreasuryRatesServiceTest.java b/src/test/java/dev/sorn/fmp4j/services/FmpTreasuryRatesServiceTest.java
index 29003863..7629eab5 100644
--- a/src/test/java/dev/sorn/fmp4j/services/FmpTreasuryRatesServiceTest.java
+++ b/src/test/java/dev/sorn/fmp4j/services/FmpTreasuryRatesServiceTest.java
@@ -1,30 +1,28 @@
package dev.sorn.fmp4j.services;
-import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
import static dev.sorn.fmp4j.TestUtils.assertAllFieldsNonNull;
import static dev.sorn.fmp4j.TestUtils.testResource;
-import static dev.sorn.fmp4j.json.FmpJsonDeserializer.FMP_JSON_DESERIALIZER;
import static java.util.stream.IntStream.range;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import dev.sorn.fmp4j.HttpClientStub;
-import dev.sorn.fmp4j.cfg.FmpConfigImpl;
-import dev.sorn.fmp4j.http.FmpHttpClient;
-import dev.sorn.fmp4j.http.FmpHttpClientImpl;
import dev.sorn.fmp4j.models.FmpTreasuryRate;
import java.time.LocalDate;
import java.util.Map;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class FmpTreasuryRatesServiceTest {
- private final HttpClientStub httpStub = httpClientStub();
- private final FmpHttpClient http = new FmpHttpClientImpl(httpStub, FMP_JSON_DESERIALIZER);
- private final FmpService service = new FmpTreasuryRatesService(new FmpConfigImpl(), http);
+class FmpTreasuryRatesServiceTest extends HttpTest {
+ private FmpService service;
+
+ @BeforeEach
+ void setup() {
+ service = new FmpTreasuryRatesService(config, client);
+ }
@Test
void relative_url() {
- // when
+ // given // when
var relativeUrl = service.relativeUrl();
// then
@@ -33,7 +31,7 @@ void relative_url() {
@Test
void required_params() {
- // when
+ // given // when
var params = service.requiredParams();
// then
@@ -42,7 +40,7 @@ void required_params() {
@Test
void optional_params() {
- // when
+ // given // when
var params = service.optionalParams();
// then
diff --git a/src/test/java/dev/sorn/fmp4j/services/HttpTest.java b/src/test/java/dev/sorn/fmp4j/services/HttpTest.java
new file mode 100644
index 00000000..c68ef5e7
--- /dev/null
+++ b/src/test/java/dev/sorn/fmp4j/services/HttpTest.java
@@ -0,0 +1,38 @@
+package dev.sorn.fmp4j.services;
+
+import static dev.sorn.fmp4j.HttpClientStub.httpClientStub;
+import static dev.sorn.fmp4j.TestDeserializationRegistry.TEST_DESERIALIZATION_REGISTRY;
+import static dev.sorn.fmp4j.TestUtils.testResource;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import dev.sorn.fmp4j.HttpClientStub;
+import dev.sorn.fmp4j.cfg.FmpConfig;
+import dev.sorn.fmp4j.http.FmpHttpClientImpl;
+import dev.sorn.fmp4j.types.FmpApiKey;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+public class HttpTest {
+ protected static final String BASE_URL = "https://financialmodelingprep.com/stable";
+ protected static final FmpApiKey API_KEY = new FmpApiKey("ABCDEf0ghIjklmNO1pqRsT2u34VWx5y6");
+ protected final HttpClientStub httpStub = httpClientStub();
+ protected final FmpHttpClientImpl client = new FmpHttpClientImpl(httpStub, TEST_DESERIALIZATION_REGISTRY);
+ protected final FmpConfig config = mock(FmpConfig.class);
+
+ @BeforeEach
+ void setupHttpTest() {
+ when(config.fmpBaseUrl()).thenReturn(BASE_URL);
+ when(config.fmpApiKey()).thenReturn(API_KEY);
+ }
+
+ protected synchronized void mockHttpGetFromFile(String filename) {
+ httpStub.configureResponse()
+ .statusCode(200)
+ .body(testResource(filename))
+ .contentType(filename.endsWith(".json") ? "application/json" : "text/csv")
+ .apply();
+ }
+}