Skip to content

Commit 9fb0aeb

Browse files
FINERACT-2354: e2e tests for re-aging with accruals for default behaviour
1 parent cccab0b commit 9fb0aeb

File tree

4 files changed

+3450
-799
lines changed

4 files changed

+3450
-799
lines changed

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

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2222,18 +2222,103 @@ public void loanTransactionsTabCheck(DataTable table) {
22222222
Map.of("staffInSelectedOfficeOnly", "false", "associations", "transactions")));
22232223
List<GetLoansLoanIdTransactions> transactions = loanDetailsResponse.getTransactions();
22242224
List<List<String>> data = table.asLists();
2225+
List<String> header = table.row(0);
2226+
checkLoanTransactionTab(data, transactions, header, resourceId);
2227+
}
2228+
2229+
@Then("Loan Transactions tab has the following new accrual data:")
2230+
public void loanTransactionsTabCheckNewAccruals(DataTable table) {
2231+
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
2232+
List<List<String>> expectedAccruals = testContext().get(TestContextKey.VERIFIED_LOAN_ACCRUALS);
2233+
if (expectedAccruals == null) {
2234+
expectedAccruals = new ArrayList<>();
2235+
testContext().set(TestContextKey.VERIFIED_LOAN_ACCRUALS, expectedAccruals);
2236+
}
2237+
long loanId = loanCreateResponse.getLoanId();
2238+
String resourceId = String.valueOf(loanId);
2239+
List<GetLoansLoanIdTransactions> transactions = getAccrualTransactions(loanId);
2240+
List<List<String>> data = table.asLists();
2241+
expectedAccruals.addAll(data.subList(1, data.size()));
2242+
List<String> header = table.row(0);
2243+
2244+
checkLoanTransactionTabRows(expectedAccruals, transactions, header, resourceId);
2245+
assertThat(transactions.size())
2246+
.as(ErrorMessageHelper.nrOfLinesWrongInTransactionsTab(resourceId, transactions.size(), expectedAccruals.size()))
2247+
.isEqualTo(expectedAccruals.size());
2248+
}
2249+
2250+
@Then("Loan Transactions tab has no new accrual data")
2251+
public void loanTransactionsTabCheckNoNewAccruals() {
2252+
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
2253+
List<List<String>> expectedAccruals = testContext().get(TestContextKey.VERIFIED_LOAN_ACCRUALS);
2254+
if (expectedAccruals == null) {
2255+
expectedAccruals = new ArrayList<>();
2256+
testContext().set(TestContextKey.VERIFIED_LOAN_ACCRUALS, expectedAccruals);
2257+
}
2258+
long loanId = loanCreateResponse.getLoanId();
2259+
String resourceId = String.valueOf(loanId);
2260+
2261+
List<GetLoansLoanIdTransactions> transactions = getAccrualTransactions(loanId);
2262+
assertThat(transactions.size())
2263+
.as(ErrorMessageHelper.nrOfLinesWrongInTransactionsTab(resourceId, transactions.size(), expectedAccruals.size()))
2264+
.isEqualTo(expectedAccruals.size());
2265+
}
2266+
2267+
@Then("Loan Transactions tab has the following accrual data:")
2268+
public void loanTransactionsTabCheckAccruals(DataTable table) {
2269+
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
2270+
long loanId = loanCreateResponse.getLoanId();
2271+
String resourceId = String.valueOf(loanId);
2272+
List<GetLoansLoanIdTransactions> transactions = getAccrualTransactions(loanId);
2273+
List<List<String>> data = table.asLists();
2274+
List<String> header = table.row(0);
2275+
2276+
checkLoanTransactionTab(data, transactions, header, resourceId);
2277+
}
2278+
2279+
@Then("Loan Transactions tab has the following data without accruals:")
2280+
public void loanTransactionsTabCheckWithoutAccruals(DataTable table) {
2281+
PostLoansResponse loanCreateResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
2282+
long loanId = loanCreateResponse.getLoanId();
2283+
String resourceId = String.valueOf(loanId);
2284+
2285+
GetLoansLoanIdResponse loanDetailsResponse = ok(() -> fineractClient.loans().retrieveLoan(loanId,
2286+
Map.of("staffInSelectedOfficeOnly", "false", "associations", "transactions")));
2287+
List<GetLoansLoanIdTransactions> transactions = loanDetailsResponse.getTransactions().stream()
2288+
.filter(lt -> !lt.getType().getAccrual() && !"Accrual Adjustment".equalsIgnoreCase(lt.getType().getValue())).toList();
2289+
List<List<String>> data = table.asLists();
2290+
List<String> header = table.row(0);
2291+
2292+
checkLoanTransactionTab(data, transactions, header, resourceId);
2293+
}
2294+
2295+
public List<GetLoansLoanIdTransactions> getAccrualTransactions(Long loanId) {
2296+
GetLoansLoanIdResponse loanDetailsResponse = ok(() -> fineractClient.loans().retrieveLoan(loanId,
2297+
Map.of("staffInSelectedOfficeOnly", "false", "associations", "transactions")));
2298+
return loanDetailsResponse.getTransactions().stream().filter(
2299+
lt -> "Accrual".equalsIgnoreCase(lt.getType().getValue()) || "Accrual Adjustment".equalsIgnoreCase(lt.getType().getValue()))
2300+
.toList();
2301+
}
2302+
2303+
public void checkLoanTransactionTabRows(List<List<String>> data, List<GetLoansLoanIdTransactions> transactions, List<String> header,
2304+
String resourceId) {
22252305
for (int i = 1; i < data.size(); i++) {
22262306
List<String> expectedValues = data.get(i);
22272307
String transactionDateExpected = expectedValues.get(0);
22282308
List<List<String>> actualValuesList = transactions.stream()//
22292309
.filter(t -> transactionDateExpected.equals(FORMATTER.format(t.getDate())))//
2230-
.map(t -> fetchValuesOfTransaction(table.row(0), t))//
2310+
.map(t -> fetchValuesOfTransaction(header, t))//
22312311
.collect(Collectors.toList());//
22322312
boolean containsExpectedValues = actualValuesList.stream()//
22332313
.anyMatch(actualValues -> actualValues.equals(expectedValues));//
22342314
assertThat(containsExpectedValues)
22352315
.as(ErrorMessageHelper.wrongValueInLineInTransactionsTab(resourceId, i, actualValuesList, expectedValues)).isTrue();
22362316
}
2317+
}
2318+
2319+
public void checkLoanTransactionTab(List<List<String>> data, List<GetLoansLoanIdTransactions> transactions, List<String> header,
2320+
String resourceId) {
2321+
checkLoanTransactionTabRows(data, transactions, header, resourceId);
22372322
assertThat(transactions.size())
22382323
.as(ErrorMessageHelper.nrOfLinesWrongInTransactionsTab(resourceId, transactions.size(), data.size() - 1))
22392324
.isEqualTo(data.size() - 1);

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/support/TestContextKey.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,4 +292,5 @@ public abstract class TestContextKey {
292292
public static final String LP1_INTEREST_FLAT_DAILY_ACTUAL_ACTUAL_MULTIDISB_EXPECT_TRANCHES = "loanProductCreateResponseLP1InterestFlatDailyActualActualMultiDisbursementExpectTranches";
293293
public static final String DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY = "loanProductCreateResponseLP2AdvancedPaymentZeroInterestChargeOffBehaviourAccrualActivity";
294294
public static final String DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADVANCED_CUSTOM_PAYMENT_ALLOCATION_PROGRESSIVE_LOAN_SCHEDULE_PRINCIPAL_FIRST = "loanProductCreateResponseLP2AdvancedPaymentHorizontalPrincipalFirst";
295+
public static final String VERIFIED_LOAN_ACCRUALS = "VERIFIED_LOAN_ACCRUALS";
295296
}

0 commit comments

Comments
 (0)