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(); + } +}