Skip to content

Commit 567b121

Browse files
adamsaghygalovics
authored andcommitted
FINERACT-2389: Improve E2E test data initialization resilience
1 parent 6532b8d commit 567b121

File tree

2 files changed

+51
-38
lines changed

2 files changed

+51
-38
lines changed

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/factory/LoanProductsRequestFactory.java

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
import java.math.BigDecimal;
2424
import java.util.ArrayList;
25+
import java.util.HashSet;
2526
import java.util.List;
27+
import java.util.Set;
2628
import lombok.RequiredArgsConstructor;
2729
import org.apache.fineract.client.models.AllowAttributeOverrides;
2830
import org.apache.fineract.client.models.GetLoanPaymentChannelToFundSourceMappings;
@@ -67,6 +69,8 @@ public class LoanProductsRequestFactory {
6769
private final AccountTypeResolver accountTypeResolver;
6870
private final CodeValueResolver codeValueResolver;
6971

72+
private final Set<String> productShortNameMap = new HashSet<>();
73+
7074
@Autowired
7175
private CodeHelper codeHelper;
7276

@@ -78,9 +82,6 @@ public class LoanProductsRequestFactory {
7882
public static final String NAME_PREFIX_INTEREST_DECLINING = "LP1InterestDeclining-";
7983
public static final String NAME_PREFIX_INTEREST_DECLINING_RECALCULATION = "LP1InterestDecliningRecalculation-";
8084
public static final String NAME_PREFIX_INTEREST_RECALCULATION = "LP2InterestRecalculation-";
81-
public static final String SHORT_NAME_PREFIX = "p";
82-
public static final String SHORT_NAME_PREFIX_INTEREST = "i";
83-
public static final String SHORT_NAME_PREFIX_EMI = "e";
8485
public static final String DATE_FORMAT = "dd MMMM yyyy";
8586
public static final String LOCALE_EN = "en";
8687
public static final String DESCRIPTION = "30 days repayment";
@@ -126,8 +127,8 @@ public class LoanProductsRequestFactory {
126127
public static final String CHARGE_OFF_REASONS = "ChargeOffReasons";
127128

128129
public PostLoanProductsRequest defaultLoanProductsRequestLP1() {
129-
String name = Utils.randomNameGenerator(NAME_PREFIX, 4);
130-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX, 3);
130+
String name = Utils.randomNameGenerator(NAME_PREFIX, 10);
131+
String shortName = generateShortNameSafely();
131132

132133
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
133134
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -236,8 +237,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP1() {
236237
}
237238

238239
public PostLoanProductsRequest defaultLoanProductsRequestLP1InterestFlat() {
239-
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_FLAT, 4);
240-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_INTEREST, 3);
240+
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_FLAT, 10);
241+
String shortName = generateShortNameSafely();
241242

242243
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
243244
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -344,8 +345,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP1InterestFlat() {
344345
}
345346

346347
public PostLoanProductsRequest defaultLoanProductsRequestLP1InterestDeclining() {
347-
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_DECLINING, 4);
348-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_INTEREST, 3);
348+
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_DECLINING, 10);
349+
String shortName = generateShortNameSafely();
349350

350351
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
351352
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -452,8 +453,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP1InterestDeclining()
452453
}
453454

454455
public PostLoanProductsRequest defaultLoanProductsRequestLP11MonthInterestDecliningBalanceDailyRecalculationCompoundingMonthly() {
455-
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_DECLINING_RECALCULATION, 4);
456-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_INTEREST, 3);
456+
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_DECLINING_RECALCULATION, 10);
457+
String shortName = generateShortNameSafely();
457458

458459
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
459460
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -565,8 +566,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP11MonthInterestDeclin
565566
}
566567

567568
public PostLoanProductsRequest defaultLoanProductsRequestLP1InterestDecliningBalanceDailyRecalculationCompoundingNone() {
568-
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_DECLINING_RECALCULATION, 4);
569-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_INTEREST, 3);
569+
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_DECLINING_RECALCULATION, 10);
570+
String shortName = generateShortNameSafely();
570571

571572
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
572573
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -675,8 +676,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP1InterestDecliningBal
675676
}
676677

677678
public PostLoanProductsRequest defaultLoanProductsRequestLP2InterestDailyRecalculation() {
678-
final String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_RECALCULATION, 4);
679-
final String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_INTEREST, 3);
679+
final String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_RECALCULATION, 10);
680+
final String shortName = generateShortNameSafely();
680681

681682
List<LoanProductChargeToGLAccountMapper> penaltyToIncomeAccountMappings = new ArrayList<>();
682683
List<LoanProductChargeToGLAccountMapper> feeToIncomeAccountMappings = new ArrayList<>();
@@ -790,8 +791,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2InterestDailyRecalcu
790791
}
791792

792793
public PostLoanProductsRequest defaultLoanProductsRequestLP2() {
793-
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 4);
794-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX, 3);
794+
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 10);
795+
String shortName = generateShortNameSafely();
795796

796797
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
797798
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -903,8 +904,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2() {
903904
}
904905

