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 b5b021735..b894134d7 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 02e9831ee..91a518be6 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 { * */ @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); + 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); + // 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); + 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 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 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); + // 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(); + // 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()); + final ResponseSpecification errorResponse = new ResponseSpecBuilder().build(); + final RequestSpecification errorRequest = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); + errorRequest.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); - ArrayList error = (ArrayList) 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"); + ArrayList error = (ArrayList) 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"); + 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 072dab57c..4031caeb5 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 OptionalAssert assertThat(Optional 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 7b3bbea71..383191c3d 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> 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 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 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 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 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 c772509ca..b9e0bf032 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()); }