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 b62cc6f4c..35f942855 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 @@ -65,6 +65,7 @@ import org.apache.fineract.client.models.CommandProcessingResult; import org.apache.fineract.client.models.DeleteLoansLoanIdResponse; import org.apache.fineract.client.models.GetLoanProductsChargeOffReasonOptions; import org.apache.fineract.client.models.GetLoanProductsProductIdResponse; +import org.apache.fineract.client.models.GetLoanProductsResponse; import org.apache.fineract.client.models.GetLoanProductsTemplateResponse; import org.apache.fineract.client.models.GetLoansLoanIdDelinquencySummary; import org.apache.fineract.client.models.GetLoansLoanIdLoanChargeData; @@ -3834,4 +3835,32 @@ public class LoanStepDef extends AbstractStepDef { assertThat(totalPagesActual).as(ErrorMessageHelper.wrongValueInTotalPages(totalPagesActual, totalPagesExpected)) .isEqualTo(totalPagesExpected); } + + @Then("Loan Product response contains interestRecognitionOnDisbursementDate flag with value {string}") + public void verifyInterestRecognitionOnDisbursementDateFlag(final String expectedValue) throws IOException { + final Response loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE); + assertNotNull(loanResponse.body()); + final Long loanId = loanResponse.body().getLoanId(); + + final Response loanDetails = loansApi.retrieveLoan(loanId, false, "", "", "").execute(); + ErrorHelper.checkSuccessfulApiCall(loanDetails); + assertNotNull(loanDetails.body()); + + final Long targetLoanProductId = loanDetails.body().getLoanProductId(); + + final Response> allProductsResponse = loanProductsApi.retrieveAllLoanProducts().execute(); + ErrorHelper.checkSuccessfulApiCall(allProductsResponse); + + assertNotNull(allProductsResponse.body()); + final List loanProducts = allProductsResponse.body(); + assertThat(loanProducts).isNotEmpty(); + + final GetLoanProductsResponse targetProduct = loanProducts.stream().filter(product -> { + assertNotNull(product.getId()); + return product.getId().equals(targetLoanProductId); + }).findFirst().orElseThrow(() -> new AssertionError("Loan product with ID " + targetLoanProductId + " not found in response")); + + assertNotNull(targetProduct.getInterestRecognitionOnDisbursementDate()); + assertThat(targetProduct.getInterestRecognitionOnDisbursementDate().toString()).isEqualTo(expectedValue); + } } diff --git a/fineract-e2e-tests-runner/src/test/resources/features/LoanProduct.feature b/fineract-e2e-tests-runner/src/test/resources/features/LoanProduct.feature index 7726a5095..75ac07696 100644 --- a/fineract-e2e-tests-runner/src/test/resources/features/LoanProduct.feature +++ b/fineract-e2e-tests-runner/src/test/resources/features/LoanProduct.feature @@ -207,3 +207,9 @@ Feature: LoanProduct | Fraud | | 2 | true | false | | Delinquent | | 3 | true | false | | Other | | 4 | true | false | + + Scenario: As a user I would like to verify interestRecognitionOnDisbursementDate flag in loan product response + When Admin sets the business date to "01 January 2025" + When Admin creates a client with random data + And Admin successfully creates a new customised Loan submitted on date: "01 January 2025", with Principal: "1000", a loanTermFrequency: 1 months, and numberOfRepayments: 1 + Then Loan Product response contains interestRecognitionOnDisbursementDate flag with value "false" diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java index eb7c13701..8e01a143c 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java @@ -649,6 +649,8 @@ public final class LoanProductsApiResourceSwagger { public GetLoanProductsResponse.GetLoanProductsRepaymentStartDateType repaymentStartDateType; public List supportedInterestRefundTypes; public StringEnumOptionData chargeOffBehaviour; + @Schema(example = "false") + public Boolean interestRecognitionOnDisbursementDate; } @Schema(description = "GetLoanProductsTemplateResponse")