From 514a684281c697104eb38bf63cb60a9da05c4323 Mon Sep 17 00:00:00 2001 From: MarianaDmytrivBinariks Date: Tue, 5 Aug 2025 16:39:07 +0300 Subject: [PATCH] FINERACT-2317: added e2e test for update available disbursement amount --- .../test/helper/ErrorMessageHelper.java | 8 + .../test/stepdef/loan/LoanStepDef.java | 88 +++++ .../src/test/resources/features/Loan.feature | 346 +++++++++++++++++- 3 files changed, 437 insertions(+), 5 deletions(-) diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java index 2d658a4f6..2a94fbaef 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java @@ -1006,6 +1006,14 @@ public final class ErrorMessageHelper { return "The parameter `amount` must be greater than 0."; } + public static String updateAvailableDisbursementLoanExceedPrincipalFailure() { + return "Failed data validation due to: can't.be.greater.than.maximum.available.disbursement.amount.calculation."; + } + + public static String updateAvailableDisbursementLoanLessMinAllowedAmountFailure() { + return "The parameter `amount` must be greater than or equal to 0."; + } + public static String wrongValueInLineInBuyDownFeeTab(String resourceId, int line, List> actualList, List expected) { String actual = actualList.stream().map(Object::toString).collect(Collectors.joining(System.lineSeparator())); diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java index 3be41323f..ffdd45627 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java @@ -104,6 +104,8 @@ import org.apache.fineract.client.models.PutLoanProductsProductIdRequest; import org.apache.fineract.client.models.PutLoanProductsProductIdResponse; import org.apache.fineract.client.models.PutLoansApprovedAmountRequest; import org.apache.fineract.client.models.PutLoansApprovedAmountResponse; +import org.apache.fineract.client.models.PutLoansAvailableDisbursementAmountRequest; +import org.apache.fineract.client.models.PutLoansAvailableDisbursementAmountResponse; import org.apache.fineract.client.models.PutLoansLoanIdRequest; import org.apache.fineract.client.models.PutLoansLoanIdResponse; import org.apache.fineract.client.services.BusinessDateManagementApi; @@ -5311,6 +5313,92 @@ public class LoanStepDef extends AbstractStepDef { assertThat(developerMessage).isEqualTo(ErrorMessageHelper.updateApprovedLoanLessMinAllowedAmountFailure()); } + @Then("Update loan available disbursement amount with new amount {string} value") + public void updateLoanAvailableDisbursementAmount(final String amount) throws IOException { + final Response loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); + final long loanId = loanResponse.body().getLoanId(); + final Response loanDetailsResponse = loansApi.retrieveLoan(loanId, false, "transactions", "", "").execute(); + ErrorHelper.checkSuccessfulApiCall(loanDetailsResponse); + + final PutLoansAvailableDisbursementAmountRequest modifyLoanAvailableDisbursementAmountRequest = new PutLoansAvailableDisbursementAmountRequest() + .locale(LOCALE_EN).amount(new BigDecimal(amount)); + + final Response modifyLoanAvailableDisbursementAmountResponse = loansApi + .modifyLoanAvailableDisbursementAmount(loanId, modifyLoanAvailableDisbursementAmountRequest).execute(); + + ErrorHelper.checkSuccessfulApiCall(modifyLoanAvailableDisbursementAmountResponse); + } + + @Then("Update loan available disbursement amount by external-id with new amount {string} value") + public void updateLoanAvailableDisbursementAmountByExternalId(final String amount) throws IOException { + final Response loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); + final long loanId = loanResponse.body().getLoanId(); + final String externalId = loanResponse.body().getResourceExternalId(); + final Response loanDetailsResponse = loansApi.retrieveLoan(loanId, false, "transactions", "", "").execute(); + ErrorHelper.checkSuccessfulApiCall(loanDetailsResponse); + + final PutLoansAvailableDisbursementAmountRequest modifyLoanAvailableDisbursementAmountRequest = new PutLoansAvailableDisbursementAmountRequest() + .locale(LOCALE_EN).amount(new BigDecimal(amount)); + + final Response modifyLoanAvailableDisbursementAmountResponse = loansApi + .modifyLoanAvailableDisbursementAmount1(externalId, modifyLoanAvailableDisbursementAmountRequest).execute(); + + ErrorHelper.checkSuccessfulApiCall(modifyLoanAvailableDisbursementAmountResponse); + } + + @Then("Update loan available disbursement amount is forbidden with amount {string} due to exceed applied amount") + public void updateLoanAvailableDisbursementAmountForbiddenExceedAppliedAmount(final String amount) throws IOException { + final Response loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); + final long loanId = loanResponse.body().getLoanId(); + final String externalId = loanResponse.body().getResourceExternalId(); + final Response loanDetailsResponse = loansApi.retrieveLoan(loanId, false, "transactions", "", "").execute(); + ErrorHelper.checkSuccessfulApiCall(loanDetailsResponse); + + final PutLoansAvailableDisbursementAmountRequest modifyLoanAvailableDisbursementAmountRequest = new PutLoansAvailableDisbursementAmountRequest() + .locale(LOCALE_EN).amount(new BigDecimal(amount)); + + final Response modifyLoanAvailableDisbursementAmountResponse = loansApi + .modifyLoanAvailableDisbursementAmount1(externalId, modifyLoanAvailableDisbursementAmountRequest).execute(); + + ErrorResponse errorDetails = ErrorResponse.from(modifyLoanAvailableDisbursementAmountResponse); + assertThat(errorDetails.getHttpStatusCode()).isEqualTo(403); + + Object errorArgs = errorDetails.getErrors().getFirst().getArgs().getFirst().getValue(); + String developerMessage; + if (errorArgs instanceof Map errorArgsMap) { + developerMessage = (String) errorArgsMap.get("developerMessage"); + } else { + developerMessage = errorDetails.getDeveloperMessage(); + } + assertThat(developerMessage).isEqualTo(ErrorMessageHelper.updateAvailableDisbursementLoanExceedPrincipalFailure()); + } + + @Then("Update loan available disbursement amount is forbidden with amount {string} due to min allowed amount") + public void updateLoanAvailableDisbursementAmountForbiddenMinAllowedAmount(final String amount) throws IOException { + final Response loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); + final long loanId = loanResponse.body().getLoanId(); + final Response loanDetailsResponse = loansApi.retrieveLoan(loanId, false, "transactions", "", "").execute(); + ErrorHelper.checkSuccessfulApiCall(loanDetailsResponse); + + final PutLoansAvailableDisbursementAmountRequest modifyLoanAvailableDisbursementAmountRequest = new PutLoansAvailableDisbursementAmountRequest() + .locale(LOCALE_EN).amount(new BigDecimal(amount)); + + final Response modifyLoanAvailableDisbursementAmountResponse = loansApi + .modifyLoanAvailableDisbursementAmount(loanId, modifyLoanAvailableDisbursementAmountRequest).execute(); + + ErrorResponse errorDetails = ErrorResponse.from(modifyLoanAvailableDisbursementAmountResponse); + assertThat(errorDetails.getHttpStatusCode()).isEqualTo(403); + + Object errorArgs = errorDetails.getErrors().getFirst().getArgs().getFirst().getValue(); + String developerMessage; + if (errorArgs instanceof Map errorArgsMap) { + developerMessage = (String) errorArgsMap.get("developerMessage"); + } else { + developerMessage = errorDetails.getDeveloperMessage(); + } + assertThat(developerMessage).isEqualTo(ErrorMessageHelper.updateAvailableDisbursementLoanLessMinAllowedAmountFailure()); + } + private Response addInterestRefundTransaction(final double amount, final Long transactionId) throws IOException { final Response loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); diff --git a/fineract-e2e-tests-runner/src/test/resources/features/Loan.feature b/fineract-e2e-tests-runner/src/test/resources/features/Loan.feature index 5a7a65cdc..cd015f1d5 100644 --- a/fineract-e2e-tests-runner/src/test/resources/features/Loan.feature +++ b/fineract-e2e-tests-runner/src/test/resources/features/Loan.feature @@ -7318,8 +7318,11 @@ Feature: Loan | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE_PMT_ALLOC_1 | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025" - Then Update loan approved amount is forbidden with amount "0" due to min allowed amount - When Admin successfully disburse the loan on "01 January 2025" with "1000" EUR transaction amount + Then Update loan approved amount is forbidden with amount "0" due to min allowed amount + When Admin successfully disburse the loan on "01 January 2025" with "1000" EUR transaction amount + + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met @TestRailId:C3859 Scenario: Verify update approved amount after undo disbursement for single disb progressive loan - UC3 @@ -7333,6 +7336,10 @@ Feature: Loan Then Update loan approved amount with new amount "600" value When Admin successfully undo disbursal Then Admin fails to disburse the loan on "1 January 2025" with "700" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "01 January 2025" with "600" EUR transaction amount + + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met @TestRailId:C3860 Scenario: Verify update approved amount with approved over applied amount for progressive multidisbursal loan with percentage overAppliedCalculationType - UC4 @@ -7347,6 +7354,9 @@ Feature: Loan Then Update loan approved amount with new amount "1300" value And Admin successfully disburse the loan on "1 January 2025" with "400" EUR transaction amount + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3861 Scenario: Verify update approved amount with approved over applied amount and capitalized income for progressive loan with percentage overAppliedCalculationType - UC8_1 When Admin sets the business date to "1 January 2025" @@ -7360,6 +7370,9 @@ Feature: Loan Then Update loan approved amount with new amount "1400" value And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "400" EUR transaction amount + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3862 Scenario: Verify update approved amount with capitalized income for progressive loan - UC8_2 When Admin sets the business date to "1 January 2025" @@ -7374,6 +7387,9 @@ Feature: Loan Then Update loan approved amount with new amount "1000" value And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3863 Scenario: Verify update approved amount with capitalized income for progressive multidisbursal loan - UC8_3 When Admin sets the business date to "1 January 2025" @@ -7388,17 +7404,23 @@ Feature: Loan Then Update loan approved amount with new amount "1000" value And Admin successfully disburse the loan on "1 January 2025" with "200" EUR transaction amount + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3864 Scenario: Verify update approved amount before disbursement for single disb cumulative loan - UC5_1 When Admin sets the business date to "1 January 2025" And Admin creates a client with random data When Admin creates a fully customized loan with the following data: - | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | - | LP1 | 1 January 2025 | 1000 | 0 | DECLINING_BALANCE | SAME_AS_REPAYMENT_PERIOD | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER | + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP1_INTEREST_FLAT | 1 January 2025 | 1000 | 0 | DECLINING_BALANCE | SAME_AS_REPAYMENT_PERIOD | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER | And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" Then Update loan approved amount with new amount "900" value And Admin successfully disburse the loan on "1 January 2025" with "100" EUR transaction amount + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3865 Scenario: Verify update approved amount before disbursement for single disb progressive loan - UC5_2 When Admin sets the business date to "1 January 2025" @@ -7410,6 +7432,9 @@ Feature: Loan Then Update loan approved amount with new amount "900" value And Admin successfully disburse the loan on "1 January 2025" with "100" EUR transaction amount + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3866 Scenario: Verify approved amount change for progressive multidisbursal loan that doesn't expect tranches - UC6 When Admin sets the business date to "01 January 2025" @@ -7435,8 +7460,11 @@ Feature: Loan When Admin successfully disburse the loan on "01 January 2025" with "400" EUR transaction amount Then Update loan approved amount is forbidden with amount "500" due to higher principal amount on loan + When Loan Pay-off is made on "1 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3867 - Scenario: Verify approved amount change with lower vallue for progressive multidisbursal loan that expects two tranches - UC7_1 + Scenario: Verify approved amount change with lower value for progressive multidisbursal loan that expects two tranches - UC7_1 When Admin sets the business date to "01 January 2025" When Admin creates a client with random data When Admin creates a fully customized loan with three expected disbursements details and following data: @@ -7453,6 +7481,23 @@ Feature: Loan When Admin sets the business date to "03 January 2025" Then Update loan approved amount is forbidden with amount "800" due to higher principal amount on loan + When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount + Then Admin fails to disburse the loan on "03 January 2025" with "700" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "03 January 2025" with "500" EUR transaction amount + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | 01 January 2025 | 300.0 | | + | 02 January 2025 | 02 January 2025 | 200.0 | | + | 03 January 2025 | 03 January 2025 | 500.0 | | + And Loan Transactions tab has the following data: + | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed | + | 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false | + | 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false | + | 03 January 2025 | Disbursement | 500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false | + + When Loan Pay-off is made on "3 January 2025" + Then Loan's all installments have obligations met + @TestRailId:C3868 Scenario: Verify approved amount change with greater value for progressive multidisbursal loan that expects two tranches - UC7_2 When Admin sets the business date to "01 January 2025" @@ -7470,3 +7515,294 @@ Feature: Loan When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount When Admin sets the business date to "03 January 2025" Then Update loan approved amount with new amount "1200" value + + When Admin successfully disburse the loan on "02 January 2025" with "300" EUR transaction amount + Then Admin fails to disburse the loan on "03 January 2025" with "700" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "03 January 2025" with "600" EUR transaction amount + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | 01 January 2025 | 300.0 | | + | 02 January 2025 | 02 January 2025 | 300.0 | | + | 03 January 2025 | 03 January 2025 | 600.0 | | + And Loan Transactions tab has the following data: + | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed | + | 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false | + | 02 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 600.0 | false | false | + | 03 January 2025 | Disbursement | 600.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1200.0 | false | false | + + When Loan Pay-off is made on "3 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3869 + Scenario: Verify update available disbursement amount for progressive loan - UC1 + When Admin sets the business date to "01 January 2025" + When Admin creates a client with random data + When Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE_PMT_ALLOC_1 | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025" + And Update loan available disbursement amount is forbidden with amount "1001" due to exceed applied amount + Then Update loan available disbursement amount is forbidden with amount "-100" due to min allowed amount + Then Update loan available disbursement amount by external-id with new amount "600" value + When Admin successfully disburse the loan on "01 January 2025" with "600" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3919 + Scenario: Verify update available disbursement amount after undo disbursement for single disb progressive loan - UC3 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + When Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" + And Admin successfully disburse the loan on "1 January 2025" with "100" EUR transaction amount + Then Update loan available disbursement amount by external-id with new amount "600" value + When Admin successfully undo disbursal + Then Admin fails to disburse the loan on "1 January 2025" with "750" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "01 January 2025" with "700" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3920 + Scenario: Verify update available disbursement amount with approved over applied amount for progressive multidisbursal loan with percentage overAppliedCalculationType - UC4 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + And Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_MULTIDISB_APPROVED_OVER_APPLIED_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" + And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount + Then Update loan available disbursement amount is forbidden with amount "601" due to exceed applied amount + Then Update loan available disbursement amount with new amount "500" value + And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3921 + Scenario: Verify update available disbursement amount with approved over applied amount and capitalized income for progressive loan with percentage overAppliedCalculationType - UC8_1 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + And Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_APPROVED_OVER_APPLIED_PERCENTAGE_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" + And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount + Then Update loan available disbursement amount is forbidden with amount "700" due to exceed applied amount + Then Update loan available disbursement amount with new amount "500" value + And Capitalized income with payment type "AUTOPAY" on "1 January 2025" is forbidden with amount "601" while exceed approved amount + And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "600" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3922 + Scenario: Verify update available disbursement amount with capitalized income for progressive loan - UC8_2 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + And Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" + And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount + Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount + And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount + Then Update loan available disbursement amount with new amount "150" value + And Capitalized income with payment type "AUTOPAY" on "1 January 2025" is forbidden with amount "151" while exceed approved amount + And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "150" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3923 + Scenario: Verify update available disbursement amount with capitalized income for progressive multidisbursal loan - UC8_3 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + And Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_MULTIDISB_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "1 January 2025" with "900" amount and expected disbursement date on "1 January 2025" + And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount + Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount + And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount + Then Update loan available disbursement amount by external-id with new amount "200" value + Then Admin fails to disburse the loan on "1 January 2025" with "201" EUR transaction amount due to exceed approved amount + And Admin successfully disburse the loan on "1 January 2025" with "200" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3924 + Scenario: Verify update available disbursement amount before disbursement for single disb cumulative loan - UC5_1 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + When Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP1_INTEREST_FLAT | 1 January 2025 | 1000 | 0 | DECLINING_BALANCE | SAME_AS_REPAYMENT_PERIOD | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER | + And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" + Then Update loan available disbursement amount with new amount "900" value + Then Admin fails to disburse the loan on "1 January 2025" with "901" EUR transaction amount due to exceed approved amount + And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3925 + Scenario: Verify update available disbursement amount before disbursement for single disb progressive loan - UC5_2 + When Admin sets the business date to "1 January 2025" + And Admin creates a client with random data + When Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025" + Then Update loan available disbursement amount by external-id with new amount "900" value + Then Admin fails to disburse the loan on "1 January 2025" with "901" EUR transaction amount due to exceed approved amount + And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3926 + Scenario: Verify available disbursement amount change for progressive multidisbursal loan that doesn't expect tranches - UC6 + When Admin sets the business date to "01 January 2025" + When Admin creates a client with random data + When Admin creates a fully customized loan with the following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | + And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025" + When Admin successfully disburse the loan on "01 January 2025" with "200" EUR transaction amount + Then Loan Repayment schedule has 6 periods, with the following data for periods: + | Nr | Days | Date | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due | Paid | In advance | Late | Outstanding | + | | | 01 January 2025 | | 200.0 | | | 0.0 | | 0.0 | 0.0 | | | | + | 1 | 31 | 01 February 2025 | | 167.15 | 32.85 | 1.17 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 | + | 2 | 28 | 01 March 2025 | | 134.11 | 33.04 | 0.98 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 | + | 3 | 31 | 01 April 2025 | | 100.87 | 33.24 | 0.78 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 | + | 4 | 30 | 01 May 2025 | | 67.44 | 33.43 | 0.59 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 | + | 5 | 31 | 01 June 2025 | | 33.81 | 33.63 | 0.39 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 | + | 6 | 30 | 01 July 2025 | | 0.0 | 33.81 | 0.2 | 0.0 | 0.0 | 34.01 | 0.0 | 0.0 | 0.0 | 34.01 | + Then Loan Repayment schedule has the following data in Total row: + | Principal due | Interest | Fees | Penalties | Due | Paid | In advance | Late | Outstanding | + | 200.0 | 4.11 | 0.0 | 0.0 | 204.11 | 0.0 | 0.0 | 0.0 | 204.11 | + Then Update loan available disbursement amount with new amount "400" value + Then Admin fails to disburse the loan on "1 January 2025" with "420" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "01 January 2025" with "399" EUR transaction amount + Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3927 + Scenario: Verify available disbursement amount change is forbidden with lower value for progressive multidisbursal loan that expects tranches - UC7_1 + When Admin sets the business date to "01 January 2025" + When Admin creates a client with random data + When Admin creates a fully customized loan with three expected disbursements details and following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 500.0 | + And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025" + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | | 300.0 | | + | 02 January 2025 | | 200.0 | | + | 03 January 2025 | | 500.0 | | +# --- disbursement - 1 January, 2025 --- + When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount + And Loan Transactions tab has the following data: + | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed | + | 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false | + When Admin sets the business date to "02 January 2025" + Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount + When Admin sets the business date to "03 January 2025" + Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount + When Admin sets the business date to "04 January 2025" + Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount + + When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount + When Admin successfully disburse the loan on "03 January 2025" with "500" EUR transaction amount + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | 01 January 2025 | 300.0 | | + | 02 January 2025 | 02 January 2025 | 200.0 | | + | 03 January 2025 | 03 January 2025 | 500.0 | | + And Loan Transactions tab has the following data: + | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed | + | 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false | + | 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false | + | 03 January 2025 | Disbursement | 500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false | + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3928 + Scenario: Verify available disbursement amount change with greater value above approved amount for progressive multidisbursal loan that expects tranches - UC7_2 + When Admin sets the business date to "01 January 2025" + When Admin creates a client with random data + When Admin creates a fully customized loan with three expected disbursements details and following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 500.0 | + And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025" + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | | 300.0 | | + | 02 January 2025 | | 200.0 | | + | 03 January 2025 | | 500.0 | | +# --- disbursement - 1 January, 2025 --- + When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount + When Admin sets the business date to "02 January 2025" + Then Update loan available disbursement amount with new amount "200" value + + When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount + When Admin sets the business date to "03 January 2025" + Then Admin fails to disburse the loan on "03 January 2025" with "800" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "03 January 2025" with "700" EUR transaction amount + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | 01 January 2025 | 300.0 | | + | 02 January 2025 | 02 January 2025 | 200.0 | | + | 03 January 2025 | 03 January 2025 | 700.0 | | + And Loan Transactions tab has the following data: + | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed | + | 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false | + | 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false | + | 03 January 2025 | Disbursement | 700.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1200.0 | false | false | + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met + + @TestRailId:C3929 + Scenario: Verify available disbursement amount change with greater value under approved amount for progressive multidisbursal loan that expects tranches - UC7_3 + When Admin sets the business date to "01 January 2025" + When Admin creates a client with random data + When Admin creates a fully customized loan with three expected disbursements details and following data: + | LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal | + | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 300.0 | + And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025" + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | | 300.0 | | + | 02 January 2025 | | 200.0 | | + | 03 January 2025 | | 300.0 | | +# --- disbursement - 1 January, 2025 --- + When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount + When Admin sets the business date to "02 January 2025" + Then Update loan available disbursement amount by external-id with new amount "150" value + + When Admin successfully disburse the loan on "02 January 2025" with "300" EUR transaction amount + When Admin sets the business date to "03 January 2025" + Then Admin fails to disburse the loan on "03 January 2025" with "400" EUR transaction amount due to exceed approved amount + When Admin successfully disburse the loan on "03 January 2025" with "350" EUR transaction amount + Then Loan Tranche Details tab has the following data: + | Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount | + | 01 January 2025 | 01 January 2025 | 300.0 | | + | 02 January 2025 | 02 January 2025 | 300.0 | | + | 03 January 2025 | 03 January 2025 | 350.0 | | + And Loan Transactions tab has the following data: + | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed | + | 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false | + | 02 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 600.0 | false | false | + | 03 January 2025 | Disbursement | 350.0 | 0.0 | 0.0 | 0.0 | 0.0 | 950.0 | false | false | + + When Loan Pay-off is made on "01 January 2025" + Then Loan's all installments have obligations met \ No newline at end of file