This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git

commit 1e1787399a450969e7edc918a5008b48db51963d
Author: MarianaDmytrivBinariks <[email protected]>
AuthorDate: Thu Aug 14 15:16:39 2025 +0300

    FINERACT-2343: added e2e tests for business date and currency validation
---
 .../fineract/test/helper/ErrorMessageHelper.java   | 20 +++++++
 .../test/stepdef/common/BusinessDateStepDef.java   | 49 ++++++++++++++++
 .../stepdef/common/GlobalConfigurationStepDef.java | 66 ++++++++++++++++++++++
 .../test/resources/features/BusinessDate.feature   | 25 ++++++++
 .../test/resources/features/Configuration.feature  | 18 ++++++
 5 files changed, 178 insertions(+)

diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
index 94da00e494..0a87673781 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
@@ -59,6 +59,26 @@ public final class ErrorMessageHelper {
         return "Loan has a wrong http status";
     }
 
+    public static String setIncorrectBusinessDateFailure() {
+        return "Wrong local date fields.";
+    }
+
+    public static String setIncorrectBusinessDateMandatoryFailure() {
+        return "The parameter 'date' is mandatory: '${validatedValue}'.";
+    }
+
+    public static String setCurrencyEmptyValueFailure() {
+        return "The parameter 'currencies' cannot be empty.";
+    }
+
+    public static String setCurrencyIncorrectValueFailure(String value) {
+        return String.format("Currency with identifier %s does not exist", 
value);
+    }
+
+    public static String setCurrencyNullValueMandatoryFailure() {
+        return "The parameter 'currencies' is mandatory.";
+    }
+
     public static String disburseDateFailure(Integer loanId) {
         String loanIdStr = parseLoanIdToString(loanId);
         return String.format("The date on which a loan with identifier : %s is 
disbursed cannot be in the future.", loanIdStr);
diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java
index 0bc536b6df..7c79f49000 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/BusinessDateStepDef.java
@@ -18,17 +18,24 @@
  */
 package org.apache.fineract.test.stepdef.common;
 
+import static java.util.Arrays.asList;
 import static org.assertj.core.api.Assertions.assertThat;
 
+import com.google.gson.Gson;
 import io.cucumber.java.en.Then;
 import io.cucumber.java.en.When;
 import java.io.IOException;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
 import org.apache.fineract.client.models.BusinessDateResponse;
+import org.apache.fineract.client.models.BusinessDateUpdateRequest;
 import org.apache.fineract.client.services.BusinessDateManagementApi;
+import org.apache.fineract.client.util.JSON;
 import org.apache.fineract.test.helper.BusinessDateHelper;
 import org.apache.fineract.test.helper.ErrorHelper;
+import org.apache.fineract.test.helper.ErrorMessageHelper;
+import org.apache.fineract.test.helper.ErrorResponse;
 import org.apache.fineract.test.stepdef.AbstractStepDef;
 import org.springframework.beans.factory.annotation.Autowired;
 import retrofit2.Response;
@@ -41,6 +48,8 @@ public class BusinessDateStepDef extends AbstractStepDef {
     @Autowired
     private BusinessDateManagementApi businessDateManagementApi;
 
+    private static final Gson GSON = new JSON().getGson();
+
     @When("Admin sets the business date to {string}")
     public void setBusinessDate(String businessDate) throws IOException {
         businessDateHelper.setBusinessDate(businessDate);
@@ -61,4 +70,44 @@ public class BusinessDateStepDef extends AbstractStepDef {
 
         assertThat(businessDateResponse.body().getDate()).isEqualTo(localDate);
     }
+
+    @Then("Set incorrect business date value {string} outcomes with an error")
+    public void setIncorrectBusinessDateFailure(String businessDate) throws 
IOException {
+        BusinessDateUpdateRequest businessDateRequest = 
businessDateHelper.defaultBusinessDateRequest().date(businessDate);
+
+        Response<BusinessDateResponse> businessDateRequestResponse = 
businessDateManagementApi.updateBusinessDate(null, businessDateRequest)
+                .execute();
+        final ErrorResponse errorDetails = 
ErrorResponse.from(businessDateRequestResponse);
+        
assertThat(errorDetails.getHttpStatusCode()).as(ErrorMessageHelper.setIncorrectBusinessDateFailure()).isEqualTo(400);
+        
assertThat(errorDetails.getSingleError().getDeveloperMessage()).isEqualTo(ErrorMessageHelper.setIncorrectBusinessDateFailure());
+    }
+
+    @Then("Set incorrect business date with empty value {string} outcomes with 
an error")
+    public void setNullOrEmptyBusinessDateFailure(String businessDate) throws 
IOException {
+        BusinessDateUpdateRequest businessDateRequest = 
businessDateHelper.defaultBusinessDateRequest();
+        if (businessDate.equals("null")) {
+            businessDateRequest.date(null);
+        } else {
+            businessDateRequest.date(businessDate);
+        }
+        Response<BusinessDateResponse> businessDateRequestResponse = 
businessDateManagementApi.updateBusinessDate(null, businessDateRequest)
+                .execute();
+        Integer httpStatusCodeExpected = 400;
+
+        String errorBody = businessDateRequestResponse.errorBody().string();
+        ErrorResponse errorResponse = GSON.fromJson(errorBody, 
ErrorResponse.class);
+        Integer httpStatusCodeActual = errorResponse.getHttpStatusCode();
+        List<String> developerMessagesActual = 
errorResponse.getErrors().stream().map(ErrorResponse.Error::getDeveloperMessage).toList();
+
+        List<String> developerMessagesExpected = 
asList(ErrorMessageHelper.setIncorrectBusinessDateMandatoryFailure(),
+                ErrorMessageHelper.setIncorrectBusinessDateFailure());
+
+        assertThat(httpStatusCodeActual)
+                
.as(ErrorMessageHelper.wrongErrorCodeInFailedChargeAdjustment(httpStatusCodeActual,
 httpStatusCodeExpected))
+                .isEqualTo(httpStatusCodeExpected);
+        assertThat(developerMessagesActual)
+                
.as(ErrorMessageHelper.wrongErrorMessage(developerMessagesActual.toString(), 
developerMessagesExpected.toString()))
+                .containsAll(developerMessagesExpected);
+    }
+
 }
diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/GlobalConfigurationStepDef.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/GlobalConfigurationStepDef.java
index d692a7b2b2..810695c29c 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/GlobalConfigurationStepDef.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/common/GlobalConfigurationStepDef.java
@@ -18,10 +18,21 @@
  */
 package org.apache.fineract.test.stepdef.common;
 
+import static java.util.Arrays.asList;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.Gson;
 import io.cucumber.java.en.Given;
 import io.cucumber.java.en.When;
 import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import org.apache.fineract.client.models.CurrencyUpdateRequest;
+import org.apache.fineract.client.services.CurrencyApi;
 import org.apache.fineract.client.services.DefaultApi;
+import org.apache.fineract.client.util.JSON;
+import org.apache.fineract.test.helper.ErrorMessageHelper;
+import org.apache.fineract.test.helper.ErrorResponse;
 import org.apache.fineract.test.helper.GlobalConfigurationHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -32,6 +43,11 @@ public class GlobalConfigurationStepDef {
     @Autowired
     private DefaultApi defaultApi;
 
+    @Autowired
+    private CurrencyApi currencyApi;
+
+    private static final Gson GSON = new JSON().getGson();
+
     @Given("Global configuration {string} is disabled")
     public void disableGlobalConfiguration(String configKey) throws 
IOException {
         globalConfigurationHelper.disableGlobalConfiguration(configKey, 0L);
@@ -51,6 +67,56 @@ public class GlobalConfigurationStepDef {
     public void setGlobalConfigValueStringDefaultApi(String configKey, String 
configValue) throws IOException {
         Long configValueLong = Long.valueOf(configValue);
         defaultApi.updateGlobalConfiguration(configKey, configValueLong);
+    }
+
+    @When("Update currency with incorrect empty value outcomes with an error")
+    public void updateCurrencyEmptyValueFailure() throws IOException {
+        var request = new CurrencyUpdateRequest();
+        var currencyResponse = 
currencyApi.updateCurrencies(request.currencies(Collections.emptyList())).execute();
+        final ErrorResponse errorDetails = 
ErrorResponse.from(currencyResponse);
+        
assertThat(errorDetails.getHttpStatusCode()).as(ErrorMessageHelper.setCurrencyEmptyValueFailure()).isEqualTo(400);
+        
assertThat(errorDetails.getSingleError().getDeveloperMessage()).isEqualTo(ErrorMessageHelper.setCurrencyEmptyValueFailure());
+    }
+
+    @When("Update currency with incorrect null value outcomes with an error")
+    public void updateCurrencyIncorrectNullValueFailure() throws IOException {
+        var request = new CurrencyUpdateRequest();
+        var currencyResponse = 
currencyApi.updateCurrencies(request.currencies(Collections.singletonList(null))).execute();
+        final ErrorResponse errorDetails = 
ErrorResponse.from(currencyResponse);
+        
assertThat(errorDetails.getHttpStatusCode()).as(ErrorMessageHelper.setCurrencyIncorrectValueFailure("null")).isEqualTo(404);
+        assertThat(errorDetails.getSingleError().getDeveloperMessage())
+                
.isEqualTo(ErrorMessageHelper.setCurrencyIncorrectValueFailure("null"));
+    }
+
+    @When("Update currency as NULL value outcomes with an error")
+    public void updateCurrencyNullValueFailure() throws IOException {
+        var request = new CurrencyUpdateRequest();
+        var currencyResponse = 
currencyApi.updateCurrencies(request.currencies(null)).execute();
+        Integer httpStatusCodeExpected = 400;
+
+        String errorBody = currencyResponse.errorBody().string();
+        ErrorResponse errorResponse = GSON.fromJson(errorBody, 
ErrorResponse.class);
+        Integer httpStatusCodeActual = errorResponse.getHttpStatusCode();
+        List<String> developerMessagesActual = 
errorResponse.getErrors().stream().map(ErrorResponse.Error::getDeveloperMessage).toList();
+
+        List<String> developerMessagesExpected = 
asList(ErrorMessageHelper.setCurrencyEmptyValueFailure(),
+                ErrorMessageHelper.setCurrencyNullValueMandatoryFailure());
+
+        assertThat(httpStatusCodeActual)
+                
.as(ErrorMessageHelper.wrongErrorCodeInFailedChargeAdjustment(httpStatusCodeActual,
 httpStatusCodeExpected))
+                .isEqualTo(httpStatusCodeExpected);
+        assertThat(developerMessagesActual)
+                
.as(ErrorMessageHelper.wrongErrorMessage(developerMessagesActual.toString(), 
developerMessagesExpected.toString()))
+                .containsAll(developerMessagesExpected);
+    }
 
+    @When("Update currency as {string} value outcomes with an error")
+    public void updateCurrencyIncorrectValueFailure(String currency) throws 
IOException {
+        var request = new CurrencyUpdateRequest();
+        var currencyResponse = 
currencyApi.updateCurrencies(request.currencies(Collections.singletonList(currency))).execute();
+        final ErrorResponse errorDetails = 
ErrorResponse.from(currencyResponse);
+        
assertThat(errorDetails.getHttpStatusCode()).as(ErrorMessageHelper.setCurrencyIncorrectValueFailure(currency)).isEqualTo(404);
+        assertThat(errorDetails.getSingleError().getDeveloperMessage())
+                
.isEqualTo(ErrorMessageHelper.setCurrencyIncorrectValueFailure(currency));
     }
 }
diff --git 
a/fineract-e2e-tests-runner/src/test/resources/features/BusinessDate.feature 
b/fineract-e2e-tests-runner/src/test/resources/features/BusinessDate.feature
index 8b592b9a0f..b4feb6a572 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/BusinessDate.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/BusinessDate.feature
@@ -26,3 +26,28 @@ Feature: BusinessDate
     When Admin sets the business date to "10 July 2022"
     When Admin runs the Increase Business Date by 1 day job
     Then Admin checks that the business date is correctly set to "11 July 2022"
+
+  @TestRailId:C3953
+  Scenario: Verify set incorrect business date with empty value handled 
correct with accordance error message - UC1
+    When Set incorrect business date with empty value "null" outcomes with an 
error
+
+  @TestRailId:C3954
+  Scenario: Verify set incorrect business date with null value handled correct 
with accordance error message - UC2
+    When Set incorrect business date with empty value "" outcomes with an error
+
+  @TestRailId:C3955
+  Scenario: Verify set incorrect business date value handled correct with 
accordance error message - UC3
+    When Set incorrect business date value "15" outcomes with an error
+
+  @TestRailId:C3956
+  Scenario: Verify set incorrect business date value handled correct with 
accordance error message - UC4
+    When Set incorrect business date value "11 15 2025" outcomes with an error
+
+  @TestRailId:C_3957
+  Scenario: Verify set incorrect business date value handled correct with 
accordance error message - UC5
+    When Set incorrect business date value "August 12 2025" outcomes with an 
error
+
+  @TestRailId:C3958
+  Scenario: Verify set incorrect business date value handled correct with 
accordance error message - UC6
+    When Set incorrect business date value "33 August 2025" outcomes with an 
error
+
diff --git 
a/fineract-e2e-tests-runner/src/test/resources/features/Configuration.feature 
b/fineract-e2e-tests-runner/src/test/resources/features/Configuration.feature
new file mode 100644
index 0000000000..a869250350
--- /dev/null
+++ 
b/fineract-e2e-tests-runner/src/test/resources/features/Configuration.feature
@@ -0,0 +1,18 @@
+@ConfigurationFeature
+Feature: Configuration
+
+  @TestRailId:C3959
+  Scenario: Verify update currency with empty value handled correct with 
accordance error message - UC1
+    When Update currency with incorrect empty value outcomes with an error
+
+  @TestRailId:C3960
+  Scenario: Verify update currency with null value handled correct with 
accordance error message - UC2
+    When Update currency with incorrect null value outcomes with an error
+
+  @TestRailId:C3961
+  Scenario: Verify update currency as NULL value handled correct with 
accordance error message - UC3
+    When Update currency as NULL value outcomes with an error
+
+  @TestRailId:C3962
+  Scenario: Verify update currency with incorrect value handled correct with 
accordance error message - UC4
+    When Update currency as "string" value outcomes with an error

Reply via email to