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());
}