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

arnold 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 4e52bd3a0 [FINERACT-1678] all Loan COB steps are completed if there is 
no loan to be processed
4e52bd3a0 is described below

commit 4e52bd3a023668a0cfc6587f2a053d7eda425831
Author: taskain7 <[email protected]>
AuthorDate: Fri Mar 17 08:09:21 2023 +0100

    [FINERACT-1678] all Loan COB steps are completed if there is no loan to be 
processed
---
 .../fineract/cob/loan/FetchAndLockLoanTasklet.java |  2 ++
 .../fineract/cob/loan/LoanCOBPartitioner.java      |  8 +-------
 .../apache/fineract/cob/loan/LoanItemReader.java   |  1 -
 .../loan/LoanCOBPartitionerStepDefinitions.java    | 23 ++++++++++++----------
 .../features/cob/loan/cob.loan.partitioner.feature | 10 +---------
 5 files changed, 17 insertions(+), 27 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/FetchAndLockLoanTasklet.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/FetchAndLockLoanTasklet.java
index f11c8576b..80bb45c88 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/FetchAndLockLoanTasklet.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/FetchAndLockLoanTasklet.java
@@ -21,6 +21,7 @@ package org.apache.fineract.cob.loan;
 import com.google.common.collect.Lists;
 import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import lombok.RequiredArgsConstructor;
