Unittests added
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
index 204b858..49c07da 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
@@ -163,7 +163,7 @@
 
             Assert.notNull(existingDtoClone, "existingDtoClone was null");
             //Don't update if the failureinformation was already edited by an user
-            if (foreignFailureDataDto.isExcludeAlreadyEdited() && !Objects.equals(updatedDto.getModUser(), existingDtoClone.getModUser())){
+            if (foreignFailureDataDto.isExcludeAlreadyEdited() && !Objects.equals(updatedDto.getModUser(), existingDtoClone.getModUser())){ //NOSONAR assertion for existingDtoClone exists and logically existingDtoClone must be valid
                 log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
                         + importDataDto.getSource() + " has already been edited in SIT by an user, no update will be executed.");
                 return null;
@@ -190,7 +190,7 @@
         }
     }
 
-    private FailureInformationDto setNewFromForeignDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
+    public FailureInformationDto setNewFromForeignDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
         FailureInformationDto failureInformationDto = failureInformationMapper.mapForeignFiDtoToGfiDto(foreignFailureDataDto);
 
 
@@ -200,7 +200,7 @@
         return failureInformationDto;
     }
 
-    private FailureInformationDto setUpdateFromForeignDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto, FailureInformationDto failureInformationDto) {
+    public FailureInformationDto setUpdateFromForeignDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto, FailureInformationDto failureInformationDto) {
         setFromForeignDto(importDataDto, foreignFailureDataDto, failureInformationDto);
         failureInformationDto.setModUser(importDataDto.getSource());
         return failureInformationDto;
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java
index 28a6709..6fd72ba 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java
@@ -524,4 +524,153 @@
         verify(processHelper, times(1)).resetPublishedStateForChannels(any());
     }
 
