From 5b1875bf6e9814753580b8f1910987241edbd9f8 Mon Sep 17 00:00:00 2001 From: Eloy Coto Date: Tue, 18 Apr 2023 23:16:33 +0200 Subject: [PATCH] WorkFlowDefintion: increase test coverage Signed-off-by: Eloy Coto --- .../integration/PrebuiltWorkFlow.java | 3 +- .../WorkFlowDefinitionServiceImpl.java | 13 ++-- .../WorkFlowDefinitionServiceImplTest.java | 64 +++++++++++++++++++ 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/workflow-examples/src/test/java/com/redhat/parodos/examples/integration/PrebuiltWorkFlow.java b/workflow-examples/src/test/java/com/redhat/parodos/examples/integration/PrebuiltWorkFlow.java index 8af7c5f11..ee4c8c78f 100644 --- a/workflow-examples/src/test/java/com/redhat/parodos/examples/integration/PrebuiltWorkFlow.java +++ b/workflow-examples/src/test/java/com/redhat/parodos/examples/integration/PrebuiltWorkFlow.java @@ -66,7 +66,8 @@ public void runPreBuiltWorkFlow() throws ApiException, InterruptedException { assertNotNull(prebuiltWorkFlowDefinition.getId()); assertEquals(workFlowName, prebuiltWorkFlowDefinition.getName()); - assertEquals(WorkFlowDefinitionResponseDTO.ProcessingTypeEnum.SEQUENTIAL, prebuiltWorkFlowDefinition.getProcessingType()); + assertEquals(WorkFlowDefinitionResponseDTO.ProcessingTypeEnum.SEQUENTIAL, + prebuiltWorkFlowDefinition.getProcessingType()); assertEquals(WorkFlowType.INFRASTRUCTURE.toString(), prebuiltWorkFlowDefinition.getType()); assertNotNull(prebuiltWorkFlowDefinition.getWorks()); diff --git a/workflow-service/src/main/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImpl.java b/workflow-service/src/main/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImpl.java index b3ff5d9c3..3e4b89882 100644 --- a/workflow-service/src/main/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImpl.java +++ b/workflow-service/src/main/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImpl.java @@ -233,6 +233,7 @@ public void saveWorkFlowChecker(String workFlowTaskName, String workFlowCheckerN private void getWorksFromWorkDefinition(List workFlowWorkDefinitions, CopyOnWriteArrayList responseDTOs) { workFlowWorkDefinitions.forEach(workFlowWorkDefinition -> { + WorkType workType = workFlowWorkDefinition.getWorkDefinitionType(); if (workType == null) { return; @@ -284,6 +285,8 @@ private List buildWorkFlowWorksDTOs(WorkFlowDefinitio this.getWorksFromWorkDefinition(workFlowWorkDefinitions, workDefinitionResponseDTOs); // fill in subsequent workUnits + // this responseSize is like this because we modify the size of the + // workDefinitionResponseDTO for (int i = 1; i < workDefinitionResponseDTOs.size(); i++) { if (workDefinitionResponseDTOs.get(i).getWorkType().equalsIgnoreCase(WorkType.WORKFLOW.name())) { @@ -295,7 +298,6 @@ private List buildWorkFlowWorksDTOs(WorkFlowDefinitio UUID.fromString(workDefinitionResponseDTOs.get(i).getId())) .stream().sorted(Comparator.comparing(WorkFlowWorkDefinition::getCreateDate)) .collect(Collectors.toList()); - this.getWorksFromWorkDefinition(workFlowWorkUnits1Definition, workDefinitionResponseDTOs); } } @@ -303,10 +305,11 @@ private List buildWorkFlowWorksDTOs(WorkFlowDefinitio for (int j = workDefinitionResponseDTOs.size() - 1; j >= 0; j--) { if (workDefinitionResponseDTOs.get(j).getWorkType().equalsIgnoreCase(WorkType.WORKFLOW.name())) { List tmpList = new ArrayList<>(); - for (int k = workFlowWorksStartIndex - .get(workDefinitionResponseDTOs.get(j).getName()); k < workFlowWorksStartIndex - .get(workDefinitionResponseDTOs.get(j).getName()) - + workDefinitionResponseDTOs.get(j).getNumberOfWorkUnits(); k++) { + for (int k = workFlowWorksStartIndex.get(workDefinitionResponseDTOs.get(j) + .getName()); k < workFlowWorksStartIndex.get(workDefinitionResponseDTOs.get(j).getName()) + + workDefinitionResponseDTOs.get(j).getNumberOfWorkUnits() + && k < workDefinitionResponseDTOs.size(); k++) { + tmpList.add(workDefinitionResponseDTOs.get(k)); } workDefinitionResponseDTOs.get(j).setWorks(tmpList); diff --git a/workflow-service/src/test/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImplTest.java b/workflow-service/src/test/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImplTest.java index b0c907435..125c5d2ec 100644 --- a/workflow-service/src/test/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImplTest.java +++ b/workflow-service/src/test/java/com/redhat/parodos/workflow/definition/service/WorkFlowDefinitionServiceImplTest.java @@ -17,6 +17,7 @@ import com.redhat.parodos.workflow.definition.entity.WorkFlowCheckerMappingDefinition; import com.redhat.parodos.workflow.definition.entity.WorkFlowPropertiesDefinition; +import com.redhat.parodos.workflow.definition.entity.WorkFlowWorkDefinition; import com.redhat.parodos.workflow.definition.repository.WorkFlowCheckerMappingDefinitionRepository; import com.redhat.parodos.workflow.definition.repository.WorkFlowWorkRepository; import com.redhat.parodos.workflow.enums.WorkFlowProcessingType; @@ -27,6 +28,7 @@ import com.redhat.parodos.workflow.definition.entity.WorkFlowTaskDefinition; import com.redhat.parodos.workflow.definition.repository.WorkFlowDefinitionRepository; import com.redhat.parodos.workflow.definition.repository.WorkFlowTaskDefinitionRepository; +import com.redhat.parodos.workflow.enums.WorkType; import com.redhat.parodos.workflow.parameter.WorkParameter; import com.redhat.parodos.workflow.parameter.WorkParameterType; import com.redhat.parodos.workflow.util.WorkFlowDTOUtil; @@ -222,6 +224,61 @@ public void getWorkFlowDefinitionByNameWithValidNameTest() { Mockito.verify(this.workFlowDefinitionRepository, Mockito.times(1)).findFirstByName(any()); } + @Test + public void getWorkFlowDefinitionByNameWithMasterWorkflow() { + // given + WorkFlowDefinition masterWorkFlow = sampleWorkFlowDefinition(TEST); + WorkFlowWorkDefinition workFlowWorkDefinition = sampleWorkFlowWorkDefinition("workTest"); + Mockito.when(this.workFlowDefinitionRepository.findFirstByName(any())).thenReturn(masterWorkFlow); + + Mockito.when(this.workFlowDefinitionRepository.findById(Mockito.any())) + .thenReturn(Optional.of(sampleWorkFlowDefinition("SubWorkFlow"))); + + Mockito.when(this.workFlowWorkRepository.findByWorkFlowDefinitionIdOrderByCreateDateAsc(masterWorkFlow.getId())) + .thenReturn(List.of(sampleWorkFlowWorkDefinition("SubWorkFlow"))); + + // when + WorkFlowDefinitionResponseDTO result = this.workFlowDefinitionService.getWorkFlowDefinitionByName(TEST); + + // then + assertNotNull(result); + assertEquals(result.getName(), TEST); + + Mockito.verify(this.workFlowDefinitionRepository, Mockito.times(1)).findFirstByName(any()); + Mockito.when(this.workFlowDefinitionRepository.findFirstByName(any())) + .thenReturn(sampleWorkFlowDefinition(TEST)); + + assertEquals(result.getWorks().size(), 1); + assertEquals(result.getWorks().get(0).getName(), "SubWorkFlow"); + assertEquals(result.getWorks().get(0).getWorkType(), WorkType.WORKFLOW.toString()); + } + + @Test + public void getWorkFlowDefinitionByNameWithEmptyMasterWorkflow() { + // given + WorkFlowDefinition masterWorkFlow = sampleWorkFlowDefinition(TEST); + WorkFlowWorkDefinition workFlowWorkDefinition = sampleWorkFlowWorkDefinition("workTest"); + Mockito.when(this.workFlowDefinitionRepository.findFirstByName(any())).thenReturn(masterWorkFlow); + + Mockito.when(this.workFlowDefinitionRepository.findById(Mockito.any())).thenReturn(Optional.empty()); + + Mockito.when(this.workFlowWorkRepository.findByWorkFlowDefinitionIdOrderByCreateDateAsc(Mockito.any())) + .thenReturn(List.of(workFlowWorkDefinition)); + + // when + WorkFlowDefinitionResponseDTO result = this.workFlowDefinitionService.getWorkFlowDefinitionByName(TEST); + + // then + assertNotNull(result); + assertEquals(result.getName(), TEST); + + Mockito.verify(this.workFlowDefinitionRepository, Mockito.times(1)).findFirstByName(any()); + Mockito.when(this.workFlowDefinitionRepository.findFirstByName(any())) + .thenReturn(sampleWorkFlowDefinition(TEST)); + + assertEquals(result.getWorks().size(), 0); + } + @Test public void getWorkFlowDefinitionByNameWithInvalidNameTest() { // given @@ -345,6 +402,13 @@ private WorkFlowTaskDefinition sampleWorkFlowTaskDefinition(WorkFlowDefinition w return workFlowTaskDefinition; } + private WorkFlowWorkDefinition sampleWorkFlowWorkDefinition(String name) { + WorkFlowWorkDefinition workFlowWorkDefinition = WorkFlowWorkDefinition.builder().build(); + workFlowWorkDefinition.setWorkDefinitionType(WorkType.WORKFLOW); + workFlowWorkDefinition.setId(UUID.randomUUID()); + return workFlowWorkDefinition; + } + private WorkFlowDefinitionServiceImpl getWorkflowDefinitionService() { return new WorkFlowDefinitionServiceImpl(this.workFlowDefinitionRepository, this.workFlowTaskDefinitionRepository, this.workFlowCheckerMappingDefinitionRepository,