From 1bbb5cb8468af1d5fa498167185c363ec2477092 Mon Sep 17 00:00:00 2001 From: nyg Date: Mon, 21 Sep 2026 21:56:35 +0200 Subject: [PATCH 1/3] refactor: resolve SonarCloud quick-win code smells --- .../account/params/WalletAccountsParams.java | 3 +-- .../response/DepositLimitDeserializer.java | 2 +- .../response/LimitValueDeserializer.java | 2 +- .../api/endpoint/priv/JsonPostParams.java | 2 +- .../api/rest/DefaultKrakenRestRequester.java | 9 +++---- .../kraken/api/KrakenAPIAccountTest.java | 24 +++++++++---------- .../kraken/api/KrakenAPIEarnTest.java | 4 ++-- .../kraken/api/KrakenAPIFundingTest.java | 8 +++---- .../account/LedgerInfoEndpointTest.java | 2 +- .../account/QueryOrdersEndpointTest.java | 4 +++- .../account/QueryTradesEndpointTest.java | 4 +++- .../account/TradeVolumeEndpointTest.java | 2 +- .../funding/CancelWithdrawalEndpointTest.java | 8 +++++-- .../funding/DepositAddressesEndpointTest.java | 8 +++++-- .../funding/DepositMethodsEndpointTest.java | 4 +++- .../funding/WalletTransferEndpointTest.java | 16 +++++++++---- .../funding/WithdrawEndpointTest.java | 12 +++++++--- .../funding/WithdrawalInfoEndpointTest.java | 12 +++++++--- ...laimFundingDepositAddressEndpointTest.java | 4 +++- .../CreateFundingAddressEndpointTest.java | 12 +++++++--- .../CreateFundingWithdrawalEndpointTest.java | 8 +++++-- .../DeleteFundingAddressEndpointTest.java | 4 +++- .../FundingAssetsEndpointTest.java | 4 +++- .../FundingDepositLimitsEndpointTest.java | 8 +++++-- .../fundingbeta/FundingFeesEndpointTest.java | 8 +++++-- .../FundingMethodsEndpointTest.java | 4 +++- .../UpdateFundingAddressEndpointTest.java | 4 +++- .../AccountTransferEndpointTest.java | 16 +++++++++---- .../trading/AddOrderBatchEndpointTest.java | 20 ++++++++++++---- .../trading/AddOrderEndpointTest.java | 16 +++++++++---- .../CancelAllOrdersAfterEndpointTest.java | 4 +++- .../trading/EditOrderEndpointTest.java | 4 +++- 32 files changed, 167 insertions(+), 75 deletions(-) diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/account/params/WalletAccountsParams.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/account/params/WalletAccountsParams.java index 15718bd..2b658e4 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/account/params/WalletAccountsParams.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/account/params/WalletAccountsParams.java @@ -16,7 +16,6 @@ public class WalletAccountsParams extends PostParams { @Override protected Map params() { - Map params = new HashMap<>(); - return params; + return new HashMap<>(); } } diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/funding/response/DepositLimitDeserializer.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/funding/response/DepositLimitDeserializer.java index beab8c9..1004b0b 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/funding/response/DepositLimitDeserializer.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/funding/response/DepositLimitDeserializer.java @@ -26,7 +26,7 @@ public DepositLimit deserialize(JsonParser parser, DeserializationContext contex try { return new DepositLimit(new BigDecimal(parser.getText()), false); } - catch (NumberFormatException e) { + catch (NumberFormatException _) { return context.reportInputMismatch(DepositLimit.class, "Expected a decimal deposit limit or false"); } } diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/response/LimitValueDeserializer.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/response/LimitValueDeserializer.java index 4a45738..9558844 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/response/LimitValueDeserializer.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/response/LimitValueDeserializer.java @@ -25,7 +25,7 @@ public LimitValue deserialize(JsonParser parser, DeserializationContext context) try { return new LimitValue(Long.valueOf(parser.getText()), null); } - catch (NumberFormatException e) { + catch (NumberFormatException _) { return context.reportInputMismatch(LimitValue.class, "Expected a count or limit amounts"); } } diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/JsonPostParams.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/JsonPostParams.java index dfe1494..a7787e0 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/JsonPostParams.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/JsonPostParams.java @@ -23,7 +23,7 @@ public abstract class JsonPostParams extends PostParams { @Override protected String encode(Map params) { String nonce = (String) params.get("nonce"); - BigInteger numericNonce = nonce != null && nonce.matches("0|[1-9][0-9]{0,19}") ? new BigInteger(nonce) : null; + BigInteger numericNonce = nonce != null && nonce.matches("0|[1-9]\\d{0,19}") ? new BigInteger(nonce) : null; if (numericNonce == null || numericNonce.bitLength() > 64) { throw new IllegalStateException("%s requires KrakenNonceGenerator to return an unsigned 64-bit integer in canonical decimal form".formatted(getClass().getSimpleName())); } diff --git a/library/src/main/java/dev/andstuff/kraken/api/rest/DefaultKrakenRestRequester.java b/library/src/main/java/dev/andstuff/kraken/api/rest/DefaultKrakenRestRequester.java index b3b3260..aea987c 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/rest/DefaultKrakenRestRequester.java +++ b/library/src/main/java/dev/andstuff/kraken/api/rest/DefaultKrakenRestRequester.java @@ -33,6 +33,7 @@ @Slf4j public class DefaultKrakenRestRequester implements KrakenRestRequester { + private static final String CONTENT_TYPE = "Content-Type"; private static final ObjectMapper OBJECT_MAPPER; static { @@ -91,7 +92,7 @@ public T execute(PrivateEndpoint endpoint, KrakenCredentials credentials, log.info("Fetching private endpoint: {}", connection.getURL()); connection.addRequestProperty("API-Key", credentials.getKey()); connection.addRequestProperty("API-Sign", credentials.sign(connection.getURL(), nonce, postData)); - connection.addRequestProperty("Content-Type", endpoint.getContentType()); + connection.addRequestProperty(CONTENT_TYPE, endpoint.getContentType()); connection.setDoOutput(true); try (OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream())) { @@ -124,7 +125,7 @@ public T execute(FundingBetaEndpoint endpoint, KrakenCredentials credenti connection.addRequestProperty("API-Nonce", nonce); if (!body.isEmpty()) { - connection.addRequestProperty("Content-Type", endpoint.getContentType()); + connection.addRequestProperty(CONTENT_TYPE, endpoint.getContentType()); connection.setDoOutput(true); try (OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8)) { @@ -147,7 +148,7 @@ private HttpsURLConnection createHttpsConnection(Endpoint endpoint) throw } private static T parseResponse(HttpsURLConnection connection, Endpoint endpoint) throws IOException { - String contentType = connection.getHeaderField("Content-Type"); + String contentType = connection.getHeaderField(CONTENT_TYPE); if ("application/json".equals(contentType)) { JavaType krakenResponseType = endpoint.wrappedResponseType(OBJECT_MAPPER.getTypeFactory()); KrakenResponse response = OBJECT_MAPPER.readValue(connection.getInputStream(), krakenResponseType); @@ -169,7 +170,7 @@ private static T parseFundingResponse(HttpsURLConnection connection, Funding throw new KrakenException(List.of("HTTP %d %s".formatted(status, readErrorBody(connection)).strip())); } - String contentType = connection.getHeaderField("Content-Type"); + String contentType = connection.getHeaderField(CONTENT_TYPE); if (contentType == null || !contentType.startsWith("application/json")) { throw new IllegalStateException("Unsupported HTTP Content-Type"); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIAccountTest.java b/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIAccountTest.java index 6fcd89f..bfa0a43 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIAccountTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIAccountTest.java @@ -125,7 +125,7 @@ void should_route_accountBalance_defaults_when_called() { void should_reject_accountBalance_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.accountBalance()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::accountBalance).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -156,7 +156,7 @@ void should_route_extendedBalance_defaults_when_called() { void should_reject_extendedBalance_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.extendedBalance()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::extendedBalance).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -189,7 +189,7 @@ void should_route_creditLines_defaults_when_called() { void should_reject_creditLines_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.creditLines()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::creditLines).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -222,7 +222,7 @@ void should_route_tradeBalance_defaults_when_called() { void should_reject_tradeBalance_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.tradeBalance()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::tradeBalance).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -255,7 +255,7 @@ void should_route_openOrders_defaults_when_called() { void should_reject_openOrders_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.openOrders()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::openOrders).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -288,7 +288,7 @@ void should_route_closedOrders_defaults_when_called() { void should_reject_closedOrders_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.closedOrders()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::closedOrders).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -342,7 +342,7 @@ void should_route_orderAmends_defaults_when_called() { void should_reject_orderAmends_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.orderAmends()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::orderAmends).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -375,7 +375,7 @@ void should_route_tradesHistory_defaults_when_called() { void should_reject_tradesHistory_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.tradesHistory()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::tradesHistory).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -427,7 +427,7 @@ void should_route_openPositions_defaults_when_called() { void should_reject_openPositions_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.openPositions()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::openPositions).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -460,7 +460,7 @@ void should_route_tradeVolume_defaults_when_called() { void should_reject_tradeVolume_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.tradeVolume()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::tradeVolume).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -493,7 +493,7 @@ void should_route_apiKeyInfo_defaults_when_called() { void should_reject_apiKeyInfo_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.apiKeyInfo()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::apiKeyInfo).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -526,7 +526,7 @@ void should_route_walletAccounts_defaults_when_called() { void should_reject_walletAccounts_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.walletAccounts()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::walletAccounts).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIEarnTest.java b/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIEarnTest.java index 5f157bf..0f3d795 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIEarnTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIEarnTest.java @@ -71,7 +71,7 @@ void should_route_earnStrategies_defaults_when_called() { void should_reject_earnStrategies_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.earnStrategies()).isInstanceOf(IllegalStateException.class).hasMessageContaining("Earn/Strategies"); + assertThatThrownBy(unit::earnStrategies).isInstanceOf(IllegalStateException.class).hasMessageContaining("Earn/Strategies"); verifyNoInteractions(requester); } @@ -104,7 +104,7 @@ void should_route_earnAllocations_defaults_when_called() { void should_reject_earnAllocations_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.earnAllocations()).isInstanceOf(IllegalStateException.class).hasMessageContaining("Earn/Allocations"); + assertThatThrownBy(unit::earnAllocations).isInstanceOf(IllegalStateException.class).hasMessageContaining("Earn/Allocations"); verifyNoInteractions(requester); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIFundingTest.java b/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIFundingTest.java index c582b30..963c11f 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIFundingTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/KrakenAPIFundingTest.java @@ -133,7 +133,7 @@ void should_route_depositStatus_defaults_when_called() { void should_reject_depositStatus_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.depositStatus()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::depositStatus).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -164,7 +164,7 @@ void should_route_withdrawalMethods_defaults_when_called() { void should_reject_withdrawalMethods_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.withdrawalMethods()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::withdrawalMethods).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -195,7 +195,7 @@ void should_route_withdrawalAddresses_defaults_when_called() { void should_reject_withdrawalAddresses_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.withdrawalAddresses()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::withdrawalAddresses).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } @@ -272,7 +272,7 @@ void should_route_withdrawalStatus_defaults_when_called() { void should_reject_withdrawalStatus_when_credentials_are_missing() { KrakenAPI unit = new KrakenAPI(null, nonceGenerator, requester); - assertThatThrownBy(() -> unit.withdrawalStatus()).isInstanceOf(IllegalStateException.class); + assertThatThrownBy(unit::withdrawalStatus).isInstanceOf(IllegalStateException.class); verifyNoInteractions(requester); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/LedgerInfoEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/LedgerInfoEndpointTest.java index c336be4..6645eec 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/LedgerInfoEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/LedgerInfoEndpointTest.java @@ -105,7 +105,7 @@ void should_deserialize_typed_response_when_reading_kraken_fixture() throws Exce assertThat(result.size()).isEqualTo(2); assertThat(result.hasNext()).isFalse(); assertThat(result.asList()).extracting(LedgerEntry::id).containsExactlyInAnyOrder("L4UESK-KG3EQ-UFO4T5", "LMKZCZ-Z3GVL-CXKK4H"); - assertThat(result.entries().get("L4UESK-KG3EQ-UFO4T5")).isEqualTo(new LedgerEntry(null, "TJKLXF-PGMUI-4NTLXU", + assertThat(result.entries()).containsEntry("L4UESK-KG3EQ-UFO4T5", new LedgerEntry(null, "TJKLXF-PGMUI-4NTLXU", Instant.ofEpochSecond(1688464484L, 178_700_000L), LedgerEntry.Type.TRADE, "", "currency", null, "ZGBP", null, new BigDecimal("-24.5000"), new BigDecimal("0.0490"), new BigDecimal("459567.9171"))); assertThat(result.entries().get("L4UESK-KG3EQ-UFO4T5").netAmount()).isEqualByComparingTo("-24.5490"); diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryOrdersEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryOrdersEndpointTest.java index b00931f..a606f8b 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryOrdersEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryOrdersEndpointTest.java @@ -51,7 +51,9 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_transactionIds_when_building_parameters() { - assertThatThrownBy(() -> QueryOrdersParams.builder().build()).isInstanceOf(NullPointerException.class).hasMessageContaining("transactionIds"); + QueryOrdersParams.QueryOrdersParamsBuilder builder = QueryOrdersParams.builder(); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("transactionIds"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryTradesEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryTradesEndpointTest.java index bea070a..accdbbe 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryTradesEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/QueryTradesEndpointTest.java @@ -48,7 +48,9 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_transactionIds_when_building_parameters() { - assertThatThrownBy(() -> QueryTradesParams.builder().build()).isInstanceOf(NullPointerException.class).hasMessageContaining("transactionIds"); + QueryTradesParams.QueryTradesParamsBuilder builder = QueryTradesParams.builder(); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("transactionIds"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/TradeVolumeEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/TradeVolumeEndpointTest.java index dd0fdea..d4dac6a 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/TradeVolumeEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/account/TradeVolumeEndpointTest.java @@ -128,7 +128,7 @@ void should_preserve_unsigned_nonce_when_encoding_its_maximum_value() throws Exc } @Test - void should_reuse_json_encoding_when_parameters_are_encoded_directly() throws Exception { + void should_reuse_json_encoding_when_parameters_are_encoded_directly() { TradeVolumeParams params = TradeVolumeParams.builder().pairs(List.of("XBTUSD")).feeSchedule(true).build(); TradeVolumeEndpoint unit = new TradeVolumeEndpoint(params); diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/CancelWithdrawalEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/CancelWithdrawalEndpointTest.java index 94bc028..99d1251 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/CancelWithdrawalEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/CancelWithdrawalEndpointTest.java @@ -44,12 +44,16 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> CancelWithdrawalParams.builder().referenceId("id +/&=").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + CancelWithdrawalParams.CancelWithdrawalParamsBuilder builder = CancelWithdrawalParams.builder().referenceId("id +/&="); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test void should_reject_missing_referenceId_when_building_parameters() { - assertThatThrownBy(() -> CancelWithdrawalParams.builder().asset("id +/&=").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("referenceId"); + CancelWithdrawalParams.CancelWithdrawalParamsBuilder builder = CancelWithdrawalParams.builder().asset("id +/&="); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("referenceId"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositAddressesEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositAddressesEndpointTest.java index 7846131..473a1b8 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositAddressesEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositAddressesEndpointTest.java @@ -51,12 +51,16 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> DepositAddressesParams.builder().method("id +/&=").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + DepositAddressesParams.DepositAddressesParamsBuilder builder = DepositAddressesParams.builder().method("id +/&="); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test void should_reject_missing_method_when_building_parameters() { - assertThatThrownBy(() -> DepositAddressesParams.builder().asset("id +/&=").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("method"); + DepositAddressesParams.DepositAddressesParamsBuilder builder = DepositAddressesParams.builder().asset("id +/&="); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("method"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositMethodsEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositMethodsEndpointTest.java index cb4f937..1c400b9 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositMethodsEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/DepositMethodsEndpointTest.java @@ -49,7 +49,9 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> DepositMethodsParams.builder().build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + DepositMethodsParams.DepositMethodsParamsBuilder builder = DepositMethodsParams.builder(); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WalletTransferEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WalletTransferEndpointTest.java index 3f3b7f7..cb2a5e5 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WalletTransferEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WalletTransferEndpointTest.java @@ -50,22 +50,30 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> WalletTransferParams.builder().sourceWallet(SourceWallet.SPOT_WALLET).destinationWallet(DestinationWallet.FUTURES_WALLET).amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + WalletTransferParams.WalletTransferParamsBuilder builder = WalletTransferParams.builder().sourceWallet(SourceWallet.SPOT_WALLET).destinationWallet(DestinationWallet.FUTURES_WALLET).amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test void should_reject_missing_sourceWallet_when_building_parameters() { - assertThatThrownBy(() -> WalletTransferParams.builder().asset("id +/&=").destinationWallet(DestinationWallet.FUTURES_WALLET).amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("sourceWallet"); + WalletTransferParams.WalletTransferParamsBuilder builder = WalletTransferParams.builder().asset("id +/&=").destinationWallet(DestinationWallet.FUTURES_WALLET).amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("sourceWallet"); } @Test void should_reject_missing_destinationWallet_when_building_parameters() { - assertThatThrownBy(() -> WalletTransferParams.builder().asset("id +/&=").sourceWallet(SourceWallet.SPOT_WALLET).amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("destinationWallet"); + WalletTransferParams.WalletTransferParamsBuilder builder = WalletTransferParams.builder().asset("id +/&=").sourceWallet(SourceWallet.SPOT_WALLET).amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("destinationWallet"); } @Test void should_reject_missing_amount_when_building_parameters() { - assertThatThrownBy(() -> WalletTransferParams.builder().asset("id +/&=").sourceWallet(SourceWallet.SPOT_WALLET).destinationWallet(DestinationWallet.FUTURES_WALLET).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); + WalletTransferParams.WalletTransferParamsBuilder builder = WalletTransferParams.builder().asset("id +/&=").sourceWallet(SourceWallet.SPOT_WALLET).destinationWallet(DestinationWallet.FUTURES_WALLET); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawEndpointTest.java index 71de038..bfed7bf 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawEndpointTest.java @@ -53,17 +53,23 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> WithdrawParams.builder().key("id +/&=").amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + WithdrawParams.WithdrawParamsBuilder builder = WithdrawParams.builder().key("id +/&=").amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test void should_reject_missing_key_when_building_parameters() { - assertThatThrownBy(() -> WithdrawParams.builder().asset("id +/&=").amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("key"); + WithdrawParams.WithdrawParamsBuilder builder = WithdrawParams.builder().asset("id +/&=").amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("key"); } @Test void should_reject_missing_amount_when_building_parameters() { - assertThatThrownBy(() -> WithdrawParams.builder().asset("id +/&=").key("id +/&=").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); + WithdrawParams.WithdrawParamsBuilder builder = WithdrawParams.builder().asset("id +/&=").key("id +/&="); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawalInfoEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawalInfoEndpointTest.java index 4277766..5357288 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawalInfoEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/funding/WithdrawalInfoEndpointTest.java @@ -47,17 +47,23 @@ void should_encode_all_options_when_supplied() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> WithdrawalInfoParams.builder().key("id +/&=").amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + WithdrawalInfoParams.WithdrawalInfoParamsBuilder builder = WithdrawalInfoParams.builder().key("id +/&=").amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test void should_reject_missing_key_when_building_parameters() { - assertThatThrownBy(() -> WithdrawalInfoParams.builder().asset("id +/&=").amount(new BigDecimal("0.0000000012300")).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("key"); + WithdrawalInfoParams.WithdrawalInfoParamsBuilder builder = WithdrawalInfoParams.builder().asset("id +/&=").amount(new BigDecimal("0.0000000012300")); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("key"); } @Test void should_reject_missing_amount_when_building_parameters() { - assertThatThrownBy(() -> WithdrawalInfoParams.builder().asset("id +/&=").key("id +/&=").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); + WithdrawalInfoParams.WithdrawalInfoParamsBuilder builder = WithdrawalInfoParams.builder().asset("id +/&=").key("id +/&="); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/ClaimFundingDepositAddressEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/ClaimFundingDepositAddressEndpointTest.java index 4a537f9..b16b1fe 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/ClaimFundingDepositAddressEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/ClaimFundingDepositAddressEndpointTest.java @@ -38,7 +38,9 @@ void should_send_method_in_json_body_when_claiming_address() { @Test void should_reject_missing_method_when_building_parameters() { - assertThatThrownBy(() -> ClaimFundingDepositAddressParams.builder().accountId("AA12").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("methodId"); + ClaimFundingDepositAddressParams.ClaimFundingDepositAddressParamsBuilder builder = ClaimFundingDepositAddressParams.builder().accountId("AA12"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("methodId"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingAddressEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingAddressEndpointTest.java index 1bf7676..582ec49 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingAddressEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingAddressEndpointTest.java @@ -52,17 +52,23 @@ void should_send_tag_and_memo_when_supplied() { @Test void should_reject_missing_scope_when_building_parameters() { - assertThatThrownBy(() -> CreateFundingAddressParams.builder().address("a").name("n").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("scope"); + CreateFundingAddressParams.CreateFundingAddressParamsBuilder builder = CreateFundingAddressParams.builder().address("a").name("n"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("scope"); } @Test void should_reject_missing_address_when_building_parameters() { - assertThatThrownBy(() -> CreateFundingAddressParams.builder().scope(Scope.method("m")).name("n").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("address"); + CreateFundingAddressParams.CreateFundingAddressParamsBuilder builder = CreateFundingAddressParams.builder().scope(Scope.method("m")).name("n"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("address"); } @Test void should_reject_missing_name_when_building_parameters() { - assertThatThrownBy(() -> CreateFundingAddressParams.builder().scope(Scope.method("m")).address("a").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("name"); + CreateFundingAddressParams.CreateFundingAddressParamsBuilder builder = CreateFundingAddressParams.builder().scope(Scope.method("m")).address("a"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("name"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingWithdrawalEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingWithdrawalEndpointTest.java index dca67ac..c8764e2 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingWithdrawalEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/CreateFundingWithdrawalEndpointTest.java @@ -120,12 +120,16 @@ void should_reject_amount_without_asset_name_when_encoding_request() { @Test void should_reject_missing_amount_when_building_parameters() { - assertThatThrownBy(() -> CreateFundingWithdrawalParams.builder().scope(Scope.method("m")).addressId("AB1").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); + CreateFundingWithdrawalParams.CreateFundingWithdrawalParamsBuilder builder = CreateFundingWithdrawalParams.builder().scope(Scope.method("m")).addressId("AB1"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); } @Test void should_reject_missing_address_when_building_parameters() { - assertThatThrownBy(() -> CreateFundingWithdrawalParams.builder().scope(Scope.method("m")).amount(new AssetAmount(new Asset(AssetClass.CURRENCY, "BTC"), BigDecimal.ONE)).build()) + CreateFundingWithdrawalParams.CreateFundingWithdrawalParamsBuilder builder = CreateFundingWithdrawalParams.builder().scope(Scope.method("m")).amount(new AssetAmount(new Asset(AssetClass.CURRENCY, "BTC"), BigDecimal.ONE)); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("addressId"); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/DeleteFundingAddressEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/DeleteFundingAddressEndpointTest.java index a86c145..816924c 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/DeleteFundingAddressEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/DeleteFundingAddressEndpointTest.java @@ -44,7 +44,9 @@ void should_use_address_only_when_created_from_identifier() { @Test void should_reject_missing_address_when_building_parameters() { - assertThatThrownBy(() -> DeleteFundingAddressParams.builder().accountId("AA12").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("addressId"); + DeleteFundingAddressParams.DeleteFundingAddressParamsBuilder builder = DeleteFundingAddressParams.builder().accountId("AA12"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("addressId"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingAssetsEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingAssetsEndpointTest.java index b5b3fcd..1324164 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingAssetsEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingAssetsEndpointTest.java @@ -47,7 +47,9 @@ void should_send_no_query_when_only_direction_is_supplied() { @Test void should_reject_missing_direction_when_building_parameters() { - assertThatThrownBy(() -> FundingAssetsParams.builder().build()).isInstanceOf(NullPointerException.class).hasMessageContaining("direction"); + FundingAssetsParams.FundingAssetsParamsBuilder builder = FundingAssetsParams.builder(); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("direction"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingDepositLimitsEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingDepositLimitsEndpointTest.java index 3d54000..ba23093 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingDepositLimitsEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingDepositLimitsEndpointTest.java @@ -41,12 +41,16 @@ void should_encode_asset_in_path_and_preferred_asset_in_query_when_supplied() { @Test void should_reject_missing_asset_class_when_building_parameters() { - assertThatThrownBy(() -> FundingLimitsParams.builder().asset("BTC").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("assetClass"); + FundingLimitsParams.FundingLimitsParamsBuilder builder = FundingLimitsParams.builder().asset("BTC"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("assetClass"); } @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> FundingLimitsParams.builder().assetClass(AssetClass.CURRENCY).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); + FundingLimitsParams.FundingLimitsParamsBuilder builder = FundingLimitsParams.builder().assetClass(AssetClass.CURRENCY); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingFeesEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingFeesEndpointTest.java index fc8ddc6..74d0e31 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingFeesEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingFeesEndpointTest.java @@ -51,12 +51,16 @@ void should_percent_encode_method_when_building_path() { @Test void should_reject_missing_method_when_building_parameters() { - assertThatThrownBy(() -> FundingFeesParams.builder().amount(BigDecimal.ONE).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("methodId"); + FundingFeesParams.FundingFeesParamsBuilder builder = FundingFeesParams.builder().amount(BigDecimal.ONE); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("methodId"); } @Test void should_reject_missing_amount_when_building_parameters() { - assertThatThrownBy(() -> FundingFeesParams.builder().methodId("d4ec4d52-b159-428e-ba64-f45455a978a1").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); + FundingFeesParams.FundingFeesParamsBuilder builder = FundingFeesParams.builder().methodId("d4ec4d52-b159-428e-ba64-f45455a978a1"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingMethodsEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingMethodsEndpointTest.java index 0064250..11dded5 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingMethodsEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingMethodsEndpointTest.java @@ -61,7 +61,9 @@ void should_send_no_query_when_only_direction_is_supplied() { @Test void should_reject_missing_direction_when_building_parameters() { - assertThatThrownBy(() -> FundingMethodsParams.builder().limit(10).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("direction"); + FundingMethodsParams.FundingMethodsParamsBuilder builder = FundingMethodsParams.builder().limit(10); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("direction"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/UpdateFundingAddressEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/UpdateFundingAddressEndpointTest.java index 369df1e..4050aca 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/UpdateFundingAddressEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/fundingbeta/UpdateFundingAddressEndpointTest.java @@ -45,7 +45,9 @@ void should_send_only_description_when_name_is_omitted() { @Test void should_reject_missing_address_when_building_parameters() { - assertThatThrownBy(() -> UpdateFundingAddressParams.builder().name("n").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("addressId"); + UpdateFundingAddressParams.UpdateFundingAddressParamsBuilder builder = UpdateFundingAddressParams.builder().name("n"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("addressId"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/subaccount/AccountTransferEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/subaccount/AccountTransferEndpointTest.java index 9cb6941..03f59c0 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/subaccount/AccountTransferEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/subaccount/AccountTransferEndpointTest.java @@ -64,25 +64,33 @@ void should_default_to_currency_class_when_asset_class_is_omitted() { @Test void should_reject_missing_asset_when_building_parameters() { - assertThatThrownBy(() -> AccountTransferParams.builder().amount(BigDecimal.ONE).from("ABCD 1234 EFGH 5678").to("IJKL 0987 MNOP 6543").build()) + AccountTransferParams.AccountTransferParamsBuilder builder = AccountTransferParams.builder().amount(BigDecimal.ONE).from("ABCD 1234 EFGH 5678").to("IJKL 0987 MNOP 6543"); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("asset"); } @Test void should_reject_missing_amount_when_building_parameters() { - assertThatThrownBy(() -> AccountTransferParams.builder().asset("XBT").from("ABCD 1234 EFGH 5678").to("IJKL 0987 MNOP 6543").build()) + AccountTransferParams.AccountTransferParamsBuilder builder = AccountTransferParams.builder().asset("XBT").from("ABCD 1234 EFGH 5678").to("IJKL 0987 MNOP 6543"); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("amount"); } @Test void should_reject_missing_source_when_building_parameters() { - assertThatThrownBy(() -> AccountTransferParams.builder().asset("XBT").amount(BigDecimal.ONE).to("IJKL 0987 MNOP 6543").build()) + AccountTransferParams.AccountTransferParamsBuilder builder = AccountTransferParams.builder().asset("XBT").amount(BigDecimal.ONE).to("IJKL 0987 MNOP 6543"); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("from"); } @Test void should_reject_missing_destination_when_building_parameters() { - assertThatThrownBy(() -> AccountTransferParams.builder().asset("XBT").amount(BigDecimal.ONE).from("ABCD 1234 EFGH 5678").build()) + AccountTransferParams.AccountTransferParamsBuilder builder = AccountTransferParams.builder().asset("XBT").amount(BigDecimal.ONE).from("ABCD 1234 EFGH 5678"); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("to"); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderBatchEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderBatchEndpointTest.java index 2379d26..f6d33b8 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderBatchEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderBatchEndpointTest.java @@ -97,27 +97,37 @@ void should_explain_invalid_nonce_when_encoding_json() { @Test void should_reject_missing_pair_when_building_parameters() { - assertThatThrownBy(() -> AddOrderBatchParams.builder().orders(List.of()).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("pair"); + AddOrderBatchParams.AddOrderBatchParamsBuilder builder = AddOrderBatchParams.builder().orders(List.of()); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("pair"); } @Test void should_reject_missing_orders_when_building_parameters() { - assertThatThrownBy(() -> AddOrderBatchParams.builder().pair("BTC/USD").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("orders"); + AddOrderBatchParams.AddOrderBatchParamsBuilder builder = AddOrderBatchParams.builder().pair("BTC/USD"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("orders"); } @Test void should_reject_missing_orderType_when_building_batch_order() { - assertThatThrownBy(() -> BatchOrder.builder().side(OrderSide.BUY).volume(BigDecimal.ONE).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("orderType"); + BatchOrder.BatchOrderBuilder builder = BatchOrder.builder().side(OrderSide.BUY).volume(BigDecimal.ONE); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("orderType"); } @Test void should_reject_missing_side_when_building_batch_order() { - assertThatThrownBy(() -> BatchOrder.builder().orderType(OrderType.MARKET).volume(BigDecimal.ONE).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("side"); + BatchOrder.BatchOrderBuilder builder = BatchOrder.builder().orderType(OrderType.MARKET).volume(BigDecimal.ONE); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("side"); } @Test void should_reject_missing_volume_when_building_batch_order() { - assertThatThrownBy(() -> BatchOrder.builder().orderType(OrderType.MARKET).side(OrderSide.BUY).build()).isInstanceOf(NullPointerException.class).hasMessageContaining("volume"); + BatchOrder.BatchOrderBuilder builder = BatchOrder.builder().orderType(OrderType.MARKET).side(OrderSide.BUY); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("volume"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderEndpointTest.java index ef6261f..7bae189 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/AddOrderEndpointTest.java @@ -116,25 +116,33 @@ void should_omit_close_prices_when_not_supplied() { @Test void should_reject_missing_pair_when_building_parameters() { - assertThatThrownBy(() -> AddOrderParams.builder().side(OrderSide.BUY).orderType(OrderType.MARKET).volume(BigDecimal.ONE).build()) + AddOrderParams.AddOrderParamsBuilder builder = AddOrderParams.builder().side(OrderSide.BUY).orderType(OrderType.MARKET).volume(BigDecimal.ONE); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("pair"); } @Test void should_reject_missing_side_when_building_parameters() { - assertThatThrownBy(() -> AddOrderParams.builder().pair("XBTUSD").orderType(OrderType.MARKET).volume(BigDecimal.ONE).build()) + AddOrderParams.AddOrderParamsBuilder builder = AddOrderParams.builder().pair("XBTUSD").orderType(OrderType.MARKET).volume(BigDecimal.ONE); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("side"); } @Test void should_reject_missing_orderType_when_building_parameters() { - assertThatThrownBy(() -> AddOrderParams.builder().pair("XBTUSD").side(OrderSide.BUY).volume(BigDecimal.ONE).build()) + AddOrderParams.AddOrderParamsBuilder builder = AddOrderParams.builder().pair("XBTUSD").side(OrderSide.BUY).volume(BigDecimal.ONE); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("orderType"); } @Test void should_reject_missing_volume_when_building_parameters() { - assertThatThrownBy(() -> AddOrderParams.builder().pair("XBTUSD").side(OrderSide.BUY).orderType(OrderType.MARKET).build()) + AddOrderParams.AddOrderParamsBuilder builder = AddOrderParams.builder().pair("XBTUSD").side(OrderSide.BUY).orderType(OrderType.MARKET); + + assertThatThrownBy(builder::build) .isInstanceOf(NullPointerException.class).hasMessageContaining("volume"); } diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/CancelAllOrdersAfterEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/CancelAllOrdersAfterEndpointTest.java index 28f52f5..b0454a9 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/CancelAllOrdersAfterEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/CancelAllOrdersAfterEndpointTest.java @@ -47,7 +47,9 @@ void should_encode_zero_timeout_when_disabling_timer() { @Test void should_reject_missing_timeout_when_building_parameters() { - assertThatThrownBy(() -> CancelAllOrdersAfterParams.builder().build()).isInstanceOf(NullPointerException.class).hasMessageContaining("timeout"); + CancelAllOrdersAfterParams.CancelAllOrdersAfterParamsBuilder builder = CancelAllOrdersAfterParams.builder(); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("timeout"); } @Test diff --git a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/EditOrderEndpointTest.java b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/EditOrderEndpointTest.java index 4f59f85..ba5fcee 100644 --- a/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/EditOrderEndpointTest.java +++ b/library/src/test/java/dev/andstuff/kraken/api/endpoint/trading/EditOrderEndpointTest.java @@ -88,7 +88,9 @@ void should_reject_request_when_both_order_identifiers_are_supplied() { @Test void should_reject_missing_pair_when_building_parameters() { - assertThatThrownBy(() -> EditOrderParams.builder().transactionId("OHYO67-6LP66-HMQ437").build()).isInstanceOf(NullPointerException.class).hasMessageContaining("pair"); + EditOrderParams.EditOrderParamsBuilder builder = EditOrderParams.builder().transactionId("OHYO67-6LP66-HMQ437"); + + assertThatThrownBy(builder::build).isInstanceOf(NullPointerException.class).hasMessageContaining("pair"); } @Test From 167fbfbb85a6e5c6a060b6823034aad92e6b3251 Mon Sep 17 00:00:00 2001 From: nyg Date: Mon, 21 Sep 2026 22:00:10 +0200 Subject: [PATCH 2/3] refactor: suppress intentional SonarCloud findings and drop null fee map --- .../src/main/java/dev/andstuff/kraken/api/KrakenAPI.java | 1 + .../kraken/api/endpoint/fundingbeta/FundingBetaParams.java | 1 + .../fundingbeta/params/CreateFundingWithdrawalParams.java | 7 +++++-- .../dev/andstuff/kraken/api/endpoint/priv/PostParams.java | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java b/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java index d41b50f..379ee68 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java +++ b/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java @@ -247,6 +247,7 @@ * @see Kraken REST API documentation */ @Builder(toBuilder = true) +@SuppressWarnings("java:S6539") public class KrakenAPI { private final KrakenCredentials credentials; diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingBetaParams.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingBetaParams.java index 6c14a8d..5be363b 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingBetaParams.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/FundingBetaParams.java @@ -31,6 +31,7 @@ public Map toMap() { * * @return the body parameters, or {@code null} for an endpoint sending no body */ + @SuppressWarnings("java:S1168") protected Map body() { return null; } diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/params/CreateFundingWithdrawalParams.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/params/CreateFundingWithdrawalParams.java index c068db9..7cb18f5 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/params/CreateFundingWithdrawalParams.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/fundingbeta/params/CreateFundingWithdrawalParams.java @@ -85,7 +85,10 @@ protected Map body() { body.put("scope", scope.json()); body.put("address_id", addressId); body.put("amount", rebasable("asset_amount", amount.json())); - putIfNonNull(body, "fee", fee()); + Map fee = fee(); + if (!fee.isEmpty()) { + body.put("fee", fee); + } putIfNonNull(body, "expected_address", expectedAddress); return body; } @@ -95,7 +98,7 @@ private Map fee() { throw new IllegalArgumentException("Specify at most one of withdrawalFeeToken or maxFee"); } if (withdrawalFeeToken == null && maxFee == null && feeIncluded == null) { - return null; + return Map.of(); } if (feeIncluded == null) { throw new IllegalArgumentException("feeIncluded is required with withdrawalFeeToken or maxFee"); diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/PostParams.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/PostParams.java index ffe885f..4ea059d 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/PostParams.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/priv/PostParams.java @@ -20,6 +20,7 @@ public abstract class PostParams { * * @return the POST parameters */ + @SuppressWarnings("java:S1452") protected abstract Map params(); private String nonce; From e02786d60d2dc333c8d7ad339294f41a3d2afd3a Mon Sep 17 00:00:00 2001 From: nyg Date: Mon, 21 Sep 2026 22:14:31 +0200 Subject: [PATCH 3/3] ci: trigger SonarCloud pull request decoration