This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 4e877451c FINERACT-1724: Loan product delinquency bucket should not be 
mandatory
4e877451c is described below

commit 4e877451c32621411c4973c3d30c1dda6e104a33
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Wed Dec 13 16:47:06 2023 -0600

    FINERACT-1724: Loan product delinquency bucket should not be mandatory
---
 .../serialization/LoanProductDataValidator.java    |  4 +--
 .../DelinquencyBucketsIntegrationTest.java         | 42 ++++++++++++++++++++++
 2 files changed, 44 insertions(+), 2 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java
index e7d99ccc4..7e5035294 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java
@@ -343,8 +343,8 @@ public final class LoanProductDataValidator {
         if 
(this.fromApiJsonHelper.parameterExists(LoanProductConstants.DELINQUENCY_BUCKET_PARAM_NAME,
 element)) {
             final Long delinquencyBucketId = 
this.fromApiJsonHelper.extractLongNamed(LoanProductConstants.DELINQUENCY_BUCKET_PARAM_NAME,
                     element);
-            
baseDataValidator.reset().parameter(LoanProductConstants.DELINQUENCY_BUCKET_PARAM_NAME).value(delinquencyBucketId).notNull()
-                    .integerGreaterThanZero();
+            
baseDataValidator.reset().parameter(LoanProductConstants.DELINQUENCY_BUCKET_PARAM_NAME).value(delinquencyBucketId)
+                    .ignoreIfNull().integerGreaterThanZero();
         }
 
         // grace validation
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
index d7ccbf91f..3dd2c5586 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java
@@ -248,6 +248,48 @@ public class DelinquencyBucketsIntegrationTest {
         DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, 
response403Spec, jsonBucket);
     }
 
+    @Test
+    public void testLoanProductCreationWithAndWithoutDelinquencyBucket() {
+        // Given
+        final LoanTransactionHelper loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+
+        ArrayList<Integer> rangeIds = new ArrayList<>();
+        // First Range
+        String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
+        PostDelinquencyRangeResponse delinquencyRangeResponse = 
DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec,
+                jsonRange);
+        rangeIds.add(delinquencyRangeResponse.getResourceId());
+        jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
+
+        GetDelinquencyRangesResponse range = 
DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
+                delinquencyRangeResponse.getResourceId());
+
+        // Second Range
+        delinquencyRangeResponse = 
DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, 
jsonRange);
+        rangeIds.add(delinquencyRangeResponse.getResourceId());
+
+        range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, 
responseSpec, delinquencyRangeResponse.getResourceId());
+        final String classificationExpected = range.getClassification();
+        log.info("Expected Delinquency Range classification after Disbursement 
{}", classificationExpected);
+
+        String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
+        PostDelinquencyBucketResponse delinquencyBucketResponse = 
DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
+                responseSpec, jsonBucket);
+        assertNotNull(delinquencyBucketResponse);
+        final GetDelinquencyBucketsResponse delinquencyBucket = 
DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
+                delinquencyBucketResponse.getResourceId());
+
+        // Loan product creation without Delinquency bucket
+        GetLoanProductsProductIdResponse getLoanProductResponse = 
createLoanProduct(loanTransactionHelper, null, null);
+        assertNotNull(getLoanProductResponse);
+
+        // Loan product creation with Delinquency bucket
+        getLoanProductResponse = createLoanProduct(loanTransactionHelper, 
Math.toIntExact(delinquencyBucket.getId()), null);
+        assertNotNull(getLoanProductResponse);
+        log.info("Loan Product Bucket Name: {}", 
getLoanProductResponse.getDelinquencyBucket().getName());
+        assertEquals(getLoanProductResponse.getDelinquencyBucket().getName(), 
delinquencyBucket.getName());
+    }
+
     @Test
     public void testLoanClassificationRealtime() {
         try {

Reply via email to