diff --git a/src/main/java/com/marketdata/sdk/options/OptionsQuotesRequest.java b/src/main/java/com/marketdata/sdk/options/OptionsQuotesRequest.java index 8711088..5902b84 100644 --- a/src/main/java/com/marketdata/sdk/options/OptionsQuotesRequest.java +++ b/src/main/java/com/marketdata/sdk/options/OptionsQuotesRequest.java @@ -33,6 +33,11 @@ private OptionsQuotesRequest(Builder b) { this.countback = b.countback; } + /** Shortcut for {@code builder(first, rest...).build()}. */ + public static OptionsQuotesRequest of(String first, String... rest) { + return builder(first, rest).build(); + } + /** * Start a builder with one or more option symbols. At least one symbol is required; duplicates * are kept (each one results in its own HTTP call). diff --git a/src/main/java/com/marketdata/sdk/stocks/StockQuotesRequest.java b/src/main/java/com/marketdata/sdk/stocks/StockQuotesRequest.java index 8a2da5d..7bd0fe1 100644 --- a/src/main/java/com/marketdata/sdk/stocks/StockQuotesRequest.java +++ b/src/main/java/com/marketdata/sdk/stocks/StockQuotesRequest.java @@ -28,6 +28,11 @@ private StockQuotesRequest(Builder b) { this.week52 = b.week52; } + /** Shortcut for {@code builder(first, rest...).build()}. */ + public static StockQuotesRequest of(String first, String... rest) { + return builder(first, rest).build(); + } + /** Start a builder with one or more ticker symbols. At least one is required. */ public static Builder builder(String first, String... rest) { Builder b = new Builder(); diff --git a/src/test/java/com/marketdata/sdk/RequestValidationTest.java b/src/test/java/com/marketdata/sdk/RequestValidationTest.java index 93eb784..0a5f6b4 100644 --- a/src/test/java/com/marketdata/sdk/RequestValidationTest.java +++ b/src/test/java/com/marketdata/sdk/RequestValidationTest.java @@ -37,6 +37,16 @@ void stockQuotesOptInColumnSettersChain() { assertThat(r.week52()).isTrue(); } + @Test + void stockQuotesOfFactoryCarriesSymbolsAndDefaultsOptionals() { + StockQuotesRequest r = StockQuotesRequest.of("AAPL", "MSFT"); + + assertThat(r.symbols()).containsExactly("AAPL", "MSFT"); + assertThat(r.extended()).isNull(); + assertThat(r.candle()).isNull(); + assertThat(r.week52()).isNull(); + } + @Test void stockCandlesCountbackSetterIsCarried() { StockCandlesRequest r = @@ -114,6 +124,14 @@ void optionsQuotesFromSetterIsCarried() { assertThat(r.from()).isEqualTo(TODAY.minusDays(1)); } + @Test + void optionsQuotesOfFactoryCarriesSymbolsAndDefaultsOptionals() { + OptionsQuotesRequest r = OptionsQuotesRequest.of("AAPL250620C00200000", "AAPL250620P00200000"); + + assertThat(r.optionSymbols()).containsExactly("AAPL250620C00200000", "AAPL250620P00200000"); + assertThat(r.from()).isNull(); + } + @Test void optionsRequestsRejectEmptyInputs() { assertThatThrownBy(() -> OptionsStrikesRequest.of(""))