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


The following commit(s) were added to refs/heads/develop by this push:
     new 4a02c26059 FINERACT-2421: Fix flaky guarantor test
4a02c26059 is described below

commit 4a02c2605918f78cd7a33a2f482ade34b23a0a63
Author: Adam Saghy <[email protected]>
AuthorDate: Mon Feb 23 09:53:50 2026 +0100

    FINERACT-2421: Fix flaky guarantor test
---
 .../integrationtests/BaseLoanIntegrationTest.java  |  22 ----
 .../GroupSavingsIntegrationTest.java               | 100 +++++++++--------
 .../integrationtests/client/IntegrationTest.java   |  23 ++++
 .../fineract/integrationtests/common/Utils.java    | 125 ++++++++++++++++-----
 .../savings/base/BaseSavingsIntegrationTest.java   |   1 +
 5 files changed, 173 insertions(+), 98 deletions(-)

diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/BaseLoanIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/BaseLoanIntegrationTest.java
index b5b021735b..b894134d70 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/BaseLoanIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/BaseLoanIntegrationTest.java
@@ -84,7 +84,6 @@ import org.apache.fineract.client.models.PostLoansRequest;
 import org.apache.fineract.client.models.PostLoansResponse;
 import org.apache.fineract.client.models.PostRolesRequest;
 import org.apache.fineract.client.models.PostUsersRequest;
-import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
 import org.apache.fineract.client.models.PutLoanProductsProductIdRequest;
 import org.apache.fineract.client.models.PutLoansApprovedAmountRequest;
 import org.apache.fineract.client.models.PutLoansApprovedAmountResponse;
@@ -96,13 +95,10 @@ import 
org.apache.fineract.client.models.RetrieveLoansPointInTimeRequest;
 import org.apache.fineract.client.util.CallFailedRuntimeException;
 import org.apache.fineract.client.util.Calls;
 import org.apache.fineract.client.util.FineractClient;
-import 
org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
 import 
org.apache.fineract.infrastructure.event.external.data.ExternalEventResponse;
 import org.apache.fineract.integrationtests.client.IntegrationTest;
 import org.apache.fineract.integrationtests.common.BatchHelper;
-import org.apache.fineract.integrationtests.common.BusinessDateHelper;
 import org.apache.fineract.integrationtests.common.ClientHelper;
-import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper;
 import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
 import org.apache.fineract.integrationtests.common.Utils;
 import org.apache.fineract.integrationtests.common.accounting.Account;
