FINERACT-2354: e2e tests for re-aging with accruals for default behaviour

This commit is contained in:
MarianaDmytrivBinariks
2026-01-15 09:48:08 +01:00
committed by Adam Saghy
parent fcf1fb6126
commit b59abb3fbc
3 changed files with 3471 additions and 1 deletions
@@ -2222,18 +2222,103 @@ public class LoanStepDef extends AbstractStepDef {
Map.of("staffInSelectedOfficeOnly", "false", "associations", "transactions")));
List<GetLoansLoanIdTransactions> transactions = loanDetailsResponse.getTransactions();
List<List<String>> data = table.asLists();
List<String> header = table.row(0);
checkLoanTransactionTab(data, transactions, header, resourceId);
}
@Then("Loan Transactions tab has the following new accrual data:")
public void loanTransactionsTabCheckNewAccruals(DataTable table) {
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
List<List<String>> expectedAccruals = testContext().get(TestContextKey.VERIFIED_LOAN_ACCRUALS);
if (expectedAccruals == null) {
expectedAccruals = new ArrayList<>();
testContext().set(TestContextKey.VERIFIED_LOAN_ACCRUALS, expectedAccruals);
}
long loanId = loanCreateResponse.getLoanId();
String resourceId = String.valueOf(loanId);
List<GetLoansLoanIdTransactions> transactions = getAccrualTransactions(loanId);
List<List<String>> data = table.asLists();
expectedAccruals.addAll(data.subList(1, data.size()));
List<String> header = table.row(0);
checkLoanTransactionTabRows(expectedAccruals, transactions, header, resourceId);
assertThat(transactions.size())
.as(ErrorMessageHelper.nrOfLinesWrongInTransactionsTab(resourceId, transactions.size(), expectedAccruals.size()))
.isEqualTo(expectedAccruals.size());
}
@Then("Loan Transactions tab has no new accrual data")
public void loanTransactionsTabCheckNoNewAccruals() {
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
List<List<String>> expectedAccruals = testContext().get(TestContextKey.VERIFIED_LOAN_ACCRUALS);
if (expectedAccruals == null) {
expectedAccruals = new ArrayList<>();
testContext().set(TestContextKey.VERIFIED_LOAN_ACCRUALS, expectedAccruals);
}
long loanId = loanCreateResponse.getLoanId();
String resourceId = String.valueOf(loanId);
List<GetLoansLoanIdTransactions> transactions = getAccrualTransactions(loanId);
assertThat(transactions.size())
.as(ErrorMessageHelper.nrOfLinesWrongInTransactionsTab(resourceId, transactions.size(), expectedAccruals.size()))
.isEqualTo(expectedAccruals.size());
}
@Then("Loan Transactions tab has the following accrual data:")
public void loanTransactionsTabCheckAccruals(DataTable table) {
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
long loanId = loanCreateResponse.getLoanId();
String resourceId = String.valueOf(loanId);
List<GetLoansLoanIdTransactions> transactions = getAccrualTransactions(loanId);
List<List<String>> data = table.asLists();
List<String> header = table.row(0);
checkLoanTransactionTab(data, transactions, header, resourceId);
}
@Then("Loan Transactions tab has the following data without accruals:")
public void loanTransactionsTabCheckWithoutAccruals(DataTable table) {
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
long loanId = loanCreateResponse.getLoanId();
String resourceId = String.valueOf(loanId);
GetLoansLoanIdResponse loanDetailsResponse = ok(() -> fineractClient.loans().retrieveLoan(loanId,
Map.of("staffInSelectedOfficeOnly", "false", "associations", "transactions")));
List<GetLoansLoanIdTransactions> transactions = loanDetailsResponse.getTransactions().stream()
.filter(lt -> !lt.getType().getAccrual() && !"Accrual Adjustment".equalsIgnoreCase(lt.getType().getValue())).toList();
List<List<String>> data = table.asLists();
List<String> header = table.row(0);
checkLoanTransactionTab(data, transactions, header, resourceId);
}
public List<GetLoansLoanIdTransactions> getAccrualTransactions(Long loanId) {
GetLoansLoanIdResponse loanDetailsResponse = ok(() -> fineractClient.loans().retrieveLoan(loanId,
Map.of("staffInSelectedOfficeOnly", "false", "associations", "transactions")));
return loanDetailsResponse.getTransactions().stream().filter(
lt -> "Accrual".equalsIgnoreCase(lt.getType().getValue()) || "Accrual Adjustment".equalsIgnoreCase(lt.getType().getValue()))
.toList();
}
public void checkLoanTransactionTabRows(List<List<String>> data, List<GetLoansLoanIdTransactions> transactions, List<String> header,
String resourceId) {
for (int i = 1; i < data.size(); i++) {
List<String> expectedValues = data.get(i);
String transactionDateExpected = expectedValues.get(0);
List<List<String>> actualValuesList = transactions.stream()//
.filter(t -> transactionDateExpected.equals(FORMATTER.format(t.getDate())))//
.map(t -> fetchValuesOfTransaction(table.row(0), t))//
.map(t -> fetchValuesOfTransaction(header, t))//
.collect(Collectors.toList());//
boolean containsExpectedValues = actualValuesList.stream()//
.anyMatch(actualValues -> actualValues.equals(expectedValues));//
assertThat(containsExpectedValues)
.as(ErrorMessageHelper.wrongValueInLineInTransactionsTab(resourceId, i, actualValuesList, expectedValues)).isTrue();
}
}
public void checkLoanTransactionTab(List<List<String>> data, List<GetLoansLoanIdTransactions> transactions, List<String> header,
String resourceId) {
checkLoanTransactionTabRows(data, transactions, header, resourceId);
assertThat(transactions.size())
.as(ErrorMessageHelper.nrOfLinesWrongInTransactionsTab(resourceId, transactions.size(), data.size() - 1))
.isEqualTo(data.size() - 1);
@@ -295,4 +295,5 @@ public abstract class TestContextKey {
public static final String DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADVANCED_CUSTOM_PAYMENT_ALLOCATION_PROGRESSIVE_LOAN_SCHEDULE_PRINCIPAL_FIRST = "loanProductCreateResponseLP2AdvancedPaymentHorizontalPrincipalFirst";
public static final String DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_FULL_TERM_TRANCHE = "loanProductCreateResponseLP2AdvancedPaymentInterestDailyEmi36030InterestRecalculationDailyMultidisburseFullTermTranche";
public static final String DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADV_CUSTOM_PMT_ALLOC_PROGRESSIVE_LOAN_SCHEDULE_HORIZONTAL_360_30_USD = "loanProductCreateResponseLP2AdvancedPaymentHorizontal36030Usd";
public static final String VERIFIED_LOAN_ACCRUALS = "VERIFIED_LOAN_ACCRUALS";
}