SI-740 - SI-1984 Unittests
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoHasSubordinatedInfosTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoHasSubordinatedInfosTest.java
new file mode 100644
index 0000000..dd095a2
--- /dev/null
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoHasSubordinatedInfosTest.java
@@ -0,0 +1,48 @@
+package org.eclipse.openk.gridfailureinformation.bpmn.impl;
+
+import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessException;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.DecideFailureInfoHasSubordinatedInfos;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.ProcessHelper;
+import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class DecideFailureInfoHasSubordinatedInfosTest {
+
+
+    @Test
+    void shouldDecideYes() throws ProcessException {
+        ProcessHelper processHelper = mock(ProcessHelper.class);
+        List<FailureInformationDto> children = MockDataHelper.mockGridFailureInformationDtos();
+        when( processHelper.getSubordinatedChildren( any(FailureInformationDto.class)))
+                .thenReturn(children);
+
+        GfiProcessSubject sub = GfiProcessSubject.of(MockDataHelper.mockFailureInformationDto(), processHelper);
+
+        DecisionTask<GfiProcessSubject> dTask = new DecideFailureInfoHasSubordinatedInfos();
+        assertEquals( DecisionTask.OutputPort.YES, dTask.decide(sub));
+    }
+
+
+    @Test
+    void shouldDecideNo() throws ProcessException {
+        ProcessHelper processHelper = mock(ProcessHelper.class);
+        List<FailureInformationDto> children = new ArrayList<>();
+        when( processHelper.getSubordinatedChildren( any(FailureInformationDto.class)))
+                .thenReturn(children);
+
+        GfiProcessSubject sub = GfiProcessSubject.of(MockDataHelper.mockFailureInformationDto(), processHelper);
+
+        DecisionTask<GfiProcessSubject> dTask = new DecideFailureInfoHasSubordinatedInfos();
+        assertEquals( DecisionTask.OutputPort.NO, dTask.decide(sub));
+    }
+}
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/ProcessHelperTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/ProcessHelperTest.java
index 06388e5..a63ea61 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/ProcessHelperTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/ProcessHelperTest.java
@@ -18,10 +18,15 @@
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.ProcessHelper;
 import org.eclipse.openk.gridfailureinformation.config.TestConfiguration;
 import org.eclipse.openk.gridfailureinformation.exceptions.InternalServerErrorException;
+import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
 import org.eclipse.openk.gridfailureinformation.model.RefFailureClassification;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.repository.FailureClassificationRepository;
+import org.eclipse.openk.gridfailureinformation.repository.FailureInformationPublicationChannelRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationRepository;
 import org.eclipse.openk.gridfailureinformation.repository.StatusRepository;
+import org.eclipse.openk.gridfailureinformation.service.FailureInformationService;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
 import org.junit.jupiter.api.Test;
@@ -30,17 +35,17 @@
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.ContextConfiguration;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.when;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
 
 @DataJpaTest
 @ContextConfiguration(classes = {TestConfiguration.class})
