Skip to content

Commit a738c26

Browse files
MarianaDmytrivBinariksadamsaghy
authored andcommitted
FINERACT-2413: e2e tests for re-amortization forbidden for charged-ff or written-off loan
1 parent d263fec commit a738c26

File tree

3 files changed

+732
-0
lines changed

3 files changed

+732
-0
lines changed

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,4 +970,16 @@ public static String reAgeContractTerminatedLoanFailure() {
970970
public static String reAgeClosedLoanFailure() {
971971
return "Loan reaging can only be done on active loans";
972972
}
973+
974+
public static String reAmortizeChargedOffLoanFailure() {
975+
return "Loan re-amortization is not allowed on charged-off loan.";
976+
}
977+
978+
public static String reAmortizeContractTerminatedLoanFailure() {
979+
return "Loan re-amortization is not allowed on contract terminated loan.";
980+
}
981+
982+
public static String reAmortizeClosedLoanFailure() {
983+
return "Loan re-amortization can only be done on active loans";
984+
}
973985
}

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.apache.fineract.test.stepdef.loan;
2020

21+
import static org.apache.fineract.client.feign.util.FeignCalls.fail;
2122
import static org.apache.fineract.client.feign.util.FeignCalls.ok;
2223
import static org.assertj.core.api.Assertions.assertThat;
2324

@@ -34,6 +35,7 @@
3435
import java.util.stream.Collectors;
3536
import lombok.RequiredArgsConstructor;
3637
import org.apache.fineract.client.feign.FineractFeignClient;
38+
import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
3739
import org.apache.fineract.client.models.LoanScheduleData;
3840
import org.apache.fineract.client.models.LoanSchedulePeriodData;
3941
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
@@ -103,6 +105,57 @@ public void undoLoanReAmortization() {
103105
testContext().set(TestContextKey.LOAN_REAMORTIZATION_UNDO_RESPONSE, response);
104106
}
105107

108+
@When("Admin creates a Loan re-amortization transaction on current business date is forbidden as loan was charged-off")
109+
public void reAmortizationChargedOffLoanFailure() {
110+
reAmortizationFailure(ErrorMessageHelper.reAmortizeChargedOffLoanFailure());
111+
}
112+
113+
@When("Admin creates re-amortization trn on current business date with reAmortizationInterestHandling {string} is forbidden as loan was charged-off")
114+
public void reAmortizationWithInterestHandlingChargedOffLoanFailure(final String reAmortizationInterestHandling) {
115+
reAmortizationInterestHandlingLoanLoanFailure(reAmortizationInterestHandling, ErrorMessageHelper.reAmortizeChargedOffLoanFailure());
116+
}
117+
118+
@When("Admin creates a Loan re-amortization transaction on current business date is forbidden as loan was contract terminated")
119+
public void reAmortizationContractTerminatedLoanFailure() {
120+
reAmortizationFailure(ErrorMessageHelper.reAmortizeContractTerminatedLoanFailure());
121+
}
122+
123+
@When("Admin creates re-amortization trn on current business date with reAmortizationInterestHandling {string} is forbidden as loan was contract terminated")
124+
public void reAmortizationWithInterestHandlingContractTerminatedLoanFailure(final String reAmortizationInterestHandling) {
125+
reAmortizationInterestHandlingLoanLoanFailure(reAmortizationInterestHandling,
126+
ErrorMessageHelper.reAmortizeContractTerminatedLoanFailure());
127+
128+
}
129+
130+
@When("Admin creates a Loan re-amortization transaction on current business date is forbidden as loan was closed")
131+
public void reAmortizationClosedLoanFailure() {
132+
reAmortizationFailure(ErrorMessageHelper.reAmortizeClosedLoanFailure());
133+
}
134+
135+
@When("Admin creates re-amortization trn on current business date with reAmortizationInterestHandling {string} is forbidden as loan was closed")
136+
public void reAmortizationWithInterestHandlingClosedLoanFailure(final String reAmortizationInterestHandling) {
137+
reAmortizationInterestHandlingLoanLoanFailure(reAmortizationInterestHandling, ErrorMessageHelper.reAmortizeClosedLoanFailure());
138+
}
139+
140+
public void reAmortizationFailure(final String errorMessage) {
141+
reAmortizationInterestHandlingLoanLoanFailure(null, errorMessage);
142+
}
143+
144+
public void reAmortizationInterestHandlingLoanLoanFailure(final String reAmortizationInterestHandling, final String errorMessage) {
145+
final PostLoansResponse loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
146+
final Long loanId = loanResponse.getLoanId();
147+
148+
PostLoansLoanIdTransactionsRequest reAmortizationRequest = LoanRequestFactory.defaultLoanReAmortizationRequest();
149+
if (reAmortizationInterestHandling != null) {
150+
reAmortizationRequest.reAmortizationInterestHandling(reAmortizationInterestHandling);
151+
}
152+
153+
CallFailedRuntimeException exception = fail(() -> fineractClient.loanTransactions().executeLoanTransaction(loanId,
154+
reAmortizationRequest, Map.of("command", "reAmortize")));
155+
assertThat(exception.getStatus()).as(ErrorMessageHelper.dateFailureErrorCodeMsg()).isEqualTo(403);
156+
assertThat(exception.getDeveloperMessage()).contains(errorMessage);
157+
}
158+
106159
@Then("LoanReAmortizeBusinessEvent is created")
107160
public void checkLoanReAmortizeBusinessEventCreated() {
108161
PostLoansResponse loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);

0 commit comments

Comments
 (0)