905906
public PostLoanProductsRequest defaultLoanProductsRequestLP2InterestFlat() {
906-
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_FLAT_LP2, 4);
907-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_INTEREST, 3);
907+
String name = Utils.randomNameGenerator(NAME_PREFIX_INTEREST_FLAT_LP2, 10);
908+
String shortName = generateShortNameSafely();
908909

909910
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
910911
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -1014,8 +1015,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2InterestFlat() {
10141015
}
10151016

10161017
public PostLoanProductsRequest defaultLoanProductsRequestLP2Emi() {
1017-
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2_EMI, 4);
1018-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3);
1018+
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2_EMI, 10);
1019+
String shortName = generateShortNameSafely();
10191020

10201021
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
10211022
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -1124,8 +1125,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2Emi() {
11241125
}
11251126

11261127
public PostLoanProductsRequest defaultLoanProductsRequestLP2EmiWithChargeOff() {
1127-
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2_EMI, 4);
1128-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3);
1128+
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2_EMI, 10);
1129+
String shortName = generateShortNameSafely();
11291130

11301131
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
11311132
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -1254,8 +1255,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2EmiWithChargeOff() {
12541255
}
12551256

12561257
public PostLoanProductsRequest defaultLoanProductsRequestLP2ChargeOffReasonToExpenseAccountMappings() {
1257-
final String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 4);
1258-
final String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX, 3);
1258+
final String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 10);
1259+
final String shortName = generateShortNameSafely();
12591260

12601261
final List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
12611262
final List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -1376,8 +1377,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2ChargeOffReasonToExp
13761377
}
13771378

13781379
public PostLoanProductsRequest defaultLoanProductsRequestLP2EmiCashAccounting() {
1379-
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2_EMI, 4);
1380-
String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3);
1380+
String name = Utils.randomNameGenerator(NAME_PREFIX_LP2_EMI, 10);
1381+
String shortName = generateShortNameSafely();
13811382

13821383
List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
13831384
List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
@@ -1503,8 +1504,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2EmiCashAccounting()
15031504
}
15041505

15051506
public PostLoanProductsRequest defaultLoanProductsRequestLP2CapitalizedIncome() {
1506-
final String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 4);
1507-
final String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX, 3);
1507+
final String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 10);
1508+
final String shortName = generateShortNameSafely();
15081509
final List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
15091510
final List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
15101511
final List<Integer> interestRateVariationsForBorrowerCycle = new ArrayList<>();
@@ -1641,8 +1642,8 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2ChargeOffReasonToExp
16411642
}
16421643

16431644
public PostLoanProductsRequest defaultLoanProductsRequestLP2BuyDownFees() {
1644-
final String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 4);
1645-
final String shortName = Utils.randomNameGenerator(SHORT_NAME_PREFIX, 3);
1645+
final String name = Utils.randomNameGenerator(NAME_PREFIX_LP2, 10);
1646+
final String shortName = generateShortNameSafely();
16461647
final List<Integer> principalVariationsForBorrowerCycle = new ArrayList<>();
16471648
final List<Integer> numberOfRepaymentVariationsForBorrowerCycle = new ArrayList<>();
16481649
final List<Integer> interestRateVariationsForBorrowerCycle = new ArrayList<>();
@@ -1777,4 +1778,18 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2ChargeOffReasonToExp
17771778
return defaultLoanProductsRequestLP2BuyDownFees()//
17781779
.chargeOffReasonToExpenseAccountMappings(chargeOffReasonToExpenseAccountMappings);//
17791780
}
1781+
1782+
public String generateShortNameSafely() {
1783+
String generatedShortName;
1784+
int counter = 0;
1785+
do {
1786+
counter++;
1787+
generatedShortName = Utils.randomNameGenerator("", 4);
1788+
if (counter > 999) {
1789+
throw new RuntimeException("Unable to generate unique short name");
1790+
}
1791+
} while (productShortNameMap.contains(generatedShortName));
1792+
productShortNameMap.add(generatedShortName);
1793+
return generatedShortName;
1794+
}
17801795
}

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/LoanProductGlobalInitializerStep.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import static org.apache.fineract.test.factory.LoanProductsRequestFactory.INTEREST_RATE_FREQUENCY_TYPE_YEAR;
2727
import static org.apache.fineract.test.factory.LoanProductsRequestFactory.LOAN_ACCOUNTING_RULE_NONE;
2828
import static org.apache.fineract.test.factory.LoanProductsRequestFactory.REPAYMENT_FREQUENCY_TYPE_MONTHS;
29-
import static org.apache.fineract.test.factory.LoanProductsRequestFactory.SHORT_NAME_PREFIX_EMI;
3029

