FINERACT-2413: e2e tests for re-amortization forbidden for charged-ff or written-off loan

This commit is contained in:
MarianaDmytrivBinariks
2025-12-26 19:28:23 +01:00
committed by Adam Saghy
parent d263fec31d
commit a738c268d7
3 changed files with 732 additions and 0 deletions
@@ -970,4 +970,16 @@ public final class ErrorMessageHelper {
public static String reAgeClosedLoanFailure() {
return "Loan reaging can only be done on active loans";
}
public static String reAmortizeChargedOffLoanFailure() {
return "Loan re-amortization is not allowed on charged-off loan.";
}
public static String reAmortizeContractTerminatedLoanFailure() {
return "Loan re-amortization is not allowed on contract terminated loan.";
}
public static String reAmortizeClosedLoanFailure() {
return "Loan re-amortization can only be done on active loans";
}
}
@@ -18,6 +18,7 @@
*/
package org.apache.fineract.test.stepdef.loan;
import static org.apache.fineract.client.feign.util.FeignCalls.fail;
import static org.apache.fineract.client.feign.util.FeignCalls.ok;
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,6 +35,7 @@ import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.client.feign.FineractFeignClient;
import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
import org.apache.fineract.client.models.LoanScheduleData;
import org.apache.fineract.client.models.LoanSchedulePeriodData;
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
@@ -103,6 +105,57 @@ public class LoanReAmortizationStepDef extends AbstractStepDef {
testContext().set(TestContextKey.LOAN_REAMORTIZATION_UNDO_RESPONSE, response);
}
@When("Admin creates a Loan re-amortization transaction on current business date is forbidden as loan was charged-off")
public void reAmortizationChargedOffLoanFailure() {
reAmortizationFailure(ErrorMessageHelper.reAmortizeChargedOffLoanFailure());
}
@When("Admin creates re-amortization trn on current business date with reAmortizationInterestHandling {string} is forbidden as loan was charged-off")
public void reAmortizationWithInterestHandlingChargedOffLoanFailure(final String reAmortizationInterestHandling) {
reAmortizationInterestHandlingLoanLoanFailure(reAmortizationInterestHandling, ErrorMessageHelper.reAmortizeChargedOffLoanFailure());
}
@When("Admin creates a Loan re-amortization transaction on current business date is forbidden as loan was contract terminated")
public void reAmortizationContractTerminatedLoanFailure() {
reAmortizationFailure(ErrorMessageHelper.reAmortizeContractTerminatedLoanFailure());
}
@When("Admin creates re-amortization trn on current business date with reAmortizationInterestHandling {string} is forbidden as loan was contract terminated")
public void reAmortizationWithInterestHandlingContractTerminatedLoanFailure(final String reAmortizationInterestHandling) {
reAmortizationInterestHandlingLoanLoanFailure(reAmortizationInterestHandling,
ErrorMessageHelper.reAmortizeContractTerminatedLoanFailure());
}
@When("Admin creates a Loan re-amortization transaction on current business date is forbidden as loan was closed")
public void reAmortizationClosedLoanFailure() {
reAmortizationFailure(ErrorMessageHelper.reAmortizeClosedLoanFailure());
}
@When("Admin creates re-amortization trn on current business date with reAmortizationInterestHandling {string} is forbidden as loan was closed")
public void reAmortizationWithInterestHandlingClosedLoanFailure(final String reAmortizationInterestHandling) {
reAmortizationInterestHandlingLoanLoanFailure(reAmortizationInterestHandling, ErrorMessageHelper.reAmortizeClosedLoanFailure());
}
public void reAmortizationFailure(final String errorMessage) {
reAmortizationInterestHandlingLoanLoanFailure(null, errorMessage);
}
public void reAmortizationInterestHandlingLoanLoanFailure(final String reAmortizationInterestHandling, final String errorMessage) {
final PostLoansResponse loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
final Long loanId = loanResponse.getLoanId();
PostLoansLoanIdTransactionsRequest reAmortizationRequest = LoanRequestFactory.defaultLoanReAmortizationRequest();
if (reAmortizationInterestHandling != null) {
reAmortizationRequest.reAmortizationInterestHandling(reAmortizationInterestHandling);
}
CallFailedRuntimeException exception = fail(() -> fineractClient.loanTransactions().executeLoanTransaction(loanId,
reAmortizationRequest, Map.of("command", "reAmortize")));
assertThat(exception.getStatus()).as(ErrorMessageHelper.dateFailureErrorCodeMsg()).isEqualTo(403);
assertThat(exception.getDeveloperMessage()).contains(errorMessage);
}
@Then("LoanReAmortizeBusinessEvent is created")
public void checkLoanReAmortizeBusinessEventCreated() {
PostLoansResponse loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);