@@ -54,6 +55,7 @@ public class FetchAndLockLoanTasklet implements Tasklet {
         LocalDate businessDate = 
LocalDate.parse(Objects.requireNonNull(businessDateParameter));
         List<Long> allNonClosedLoanIds = 
retrieveLoanIdService.retrieveLoanIdsNDaysBehind(NUMBER_OF_DAYS_BEHIND, 
businessDate);
         if (allNonClosedLoanIds.isEmpty()) {
+            
contribution.getStepExecution().getJobExecution().getExecutionContext().put(LoanCOBConstant.LOAN_IDS,
 Collections.emptyList());
             return RepeatStatus.FINISHED;
         }
         List<Long> remainingIds = new ArrayList<>(allNonClosedLoanIds);
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java
index 1d4a912d9..2a851130a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java
@@ -37,7 +37,6 @@ import org.springframework.batch.core.launch.JobOperator;
 import org.springframework.batch.core.launch.NoSuchJobExecutionException;
 import org.springframework.batch.core.partition.support.Partitioner;
 import org.springframework.batch.item.ExecutionContext;
-import org.springframework.util.CollectionUtils;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -58,17 +57,12 @@ public class LoanCOBPartitioner implements Partitioner {
         int partitionSize = 
propertyService.getPartitionSize(LoanCOBConstant.JOB_NAME);
         Set<BusinessStepNameAndOrder> cobBusinessSteps = 
cobBusinessStepService.getCOBBusinessSteps(LoanCOBBusinessStep.class,
                 LoanCOBConstant.LOAN_COB_JOB_NAME);
-        if (cobBusinessSteps.isEmpty()) {
-            stopJobExecution();
-            return Map.of();
-        }
         return getPartitions(partitionSize, cobBusinessSteps);
     }
 
     private Map<String, ExecutionContext> getPartitions(int partitionSize, 
Set<BusinessStepNameAndOrder> cobBusinessSteps) {
         Map<String, ExecutionContext> partitions = new HashMap<>();
-
-        if (CollectionUtils.isEmpty(loanIds)) {
+        if (cobBusinessSteps.isEmpty()) {
             stopJobExecution();
             return Map.of();
         }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java
index 2b7993e88..36bdad5ea 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java
@@ -35,7 +35,6 @@ public class LoanItemReader extends AbstractLoanItemReader {
     @BeforeStep
     @SuppressWarnings({ "unchecked" })
     public void beforeStep(@NotNull StepExecution stepExecution) {
-
         ExecutionContext executionContext = 
stepExecution.getExecutionContext();
         ExecutionContext jobExecutionContext = 
stepExecution.getJobExecution().getExecutionContext();
         List<Long> loanIds = (List<Long>) 
executionContext.get(LoanCOBConstant.LOAN_IDS);
diff --git 
a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerStepDefinitions.java
 
b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerStepDefinitions.java
index 626ea96b5..03a045ac3 100644
--- 
a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerStepDefinitions.java
+++ 
b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerStepDefinitions.java
@@ -19,7 +19,6 @@
 package org.apache.fineract.cob.loan;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.mock;
@@ -27,7 +26,6 @@ import static org.mockito.Mockito.verify;
 
 import com.google.gson.Gson;
 import io.cucumber.java8.En;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -70,12 +68,12 @@ public class LoanCOBPartitionerStepDefinitions implements 
En {
                         .thenReturn(Collections.emptySet());
                 
lenient().when(jobExplorer.findRunningJobExecutions(JobName.LOAN_COB.name())).thenReturn(Set.of(new
 JobExecution(3L)));
                 lenient().when(jobOperator.stop(3L)).thenReturn(Boolean.TRUE);
+                loanIds = Collections.emptyList();
             } else if ("empty loanIds".equals(action)) {
                 cobBusinessSteps.add(new BusinessStepNameAndOrder("Business 
step", 1L));
                 
lenient().when(cobBusinessStepService.getCOBBusinessSteps(LoanCOBBusinessStep.class,
 LoanCOBConstant.LOAN_COB_JOB_NAME))
                         .thenReturn(cobBusinessSteps);
-                loanIds = new ArrayList<>();
-                
lenient().when(jobExplorer.findRunningJobExecutions(JobName.LOAN_COB.name())).thenThrow(new
 RuntimeException("fail"));
+                loanIds = Collections.emptyList();
             } else if ("good".equals(action)) {
                 cobBusinessSteps.add(new BusinessStepNameAndOrder("Business 
step", 1L));
                 
lenient().when(cobBusinessStepService.getCOBBusinessSteps(LoanCOBBusinessStep.class,
 LoanCOBConstant.LOAN_COB_JOB_NAME))
@@ -113,13 +111,18 @@ public class LoanCOBPartitionerStepDefinitions implements 
En {
                         
businessSteps.stream().findFirst().get().getStepName());
                 assertEquals(1, ((List) 
resultItem.get(LoanCOBPartitioner.PARTITION_PREFIX + 
"2").get(LoanCOBConstant.LOAN_IDS)).size());
                 assertEquals(3L, ((List) 
resultItem.get(LoanCOBPartitioner.PARTITION_PREFIX + 
"2").get(LoanCOBConstant.LOAN_IDS)).get(0));
+            } else if ("empty loanIds".equals(action)) {
+                verify(jobOperator, Mockito.times(0)).stop(Mockito.anyLong());
+                assertEquals(1, resultItem.size());
+                
assertTrue(resultItem.containsKey(LoanCOBPartitioner.PARTITION_PREFIX + "1"));
+                Set<BusinessStepNameAndOrder> businessSteps = 
(Set<BusinessStepNameAndOrder>) resultItem
+                        .get(LoanCOBPartitioner.PARTITION_PREFIX + 
"1").get(LoanCOBConstant.BUSINESS_STEPS);
+                
assertEquals(cobBusinessSteps.stream().findFirst().get().getStepOrder(),
+                        
businessSteps.stream().findFirst().get().getStepOrder());
+                
assertEquals(cobBusinessSteps.stream().findFirst().get().getStepName(),
+                        
businessSteps.stream().findFirst().get().getStepName());
+                assertEquals(0, ((List) 
resultItem.get(LoanCOBPartitioner.PARTITION_PREFIX + 
"1").get(LoanCOBConstant.LOAN_IDS)).size());
             }
         });
-
-        Then("throw exception LoanCOBPartitioner.partition method", () -> {
-            assertThrows(RuntimeException.class, () -> {
-                resultItem = this.loanCOBPartitioner.partition(2);
-            });
-        });
     }
 }
diff --git 
a/fineract-provider/src/test/resources/features/cob/loan/cob.loan.partitioner.feature
 
b/fineract-provider/src/test/resources/features/cob/loan/cob.loan.partitioner.feature
index 404928ce4..16edca086 100644
--- 
a/fineract-provider/src/test/resources/features/cob/loan/cob.loan.partitioner.feature
+++ 
b/fineract-provider/src/test/resources/features/cob/loan/cob.loan.partitioner.feature
@@ -29,12 +29,4 @@ Feature: COB Loan partitioner Step
       |action|
       |empty steps|
       |good|
-
-  @cob
-  Scenario Outline: LoanCOBPartitioner - run test: exception
-    Given The LoanCOBPartitioner.partition method with action <action>
-    Then throw exception LoanCOBPartitioner.partition method
-
-    Examples:
-      |action|
-      |empty loanIds|
\ No newline at end of file
+      |empty loanIds|

Reply via email to