Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,10 @@ public static String discountAmountExceedFailure() {
return "Failed data validation due to: amount.cannot.exceed.created.discount.";
}

public static String discountAmountExceedApprovedFailure() {
return "Failed data validation due to: amount.cannot.exceed.approved.discount.";
}

public static String discountAlreadySetBeforeDisburseFailure() {
return "Discount was already set before disbursement and cannot be added again";
}
Expand All @@ -1106,6 +1110,10 @@ public static String discountExceedCreatedDiscountFailure() {
return "Failed data validation due to: amount.cannot.exceed.created.discount.";
}

public static String discountExceedProductDiscountFailure() {
return "Failed data validation due to: amount.cannot.exceed.product.discount.";
}

public static String nearBreachCannotEnableWithoutBreachFailure() {
return "Failed data validation due to: cannot.enable.near.breach.without.breach.";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,23 @@ public void approvalOfWorkingCapitalLoanResultsAnError(final String approveDate,
log.info("Verified working capital loan approval failed with expected error");
}

@When("Admin failed to approve the working capital loan on {string} with {string} amount and expected disbursement date on {string} with {string} exceeded product discount amount")
public void approveWorkingCapitalLoanWithExceededProductDiscountFailure(final String approveDate, final String approvedAmount,
final String expectedDisbursementDate, final String discountAmount) {
final PostWorkingCapitalLoansLoanIdRequest approveRequest = workingCapitalLoanRequestFactory
.defaultWorkingCapitalLoanApproveRequest()//
.approvedOnDate(approveDate)//
.approvedLoanAmount(new BigDecimal(approvedAmount))//
.discountAmount(new BigDecimal(discountAmount))//
.expectedDisbursementDate(expectedDisbursementDate);//

final CallFailedRuntimeException exception = fail(() -> fineractClient.workingCapitalLoans()
.stateTransitionWorkingCapitalLoanById(getCreatedLoanId(), "approve", approveRequest));

assertThat(exception.getStatus()).as(ErrorMessageHelper.discountExceedProductDiscountFailure()).isEqualTo(400);
assertThat(exception.getDeveloperMessage()).contains(ErrorMessageHelper.discountExceedProductDiscountFailure());
}

@When("Admin failed to approve the working capital loan on {string} with {string} amount and expected disbursement date on {string} with {string} exceeded discount amount")
public void approveWorkingCapitalLoanWithExceededDiscountFailure(final String approveDate, final String approvedAmount,
final String expectedDisbursementDate, final String discountAmount) {
Expand Down Expand Up @@ -818,7 +835,14 @@ public void disburseWCLoanWithDiscount(String actualDisbursementDate, String tra
@When("Admin failed to disburse the working capital loan on {string} with {string} amount with {string} exceeded discount amount")
public void disburseWorkingCapitalLoanWithExceededDiscountFailure(String actualDisbursementDate, String transactionAmount,
String discountAmount) {
String errorMessage = ErrorMessageHelper.discountAmountExceedFailure();
String errorMessage = ErrorMessageHelper.discountAmountExceedApprovedFailure();
disburseWorkingCapitalLoanFailure(actualDisbursementDate, transactionAmount, discountAmount, errorMessage);
}

@When("Admin failed to disburse the working capital loan on {string} with {string} amount with {string} exceeded product discount amount")
public void disburseWorkingCapitalLoanWithExceededProductDiscountFailure(String actualDisbursementDate, String transactionAmount,
String discountAmount) {
String errorMessage = ErrorMessageHelper.discountExceedProductDiscountFailure();
disburseWorkingCapitalLoanFailure(actualDisbursementDate, transactionAmount, discountAmount, errorMessage);
}

Expand Down Expand Up @@ -997,6 +1021,38 @@ public void workingCapitalLoanHasTransactions(final DataTable dataTable) throws
assertTable(GetWorkingCapitalLoanTransactionIdResponse.class, dataTable, actualTransactions);
}

@Then("Admin successfully update discount with {string} amount on Working Capital loan account")
public void adminSuccessfullyUpdateDiscountWithAmountOnWorkingCapitalLoanAccount(String discountAmount) {
PostWorkingCapitalLoansLoanIdResponse lastDisbursementResponse = testContext().get(TestContextKey.LOAN_DISBURSE_RESPONSE);
final PostWorkingCapitalLoansLoanIdRequest request = workingCapitalLoanRequestFactory.defaultWorkingCapitalLoanDiscountFeeRequest() //
.relatedResourceId(lastDisbursementResponse.getResourceId()).transactionAmount(new BigDecimal(discountAmount));
executeStateTransition("DISCOUNTFEE", request, "DISCOUNT", false);
}

@Then("Update discount with {string} amount on Working Capital loan account failed due to date diff from disbursement date")
public void updateDiscountWithAmountOnWorkingCapitalLoanAccountFailedDueToDateDiffFromDisbursementDate(String discountAmount) {
String errorMessage = ErrorMessageHelper.discountDiffDateFromDisburseFailure();
addDiscountFeeFailedCheck(discountAmount, errorMessage);
}

@Then("Add discount with {string} amount on Working Capital loan account failed due to already added discount before disbursement")
public void addDiscountWithAmountOnWorkingCapitalLoanAccountFailedDueToAlreadyAddedDiscountBeforeDisbursement(String discountAmount) {
String errorMessage = ErrorMessageHelper.discountAlreadySetBeforeDisburseFailure();
addDiscountFeeFailedCheck(discountAmount, errorMessage);
}

@Then("Update discount with {string} amount on Working Capital loan account failed due to override disallowed by product")
public void updateDiscountWithAmountOnWorkingCapitalLoanAccountFailedDueToOverrideDisallowedByProduct(String discountAmount) {
String errorMessage = ErrorMessageHelper.overrideDisallowedByProductFailure();
addDiscountFeeFailedCheck(discountAmount, errorMessage);
}

@Then("Update discount with {string} amount on Working Capital loan account failed due to exceed discount amount")
public void updateDiscountWithAmountOnWorkingCapitalLoanAccountFailedDueToExceedDiscountAmount(String discountAmount) {
String errorMessage = ErrorMessageHelper.discountExceedProductDiscountFailure();
addDiscountFeeFailedCheck(discountAmount, errorMessage);
}

// ====================================
// Private Helper Methods
// ====================================
Expand Down Expand Up @@ -1146,6 +1202,10 @@ private List<String> fetchValuesOfWorkingCapitalLoan(final List<String> header,
: new Utils.DoubleFormatter(response.getPeriodPaymentRate().doubleValue()).format());
case "discount" -> actualValues.add(
response.getDiscount() == null ? "null" : new Utils.DoubleFormatter(response.getDiscount().doubleValue()).format());
case "discountProposed" -> actualValues.add(response.getDiscountProposed() == null ? "null"
: new Utils.DoubleFormatter(response.getDiscountProposed().doubleValue()).format());
case "discountApproved" -> actualValues.add(response.getDiscountApproved() == null ? "null"
: new Utils.DoubleFormatter(response.getDiscountApproved().doubleValue()).format());
case "totalPaidPrincipal" ->
actualValues.add(response.getBalance() == null || response.getBalance().getTotalPaidPrincipal() == null ? null
: new Utils.DoubleFormatter(response.getBalance().getTotalPaidPrincipal().doubleValue()).format());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ Feature: Working Capital Breach Schedule
| submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
| 01 January 2026 | 01 January 2026 | 9000 | 100000 | 18 | 1000 |
And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount and "1000" discount amount
And Admin runs inline COB job for Working Capital Loan by loanId
Then Working Capital loan breach schedule has the following data:
| periodNumber | fromDate | toDate | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
Expand All @@ -123,7 +123,7 @@ Feature: Working Capital Breach Schedule
| submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
| 01 January 2026 | 01 January 2026 | 9000 | 100000 | 18 | 1000 |
And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount and "1000" discount amount
And Admin runs inline COB job for Working Capital Loan by loanId
Then Working Capital loan breach schedule has the following data:
| periodNumber | fromDate | toDate | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
Expand Down
Loading
Loading