+    @Test
+    public void shouldImportUpdateMessageOnceOnly() {
+        ImportDataDto dto = MockDataHelper.mockImportDataDto();
+        dto.setMessageContent("{\n" +
+                "    \"branch\": \"S\",\n" + // invalid branch
+                "    \"city\": \"Belfast\",\n" +
+                "    \"description\": \"Schlimmer Fehler im System\",\n" +
+                "    \"district\": \"\",\n" +
+                "    \"failureBegin\": \"2020-11-19T14:13:15.666Z\",\n" +
+                "    \"housenumber\": \"10b\",\n" +
+                "    \"latitude\": 12.345,\n" +
+                "    \"longitude\": 0,\n" +
+                "    \"planned\": false,\n" +
+                "    \"postcode\": \"3456\",\n" +
+                "    \"pressureLevel\": null,\n" +
+                "    \"radiusInMeters\": 678,\n" +
+                "    \"stationDescription\": null,\n" +
+                "    \"stationId\": null,\n" +
+                "    \"street\": \"Oxfordstreet\",\n" +
+                "    \"voltageLevel\": \"HS\",\n" +
+                "    \"onceOnlyImport\": \"true\",\n" +
+                "    \"autopublish\": \"false\"\n" +
+                "  }");
+
+        BranchDto branchStromDto = MockDataHelper.mockBranchDto();
+        branchStromDto.setName("S");
+        when( branchService.findByName(eq("S"))).thenReturn(branchStromDto);
+        StatusDto qualifiedStatusDto = MockDataHelper.mockStatusDto("qualified", UUID.randomUUID());
+        StatusDto canceledStatusDto = MockDataHelper.mockStatusDto("canceled", UUID.randomUUID());
+        StatusDto completedStatusDto = MockDataHelper.mockStatusDto("completed", UUID.randomUUID());
+        StatusDto udpatedStatusDto = MockDataHelper.mockStatusDto("updated", UUID.randomUUID());
+
+        when( statusService.getStatusFromId( GfiProcessState.QUALIFIED.getStatusValue()) ).thenReturn(qualifiedStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.COMPLETED.getStatusValue()) ).thenReturn(completedStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.CANCELED.getStatusValue()) ).thenReturn(canceledStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.UPDATED.getStatusValue()) ).thenReturn(udpatedStatusDto);
+        when( radiusService.getRadii() ).thenReturn(getRadiusDtoList());
+
+        FailureInformationDto existingDto = MockDataHelper.mockFailureInformationDto();
+        existingDto.setStatusInternId(qualifiedStatusDto.getUuid());
+        when( failureInformationService.findByObjectReferenceExternalSystem(anyString())).thenReturn(existingDto);
+
+        importService.validateAndImport(dto);
+
+        verify(failureInformationService, times(0))
+                .updateFailureInfo(any( FailureInformationDto.class));
+    }
+
+    @Test
+    public void shouldImportUpdateMessageExcludeEquals() {
+        ImportDataDto dto = MockDataHelper.mockImportDataDto();
+        dto.setMessageContent("{\n" +
+                "    \"branch\": \"S\",\n" + // invalid branch
+                "    \"city\": \"Belfast\",\n" +
+                "    \"description\": \"Schlimmer Fehler im System\",\n" +
+                "    \"district\": \"\",\n" +
+                "    \"failureBegin\": \"2020-11-19T14:13:15.666Z\",\n" +
+                "    \"housenumber\": \"10b\",\n" +
+                "    \"latitude\": 12.345,\n" +
+                "    \"longitude\": 0,\n" +
+                "    \"planned\": false,\n" +
+                "    \"postcode\": \"3456\",\n" +
+                "    \"pressureLevel\": null,\n" +
+                "    \"radiusInMeters\": 678,\n" +
+                "    \"stationDescription\": null,\n" +
+                "    \"stationId\": null,\n" +
+                "    \"street\": \"Oxfordstreet\",\n" +
+                "    \"voltageLevel\": \"HS\",\n" +
+                "    \"excludeEquals\": \"true\",\n" +
+                "    \"excludeAlreadyEdited\": \"true\",\n" +
+                "    \"autopublish\": \"false\"\n" +
+                "  }");
+
+        ForeignFailureDataDto foreignFailureDataDto = importDataValidator.readSafeForeignFailureInfo(dto);
+
+        BranchDto branchStromDto = MockDataHelper.mockBranchDto();
+        branchStromDto.setName("S");
+        when( branchService.findByName(eq("S"))).thenReturn(branchStromDto);
+        StatusDto qualifiedStatusDto = MockDataHelper.mockStatusDto("qualified", UUID.randomUUID());
+        StatusDto canceledStatusDto = MockDataHelper.mockStatusDto("canceled", UUID.randomUUID());
+        StatusDto completedStatusDto = MockDataHelper.mockStatusDto("completed", UUID.randomUUID());
+        StatusDto udpatedStatusDto = MockDataHelper.mockStatusDto("updated", UUID.randomUUID());
+
+        when( statusService.getStatusFromId( GfiProcessState.QUALIFIED.getStatusValue()) ).thenReturn(qualifiedStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.COMPLETED.getStatusValue()) ).thenReturn(completedStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.CANCELED.getStatusValue()) ).thenReturn(canceledStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.UPDATED.getStatusValue()) ).thenReturn(udpatedStatusDto);
+        when( radiusService.getRadii() ).thenReturn(getRadiusDtoList());
+
+        FailureInformationDto existingDto = importService.setNewFromForeignDto(dto, foreignFailureDataDto);
+        existingDto.setStatusInternId(qualifiedStatusDto.getUuid());
+        when( failureInformationService.findByObjectReferenceExternalSystem(anyString())).thenReturn(existingDto);
+
+        importService.validateAndImport(dto);
+
+        verify(failureInformationService, times(0))
+                .updateFailureInfo(any( FailureInformationDto.class));
+    }
+
+    @Test
+    public void shouldImportUpdateMessageExcludeAlreadyEdited() {
+        ImportDataDto dto = MockDataHelper.mockImportDataDto();
+        dto.setMessageContent("{\n" +
+                "    \"branch\": \"S\",\n" + // invalid branch
+                "    \"city\": \"Belfast\",\n" +
+                "    \"description\": \"Schlimmer Fehler im System\",\n" +
+                "    \"district\": \"\",\n" +
+                "    \"failureBegin\": \"2020-11-19T14:13:15.666Z\",\n" +
+                "    \"housenumber\": \"10b\",\n" +
+                "    \"latitude\": 12.345,\n" +
+                "    \"longitude\": 0,\n" +
+                "    \"planned\": false,\n" +
+                "    \"postcode\": \"3456\",\n" +
+                "    \"pressureLevel\": null,\n" +
+                "    \"radiusInMeters\": 678,\n" +
+                "    \"stationDescription\": null,\n" +
+                "    \"stationId\": null,\n" +
+                "    \"street\": \"Oxfordstreet\",\n" +
+                "    \"voltageLevel\": \"HS\",\n" +
+                "    \"excludeEquals\": \"true\",\n" +
+                "    \"excludeAlreadyEdited\": \"true\",\n" +
+                "    \"autopublish\": \"false\"\n" +
+                "  }");
+
+        BranchDto branchStromDto = MockDataHelper.mockBranchDto();
+        branchStromDto.setName("S");
+        when( branchService.findByName(eq("S"))).thenReturn(branchStromDto);
+        StatusDto qualifiedStatusDto = MockDataHelper.mockStatusDto("qualified", UUID.randomUUID());
+        StatusDto canceledStatusDto = MockDataHelper.mockStatusDto("canceled", UUID.randomUUID());
+        StatusDto completedStatusDto = MockDataHelper.mockStatusDto("completed", UUID.randomUUID());
+        StatusDto udpatedStatusDto = MockDataHelper.mockStatusDto("updated", UUID.randomUUID());
+
+        when( statusService.getStatusFromId( GfiProcessState.QUALIFIED.getStatusValue()) ).thenReturn(qualifiedStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.COMPLETED.getStatusValue()) ).thenReturn(completedStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.CANCELED.getStatusValue()) ).thenReturn(canceledStatusDto);
+        when( statusService.getStatusFromId( GfiProcessState.UPDATED.getStatusValue()) ).thenReturn(udpatedStatusDto);
+        when( radiusService.getRadii() ).thenReturn(getRadiusDtoList());
+
+        FailureInformationDto existingDto = MockDataHelper.mockFailureInformationDto();
+        existingDto.setStatusInternId(qualifiedStatusDto.getUuid());
+        when( failureInformationService.findByObjectReferenceExternalSystem(anyString())).thenReturn(existingDto);
+
+        importService.validateAndImport(dto);
+
+        verify(failureInformationService, times(0))
+                .updateFailureInfo(any( FailureInformationDto.class));
+        verify(processHelper, times(0)).resetPublishedStateForChannels(any());
+    }
+
 }