Skip to content

Commit c689d98

Browse files
committed
FINERACT-2181: Improved BigDecimal handling for E2E tests
1 parent 33e9f7f commit c689d98

File tree

9 files changed

+47
-53
lines changed

9 files changed

+47
-53
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2() {
811811
.description(DESCRIPTION_LP2)//
812812
.enableDownPayment(true)//
813813
.enableAutoRepaymentForDownPayment(true)//
814-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
814+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
815815
.fundId(FUND_ID)//
816816
.startDate(null)//
817817
.closeDate(null)//
@@ -924,7 +924,7 @@ public PostLoanProductsRequest defaultLoanProductsRequestLP2InterestFlat() {
924924
.description(DESCRIPTION_INTEREST_FLAT_LP2)//
925925
.enableDownPayment(true)//
926926
.enableAutoRepaymentForDownPayment(true)//
927-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
927+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
928928
.fundId(FUND_ID)//
929929
.startDate(null)//
930930
.closeDate(null)//

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class LoanRequestFactory {
6868
public static final Integer DEFAULT_REPAYMENT_FREQUENCY_TYPE = RepaymentFrequencyType.DAYS.value;
6969
public static final Integer DEFAULT_REAGING_FREQUENCY_NUMBER = 1;
7070
public static final String DEFAULT_REAGING_FREQUENCY_TYPE = "MONTHS";
71-
public static final BigDecimal DEFAULT_INTEREST_RATE_PER_PERIOD = new BigDecimal(0);
71+
public static final BigDecimal DEFAULT_INTEREST_RATE_PER_PERIOD = BigDecimal.valueOf(0);
7272
public static final Integer DEFAULT_INTEREST_TYPE = InterestType.FLAT.value;
7373
public static final Integer DEFAULT_INTEREST_CALCULATION_PERIOD_TYPE_SAME_AS_REPAYMENT_PERIOD = InterestCalculationPeriodTime.SAME_AS_REPAYMENT_PERIOD.value;
7474
public static final Integer DEFAULT_AMORTIZATION_TYPE = 1;
@@ -105,7 +105,7 @@ public PostLoansRequest defaultLoansRequest(Long clientId) {
105105
.transactionProcessingStrategyCode(DEFAULT_TRANSACTION_PROCESSING_STRATEGY_CODE)//
106106
.dateFormat(DATE_FORMAT)//
107107
.graceOnArrearsAgeing(3)//
108-
.maxOutstandingLoanBalance(new BigDecimal(10000));
108+
.maxOutstandingLoanBalance(BigDecimal.valueOf(10000));
109109
}
110110

111111
public PutLoansLoanIdRequest modifySubmittedOnDateOnLoan(Long clientId, String newSubmittedOnDate) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public final class SavingsAccountRequestFactory {
3232
public static final String DEFAULT_SUBMITTED_ON_DATE = "";
3333
public static final String DEFAULT_APPROVED_ON_DATE = "";
3434
public static final String DEFAULT_ACTIVATED_ON_DATE = "";
35-
public static final BigDecimal DEFAULT_REPAYMENT_TRANSACTION_AMOUNT = new BigDecimal(1);
35+
public static final BigDecimal DEFAULT_REPAYMENT_TRANSACTION_AMOUNT = BigDecimal.valueOf(1);
3636
public static final Integer DEFAULT_PAYMENT_TYPE_ID = 2;
3737
public static final Integer EUR_SAVING_PRODUCT_ID = 1;
3838
public static final Integer USD_SAVING_PRODUCT_ID = 2;

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ public void initialize() throws Exception {
590590
.defaultLoanProductsRequestLP2Emi()//
591591
.name(name37)//
592592
.enableDownPayment(true)//
593-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
593+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
594594
.daysInYearType(DaysInYearType.DAYS360.value)//
595595
.daysInMonthType(DaysInMonthType.DAYS30.value)//
596596
.paymentAllocation(List.of(//
@@ -633,7 +633,7 @@ public void initialize() throws Exception {
633633
.defaultLoanProductsRequestLP2Emi()//
634634
.name(name31)//
635635
.enableDownPayment(true)//
636-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
636+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
637637
.daysInYearType(DaysInYearType.DAYS360.value)//
638638
.daysInMonthType(DaysInMonthType.DAYS30.value)//
639639
.paymentAllocation(List.of(//
@@ -1026,7 +1026,7 @@ public void initialize() throws Exception {
10261026
.defaultLoanProductsRequestLP2Emi()//
10271027
.name(name49)//
10281028
.enableDownPayment(true)//
1029-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
1029+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
10301030
.daysInYearType(DaysInYearType.DAYS360.value)//
10311031
.daysInMonthType(DaysInMonthType.DAYS30.value)//
10321032
.isInterestRecalculationEnabled(true)//
@@ -1166,7 +1166,7 @@ public void initialize() throws Exception {
11661166
.defaultLoanProductsRequestLP2Emi()//
11671167
.name(name53)//
11681168
.enableDownPayment(true)//
1169-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
1169+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
11701170
.daysInYearType(DaysInYearType.DAYS360.value)//
11711171
.daysInMonthType(DaysInMonthType.DAYS30.value)//
11721172
.isInterestRecalculationEnabled(true)//
@@ -1368,7 +1368,7 @@ public void initialize() throws Exception {
13681368
.defaultLoanProductsRequestLP2Emi()//
13691369
.name(name60)//
13701370
.enableDownPayment(true)//
1371-
.disbursedAmountPercentageForDownPayment(new BigDecimal(25))//
1371+
.disbursedAmountPercentageForDownPayment(BigDecimal.valueOf(25))//
13721372
.enableAutoRepaymentForDownPayment(true)//
13731373
.enableAccrualActivityPosting(true)//
13741374
.paymentAllocation(List.of(//

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/messaging/event/EventCheckHelper.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import java.io.IOException;
2525
import java.math.BigDecimal;
26-
import java.math.MathContext;
2726
import java.time.format.DateTimeFormatter;
2827
import java.util.List;
2928
import lombok.RequiredArgsConstructor;
@@ -198,7 +197,7 @@ private void loanAccountDataV1Check(Class<? extends AbstractLoanEvent> eventClaz
198197
Long clientIdExpected = body.getClientId();
199198
BigDecimal principalDisbursedActual = loanAccountDataV1.getSummary().getPrincipalDisbursed();
200199
Double principalDisbursedExpectedDouble = body.getSummary().getPrincipalDisbursed();
201-
BigDecimal principalDisbursedExpected = new BigDecimal(principalDisbursedExpectedDouble, MathContext.DECIMAL64);
200+
BigDecimal principalDisbursedExpected = BigDecimal.valueOf(principalDisbursedExpectedDouble);
202201
String actualDisbursementDateActual = loanAccountDataV1.getTimeline().getActualDisbursementDate();
203202
String actualDisbursementDateExpected = FORMATTER_EVENTS.format(body.getTimeline().getActualDisbursementDate());
204203
String currencyCodeActual = loanAccountDataV1.getSummary().getCurrency().getCode();
@@ -210,8 +209,7 @@ private void loanAccountDataV1Check(Class<? extends AbstractLoanEvent> eventClaz
210209
BigDecimal totalUnpaidPayableNotDueInterestExpected = body.getSummary().getTotalUnpaidPayableNotDueInterest();
211210
BigDecimal totalInterestPaymentWaiverActual = loanAccountDataV1.getSummary().getTotalInterestPaymentWaiver();
212211
Double totalInterestPaymentWaiverExpectedDouble = body.getSummary().getTotalInterestPaymentWaiver();
213-
BigDecimal totalInterestPaymentWaiverExpected = new BigDecimal(totalInterestPaymentWaiverExpectedDouble,
214-
MathContext.DECIMAL64);
212+
BigDecimal totalInterestPaymentWaiverExpected = BigDecimal.valueOf(totalInterestPaymentWaiverExpectedDouble);
215213
BigDecimal delinquentInterestActual = loanAccountDataV1.getDelinquent().getDelinquentInterest();
216214
BigDecimal delinquentInterestExpected = body.getDelinquent().getDelinquentInterest();
217215
BigDecimal delinquentFeeActual = loanAccountDataV1.getDelinquent().getDelinquentFee();
@@ -336,12 +334,12 @@ public void loanOwnershipTransferBusinessEventCheck(Long loanId, Long transferId
336334
ExternalTransferData filtered = content.stream().filter(t -> transferId.equals(t.getTransferId())).reduce((first, second) -> second)
337335
.orElseThrow(() -> new IllegalStateException("No element found"));
338336

339-
BigDecimal totalOutstandingBalanceAmountExpected = zeroConversion(filtered.getDetails().getTotalOutstanding());
340-
BigDecimal outstandingPrincipalPortionExpected = zeroConversion(filtered.getDetails().getTotalPrincipalOutstanding());
341-
BigDecimal outstandingFeePortionExpected = zeroConversion(filtered.getDetails().getTotalFeeChargesOutstanding());
342-
BigDecimal outstandingPenaltyPortionExpected = zeroConversion(filtered.getDetails().getTotalPenaltyChargesOutstanding());
343-
BigDecimal outstandingInterestPortionExpected = zeroConversion(filtered.getDetails().getTotalInterestOutstanding());
344-
BigDecimal overPaymentPortionExpected = zeroConversion(filtered.getDetails().getTotalOverpaid());
337+
BigDecimal totalOutstandingBalanceAmountExpected = convertToDefaultScaling(filtered.getDetails().getTotalOutstanding());
338+
BigDecimal outstandingPrincipalPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalPrincipalOutstanding());
339+
BigDecimal outstandingFeePortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalFeeChargesOutstanding());
340+
BigDecimal outstandingPenaltyPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalPenaltyChargesOutstanding());
341+
BigDecimal outstandingInterestPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalInterestOutstanding());
342+
BigDecimal overPaymentPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalOverpaid());
345343

346344
eventAssertion.assertEvent(LoanOwnershipTransferEvent.class, loanId).extractingData(LoanOwnershipTransferDataV1::getLoanId)
347345
.isEqualTo(loanId).extractingData(LoanOwnershipTransferDataV1::getAssetOwnerExternalId)
@@ -368,17 +366,17 @@ public void loanOwnershipTransferBusinessEventWithStatusCheck(Long loanId, Long
368366
.orElseThrow(() -> new IllegalStateException("No element found"));
369367

370368
BigDecimal totalOutstandingBalanceAmountExpected = filtered.getDetails() == null ? null
371-
: zeroConversion(filtered.getDetails().getTotalOutstanding());
369+
: convertToDefaultScaling(filtered.getDetails().getTotalOutstanding());
372370
BigDecimal outstandingPrincipalPortionExpected = filtered.getDetails() == null ? null
373-
: zeroConversion(filtered.getDetails().getTotalPrincipalOutstanding());
371+
: convertToDefaultScaling(filtered.getDetails().getTotalPrincipalOutstanding());
374372
BigDecimal outstandingFeePortionExpected = filtered.getDetails() == null ? null
375-
: zeroConversion(filtered.getDetails().getTotalFeeChargesOutstanding());
373+
: convertToDefaultScaling(filtered.getDetails().getTotalFeeChargesOutstanding());
376374
BigDecimal outstandingPenaltyPortionExpected = filtered.getDetails() == null ? null
377-
: zeroConversion(filtered.getDetails().getTotalPenaltyChargesOutstanding());
375+
: convertToDefaultScaling(filtered.getDetails().getTotalPenaltyChargesOutstanding());
378376
BigDecimal outstandingInterestPortionExpected = filtered.getDetails() == null ? null
379-
: zeroConversion(filtered.getDetails().getTotalInterestOutstanding());
377+
: convertToDefaultScaling(filtered.getDetails().getTotalInterestOutstanding());
380378
BigDecimal overPaymentPortionExpected = filtered.getDetails() == null ? null
381-
: zeroConversion(filtered.getDetails().getTotalOverpaid());
379+
: convertToDefaultScaling(filtered.getDetails().getTotalOverpaid());
382380

383381
AssetExternalizationTransferStatus transferStatusType = AssetExternalizationTransferStatus.valueOf(transferStatus);
384382
String transferStatusExpected = transferStatusType.getValue();
@@ -415,12 +413,12 @@ public void loanAccountSnapshotBusinessEventCheck(Long loanId, Long transferId)
415413
String ownerExternalIdExpected = filtered.getStatus().getValue().equals("BUYBACK") ? null : filtered.getOwner().getExternalId();
416414
String settlementDateExpected = filtered.getStatus().getValue().equals("BUYBACK") ? null
417415
: FORMATTER_EVENTS.format(filtered.getSettlementDate());
418-
BigDecimal totalOutstandingBalanceAmountExpected = zeroConversion(filtered.getDetails().getTotalOutstanding());
419-
BigDecimal outstandingPrincipalPortionExpected = zeroConversion(filtered.getDetails().getTotalPrincipalOutstanding());
420-
BigDecimal outstandingFeePortionExpected = zeroConversion(filtered.getDetails().getTotalFeeChargesOutstanding());
421-
BigDecimal outstandingPenaltyPortionExpected = zeroConversion(filtered.getDetails().getTotalPenaltyChargesOutstanding());
422-
BigDecimal outstandingInterestPortionExpected = zeroConversion(filtered.getDetails().getTotalInterestOutstanding());
423-
BigDecimal overPaymentPortionExpected = zeroConversion(filtered.getDetails().getTotalOverpaid());
416+
BigDecimal totalOutstandingBalanceAmountExpected = convertToDefaultScaling(filtered.getDetails().getTotalOutstanding());
417+
BigDecimal outstandingPrincipalPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalPrincipalOutstanding());
418+
BigDecimal outstandingFeePortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalFeeChargesOutstanding());
419+
BigDecimal outstandingPenaltyPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalPenaltyChargesOutstanding());
420+
BigDecimal outstandingInterestPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalInterestOutstanding());
421+
BigDecimal overPaymentPortionExpected = convertToDefaultScaling(filtered.getDetails().getTotalOverpaid());
424422

425423
eventAssertion.assertEvent(LoanAccountSnapshotEvent.class, loanId).extractingData(LoanAccountDataV1::getId).isEqualTo(loanId)
426424
.extractingData(LoanAccountDataV1::getExternalOwnerId).isEqualTo(ownerExternalIdExpected)
@@ -520,7 +518,7 @@ public void installmentLevelDelinquencyRangeChangeEventCheck(Long loanId) {
520518
});
521519
}
522520

523-
private BigDecimal zeroConversion(BigDecimal input) {
524-
return input.compareTo(new BigDecimal("0.000000")) == 0 ? new BigDecimal(input.toEngineeringString()) : input.setScale(8);
521+
private BigDecimal convertToDefaultScaling(BigDecimal input) {
522+
return input.setScale(8);
525523
}
526524
}

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/assetexternalization/AssetExternalizationStepDef.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import io.cucumber.java.en.Then;
4444
import io.cucumber.java.en.When;
4545
import java.io.IOException;
46-
import java.math.RoundingMode;
4746
import java.time.format.DateTimeFormatter;
4847
import java.util.ArrayList;
4948
import java.util.List;
@@ -514,7 +513,7 @@ public void checkJournalEntriesTransaction(String status, DataTable table) throw
514513
actualValues.add(t.getGlAccountCode());
515514
actualValues.add(t.getGlAccountName());
516515
actualValues.add(t.getEntryType().getValue());
517-
actualValues.add(t.getAmount().setScale(2, RoundingMode.HALF_DOWN).toString());
516+
actualValues.add(t.getAmount().setScale(2).toString());
518517
return actualValues;
519518
}).collect(Collectors.toList());
520519

@@ -575,7 +574,7 @@ public void checkJournalEntriesOwner(DataTable table) throws IOException {
575574
actualValues.add(t.getGlAccountCode());
576575
actualValues.add(t.getGlAccountName());
577576
actualValues.add(t.getEntryType().getValue());
578-
actualValues.add(t.getAmount().setScale(2, RoundingMode.HALF_DOWN).toString());
577+
actualValues.add(t.getAmount().setScale(2).toString());
579578
return actualValues;
580579
}).collect(Collectors.toList());
581580

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanDelinquencyStepDef.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import io.cucumber.java.en.When;
2727
import java.io.IOException;
2828
import java.math.BigDecimal;
29-
import java.math.RoundingMode;
3029
import java.nio.charset.StandardCharsets;
3130
import java.time.format.DateTimeFormatter;
3231
import java.util.ArrayList;
@@ -569,7 +568,7 @@ public void loanDelinquencyInstallmentLevelDataCheck(DataTable table) throws IOE
569568

570569
List<String> actualValuesList = List.of(String.valueOf(installmentLevelDelinquency.get(i - 1).getRangeId()),
571570
installmentLevelDelinquency.get(i - 1).getClassification(),
572-
installmentLevelDelinquency.get(i - 1).getDelinquentAmount().setScale(2, RoundingMode.HALF_DOWN).toString());
571+
installmentLevelDelinquency.get(i - 1).getDelinquentAmount().setScale(2).toString());
573572
assertThat(actualValuesList)
574573
.as(ErrorMessageHelper.wrongValueInLineInInstallmentLevelDelinquencyData(i, actualValuesList, expectedValuesList))
575574
.isEqualTo(expectedValuesList);

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanRepaymentStepDef.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import io.cucumber.java.en.When;
2828
import java.io.IOException;
2929
import java.math.BigDecimal;
30-
import java.math.RoundingMode;
3130
import java.nio.charset.StandardCharsets;
3231
import java.time.format.DateTimeFormatter;
3332
import java.util.HashMap;
@@ -546,11 +545,11 @@ public void amountsEquallyDistributedInSchedule(double totalAmount) throws IOExc
546545

547546
List<GetLoansLoanIdRepaymentPeriod> periods = getLoansLoanIdResponseCall.body().getRepaymentSchedule().getPeriods();
548547

549-
BigDecimal expectedAmount = new BigDecimal(totalAmount / (periods.size() - 1)).setScale(0, RoundingMode.HALF_DOWN);
550-
BigDecimal lastExpectedAmount = new BigDecimal(totalAmount).setScale(0, RoundingMode.HALF_DOWN);
548+
BigDecimal expectedAmount = BigDecimal.valueOf(totalAmount / (periods.size() - 1)).setScale(0);
549+
BigDecimal lastExpectedAmount = BigDecimal.valueOf(totalAmount).setScale(0);
551550

552551
for (int i = 1; i < periods.size(); i++) {
553-
BigDecimal actualAmount = new BigDecimal(periods.get(i).getPrincipalOriginalDue()).setScale(0, RoundingMode.HALF_DOWN);
552+
BigDecimal actualAmount = BigDecimal.valueOf(periods.get(i).getPrincipalOriginalDue()).setScale(0);
554553

555554
if (i == periods.size() - 1) {
556555
assertThat(actualAmount.compareTo(lastExpectedAmount))

0 commit comments

Comments
 (0)