3130
import java.math.BigDecimal;
3231
import java.util.ArrayList;
@@ -62,7 +61,6 @@
6261
import org.apache.fineract.test.data.loanproduct.DefaultLoanProduct;
6362
import org.apache.fineract.test.factory.LoanProductsRequestFactory;
6463
import org.apache.fineract.test.helper.CodeHelper;
65-
import org.apache.fineract.test.helper.Utils;
6664
import org.apache.fineract.test.support.TestContext;
6765
import org.apache.fineract.test.support.TestContextKey;
6866
import org.springframework.stereotype.Component;
@@ -2290,7 +2288,7 @@ public void initialize() throws Exception {
22902288
final String name91 = DefaultLoanProduct.LP2_ADV_PYMNT_INT_DAILY_EMI_ACTUAL_ACTUAL_INT_REFUND_FULL_ZERO_INT_CHARGE_OFF.getName();
22912289
final PostLoanProductsRequest loanProductsRequestLP2AdvPaymentIntEmiActualActualIntRefundFullZeroIntChargeOff = loanProductsRequestLP2AdvancedpaymentInterestEmiActualActualInterestRefundFull
22922290
.name(name91)//
2293-
.shortName(Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3))//
2291+
.shortName(loanProductsRequestFactory.generateShortNameSafely())//
22942292
.chargeOffBehaviour("ZERO_INTEREST");//
22952293
final Response<PostLoanProductsResponse> responseLoanProductsRequestLP2AdvPaymentIntEmiActualActualIntRefundFullZeroIntChargeOff = loanProductsApi
22962294
.createLoanProduct(loanProductsRequestLP2AdvPaymentIntEmiActualActualIntRefundFullZeroIntChargeOff).execute();
@@ -2305,7 +2303,7 @@ public void initialize() throws Exception {
23052303
.getName();
23062304
final PostLoanProductsRequest loanProductsRequestLP2AdvPaymentIntEmiActualActualIntRefundFullAccelerateMaturityChargeOff = loanProductsRequestLP2AdvancedpaymentInterestEmiActualActualInterestRefundFull
23072305
.name(name92)//
2308-
.shortName(Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3))//
2306+
.shortName(loanProductsRequestFactory.generateShortNameSafely())//
23092307
.chargeOffBehaviour("ACCELERATE_MATURITY");//
23102308
final Response<PostLoanProductsResponse> responseLoanProductsRequestLP2AdvPaymentIntEmiActualActualIntRefundFullAccelerateMaturityChargeOff = loanProductsApi
23112309
.createLoanProduct(loanProductsRequestLP2AdvPaymentIntEmiActualActualIntRefundFullAccelerateMaturityChargeOff).execute();
@@ -2340,7 +2338,7 @@ public void initialize() throws Exception {
23402338
.getName();
23412339
final PostLoanProductsRequest loanProductsRequestLP2AdvPaymentIntEmiActualActualNoInterestRecalcIntRefundFullZeroIntChargeOff = loanProductsRequestLP2AdvancedPaymentInterestEmiActualActualNoInterestRecalcRefundFull
23422340
.name(name94)//
2343-
.shortName(Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3))//
2341+
.shortName(loanProductsRequestFactory.generateShortNameSafely())//
23442342
.chargeOffBehaviour("ZERO_INTEREST");//
23452343
final Response<PostLoanProductsResponse> responseLoanProductsRequestLP2AdvPaymentIntEmiActualActualNoInterestRecalcIntRefundFullZeroIntChargeOff = loanProductsApi
23462344
.createLoanProduct(loanProductsRequestLP2AdvPaymentIntEmiActualActualNoInterestRecalcIntRefundFullZeroIntChargeOff)
@@ -2356,7 +2354,7 @@ public void initialize() throws Exception {
23562354
.getName();
23572355
final PostLoanProductsRequest loanProductsRequestLP2AdvPaymentIntEmiActualActualNoInterestRecalcIntRefundFullAccelerateMaturityChargeOff = loanProductsRequestLP2AdvancedPaymentInterestEmiActualActualNoInterestRecalcRefundFull
23582356
.name(name95)//
2359-
.shortName(Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3))//
2357+
.shortName(loanProductsRequestFactory.generateShortNameSafely())//
23602358
.chargeOffBehaviour("ACCELERATE_MATURITY");//
23612359
final Response<PostLoanProductsResponse> responseLoanProductsRequestLP2AdvPaymentIntEmiActualActualNoInterestRecalcIntRefundFullAccelerateMaturityChargeOff = loanProductsApi
23622360
.createLoanProduct(
@@ -3155,8 +3153,8 @@ public void initialize() throws Exception {
31553153
.add(new LoanProductChargeData().id(ChargeProductType.LOAN_INSTALLMENT_FEE_PERCENTAGE_INTEREST.value));
31563154
final PostLoanProductsRequest loanProductsRequestLP2AdvPaymentInstallmentFeeFlatPlusInterestChargesMultiDisburse = loanProductsRequestLP2AdvPaymentInstallmentFeePercentInterestCharges//
31573155
.name(name121)//
3156+
.shortName(loanProductsRequestFactory.generateShortNameSafely())//
31583157
.charges(chargesInstallmentFeeFlatPlusInterest)//
3159-
.shortName(Utils.randomNameGenerator(SHORT_NAME_PREFIX_EMI, 3))//
31603158
.disallowExpectedDisbursements(true)//
31613159
.maxTrancheCount(10)//
31623160
.outstandingLoanBalance(10000.0);//

0 commit comments

Comments
 (0)