-public class ProcessHelperTest {
+class ProcessHelperTest {
     @Autowired
     private ProcessHelper processHelper;
 
@@ -53,8 +58,14 @@
     @MockBean
     private StatusRepository statusRepository;
 
+    @MockBean
+    private FailureInformationPublicationChannelRepository channelRepository;
+
+    @MockBean
+    private FailureInformationService failureInformationService;
+
     @Test
-    public void shouldDetectIfFailureInfoIsPlanned_True() {
+    void shouldDetectIfFailureInfoIsPlanned_True() {
         RefFailureClassification fc = MockDataHelper.mockRefFailureClassification();
         FailureInformationDto dto = MockDataHelper.mockFailureInformationDto();
         dto.setFailureClassificationId(fc.getUuid());
@@ -65,7 +76,7 @@
     }
 
     @Test
-    public void shouldDetectIfFailureInfoIsPlanned_False() {
+    void shouldDetectIfFailureInfoIsPlanned_False() {
         RefFailureClassification fc = MockDataHelper.mockRefFailureClassification();
         FailureInformationDto dto = MockDataHelper.mockFailureInformationDto();
         dto.setFailureClassificationId(UUID.randomUUID());
@@ -76,7 +87,7 @@
     }
 
     @Test
-    public void shouldDetectIfFailureInfoIsPlanned_Exception() {
+    void shouldDetectIfFailureInfoIsPlanned_Exception() {
         RefFailureClassification fc = MockDataHelper.mockRefFailureClassification();
         FailureInformationDto dto = MockDataHelper.mockFailureInformationDto();
         when( failureClassificationRepository.findById(anyLong()))
@@ -87,8 +98,45 @@
 
 
     @Test
-    public void shouldGetProcessStateFromStatus_Exception() {
+    void shouldGetProcessStateFromStatus_Exception() {
         when( statusRepository.findByUuid(any( UUID.class ))).thenReturn(Optional.empty());
-        assertThrows(InternalServerErrorException.class, () -> processHelper.getProcessStateFromStatusUuid(UUID.randomUUID()));
+        final UUID statusUuid = UUID.randomUUID();
+        assertThrows(InternalServerErrorException.class, () -> processHelper.getProcessStateFromStatusUuid(statusUuid));
     }
+
+    @Test
+    void shouldResetProcessStateWithException() {
+        FailureInformationDto dto = MockDataHelper.mockFailureInformationDto();
+        when( failureInformationRepository.findByUuid(any( UUID.class ))).thenReturn(Optional.empty());
+
+        assertThrows(NotFoundException.class,
+                () -> processHelper.resetPublishedStateForChannels(dto));
+    }
+
+
+    @Test
+    void shouldResetProcessStateCorrectly() {
+        FailureInformationDto dto = MockDataHelper.mockFailureInformationDto();
+        TblFailureInformation tblFi = MockDataHelper.mockTblFailureInformation();
+        when( failureInformationRepository.findByUuid(any( UUID.class ))).thenReturn(Optional.of(tblFi));
+
+        List<TblFailureInformationPublicationChannel> distChannels = MockDataHelper.mockTblFailureInformationPublicationChannelList();
+        when( channelRepository.findByTblFailureInformation(eq(tblFi) )).thenReturn(distChannels);
+
+        processHelper.resetPublishedStateForChannels(dto);
+
+        verify(channelRepository, times( distChannels.size())).save(any( TblFailureInformationPublicationChannel.class));
+    }
+
+    @Test
+    void shouldGetSubordinatedChildrenCorrectly() {
+        FailureInformationDto parentDto = MockDataHelper.mockFailureInformationDto();
+        List<FailureInformationDto> dtos = MockDataHelper.mockGridFailureInformationDtos();
+        when( failureInformationService.findFailureInformationsByCondensedUuid(eq(parentDto.getUuid()))).thenReturn(dtos);
+
+        List<FailureInformationDto> dtoResults = processHelper.getSubordinatedChildren(parentDto);
+
+        assertEquals(dtos.get(0).getUuid(), dtoResults.get(0).getUuid());
+    }
+
 }
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/StoreEditStatusOfParentToChildrenTaskTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/StoreEditStatusOfParentToChildrenTaskTest.java
new file mode 100644
index 0000000..54d42fb
--- /dev/null
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/StoreEditStatusOfParentToChildrenTaskTest.java
@@ -0,0 +1,37 @@
+package org.eclipse.openk.gridfailureinformation.bpmn.impl;
+
+import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessException;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessTask;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.ProcessHelper;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.StoreEditStatusOfParentToChildrenTask;
+import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+import java.util.UUID;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.*;
+
+class StoreEditStatusOfParentToChildrenTaskTest {
+
+
+    @Test
+    void shouldDecideYes() throws ProcessException {
+        ProcessHelper processHelper = mock(ProcessHelper.class);
+        List<FailureInformationDto> children = MockDataHelper.mockGridFailureInformationDtos();
+        when( processHelper.getSubordinatedChildren( any(FailureInformationDto.class)))
+                .thenReturn(children);
+        when( processHelper.getProcessStateFromStatusUuid(any(UUID.class))).thenReturn(GfiProcessState.UPDATED);
+
+        GfiProcessSubject sub = GfiProcessSubject.of(MockDataHelper.mockFailureInformationDto(), processHelper);
+
+        ProcessTask daTask = new StoreEditStatusOfParentToChildrenTask();
+        daTask.leaveStep(sub);
+
+        verify( processHelper, times( children.size()))
+                .storeEditStatus(any(FailureInformationDto.class), eq(GfiProcessState.UPDATED));
+    }
+
+}