diff --git a/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java b/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java index 4ad6e7ea9..6252b01d9 100644 --- a/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java +++ b/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java @@ -20,6 +20,7 @@ package org.apache.fineract.client.util; import org.apache.fineract.client.ApiClient; import org.apache.fineract.client.auth.ApiKeyAuth; +import org.apache.fineract.client.auth.HttpBasicAuth; import org.apache.fineract.client.services.*; /** @@ -243,48 +244,67 @@ public class FineractClient { workingDays = apiClient.createService(WorkingDaysApi.class); } - public static FineractClientBuilder builder() { - return new FineractClientBuilder(); + public static Builder builder() { + return new Builder(); } protected S createService(Class serviceClass) { return api.createService(serviceClass); } - public static class FineractClientBuilder { + public static class Builder { + private final ApiClient apiClient = new ApiClient(); private String baseURL; private String tenant; private String username; private String password; - private FineractClientBuilder() {} + private Builder() {} - public FineractClientBuilder baseURL(String baseURL) { + public Builder baseURL(String baseURL) { this.baseURL = baseURL; return this; } - public FineractClientBuilder tenant(String tenant) { + public Builder tenant(String tenant) { this.tenant = tenant; return this; } - public FineractClientBuilder basicAuth(String username, String password) { + public Builder basicAuth(String username, String password) { this.username = username; this.password = password; return this; } public FineractClient build() { - ApiClient apiClient = new ApiClient("basicAuth", has("username", username), has("password", password)); + // URL apiClient.getAdapterBuilder().baseUrl(has("baseURL", baseURL)); - ApiKeyAuth authorization = new ApiKeyAuth("header", "fineract-platform-tenantid"); - authorization.setApiKey(has("tenant", tenant)); - apiClient.addAuthorization("tenantid", authorization); + + // Tenant + ApiKeyAuth tenantAuth = new ApiKeyAuth("header", "fineract-platform-tenantid"); + tenantAuth.setApiKey(has("tenant", tenant)); + apiClient.addAuthorization("tenantid", tenantAuth); + + // BASIC Auth + HttpBasicAuth basicAuth = new HttpBasicAuth(); + basicAuth.setCredentials(has("username", username), has("password", password)); + apiClient.addAuthorization("basicAuth", basicAuth); + return new FineractClient(apiClient); } + /** + * Obtain the internal Retrofit ApiClient. This method is typically not required to be invoked for simple API + * usages, but can be a handy back door for non-trivial advanced customizations of the API client. + * + * @return the {@link ApiClient} which {@link #build()} will use. + */ + public ApiClient getApiClient() { + return apiClient; + } + private T has(String propertyName, T value) throws IllegalStateException { if (value == null) { throw new IllegalStateException("Must call " + propertyName + "(...) to create valid Builder"); diff --git a/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientTest.java b/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientTest.java index 74eeeef41..a6c9f78f0 100644 --- a/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientTest.java +++ b/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientTest.java @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.io.IOException; import org.apache.fineract.client.util.FineractClient; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; /** @@ -41,6 +42,14 @@ public class FineractClientTest { .getTotalFilteredRecords()).isAtLeast(3); } + @Test + @Disabled // TODO remove Ignore once https://issues.apache.org/jira/browse/FINERACT-1221 is fixed + void testInvalidOperations() throws IOException { + FineractClient.Builder builder = FineractClient.builder().baseURL("http://test/").tenant("default").basicAuth("mifos", "password"); + builder.getApiClient().getAdapterBuilder().validateEagerly(true); // see FINERACT-1221 + builder.build(); + } + @Test void testFineractClientBuilder() throws IOException { assertThrows(IllegalStateException.class, () -> {