@@ -138,9 +134,6 @@ import retrofit2.Response;
 @ExtendWith({ LoanTestLifecycleExtension.class, ExternalEventsExtension.class 
})
 public abstract class BaseLoanIntegrationTest extends IntegrationTest {
 
-    protected static final String DATETIME_PATTERN = "dd MMMM yyyy";
-    protected static final String LOCALE = "en";
-
     static {
         Utils.initializeRESTAssured();
     }
@@ -184,9 +177,7 @@ public abstract class BaseLoanIntegrationTest extends 
IntegrationTest {
     protected final InlineLoanCOBHelper inlineLoanCOBHelper = new 
InlineLoanCOBHelper(requestSpec, responseSpec);
     protected final LoanAccountLockHelper loanAccountLockHelper = new 
LoanAccountLockHelper(requestSpec,
             createResponseSpecification(Matchers.is(202)));
-    protected BusinessDateHelper businessDateHelper = new BusinessDateHelper();
     protected DateTimeFormatter dateTimeFormatter = 
DateTimeFormatter.ofPattern(DATETIME_PATTERN);
-    protected GlobalConfigurationHelper globalConfigurationHelper = new 
GlobalConfigurationHelper();
     protected final CodeHelper codeHelper = new CodeHelper();
     protected final ChargesHelper chargesHelper = new ChargesHelper();
     protected final ExternalEventHelper externalEventHelper = new 
ExternalEventHelper();
@@ -1331,19 +1322,6 @@ public abstract class BaseLoanIntegrationTest extends 
IntegrationTest {
         }
     }
 
-    protected void runAt(String date, Runnable runnable) {
-        try {
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(true));
-            businessDateHelper.updateBusinessDate(new 
BusinessDateUpdateRequest().type(BusinessDateUpdateRequest.TypeEnum.BUSINESS_DATE)
-                    .date(date).dateFormat(DATETIME_PATTERN).locale("en"));
-            runnable.run();
-        } finally {
-            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
-                    new PutGlobalConfigurationsRequest().enabled(false));
-        }
-    }
-
     protected void runAsNonByPass(Runnable runnable) {
         RequestSpecificationImpl requestSpecImpl = (RequestSpecificationImpl) 
requestSpec;
         try {
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java
index 02e9831eeb..91a518be69 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.integrationtests;
 
+import static 
org.apache.fineract.integrationtests.common.BusinessDateHelper.runAt;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import io.restassured.builder.RequestSpecBuilder;
@@ -55,7 +56,6 @@ import 
org.apache.fineract.integrationtests.guarantor.GuarantorHelper;
 import org.apache.fineract.integrationtests.guarantor.GuarantorTestBuilder;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
@@ -903,7 +903,6 @@ public class GroupSavingsIntegrationTest {
      * </ul>
      */
     @Test
-    @Disabled("Using GROUP as Client guarantor causes issues... need to be 
fixed to support GROUP as guarantor")
     public void testOnHoldTransactionsApiForGroupSavingsAccount() {
         this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
 
@@ -1076,52 +1075,57 @@ public class GroupSavingsIntegrationTest {
      */
     @Test
     public void testGroupGuarantorWithClientIdButGroupType() {
-        this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
-
-        // Create TWO clients - one for loan, one to misuse as "group"
-        final Integer loanClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec);
-        Assertions.assertNotNull(loanClientID);
-
-        final Integer otherClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec);
-        Assertions.assertNotNull(otherClientID);
-
-        // Create savings account for the other client
-        final Integer savingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, null, null,
-                "false");
-        final Integer clientSavingsId = 
this.savingsAccountHelper.applyForSavingsApplication(otherClientID, 
savingsProductID, "INDIVIDUAL");
-        this.savingsAccountHelper.approveSavings(clientSavingsId);
-        this.savingsAccountHelper.activateSavings(clientSavingsId);
-
-        // Create loan product
-        LoanProductTestBuilder loanProductBuilder = new 
LoanProductTestBuilder().withPrincipal(PRINCIPAL).withNumberOfRepayments("4")
-                
.withRepaymentAfterEvery("1").withRepaymentTypeAsWeek().withinterestRatePerPeriod("2")
-                
.withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsDecliningBalance()
-                .withOnHoldFundDetails("0", "0", "0");
-        final Integer loanProductID = 
this.loanTransactionHelper.getLoanProductId(loanProductBuilder.build(null));
-
-        // Create loan
-        final String loanApplicationJSON = new 
LoanApplicationTestBuilder().withPrincipal(PRINCIPAL).withLoanTermFrequency("4")
-                
.withLoanTermFrequencyAsWeeks().withNumberOfRepayments("4").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsWeeks()
-                
.withInterestRatePerPeriod("2").withAmortizationTypeAsEqualInstallments().withInterestTypeAsDecliningBalance()
-                
.withInterestCalculationPeriodTypeSameAsRepaymentPeriod().withSubmittedOnDate(SavingsAccountHelper.TRANSACTION_DATE)
-                
.withExpectedDisbursementDate(SavingsAccountHelper.TRANSACTION_DATE)
-                .build(loanClientID.toString(), loanProductID.toString(), 
null);
-        final Integer loanID = 
this.loanTransactionHelper.getLoanId(loanApplicationJSON);
-
-        // Try to create guarantor with CLIENT ID but GROUP type (type 
mismatch)
-        String guarantorJSON = new GuarantorTestBuilder()
-                
.existingGroupWithGuaranteeAmount(String.valueOf(otherClientID), 
String.valueOf(clientSavingsId), GUARANTEE_AMOUNT).build();
-
-        final ResponseSpecification errorResponse = new 
ResponseSpecBuilder().build();
-        final RequestSpecification errorRequest = new 
RequestSpecBuilder().setContentType(ContentType.JSON).build();
-        errorRequest.header("Authorization", "Basic " + 
Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
-
-        ArrayList<HashMap> error = (ArrayList<HashMap>) 
this.guarantorHelper.createGuarantorWithError(loanID, guarantorJSON, 
errorRequest,
-                errorResponse);
-        // Verify we got an error response (status code may be 403 or 404 
depending on environment)
-        Assertions.assertNotNull(error, "Should return error for client ID 
used with GROUP type");
-
-        LOG.info("SUCCESS: Client ID with GROUP type correctly rejected");
+        runAt("01 January 2023", () -> {
+            this.savingsAccountHelper = new 
SavingsAccountHelper(this.requestSpec, this.responseSpec);
+
+            // Create TWO clients - one for loan, one to misuse as "group"
+            final Integer loanClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec);
+            Assertions.assertNotNull(loanClientID);
+
+            final Integer otherClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec);
+            Assertions.assertNotNull(otherClientID);
+
+            // Create savings account for the other client
+            final Integer savingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, null, null,
+                    "false");
+            final Integer clientSavingsId = 
this.savingsAccountHelper.applyForSavingsApplication(otherClientID, 
savingsProductID,
+                    "INDIVIDUAL");
+            this.savingsAccountHelper.approveSavings(clientSavingsId);
+            this.savingsAccountHelper.activateSavings(clientSavingsId);
+
+            // Create loan product
+            LoanProductTestBuilder loanProductBuilder = new 
LoanProductTestBuilder().withPrincipal(PRINCIPAL).withNumberOfRepayments("4")
+                    
.withRepaymentAfterEvery("1").withRepaymentTypeAsWeek().withinterestRatePerPeriod("2")
+                    
.withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment()
+                    
.withInterestTypeAsDecliningBalance().withOnHoldFundDetails("0", "0", "0");
+            final Integer loanProductID = 
this.loanTransactionHelper.getLoanProductId(loanProductBuilder.build(null));
+
+            // Create loan
+            final String loanApplicationJSON = new 
LoanApplicationTestBuilder().withPrincipal(PRINCIPAL).withLoanTermFrequency("4")
+                    
.withLoanTermFrequencyAsWeeks().withNumberOfRepayments("4").withRepaymentEveryAfter("1")
+                    
.withRepaymentFrequencyTypeAsWeeks().withInterestRatePerPeriod("2").withAmortizationTypeAsEqualInstallments()
+                    
.withInterestTypeAsDecliningBalance().withInterestCalculationPeriodTypeSameAsRepaymentPeriod()
+                    .withSubmittedOnDate(SavingsAccountHelper.TRANSACTION_DATE)
+                    
.withExpectedDisbursementDate(SavingsAccountHelper.TRANSACTION_DATE)
+                    .build(loanClientID.toString(), loanProductID.toString(), 
null);
+            final Integer loanID = 
this.loanTransactionHelper.getLoanId(loanApplicationJSON);
+
+            // Try to create guarantor with CLIENT ID but GROUP type (type 
mismatch)
+            String guarantorJSON = new GuarantorTestBuilder()
+                    
.existingGroupWithGuaranteeAmount(String.valueOf(otherClientID), 
String.valueOf(clientSavingsId), GUARANTEE_AMOUNT)
+                    .build();
+
+            final ResponseSpecification errorResponse = new 
ResponseSpecBuilder().build();
+            final RequestSpecification errorRequest = new 
RequestSpecBuilder().setContentType(ContentType.JSON).build();
+            errorRequest.header("Authorization", "Basic " + 
Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
+
+            ArrayList<HashMap> error = (ArrayList<HashMap>) 
this.guarantorHelper.createGuarantorWithError(loanID, guarantorJSON,
+                    errorRequest, errorResponse);
+            // Verify we got an error response (status code may be 403 or 404 
depending on environment)
+            Assertions.assertNotNull(error, "Should return error for client ID 
used with GROUP type");
+
+            LOG.info("SUCCESS: Client ID with GROUP type correctly rejected");
+        });
     }
 
     /**
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/IntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/IntegrationTest.java
index 072dab57c0..4031caeb5d 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/IntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/IntegrationTest.java
@@ -20,9 +20,14 @@ package org.apache.fineract.integrationtests.client;
 
 import java.math.BigDecimal;
 import java.util.Optional;
+import org.apache.fineract.client.models.BusinessDateUpdateRequest;
+import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
 import org.apache.fineract.client.util.Calls;
 import org.apache.fineract.client.util.FineractClient;
+import 
org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
+import org.apache.fineract.integrationtests.common.BusinessDateHelper;
 import org.apache.fineract.integrationtests.common.FineractClientHelper;
+import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper;
 import org.assertj.core.api.AbstractBigDecimalAssert;
 import org.assertj.core.api.AbstractBooleanAssert;
 import org.assertj.core.api.AbstractDoubleAssert;
@@ -52,6 +57,11 @@ import retrofit2.Response;
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 public abstract class IntegrationTest {
 
+    protected static final String DATETIME_PATTERN = "dd MMMM yyyy";
+    protected static final String LOCALE = "en";
+    protected GlobalConfigurationHelper globalConfigurationHelper = new 
GlobalConfigurationHelper();
+    protected BusinessDateHelper businessDateHelper = new BusinessDateHelper();
+
     protected FineractClient fineractClient() {
         return FineractClientHelper.getFineractClient();
     }
@@ -118,4 +128,17 @@ public abstract class IntegrationTest {
     public static <T> OptionalAssert<T> assertThat(Optional<T> actual) {
         return Assertions.assertThat(actual);
     }
+
+    protected void runAt(String date, Runnable runnable) {
+        try {
+            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
+                    new PutGlobalConfigurationsRequest().enabled(true));
+            businessDateHelper.updateBusinessDate(new 
BusinessDateUpdateRequest().type(BusinessDateUpdateRequest.TypeEnum.BUSINESS_DATE)
+                    .date(date).dateFormat(DATETIME_PATTERN).locale("en"));
+            runnable.run();
+        } finally {
+            
globalConfigurationHelper.updateGlobalConfiguration(GlobalConfigurationConstants.ENABLE_BUSINESS_DATE,
+                    new PutGlobalConfigurationsRequest().enabled(false));
+        }
+    }
 }
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java
index 7b3bbea713..383191c3d1 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java
@@ -60,7 +60,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Random;
 import java.util.Set;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
@@ -96,29 +95,99 @@ public final class Utils {
     private static final Gson gson = new Gson();
     private static final String HEALTH_URL = 
"/fineract-provider/actuator/health";
 
-    private static final Random r = new Random();
-
     private static final ConcurrentHashMap<String, Set<String>> 
uniqueRandomStringContainer = new ConcurrentHashMap<>();
     public static final String SOURCE_SET_NUMBERS_AND_LETTERS = 
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     public static final String SOURCE_SET_NUMBERS = "1234567890";
 
-    private static final List<String> firstNames = List.of("Adam", "Alex", 
"Andrew", "Anthony", "Arthur", "Benjamin", "Brian", "Brandon",
-            "Bruce", "Caleb", "Charles", "Christian", "Christopher", "Daniel", 
"David", "Dennis", "Dominic", "Edward", "Ethan", "Felix",
-            "Frank", "Gabriel", "George", "Gregory", "Harry", "Henry", 
"Isaac", "Jack", "Jacob", "James", "Jason", "John", "Jonathan",
-            "Joseph", "Joshua", "Julian", "Kevin", "Kyle", "Leo", "Liam", 
"Logan", "Lucas", "Luke", "Marcus", "Mark", "Martin", "Matthew",
-            "Michael", "Nathan", "Nicholas", "Noah", "Oliver", "Oscar", 
"Patrick", "Paul", "Peter", "Philip", "Raymond", "Richard",
-            "Robert", "Ryan", "Samuel", "Scott", "Sean", "Simon", "Stephen", 
"Steven", "Thomas", "Timothy", "Victor", "William", "Zachary",
-            "Aaron", "Adrian", "Alan", "Albert", "Allen", "Antonio", "Austin", 
"Blake", "Cameron", "Carlos", "Colin", "Dylan", "Eric",
-            "Harrison", "Ian", "Jeremy", "Jordan", "Kevin", "Louis", 
"Mitchell", "Neil", "Roger", "Trevor");
-
-    private static final List<String> lastNames = List.of("Anderson", 
"Armstrong", "Baker", "Barnes", "Bell", "Bennett", "Brooks", "Brown",
-            "Bryant", "Butler", "Campbell", "Carter", "Clark", "Collins", 
"Cook", "Cooper", "Cox", "Davis", "Diaz", "Edwards", "Evans",
-            "Fisher", "Foster", "Garcia", "Gomez", "Gonzalez", "Gray", 
"Green", "Hall", "Harris", "Hernandez", "Hill", "Howard", "Hughes",
-            "Jackson", "James", "Jenkins", "Johnson", "Jones", "Kelly", "Kim", 
"King", "Lee", "Lewis", "Lopez", "Martin", "Martinez",
-            "Miller", "Mitchell", "Moore", "Morgan", "Morris", "Murphy", 
"Nelson", "Nguyen", "Parker", "Perez", "Peterson", "Phillips",
-            "Powell", "Price", "Ramirez", "Reed", "Richardson", "Rivera", 
"Roberts", "Robinson", "Rodriguez", "Rogers", "Ross", "Russell",
-            "Sanchez", "Scott", "Smith", "Stewart", "Taylor", "Thomas", 
"Thompson", "Torres", "Turner", "Walker", "Ward", "Watson", "White",
-            "Williams", "Wilson", "Wood", "Wright", "Young", "Zhang");
+    private static final List<String> firstNames = List.of("Aarav", "Abel", 
"Abner", "Abram", "Ace", "Aden", "Adler", "Adonis", "Ainsley",
+            "Alaric", "Alastair", "Alberto", "Alden", "Alecander", 
"Alessandro", "Alfonso", "Alfredo", "Alistair", "Alonzo", "Amari",
+            "Ambrose", "Amir", "Ansel", "Archer", "Archie", "Arjun", "Arlo", 
"Armando", "Arnav", "Aron", "Arturo", "Aryan", "Asa",
+            "Atticus", "Aubrey", "August", "Augustus", "Aurelio", "Avi", 
"Axel", "Bailey", "Basil", "Beau", "Beckett", "Benicio", "Benson",
+            "Blaine", "Bo", "Bode", "Boris", "Bowen", "Brady", "Branson", 
"Brayan", "Briggs", "Brock", "Brody", "Bronson", "Bryce", "Byron",
+            "Cade", "Caiden", "Cairo", "Callan", "Callum", "Cannon", 
"Carlton", "Carmelo", "Casey", "Cassius", "Cedrick", "Chance",
+            "Channing", "Chase", "Cillian", "Cohen", "Conrad", "Corbin", 
"Cory", "Cruz", "Dakota", "Dalton", "Dane", "Dario", "Darrell",
+            "Darwin", "Dash", "Davis", "Deacon", "Deandre", "Declan", 
"Demetrius", "Denver", "Devin", "Dexter", "Dominik", "Dorian",
+            "Drake", "Duncan", "Edison", "Elian", "Elias", "Eliezer", 
"Elisha", "Elmer", "Elon", "Elvis", "Emilio", "Emory", "Ephraim",
+            "Erik", "Ernest", "Esteban", "Eugene", "Ewan", "Ezra", "Fabian", 
"Faisal", "Finn", "Fletcher", "Ford", "Franco", "Gael", "Gage",
+            "Gannon", "Gary", "Gideon", "Gianni", "Giovanni", "Glen", "Grady", 
"Grayson", "Guillermo", "Gunnar", "Gustav", "Hank", "Harlan",
+            "Hendrix", "Hugo", "Hunter", "Ibrahim", "Idris", "Ignacio", 
"Imran", "Indiana", "Ismael", "Israel", "Jace", "Jaime", "Jalen",
+            "Jamal", "Jax", "Jaxon", "Jay", "Jayce", "Jayden", "Jensen", 
"Jermaine", "Jett", "Jimmy", "Joaquin", "Johan", "Johnny", "Jonas",
+            "Jorge", "Josiah", "Juan", "Justice", "Kade", "Kai", "Kaiser", 
"Kareem", "Karter", "Kash", "Kason", "Keegan", "Keon", "Khalil",
+            "Kieran", "Knox", "Kobe", "Kody", "Kole", "Korbin", "Kristian", 
"Kurt", "Kyler", "Lachlan", "Lamar", "Landon", "Langston",
+            "Lars", "Lawrence", "Layton", "Leandro", "Lee", "Lennon", "Leroy", 
"Liaman", "Lorenzo", "Luciano", "Luis", "Maddox", "Malachi",
+            "Marek", "Marioh", "Matias", "Matteo", "Mauricio", "Maverick", 
"Memphis", "Milan", "Miller", "Mohamed", "Montgomery", "Moses",
+            "Murphy", "Mustafa", "Nadir", "Nathanael", "Nehemiah", "Nico", 
"Nikolai", "Noel", "Nova", "Octavio", "Odell", "Odin", "Onyx",
+            "Orion", "Otis", "Paolo", "Percy", "Phoenix", "Pierce", "Porter", 
"Prince", "Quincy", "Raiden", "Ramon", "Raphael", "Reid",
+            "Remington", "Rhett", "Rocco", "Rodrigo", "Royce", "Ruben", 
"Rudy", "Ryker", "Salvatore", "Santino", "Saul", "Sebastian",
+            "Sergio", "Shane", "Shiloh", "Silas", "Sincere", "Skyler", 
"Soren", "Sterling", "Stone", "Sullivan", "Sutton", "Talon", "Tate",
+            "Tatum", "Thiago", "Tobias", "Tomas", "Trace", "Tucker", "Turner", 
"Ulises", "Uriah", "Valentin", "Van", "Vance", "Vicente",
+            "Viktor", "Warren", "Watson", "Weston", "Willis", "Wilson", 
"Winston", "Wyatt", "Xander", "Yael", "Yahir", "Yusuf", "Zaire",
+            "Zander", "Zion", "Zayn", "Abdiel", "Aditya", "Akeem", "Alvaro", 
"Amadeo", "Anders", "Anwar", "Armani", "Ayaan", "Aziel",
+            "Azriel", "Baker", "Benedict", "Bishop", "Blaise", "Bridger", 
"Cadeo", "Camilo", "Casen", "Caspian", "Cayson", "Cesar",
+            "Chandler", "Cortez", "Damari", "Dangelo", "Darioh", "Davion", 
"Dilan", "Dion", "Eliam", "Elio", "Emiliano", "Enrique",
+            "Ezekiel", "Farhan", "Fisher", "Gino", "Griffin", "Hamza", 
"Harley", "Henrik", "Iker", "Ira", "Jabari", "Jair", "Javon",
+            "Jiraiya", "Kaison", "Kamdyn", "Kasen", "Kendrick", "Kian", "Kye", 
"Lennox", "Leonidas", "Lucian", "Makai", "Marcelo",
+            "Marcellus", "Marvin", "Massimo", "Misael", "Moises", "Nasir", 
"Naveen", "Niklaus", "Nixon", "Omari", "Osiris", "Ozzy",
+            "Palmer", "Paxton", "Quade", "Rayan", "Reuben", "Ronan", "Roscoe", 
"Samir", "Santana", "Seven", "Shepherd", "Simeon", "Solomon",
+            "Thaddeus", "Titan", "Trey", "Tripp", "Ty", "Ulysses", "Valor", 
"Vihaan", "Wilder", "Zev", "Aarush", "Abhiram", "Adem",
+            "Adriel", "Aeson", "Ahmad", "Aldo", "Alvaro", "Anakin", "Aramis", 
"Ares", "Axton", "Baylor", "Benton", "Brax", "Briar", "Bruno",
+            "Calloway", "Cassian", "Cayson", "Crosby", "Cullen", "Dariel", 
"Davian", "Dax", "Daxter", "Dior", "Eithan", "Eren", "Eros",
+            "Evander", "Faris", "Finley", "Gatlin", "Grey", "Hollis", "Izan", 
"Jovanni", "Kael", "Kairo", "Kellan", "Khaled", "Koa", "Krew",
+            "Kyrie", "Leif", "Lochlan", "Lucius", "Mael", "Malakai", 
"Marquez", "Matheo", "Neo", "Nikolas", "Ocean", "Osman", "Raul",
+            "Reign", "Riven", "Rory", "Rowen", "Sage", "Salem", "Shawnte", 
"Stellan", "Tadeo", "Teo", "Thierry", "Torin", "Zaid");
+
+    private static final List<String> lastNames = List.of("Abbott", "Acevedo", 
"Acosta", "Adams", "Adkins", "Aguilar", "Aguirre", "Albert",
+            "Alexander", "Alford", "Allen", "Allison", "Alston", "Alvarado", 
"Alvarez", "Ambrose", "Ames", "Anthony", "Archer", "Arias",
+            "Arnold", "Ashley", "Atkins", "Atkinson", "Austin", "Avery", 
"Avila", "Ayala", "Baird", "Baldwin", "Ball", "Ballard", "Banks",
+            "Barber", "Barker", "Barlow", "Barrett", "Barron", "Barry", 
"Bartlett", "Barton", "Bass", "Bates", "Battle", "Bauer", "Baxter",
+            "Beach", "Beard", "Beasley", "Beck", "Becker", "Bellamy", 
"Bender", "Benjamin", "Benson", "Bentley", "Berg", "Berger",
+            "Bernard", "Berry", "Best", "Bird", "Bishop", "Black", 
"Blackburn", "Blackwell", "Blair", "Blake", "Blanchard", "Blankenship",
+            "Blevins", "Bolton", "Bond", "Bonner", "Booker", "Boone", "Bowen", 
"Bowers", "Bowman", "Boyd", "Boyle", "Bradford", "Bradley",
+            "Branch", "Bray", "Brennan", "Brewer", "Bridges", "Briggs", 
"Bright", "Britt", "Brock", "Brockman", "Brooksbank", "Browning",
+            "Bruce", "Bryan", "Buck", "Buckley", "Bullock", "Burch", 
"Burgess", "Burke", "Burnett", "Burns", "Burris", "Bush", "Byers",
+            "Byrd", "Cabrera", "Cain", "Calderon", "Callahan", "Calhoun", 
"Camacho", "Cameron", "Campos", "Cannon", "Cantrell", "Cardenas",
+            "Carey", "Carlson", "Carney", "Carpenter", "Carr", "Carrillo", 
"Carroll", "Carson", "Carteret", "Case", "Casey", "Castaneda",
+            "Castillo", "Castro", "Cervantes", "Chambers", "Chan", "Chandler", 
"Chang", "Chapman", "Charles", "Chase", "Chavez", "Chen",
+            "Cherry", "Christian", "Church", "Cisneros", "Clarke", "Clay", 
"Clayton", "Clements", "Clemons", "Cleveland", "Cline", "Cobb",
+            "Cochran", "Coffey", "Cohen", "Cole", "Combs", "Compton", 
"Conley", "Conner", "Conrad", "Contreras", "Conway", "Cooke",
+            "Copeland", "Cortez", "Cotton", "Cowan", "Craig", "Crane", 
"Crawford", "Crosby", "Cross", "Cruz", "Cummings", "Cunningham",
+            "Curry", "Curtis", "Dalton", "Daniel", "Daniels", "Daugherty", 
"Davenport", "David", "Davidson", "Day", "Dean", "Decker",
+            "Delacruz", "Dennis", "Deleon", "Delgado", "Dempsey", "Depp", 
"Devin", "Dickerson", "Dillard", "Dillon", "Dixon", "Dodson",
+            "Dominguez", "Donaldson", "Donovan", "Dorsey", "Dotson", 
"Douglas", "Downs", "Doyle", "Drake", "Dudley", "Duffy", "Duke",
+            "Dunlap", "Dunn", "Durham", "Dyer", "Eaton", "Elliott", "Ellis", 
"Ellison", "Emerson", "England", "English", "Erickson",
+            "Espinoza", "Estes", "Estrada", "Ewing", "Farley", "Farmer", 
"Farrell", "Faulkner", "Ferguson", "Fernandez", "Ferrell",
+            "Fields", "Finch", "Finley", "Fitzgerald", "Fleming", "Flores", 
"Flynn", "Foley", "Forbes", "Ford", "Foreman", "Fowler", "Fox",
+            "Francis", "Franco", "Frank", "Franklin", "Franks", "Frazier", 
"Frederick", "French", "Frost", "Fry", "Fuentes", "Fuller",
+            "Gaines", "Gallagher", "Galloway", "Gamble", "Garner", "Garrett", 
"Garrison", "Garza", "Gates", "Gay", "George", "Gibbs",
+            "Gibson", "Gilbert", "Giles", "Gill", "Gillespie", "Gilliam", 
"Glass", "Glenn", "Glover", "Golden", "Good", "Goodman",
+            "Goodwin", "Gordon", "Gould", "Grady", "Graham", "Grant", 
"Graves", "Greene", "Griffin", "Griffith", "Gross", "Guerra",
+            "Guerrero", "Guthrie", "Gutierrez", "Hahn", "Haley", "Hampton", 
"Hancock", "Haney", "Hansen", "Hardin", "Harding", "Hardy",
+            "Harmon", "Harper", "Harrington", "Hart", "Hartman", "Harvey", 
"Hatfield", "Hawkins", "Hayden", "Hayes", "Haynes", "Heath",
+            "Henderson", "Hendricks", "Henry", "Henson", "Herman", "Herrera", 
"Hess", "Hickman", "Hicks", "Higgins", "Hines", "Hinton",
+            "Hobbs", "Hodge", "Hodges", "Hoffman", "Holder", "Holland", 
"Holman", "Holmes", "Holt", "Hood", "Hooper", "Hoover", "Hopkins",
+            "Horne", "Horton", "House", "Houston", "Howell", "Hubbard", 
"Hudson", "Huff", "Huffman", "Hunt", "Hunter", "Hurley", "Hurst",
+            "Ingram", "Irwin", "Jacobs", "Jacoby", "Jarvis", "Jefferson", 
"Jennings", "Jimenez", "Johns", "Johnston", "Joyce", "Juarez",
+            "Justice", "Kane", "Kaufman", "Keith", "Keller", "Kelley", "Kemp", 
"Kennedy", "Kent", "Kerr", "Key", "Kidd", "Kinney", "Kirby",
+            "Kirk", "Klein", "Knapp", "Knight", "Knowles", "Lamb", "Lambert", 
"Lancaster", "Landry", "Lane", "Lang", "Langley", "Larsen",
+            "Lawrence", "Lawson", "Leach", "Leblanc", "Levine", "Levy", 
"Lindsey", "Little", "Livingston", "Lloyd", "Logan", "Long", "Love",
+            "Lowe", "Lucas", "Luna", "Lynch", "Macias", "Mack", "Maddox", 
"Maldonado", "Malone", "Mann", "Manning", "Marks", "Marquez",
+            "Marshall", "Mason", "Massey", "Mathews", "Mathis", "Mccall", 
"Mccarthy", "Mccormick", "Mcdaniel", "Mcdonald", "Meyer", "Miles",
+            "Montoya", "Montgomery", "Montes", "Moon", "Morales", "Moreno", 
"Moss", "Mueller", "Mullen", "Mullins", "Munoz", "Myers",
+            "Nash", "Navarro", "Neal", "Newton", "Nichols", "Noble", "Nolan", 
"Norris", "Norton", "Novak", "Ochoa", "Oconnor", "Odom",
+            "Oliver", "Olson", "Oneal", "Ortega", "Ortiz", "Osborne", "Owen", 
"Owens", "Pace", "Pacheco", "Padilla", "Page", "Palmer",
+            "Park", "Parsons", "Patel", "Patrick", "Paul", "Payne", "Pearson", 
"Peck", "Pena", "Pennington", "Perkins", "Phelps", "Pittman",
+            "Poole", "Pope", "Porter", "Potter", "Pratt", "Preston", "Pruitt", 
"Quinn", "Ramos", "Randall", "Rasmussen", "Ray", "Raymond",
+            "Reeves", "Reid", "Reyes", "Reynolds", "Rios", "Roach", "Robbins", 
"Rocha", "Roman", "Romero", "Rosa", "Rowe", "Roy", "Ruiz",
+            "Rush", "Rutledge", "Salazar", "Salinas", "Sanders", "Santana", 
"Santiago", "Santos", "Savage", "Schmidt", "Schneider",
+            "Schroeder", "Sharp", "Shaw", "Shelton", "Shepard", "Shepherd", 
"Sheppard", "Sherman", "Shields", "Short", "Silva", "Simmons",
+            "Simon", "Simpson", "Sims", "Skinner", "Slater", "Sloan", "Small", 
"Snow", "Snyder", "Solomon", "Sosa", "Sparks", "Spears",
+            "Spence", "Stafford", "Stanley", "Stark", "Steele", "Stephens", 
"Stephenson", "Stone", "Strickland", "Strong", "Suarez",
+            "Sullivan", "Summers", "Sutton", "Swanson", "Sweeney", "Sweet", 
"Tanner", "Tate", "Terrell", "Terry", "Todd", "Townsend",
+            "Travis", "Trujillo", "Underwood", "Valdez", "Valencia", "Vargas", 
"Vasquez", "Vaughn", "Vega", "Velasquez", "Villarreal",
+            "Vincent", "Vinson", "Wade", "Wagner", "Wall", "Walsh", "Walter", 
"Walters", "Walton", "Warner", "Warren", "Waters", "Weaver",
+            "Webb", "Weber", "Weeks", "Weiss", "Wells", "Wheeler", "Whitaker", 
"Whitfield", "Wilcox", "Wilkerson", "Wilkins", "Wilkinson",
+            "Willis", "Winters", "Wise", "Wolfe", "Wong", "Woodard", "Woods", 
"Wooten", "Workman", "Wyatt", "Yates", "York", "Zamora",
+            "Zimmerman");
 
     private Utils() {}
 
@@ -522,27 +591,27 @@ public final class Utils {
     }
 
     private static int getYear() {
-        return 1000 + r.nextInt(1001);
+        return 1000 + random.nextInt(1001);
     }
 
     private static int getMonth() {
-        return 10 + r.nextInt(3);
+        return 10 + random.nextInt(3);
     }
 
     private static int getDay() {
-        return 10 + r.nextInt(16);
+        return 10 + random.nextInt(16);
     }
 
     private static int getHour() {
-        return 10 + r.nextInt(14);
+        return 10 + random.nextInt(14);
     }
 
     private static int getMinute() {
-        return 10 + r.nextInt(50);
+        return 10 + random.nextInt(50);
     }
 
     private static int getSecond() {
-        return 10 + r.nextInt(50);
+        return 10 + random.nextInt(50);
     }
 
     public static String arrayDateToString(List intArray) {
@@ -595,10 +664,10 @@ public final class Utils {
     }
 
     public static String randomFirstNameGenerator() {
-        return firstNames.get(r.nextInt(firstNames.size()));
+        return firstNames.get(random.nextInt(firstNames.size()));
     }
 
     public static String randomLastNameGenerator() {
-        return lastNames.get(r.nextInt(lastNames.size()));
+        return lastNames.get(random.nextInt(lastNames.size()));
     }
 }
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/savings/base/BaseSavingsIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/savings/base/BaseSavingsIntegrationTest.java
index c772509caf..b9e0bf0327 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/savings/base/BaseSavingsIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/savings/base/BaseSavingsIntegrationTest.java
@@ -92,6 +92,7 @@ public class BaseSavingsIntegrationTest extends 
IntegrationTest {
         }
     }
 
+    @Override
     protected void runAt(String date, Runnable runnable) {
         runAt(date, (d) -> runnable.run());
     }

Reply via email to