diff --git a/gfsBackendService/Dockerfile_Branch b/gfsBackendService/Dockerfile_Branch
index 0c2947f..6b742d7 100644
--- a/gfsBackendService/Dockerfile_Branch
+++ b/gfsBackendService/Dockerfile_Branch
@@ -10,4 +10,4 @@
 
 COPY /target/grid-failure-information.backend.service.jar /usr/src/cbd/
 WORKDIR usr/src/cbd
-CMD ["java", "-jar", "-Dspring.config.name=application", "-Dspring.profiles.active=devserver-branch,swagger", "grid-failure-information.backend.service.jar"]
\ No newline at end of file
+CMD ["java", "-jar", "-Dspring.config.name=application", "-Dspring.profiles.active=devserver-branch", "grid-failure-information.backend.service.jar"]
\ No newline at end of file
diff --git a/gfsBackendService/Dockerfile_DevServer b/gfsBackendService/Dockerfile_DevServer
index c8f0f0b..71fc8f5 100644
--- a/gfsBackendService/Dockerfile_DevServer
+++ b/gfsBackendService/Dockerfile_DevServer
@@ -10,4 +10,4 @@
 
 COPY /target/grid-failure-information.backend.service.jar /usr/src/cbd/
 WORKDIR usr/src/cbd
-CMD ["java", "-jar", "-Dspring.profiles.active=devserver,swagger", "grid-failure-information.backend.service.jar"]
\ No newline at end of file
+CMD ["java", "-jar", "-Dspring.profiles.active=devserver", "grid-failure-information.backend.service.jar"]
\ No newline at end of file
diff --git a/gfsBackendService/Dockerfile_DevServerUnsecure b/gfsBackendService/Dockerfile_DevServerUnsecure
index 78bb50d..0db171e 100644
--- a/gfsBackendService/Dockerfile_DevServerUnsecure
+++ b/gfsBackendService/Dockerfile_DevServerUnsecure
@@ -10,4 +10,4 @@
 
 COPY /target/grid-failure-information.backend.service.jar /usr/src/cbd/
 WORKDIR usr/src/cbd
-CMD ["java", "-jar", "-Dspring.profiles.active=devserver-unsecure,swagger", "grid-failure-information.backend.service.jar"]
\ No newline at end of file
+CMD ["java", "-jar", "-Dspring.profiles.active=devserver-unsecure", "grid-failure-information.backend.service.jar"]
\ No newline at end of file
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
index 610d505..3fb2a3d 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
@@ -24,8 +24,7 @@
 import org.eclipse.openk.gridfailureinformation.constants.Constants;
 import org.springframework.stereotype.Component;
 
-import static org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask.OutputPort.NO;
-import static org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask.OutputPort.YES;
+import static org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask.OutputPort.*;
 import static org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState.*;
 
 @Log4j2
@@ -52,6 +51,9 @@
 
         ProcessTask canceledEndpoint = register( CANCELED,
                 new UIStoreFailureInformationTask( "State CANCELED UI Task", true));
+
+        DecisionTask decidePublished = new DecideFailureInfoPublished();
+        ProcessTask storePubStatusWithdrawnOnCancel = new StorePublishStatusTask(Constants.PUB_STATUS_ZURUECKGEZOGEN);
         ProcessTask publishMessage = register( QUALIFIED,
                 new UIStoreFailureInformationTask( "State QUALIFIED UI Task", true));
 
@@ -80,7 +82,6 @@
         enterMessage.connectOutputTo( storeEditStatusCreated );
         // -> nein
         storeEditStatusCreated.connectOutputTo( qualifyMessage );
-        // TODO Beabreitungsstatus: aktualisiert berücksichtigen: Zweig: Meldung aktualisieren
         qualifyMessage.connectOutputTo(decideCanceled);
         //Meldung storniert?
         decideCanceled.connectOutputTo( YES, storeEditStatusCanceled ); //Status nicht speichern da sonst doppelt, -> nächster Porzessschritt
@@ -88,12 +89,17 @@
 
         storeEditStatusQualified.connectOutputTo(publishMessage);
         publishMessage.connectOutputTo(decideUpdated);
-        decideUpdated.connectOutputTo(YES, storeEditStatusUpdated);
-        //decideUpdated.connectOutputTo(NO, completedEndpoint);
-        decideUpdated.connectOutputTo(NO, setEndDate);
+        decideUpdated.connectOutputTo(PORT1, storeEditStatusUpdated);
+        decideUpdated.connectOutputTo(PORT2, setEndDate);
+        decideUpdated.connectOutputTo(PORT3, storeEditStatusCanceled);
         setEndDate.connectOutputTo(storePublicationStatusWithdrawn);
         storePublicationStatusWithdrawn.connectOutputTo(completedEndpoint);
 
+        storeEditStatusCanceled.connectOutputTo(decidePublished);
+        decidePublished.connectOutputTo( YES, storePubStatusWithdrawnOnCancel);
+        decidePublished.connectOutputTo( NO, canceledEndpoint);
+        storePubStatusWithdrawnOnCancel.connectOutputTo( canceledEndpoint );
+
         storeForceEditStatusQualified.connectOutputTo(publishMessageToChannels);
         publishMessageToChannels.connectOutputTo(storePublicationStatusPublished);
         storePublicationStatusPublished.connectOutputTo(updateMessage);
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoPublished.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoPublished.java
new file mode 100644
index 0000000..fe76268
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoPublished.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+
+package org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks;
+
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessException;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessSubject;
+import org.eclipse.openk.gridfailureinformation.constants.Constants;
+
+@Log4j2
+public class DecideFailureInfoPublished extends DecisionTask<GfiProcessSubject> {
+
+    public DecideFailureInfoPublished() {
+        super("Decision: Ist die Störungsinformation veröffentlicht?");
+    }
+
+    @Override
+    public OutputPort decide(GfiProcessSubject subject) throws ProcessException {
+        boolean isPublished = Constants.PUB_STATUS_VEROEFFENTLICHT.equals(
+                subject.getFailureInformationDto().getPublicationStatus()
+        );
+
+        String loggerOutput1 = "Decide: ";
+
+        if (isPublished) {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing YES");
+            return OutputPort.YES;
+        } else {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing NO");
+            return OutputPort.NO;
+        }
+    }
+
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java
index 11538aa..00f03df 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java
@@ -38,12 +38,18 @@
         String loggerOutput1 = "Decide: ";
 
         if (newState == GfiProcessState.UPDATED) {
-            log.debug(loggerOutput1 + getDescription() + "\" -> Firing YES");
-            return OutputPort.YES;
-        } else if (newState == GfiProcessState.COMPLETED) {
-            log.debug(loggerOutput1 + getDescription() + "\" -> Firing NO");
-            return OutputPort.NO;
-        } else {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing PORT1");
+            return OutputPort.PORT1;
+        }
+        else if (newState == GfiProcessState.COMPLETED) {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing PORT2");
+            return OutputPort.PORT2;
+        }
+        else if (newState == GfiProcessState.CANCELED) {
+            log.debug(( loggerOutput1 + getDescription() + "\" -> Firing PORT3"));
+            return OutputPort.PORT3;
+        }
+        else {
             throw new ProcessException(this.getDescription() + ": Invalid status request:" + newState,
                     new InternalServerErrorException("invalid.status.request"));
         }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
index 3e8635e..5c07b80 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
@@ -78,7 +78,11 @@
     public void resetPublishedStateForChannels( FailureInformationDto dto ) {
         TblFailureInformation tblFailureInformation = environment.getFailureInformationRepository().findByUuid(dto.getUuid())
                 .orElseThrow(() -> new NotFoundException("failure.information.not.found"));
-        tblFailureInformation.getPublicationChannelList().forEach(x -> {
+
+        List<TblFailureInformationPublicationChannel> channelList = environment.getChannelRepository().findByTblFailureInformation(tblFailureInformation);
+
+//        tblFailureInformation.getPublicationChannelList().forEach(x -> {
+        channelList.forEach(x -> {
             x.setPublished(false);
             environment.getChannelRepository().save(x);
         });
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/SwaggerConfig.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/SwaggerConfig.java
index 6c4fb54..fa4d1d0 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/SwaggerConfig.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/SwaggerConfig.java
@@ -15,7 +15,7 @@
 @Log4j2
 @Configuration
 @EnableSwagger2
-@Profile({"swagger"})
+@Profile({"!test","!prod"})
 public class SwaggerConfig {
 
     @Value("${swagger.baseUrl:}")
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationController.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationController.java
index 744da26..a65c98a 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationController.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationController.java
@@ -182,4 +182,16 @@
         failureInformationService.deletePublicationChannelForFailureInfo(failureInfoUuid, publicationChannel);
     }
 
+    @GetMapping("/{failureInfoUuid}/channels")
+    @ApiOperation(value = "Holen Veröffentlichungs-Kanälen für eine Störungsinfo")
+    @ApiResponses(value = { @ApiResponse(code = 200, message = "Erfolgreich durchgeführt"),
+            @ApiResponse(code = 404, message = "Störungsinformationen wurden nicht gefunden")})
+    @ResponseStatus(HttpStatus.OK)
+    @Secured({"ROLE_GRID-FAILURE-ADMIN", "ROLE_GRID-FAILURE-CREATOR", "ROLE_GRID-FAILURE-QUALIFIER", "ROLE_GRID-FAILURE-PUBLISHER"})
+    public List<FailureInformationPublicationChannelDto> getChannelsForFailureInfo(
+            @ApiParam(name="failureInfoUuid", value= "UUID der Störungsinfo", required = true)
+            @PathVariable UUID failureInfoUuid) {
+        return failureInformationService.getPublicationChannelsForFailureInfo(failureInfoUuid);
+    }
+
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
index 4290e55..cc1db84 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
@@ -78,10 +78,10 @@
         failureInformationDto.setStationIds( stations != null ? stations.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
     }
 
-    @AfterMapping
-    default void populatePublicationChannels(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
-        Set<TblFailureInformationPublicationChannel> channels = source.getPublicationChannelList();
-
-        failureInformationDto.setPublicationChannels( channels != null ? channels.stream().map(TblFailureInformationPublicationChannel::getPublicationChannel).collect(Collectors.toList()) : new LinkedList<>());
-    }
+//    @AfterMapping
+//    default void populatePublicationChannels(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
+//        Set<TblFailureInformationPublicationChannel> channels = source.getPublicationChannelList();
+//
+//        failureInformationDto.setPublicationChannels( channels != null ? channels.stream().map(TblFailureInformationPublicationChannel::getPublicationChannel).collect(Collectors.toList()) : new LinkedList<>());
+//    }
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
index 47e719c..c6a94ce 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
@@ -142,7 +142,4 @@
     @OneToOne(mappedBy = "tblFailureInformation")
     private TblFailureInformationReminderMailSent failureInformationReminderMailSent;
 
-    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, mappedBy="tblFailureInformation", orphanRemoval = true)
-    private Set<TblFailureInformationPublicationChannel> publicationChannelList = new HashSet<>();
-
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
index 27b45cc..aae6f5b 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
@@ -55,10 +55,10 @@
 
     @Lazy
     @Autowired
-    RabbitMqConfig rabbitMqConfig;
+    private RabbitMqConfig rabbitMqConfig;
 
     @Autowired
-    ProcessHelper processHelper;
+    private ProcessHelper processHelper;
 
     @Autowired
     private RabbitMqProperties rabbitMqProperties;
@@ -67,13 +67,13 @@
     private org.springframework.amqp.rabbit.core.RabbitTemplate rabbitTemplate;
 
     @Autowired
-    FailureInformationService failureInformationService;
+    private FailureInformationService failureInformationService;
 
     @Autowired
-    DistributionGroupMemberService distributionGroupMemberService;
+    private DistributionGroupMemberService distributionGroupMemberService;
 
     @Autowired
-    FailureInformationMapper failureInformationMapper;
+    private FailureInformationMapper failureInformationMapper;
 
     @Autowired
     private FailureInformationRepository failureInformationRepository;
@@ -147,7 +147,6 @@
 
             }
 
-
         }
 
         return countExportedMessages > 0;
@@ -182,11 +181,14 @@
     }
 
     private boolean isChannelAlreadyPublished(String targetChannel, TblFailureInformation existingTblFailureInfo) {
-        if( existingTblFailureInfo.getPublicationChannelList() == null ) {
+
+        List<TblFailureInformationPublicationChannel> publicationChannelList = publicationChannelRepository.findByTblFailureInformation(existingTblFailureInfo);
+
+        if( publicationChannelList == null ) {
             return true;
         }
         Optional<TblFailureInformationPublicationChannel> tf =
-                existingTblFailureInfo.getPublicationChannelList().stream()
+                publicationChannelList.stream()
                         .filter( x -> x.getPublicationChannel().equals(targetChannel) )
                         .findFirst();
 
@@ -204,7 +206,10 @@
     }
 
     private void markChannelAsPublished(String targetChannel, TblFailureInformation existingTblFailureInfo) {
-        Optional<TblFailureInformationPublicationChannel> pubChannelToSave = existingTblFailureInfo.getPublicationChannelList().stream()
+
+        List<TblFailureInformationPublicationChannel> publicationChannelList = publicationChannelRepository.findByTblFailureInformation(existingTblFailureInfo);
+
+        Optional<TblFailureInformationPublicationChannel> pubChannelToSave = publicationChannelList.stream()
                 .filter( x->x.getPublicationChannel().equals(targetChannel))
                 .findFirst();
 
@@ -320,11 +325,6 @@
             contentReplaceMap.put(placeholderDto.getStatusIntern(), statusIntern.getStatus());
         }
 
-//        RefStatus statusExtern = tblFailureInfo.getRefStatusExtern();
-//        if (statusExtern != null) {
-//            contentReplaceMap.put(placeholderDto.getStatusExtern(), statusExtern.getStatus());
-//        }
-
         String publicationStatus = tblFailureInfo.getPublicationStatus();
         if (publicationStatus != null) {
             contentReplaceMap.put(placeholderDto.getPublicationStatus(), publicationStatus);
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
index 86ebf64..39800ff 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
@@ -235,21 +235,21 @@
         resolveExpectedReason(destTblFailureInformation, sourceDto);
         resolveCondensed(destTblFailureInformation, sourceDto);
 
-        if( destTblFailureInformation.getId() != null ) { // not when inserting
-            resolvePublicationChannels(destTblFailureInformation);
-        }
+//        if( destTblFailureInformation.getId() != null ) { // not when inserting
+//            resolvePublicationChannels(destTblFailureInformation);
+//        }
         resolveStationIds(destTblFailureInformation, sourceDto);
         resolveDistributionGroups(destTblFailureInformation, sourceDto);
     }
 
-    private void resolvePublicationChannels(TblFailureInformation destTblFailureInformation) {
-
-        List<TblFailureInformationPublicationChannel> channelList = failureInformationPublicationChannelRepository.findByTblFailureInformation(destTblFailureInformation);
-
-           if(!channelList.isEmpty()){
-               destTblFailureInformation.setPublicationChannelList(Sets.newHashSet(channelList));
-           }
-    }
+//    private void resolvePublicationChannels(TblFailureInformation destTblFailureInformation) {
+//
+//        List<TblFailureInformationPublicationChannel> channelList = failureInformationPublicationChannelRepository.findByTblFailureInformation(destTblFailureInformation);
+//
+//           if(!channelList.isEmpty()){
+//               destTblFailureInformation.setPublicationChannelList(Sets.newHashSet(channelList));
+//           }
+//    }
 
     private void resolveDistributionGroups(TblFailureInformation destTblFailureInformation, FailureInformationDto sourceDto) {
         if( sourceDto.getDistributionGroupUuids() != null ) {
@@ -348,35 +348,35 @@
         }
     }
 
-    protected void updatePublicationChannels(FailureInformationDto sourceDto, TblFailureInformation destTblFailureInformation ){
-
-        // Löschen zugeordneter Kanäle mit published = false
-        TblFailureInformation existingTblFailureInformation = failureInformationRepository.findByUuid(sourceDto.getUuid())
-                .orElseThrow(() -> new NotFoundException(Constants.FAILURE_INFO_UUID_NOT_EXISTING));
-
-        Set<TblFailureInformationPublicationChannel> existingChannels =
-                existingTblFailureInformation.getPublicationChannelList();
-
-        List<TblFailureInformationPublicationChannel>filteredList = existingChannels.stream().filter(x -> !x.isPublished()).collect(Collectors.toList());
-
-        for(TblFailureInformationPublicationChannel channel: filteredList){
-            existingChannels.remove(channel);
-        }
-
-        //Hinzufügen  zugeordneter Kanäle in der Zuordnungstabelle mit published= false (check, damit kein Kanal doppelt)
-        List<String> newChannelList = sourceDto.getPublicationChannels();
-        for(String newChannel: newChannelList){
-            if(existingChannels.stream().filter(x->x.getPublicationChannel().equals(newChannel)).count() == 0){
-                TblFailureInformationPublicationChannel tblFailureInformationPublicationChannel = new TblFailureInformationPublicationChannel();
-                tblFailureInformationPublicationChannel.setTblFailureInformation(existingTblFailureInformation);
-                tblFailureInformationPublicationChannel.setPublicationChannel(newChannel);
-                tblFailureInformationPublicationChannel.setPublished(false);
-
-                existingChannels.add(tblFailureInformationPublicationChannel);
-            }
-        }
-        destTblFailureInformation.setPublicationChannelList(existingChannels);
-    }
+//    protected void updatePublicationChannels(FailureInformationDto sourceDto, TblFailureInformation destTblFailureInformation ){
+//
+//        // Löschen zugeordneter Kanäle mit published = false
+//        TblFailureInformation existingTblFailureInformation = failureInformationRepository.findByUuid(sourceDto.getUuid())
+//                .orElseThrow(() -> new NotFoundException(Constants.FAILURE_INFO_UUID_NOT_EXISTING));
+//
+//        Set<TblFailureInformationPublicationChannel> existingChannels =
+//                existingTblFailureInformation.getPublicationChannelList();
+//
+//        List<TblFailureInformationPublicationChannel>filteredList = existingChannels.stream().filter(x -> !x.isPublished()).collect(Collectors.toList());
+//
+//        for(TblFailureInformationPublicationChannel channel: filteredList){
+//            existingChannels.remove(channel);
+//        }
+//
+//        //Hinzufügen  zugeordneter Kanäle in der Zuordnungstabelle mit published= false (check, damit kein Kanal doppelt)
+//        List<String> newChannelList = sourceDto.getPublicationChannels();
+//        for(String newChannel: newChannelList){
+//            if(existingChannels.stream().filter(x->x.getPublicationChannel().equals(newChannel)).count() == 0){
+//                TblFailureInformationPublicationChannel tblFailureInformationPublicationChannel = new TblFailureInformationPublicationChannel();
+//                tblFailureInformationPublicationChannel.setTblFailureInformation(existingTblFailureInformation);
+//                tblFailureInformationPublicationChannel.setPublicationChannel(newChannel);
+//                tblFailureInformationPublicationChannel.setPublished(false);
+//
+//                existingChannels.add(tblFailureInformationPublicationChannel);
+//            }
+//        }
+//        destTblFailureInformation.setPublicationChannelList(existingChannels);
+//    }
 
     private void setVersionNumber(TblFailureInformation tblFailureInformation){
         List<HtblFailureInformation> hfailureList = histFailureInformationRepository.findByUuid(tblFailureInformation.getUuid());
@@ -776,4 +776,21 @@
 
     }
 
+
+    public List<FailureInformationPublicationChannelDto> getPublicationChannelsForFailureInfo(UUID failureInfoUuid){
+
+        TblFailureInformation existingTblFailureInformation = failureInformationRepository
+                .findByUuid(failureInfoUuid)
+                .orElseThrow(() -> new NotFoundException(Constants.FAILURE_INFO_UUID_NOT_EXISTING));
+
+        List<TblFailureInformationPublicationChannel> publicationChannels = failureInformationPublicationChannelRepository
+                .findByTblFailureInformation(existingTblFailureInformation);
+
+       return publicationChannels
+                .stream()
+                .map(x -> failureInformationPublicationChannelMapper.toFailureInformationPublicationChannelDto(x))
+                .collect(Collectors.toList());
+
+    }
+
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
index 9a982b5..d01e87d 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
@@ -103,6 +103,6 @@
 
     private List<UUID> stationIds;
 
-    private List<String> publicationChannels;
+    //private List<String> publicationChannels;
 
 }
diff --git a/gfsBackendService/src/main/resources/application.yml b/gfsBackendService/src/main/resources/application.yml
index 7c2e7c4..43020f3 100644
--- a/gfsBackendService/src/main/resources/application.yml
+++ b/gfsBackendService/src/main/resources/application.yml
@@ -212,6 +212,22 @@
 
 spring:
   profiles: devserver-branch
+  rabbitmq:
+    # Importkanal
+    importExchange: sitImportExchange_branch
+    importQueue: sitImportQueue_branch
+    importkey: sitImportExchange.failureImportKey
+
+    # Exportkanäle
+    exportExchange: sitExportExchange_branch
+    channels:
+      - name: Mail
+        exportQueue: sit_mail_export_queue_branch
+        exportKey: sit_mail_export_key
+        isMailType: true
+      - name: Störungsauskunft.de
+        exportQueue: sit_stoerungsauskunft_export_queue_branch
+        exportKey: sit_stoerungsauskunft_export_key
 
 logging:
   level:
diff --git a/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql b/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql
index fde107a..08abc4e 100644
--- a/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql
+++ b/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql
@@ -50,6 +50,12 @@
 DROP TABLE IF EXISTS public.TBL_FAILURE_INFORMATION_DISTRIBUTION_GROUP CASCADE;
 DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_DISTRIBUTION_GROUP_ID_SEQ;
 
+DROP TABLE IF EXISTS public.TBL_FAILURE_INFORMATION_STATION CASCADE;
+DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_STATION_ID_SEQ;
+
+DROP TABLE IF EXISTS public.TBL_FAILURE_INFORMATION_REMINDER_MAIL_SENT CASCADE;
+DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_REMINDER_MAIL_SENT_ID_SEQ;
+
 DROP TABLE IF EXISTS public.TBL_FAILURE_INFORMATION_PUBLICATION_CHANNEL;
 DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_PUBLICATION_CHANNEL_SEQ;
 
@@ -393,7 +399,7 @@
 Ihre Admin-Meister-Team der PTA GmbH');
 
 INSERT INTO public.tbl_distribution_group(UUID, NAME, DISTRIBUTION_TEXT)
-VALUES('5f502046-887a-11ea-bc55-0242ac130003', 'Verteiler fachlich - intern', 'Subject: Die Meldung $Title$ mit Beginn: $FailureBegin$ wurde in den Status veröffentlicht geändert.
+VALUES('5f502046-887a-11ea-bc55-0242ac130003', 'Verteiler fachlich - intern', 'Subject: Die Störmeldung mit Beginn: $Störungsbeginn_gemeldet$ und dem Voraussichtlicher Grund: $Voraussichtlicher_Grund$" wurde in den Status veröffentlicht geändert.
 
 Body:
 Verteiler fachlich TEST
@@ -493,6 +499,68 @@
 INSERT INTO public.tbl_failure_information_distribution_group(FK_TBL_FAILURE_INFORMATION, FK_TBL_DISTRIBUTION_GROUP)
 VALUES(2, 2);
 
+-- ---------------------------------------------
+-- TABLE TBL_FAILURE_INFORMATION_STATION
+-- ---------------------------------------------
+CREATE SEQUENCE public.tbl_failure_information_station_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.tbl_failure_information_station_id_seq
+  OWNER TO gfi_service;
+
+CREATE TABLE public.tbl_failure_information_station
+(
+  id integer NOT NULL DEFAULT nextval('tbl_failure_information_station_id_seq'::regclass),
+  fk_tbl_failure_information integer NOT NULL,
+  station_station_id character varying(30) NOT NULL,
+  CONSTRAINT tbl_failure_information_station_pkey PRIMARY KEY (id),
+  CONSTRAINT tbl_fail_inf_station__failure_information_id_fkey FOREIGN KEY (fk_tbl_failure_information)
+      REFERENCES public.tbl_failure_information (id) MATCH SIMPLE
+      ON UPDATE NO ACTION ON DELETE NO ACTION
+)
+WITH (
+  OIDS=FALSE
+);
+ALTER TABLE public.tbl_failure_information_station
+  OWNER TO gfi_service;
+GRANT ALL ON TABLE public.tbl_failure_information_station TO gfi_service;
+
+-- ---------------------------------------------
+-- TABLE TBL_FAILURE_INFORMATION_REMINDER_MAIL_SENT
+-- ---------------------------------------------
+CREATE SEQUENCE public.tbl_failure_information_reminder_mail_sent_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.tbl_failure_information_reminder_mail_sent_id_seq
+  OWNER TO gfi_service;
+
+CREATE TABLE public.tbl_failure_information_reminder_mail_sent
+(
+  id integer NOT NULL DEFAULT nextval('tbl_failure_information_reminder_mail_sent_id_seq'::regclass),
+  fk_tbl_failure_information integer NOT NULL,
+  mail_sent BOOLEAN NOT NULL,
+  date_mail_sent TIMESTAMP NOT NULL,
+  CONSTRAINT tbl_failure_information_reminder_mail_sent_pkey PRIMARY KEY (id),
+  CONSTRAINT tbl_fail_inf_reminder_mail_sent__failure_information_id_fkey FOREIGN KEY (fk_tbl_failure_information)
+      REFERENCES public.tbl_failure_information (id) MATCH SIMPLE
+      ON UPDATE NO ACTION ON DELETE NO ACTION
+)
+WITH (
+  OIDS=FALSE
+);
+ALTER TABLE public.tbl_failure_information_reminder_mail_sent
+  OWNER TO gfi_service;
+GRANT ALL ON TABLE public.tbl_failure_information_reminder_mail_sent TO gfi_service;
+
+INSERT INTO public.tbl_failure_information_reminder_mail_sent(FK_TBL_FAILURE_INFORMATION, MAIL_SENT, DATE_MAIL_SENT)
+VALUES(1, true, '2020-05-31 23:30:00');
+
 
 -- ---------------------------------------------
 -- TABLE TBL_FAILURE_INFORMATION_PUBLICATION_CHANNEL
@@ -527,9 +595,6 @@
 INSERT INTO public.tbl_failure_information_publication_channel(FK_TBL_FAILURE_INFORMATION, PUBLICATION_CHANNEL, PUBLISHED)
 VALUES(1, 'MAIL', false);
 
-
-
-
 -- ----------------------------------------------------------------------------
 -- ----------------------------------------------------------------------------
 -- HISTORY-TABLES
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoPublishedTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoPublishedTest.java
new file mode 100644
index 0000000..3fe3eb5
--- /dev/null
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoPublishedTest.java
@@ -0,0 +1,28 @@
+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.DecideFailureInfoPublished;
+import org.eclipse.openk.gridfailureinformation.constants.Constants;
+import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class DecideFailureInfoPublishedTest {
+
+
+    @Test
+    public void shouldDecideCorrectly() throws ProcessException {
+        FailureInformationDto fiDto = MockDataHelper.mockFailureInformationDto();
+        fiDto.setPublicationStatus(Constants.PUB_STATUS_VEROEFFENTLICHT);
+        GfiProcessSubject sub = GfiProcessSubject.of(fiDto, null);
+        DecisionTask dtask = new DecideFailureInfoPublished();
+        assertEquals(DecisionTask.OutputPort.YES, dtask.decide(sub));
+
+        sub.getFailureInformationDto().setPublicationStatus(Constants.PUB_STATUS_UNVEROEFFENTLICHT);
+        assertEquals(DecisionTask.OutputPort.NO, dtask.decide(sub));
+    }
+
+}
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java
index 9cb2b55..31955c3 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java
@@ -163,7 +163,6 @@
                 .andExpect(jsonPath("$.failureClassification", is(failureInfoDto.getFailureClassification())))
                 .andExpect(jsonPath("$.failureTypeId", is(failureInfoDto.getFailureTypeId().toString())))
                 .andExpect(jsonPath("$.statusInternId", is(failureInfoDto.getStatusInternId().toString())))
-//                .andExpect(jsonPath("$.statusExternId", is(failureInfoDto.getStatusExternId().toString())))
                 .andExpect(jsonPath("$.branchId", is(failureInfoDto.getBranchId().toString())))
                 .andExpect(jsonPath("$.branch", is(failureInfoDto.getBranch())))
                 .andExpect(jsonPath("$.branchColorCode", is(failureInfoDto.getBranchColorCode())))
@@ -226,4 +225,15 @@
                 .andExpect(content().contentType(MediaType.APPLICATION_JSON));
     }
 
+    @Test
+    public void shouldFindChannelsByFailureUuid() throws Exception{
+
+        List<FailureInformationPublicationChannelDto> fipChannelList = MockDataHelper.mockFailureInformationPublicationChanneDtolList();
+        when (failureInformationService.getPublicationChannelsForFailureInfo(any(UUID.class))).thenReturn(fipChannelList);
+
+        mockMvc.perform(get("/grid-failure-informations/{uuid}/channels", UUID.randomUUID().toString()))
+                .andExpect(status().is2xxSuccessful())
+                .andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
+
 }
\ No newline at end of file
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
index 96d3550..1d24422 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
@@ -17,6 +17,7 @@
 import lombok.extern.log4j.Log4j2;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
 import org.eclipse.openk.gridfailureinformation.config.TestConfiguration;
+import org.eclipse.openk.gridfailureinformation.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.exceptions.BadRequestException;
 import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
 import org.eclipse.openk.gridfailureinformation.exceptions.OperationDeniedException;
@@ -238,62 +239,6 @@
     }
 
     @Test
-    public void shouldUpdateFailureInformation_updateChannels1() {
-
-        FailureInformationDto fiDto =  MockDataHelper.mockFailureInformationDto();
-        LinkedList<String> channelList = new LinkedList<String>();
-        channelList.add("MOCKXX"); //neuer Channel entspricht keinem bereits existierendem Channel
-        channelList.add("MOCKYY"); //neuer Channel entspricht keinem bereits existierendem Channel
-        fiDto.setPublicationChannels(channelList);
-
-        TblFailureInformation tblFi = MockDataHelper.mockTblFailureInformation();
-        TblFailureInformation existingTblFi = MockDataHelper.mockTblFailureInformation();
-
-        TblFailureInformationPublicationChannel tblFailureInformationPublicationChannel1 = MockDataHelper.mockTblFailureInformationPublicationChannel();
-        TblFailureInformationPublicationChannel tblFailureInformationPublicationChannel2 = MockDataHelper.mockTblFailureInformationPublicationChannel2();
-
-        Set<TblFailureInformationPublicationChannel> rmqChannels = new HashSet<>();
-        rmqChannels.add(tblFailureInformationPublicationChannel1);
-        rmqChannels.add(tblFailureInformationPublicationChannel2);
-        existingTblFi.setPublicationChannelList(rmqChannels);
-
-        when( failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(existingTblFi));
-
-        failureInformationService.updatePublicationChannels(fiDto, tblFi);
-
-        assertEquals(4, tblFi.getPublicationChannelList().size()); //zu den zwei bereits existierenden Channels kommen zwei weitere hinzu
-
-    }
-
-    @Test
-    public void shouldUpdateFailureInformation_updateChannels2() {
-
-        FailureInformationDto fiDto =  MockDataHelper.mockFailureInformationDto();
-        LinkedList<String> channelList = new LinkedList<String>();
-        channelList.add("MOCKMAIL"); // neuer Channel entspricht einem bereits existierendem Channel
-        channelList.add("MOCKSMS"); // neuer Channel entspricht einem bereits existierendem Channel
-        fiDto.setPublicationChannels(channelList);
-
-        TblFailureInformation tblFi = MockDataHelper.mockTblFailureInformation();
-        TblFailureInformation existingTblFi = MockDataHelper.mockTblFailureInformation();
-
-        TblFailureInformationPublicationChannel tblFailureInformationPublicationChannel1 = MockDataHelper.mockTblFailureInformationPublicationChannel();
-        TblFailureInformationPublicationChannel tblFailureInformationPublicationChannel2 = MockDataHelper.mockTblFailureInformationPublicationChannel2();
-
-        Set<TblFailureInformationPublicationChannel> rmqChannels = new HashSet<>();
-        rmqChannels.add(tblFailureInformationPublicationChannel1);
-        rmqChannels.add(tblFailureInformationPublicationChannel2);
-        existingTblFi.setPublicationChannelList(rmqChannels);
-
-        when( failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(existingTblFi));
-
-        failureInformationService.updatePublicationChannels(fiDto, tblFi);
-
-        assertEquals(2, tblFi.getPublicationChannelList().size()); //es bleibt bei den bereits existierenden 2 Channels
-
-    }
-
-    @Test
     public void shouldNotStoreFailureInformation_Exception_FailureInformationNotFound() {
         FailureInformationDto fiDto = MockDataHelper.mockFailureInformationDto();
         RefFailureClassification refFailureClassification = MockDataHelper.mockRefFailureClassification();
@@ -314,7 +259,6 @@
                 });
 
         assertThrows(NotFoundException.class, () -> failureInformationService.storeFailureInfo(fiDto, GfiProcessState.NEW));
-
     }
 
     @Test
@@ -615,7 +559,6 @@
         try {
             java.util.Date date1 = dateformat.parse("01/01/2020");
             java.util.Date date2 = dateformat.parse("24/12/2024");
-            //java.util.Date date3 = dateformat.parse("02/09/2022");
 
             // set first startdate and last enddate
             tblFailureInformation1.setFailureBegin(date1);
@@ -624,8 +567,6 @@
 
         }
 
-
-
         List<TblFailureInformation> listFailureInfos = new ArrayList();
         listFailureInfos.add(tblFailureInformation1);
         listFailureInfos.add(tblFailureInformation2);
@@ -675,7 +616,6 @@
         assertEquals( fiDtoList.size(), fiMockList.size() );
         assertEquals( fiDtoList.get(0).getResponsibility(), fiMockList .get(0).getResponsibility());
 
-
     }
 
     @Test
@@ -766,4 +706,20 @@
         Mockito.verify(failureInformationPublicationChannelRepository, times(1)).delete( tblChannel );
     }
 
+    @Test
+    public void shouldReturnFailureInfoPublicationChannels(){
+
+        TblFailureInformation tblFailureInformation = MockDataHelper.mockTblFailureInformation();
+        List<TblFailureInformationPublicationChannel> fipChannelList =  MockDataHelper.mockTblFailureInformationPublicationChannelList();
+
+        when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(tblFailureInformation));
+        when(failureInformationPublicationChannelRepository.findByTblFailureInformation(any(TblFailureInformation.class))).thenReturn(fipChannelList);
+
+        List<FailureInformationPublicationChannelDto> fipChannelDtoList = failureInformationService.getPublicationChannelsForFailureInfo(UUID.randomUUID());
+
+        assertEquals( fipChannelDtoList.size(), fipChannelList.size() );
+        assertEquals( fipChannelDtoList.get(0).getPublicationChannel(), fipChannelList .get(0).getPublicationChannel());
+
+    }
+
 }
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
index 2956b45..cf2e258 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
@@ -1328,6 +1328,14 @@
         return fipChannelDto;
     }
 
+    public static FailureInformationPublicationChannelDto mockFailureInformationPublicationChannelDto2(){
+        FailureInformationPublicationChannelDto fipChannelDto = new FailureInformationPublicationChannelDto();
+        fipChannelDto.setFailureInformationId(UUID.randomUUID());
+        fipChannelDto.setPublicationChannel("MOCKCHANNEL");
+        fipChannelDto.setPublished(true);
+        return fipChannelDto;
+    }
+
     public static List<TblFailureInformationPublicationChannel> mockTblFailureInformationPublicationChannelList(){
         List<TblFailureInformationPublicationChannel> channelList = new LinkedList<>();
         channelList.add(mockTblFailureInformationPublicationChannel());
@@ -1336,6 +1344,16 @@
         return channelList;
     }
 
+    public static List<FailureInformationPublicationChannelDto> mockFailureInformationPublicationChanneDtolList(){
+        List<FailureInformationPublicationChannelDto> channelList = new LinkedList<>();
+        channelList.add(mockFailureInformationPublicationChannelDto());
+        channelList.add(mockFailureInformationPublicationChannelDto2());
+
+        return channelList;
+    }
+
+
+
     public static List<ArrayList<BigDecimal>> mockPolygonCoordinatesList(){
 
         List<ArrayList<BigDecimal>> cordinatesList = new LinkedList<>();
diff --git a/mailExport/src/main/java/org/eclipse/openk/gridfailureinformation/mailexport/config/SwaggerConfig.java b/mailExport/src/main/java/org/eclipse/openk/gridfailureinformation/mailexport/config/SwaggerConfig.java
index 37a467a..ee6b295 100644
--- a/mailExport/src/main/java/org/eclipse/openk/gridfailureinformation/mailexport/config/SwaggerConfig.java
+++ b/mailExport/src/main/java/org/eclipse/openk/gridfailureinformation/mailexport/config/SwaggerConfig.java
@@ -15,7 +15,7 @@
 @Log4j2
 @Configuration
 @EnableSwagger2
-@Profile("!prod")
+@Profile({"!test","!prod"})
 public class SwaggerConfig {
 
     @Value("${swagger.baseUrl}")
diff --git a/stoerungsauskunftInterface/pom.xml b/stoerungsauskunftInterface/pom.xml
index 2cb49a1..a29835f 100644
--- a/stoerungsauskunftInterface/pom.xml
+++ b/stoerungsauskunftInterface/pom.xml
@@ -43,6 +43,14 @@
 	</properties>
 
 	<dependencies>
+		<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit-test -->
+		<dependency>
+			<groupId>org.springframework.amqp</groupId>
+			<artifactId>spring-rabbit-test</artifactId>
+			<version>2.2.7.RELEASE</version>
+			<scope>test</scope>
+		</dependency>
+
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
diff --git a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/StoerungsaulkunftInterfaceApplication.java b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/StoerungsauskunftInterfaceApplication.java
similarity index 75%
rename from stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/StoerungsaulkunftInterfaceApplication.java
rename to stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/StoerungsauskunftInterfaceApplication.java
index 02f6814..0a95ee3 100644
--- a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/StoerungsaulkunftInterfaceApplication.java
+++ b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/StoerungsauskunftInterfaceApplication.java
@@ -6,10 +6,10 @@
 
 @SpringBootApplication
 @EnableFeignClients
-public class StoerungsaulkunftInterfaceApplication {
+public class StoerungsauskunftInterfaceApplication {
 
 	public static void main(String[] args) {
-		SpringApplication.run(StoerungsaulkunftInterfaceApplication.class);
+		SpringApplication.run(StoerungsauskunftInterfaceApplication.class);
 	}
 
 }
diff --git a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/SwaggerConfig.java b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/SwaggerConfig.java
index 085d1a2..7792780 100644
--- a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/SwaggerConfig.java
+++ b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/SwaggerConfig.java
@@ -15,12 +15,12 @@
 @Log4j2
 @Configuration
 @EnableSwagger2
-@Profile("!prod")
+@Profile({"!test","!prod"})
 public class SwaggerConfig {
 
-    @Value("${swagger.baseUrl}")
+    @Value("${swagger.baseUrl:}")
     public String baseUrl;
-    @Value("${swagger.proxyUrl}")
+    @Value("${swagger.proxyUrl:}")
     public String proxyUrl;
 
     @Bean
diff --git a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/constants/Constants.java b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/constants/Constants.java
index 8cd09fb..ae634f5 100644
--- a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/constants/Constants.java
+++ b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/constants/Constants.java
@@ -19,6 +19,7 @@
     public static final String SRC_STOERUNGSAUSKUNFT_DE = "stoerungsauskunft.de";
 
     public static final String BRANCH_ELECTRICITY = "S";
+    public static final String VOLTAGE_LVL_LOW = "NS";
 
     public static final String PLANNED_OUTAGE = "planned";
     public static final String UNPLANNED_OUTAGE = "unplanned";
diff --git a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/dtos/StoerungsauskunftUserNotification.java b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/dtos/StoerungsauskunftUserNotification.java
index 4db2c54..c9cf7fb 100644
--- a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/dtos/StoerungsauskunftUserNotification.java
+++ b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/dtos/StoerungsauskunftUserNotification.java
@@ -17,7 +17,6 @@
     private String houseNo;
     private String district;
     private String ags;
-    private Integer radius;
     private String lat;
     private String lng;
     private String comment;
diff --git a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/mapper/StoerungsauskunftMapper.java b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/mapper/StoerungsauskunftMapper.java
index 3463cbb..197b789 100644
--- a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/mapper/StoerungsauskunftMapper.java
+++ b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/mapper/StoerungsauskunftMapper.java
@@ -14,6 +14,7 @@
  */
 package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.mapper;
 
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.*;
 import org.mapstruct.*;
 
@@ -33,7 +34,6 @@
             @Mapping(target = "failureBegin", source = "date", dateFormat = "dd.MM.yyyy HH:mm:ss"),
             @Mapping(target = "longitude", source = "lng"),
             @Mapping(target = "latitude", source = "lat"),
-            @Mapping(target = "radiusInMeters", source = "radius", defaultValue = "0"),
             @Mapping(target = "street", source = "street", qualifiedByName = "streetMapperToForeignFailureDataDto"),
             @Mapping(target = "housenumber", source = "houseNo"),
     })
@@ -41,10 +41,12 @@
 
 
     @AfterMapping
-    default void setStreetAndHouseNumber(StoerungsauskunftUserNotification srcEntity, @MappingTarget ForeignFailureDataDto targetEntity){
+    default void afterMappingProcess(StoerungsauskunftUserNotification srcEntity, @MappingTarget ForeignFailureDataDto targetEntity){
         if (targetEntity.getHousenumber() == null || targetEntity.getHousenumber().isEmpty()){
             targetEntity.setHousenumber(housenumberMapperToForeignFailureDataDto(srcEntity.getStreet()));
         }
+        targetEntity.setRadiusInMeters(0L);
+        targetEntity.setVoltageLevel(Constants.VOLTAGE_LVL_LOW);
     }
 
     @Named("streetMapperToForeignFailureDataDto")
diff --git a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/MessageConsumer.java b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/MessageConsumerService.java
similarity index 92%
rename from stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/MessageConsumer.java
rename to stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/MessageConsumerService.java
index d982fa0..668e1d8 100644
--- a/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/MessageConsumer.java
+++ b/stoerungsauskunftInterface/src/main/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/MessageConsumerService.java
@@ -1,4 +1,4 @@
-package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.controller;
+package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.service;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -10,10 +10,11 @@
 import org.springframework.amqp.support.converter.SimpleMessageConverter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 @Log4j2
-@Component
-public class MessageConsumer {
+@Service
+public class MessageConsumerService {
 
     @Autowired
     ObjectMapper objectMapper;
@@ -36,6 +37,5 @@
         String messagePayload = (String) converter.fromMessage(message);
         RabbitMqMessageDto rabbitMqMessageDto = objectMapper.readValue(messagePayload, RabbitMqMessageDto.class);
         importExportService.exportStoerungsauskunftOutage(rabbitMqMessageDto);
-
     }
 }
diff --git a/stoerungsauskunftInterface/src/main/resources/application.yml b/stoerungsauskunftInterface/src/main/resources/application.yml
index 03f0bcd..2ab88a7 100644
--- a/stoerungsauskunftInterface/src/main/resources/application.yml
+++ b/stoerungsauskunftInterface/src/main/resources/application.yml
@@ -68,10 +68,6 @@
     enabled: false
     cron: 0 */15 * ? * *
 
-swagger:
-  baseUrl:
-  proxyUrl:
-
 ---
 
 spring:
@@ -136,6 +132,27 @@
 ---
 
 spring:
+  profiles: devserver-branch
+  rabbitmq:
+    # Importkanal
+    importExchange: sitImportExchange_branch
+    importQueue: sitImportQueue_branch
+    importkey: sitImportExchange.failureImportKey
+
+    # Exportkanäle
+    exportExchange: sitExportExchange_branch
+    channels:
+      - name: Mail
+        exportQueue: sit_mail_export_queue_branch
+        exportKey: sit_mail_export_key
+        isMailType: true
+      - name: Störungsauskunft.de
+        exportQueue: sit_stoerungsauskunft_export_queue_branch
+        exportKey: sit_stoerungsauskunft_export_key
+
+---
+
+spring:
   profiles: qserver
   rabbitmq:
     host: entdockergss
@@ -175,5 +192,4 @@
   corsEnabled: true
 
 swagger:
-  baseUrl: /test-stoerungsauskunft-interface
-  proxyUrl:
\ No newline at end of file
+  baseUrl: /test-stoerungsauskunft-interface
\ No newline at end of file
diff --git a/stoerungsauskunftInterface/src/main/resources/application_localdev.yml b/stoerungsauskunftInterface/src/main/resources/application_localdev.yml
index e9c0025..1c04bd5 100644
--- a/stoerungsauskunftInterface/src/main/resources/application_localdev.yml
+++ b/stoerungsauskunftInterface/src/main/resources/application_localdev.yml
@@ -81,9 +81,6 @@
     enabled: false
     cron: 0 */15 * ? * *
 
-swagger:
-  baseUrl:
-  proxyUrl:
 ---
 
 spring:
diff --git a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/ImportSchedulerConfigTest.java b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/ImportSchedulerConfigTest.java
index 116646e..259d866 100644
--- a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/ImportSchedulerConfigTest.java
+++ b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/ImportSchedulerConfigTest.java
@@ -1,23 +1,24 @@
 package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.config;
 
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsaulkunftInterfaceApplication;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsauskunftInterfaceApplication;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.api.StoerungsauskunftApi;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.service.ImportExportService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.ContextConfiguration;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
-@SpringBootTest(classes = StoerungsaulkunftInterfaceApplication.class)
+@SpringBootTest(classes = StoerungsauskunftInterfaceApplication.class)
 @ContextConfiguration(classes = {TestConfiguration.class})
 @ActiveProfiles("test")
 public class ImportSchedulerConfigTest {
 
-    @Qualifier("myImportService")
-    @Autowired
+    @SpyBean
     private ImportExportService importExportService;
 
     @MockBean
@@ -29,7 +30,6 @@
     @Test
     public void shoulImportUserNotification() {
         importSchedulerConfig.scheduleTaskImportUserNotifications();
-        //Todo kann ImportExportService nicht "mocken" (@Spybean vs @MockBean)
-        //verify(myImportService, times(1)).importUserNotifications();
+        verify(importExportService, times(1)).importUserNotifications();
     }
 }
diff --git a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/TestConfiguration.java b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/TestConfiguration.java
index 88e6aab..4cd962c 100644
--- a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/TestConfiguration.java
+++ b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/config/TestConfiguration.java
@@ -16,11 +16,14 @@
 
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsaulkunftInterfaceApplication;
+import com.rabbitmq.client.Channel;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsauskunftInterfaceApplication;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.config.rabbitMq.RabbitMqConfig;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.mapper.StoerungsauskunftMapperImpl;
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.service.ImportExportService;
-import org.mockito.Mockito;
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.amqp.rabbit.connection.Connection;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.test.TestRabbitTemplate;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer;
@@ -29,31 +32,51 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 
-import static org.mockito.Mockito.doNothing;
+import java.io.IOException;
 
-@EntityScan(basePackageClasses = StoerungsaulkunftInterfaceApplication.class)
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.BDDMockito.willReturn;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+
+@EntityScan(basePackageClasses = StoerungsauskunftInterfaceApplication.class)
 @ContextConfiguration( initializers = {ConfigFileApplicationContextInitializer.class})
 @TestPropertySource("spring.config.location=classpath:application.yml")
+@EnableRabbit
 public class TestConfiguration {
 
     @Bean
     ObjectMapper objectMapper() { return new ObjectMapper(); }
 
     @Bean
-    public ImportExportService myImportService() {return new ImportExportService();}
-
-    @Bean
     public StoerungsauskunftMapperImpl stoerungsauskunftMapper() {return new StoerungsauskunftMapperImpl();}
 
     @Bean
-    public MessageChannel failureImportChannel() {return Mockito.mock(MessageChannel.class);}
+    public MessageChannel failureImportChannel() {return mock(MessageChannel.class);}
 
     @Bean
     @Qualifier("rabbitMqConfig")
     public RabbitMqConfig rabbitMqConfig() {
-        RabbitMqConfig rabbitMqConfigMock = Mockito.mock(RabbitMqConfig.class);
+        RabbitMqConfig rabbitMqConfigMock = mock(RabbitMqConfig.class);
         doNothing().when(rabbitMqConfigMock).buildAllQueues();
         return rabbitMqConfigMock;
     }
 
+    @Bean
+    public TestRabbitTemplate template() throws IOException {
+        return new TestRabbitTemplate(connectionFactory());
+    }
+
+    @Bean
+    public ConnectionFactory connectionFactory() throws IOException {
+        ConnectionFactory factory = mock(ConnectionFactory.class);
+        Connection connection = mock(Connection.class);
+        Channel channel = mock(Channel.class);
+        willReturn(connection).given(factory).createConnection();
+        willReturn(channel).given(connection).createChannel(anyBoolean());
+        given(channel.isOpen()).willReturn(true);
+        return factory;
+    }
+
 }
diff --git a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/ImportExportControllerTest.java b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/ImportExportControllerTest.java
index 33e90c4..02b4b52 100644
--- a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/ImportExportControllerTest.java
+++ b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/controller/ImportExportControllerTest.java
@@ -15,9 +15,8 @@
 package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.controller;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsaulkunftInterfaceApplication;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsauskunftInterfaceApplication;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.api.StoerungsauskunftApi;
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.ForeignFailureMessageDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.RabbitMqMessageDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.service.ImportExportService;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.support.MockDataHelper;
@@ -36,7 +35,7 @@
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
-@SpringBootTest(classes = StoerungsaulkunftInterfaceApplication.class)
+@SpringBootTest(classes = StoerungsauskunftInterfaceApplication.class)
 @AutoConfigureMockMvc
 @ActiveProfiles("test")
 public class ImportExportControllerTest {
diff --git a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/ImportExportServiceTest.java b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/ImportExportServiceTest.java
index 6f53c75..8d938dd 100644
--- a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/ImportExportServiceTest.java
+++ b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/ImportExportServiceTest.java
@@ -18,10 +18,9 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import feign.Request;
 import feign.Response;
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsaulkunftInterfaceApplication;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsauskunftInterfaceApplication;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.api.StoerungsauskunftApi;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.config.TestConfiguration;
-import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.FailureInformationDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.ForeignFailureMessageDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.RabbitMqMessageDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.StoerungsauskunftUserNotification;
@@ -29,7 +28,6 @@
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.support.MockDataHelper;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.core.io.ClassPathResource;
@@ -40,18 +38,18 @@
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.*;
 
-@SpringBootTest(classes = StoerungsaulkunftInterfaceApplication.class)
+@SpringBootTest(classes = StoerungsauskunftInterfaceApplication.class)
 @ContextConfiguration(classes = {TestConfiguration.class})
 @ActiveProfiles("test")
 public class ImportExportServiceTest {
 
-    @Qualifier("myImportService")
     @Autowired
     private ImportExportService importExportService;
 
@@ -105,6 +103,21 @@
     }
 
     @Test
+    public void shouldExportForeignFailureMessageDto_planned_polygons_empty() throws ParseException {
+        RabbitMqMessageDto rabbitMqMessageDto = MockDataHelper.mockRabbitMqMessageDto();
+
+        rabbitMqMessageDto.getFailureInformationDto().setPlanned(true);
+        rabbitMqMessageDto.getFailureInformationDto().setAddressPolygonPoints(new ArrayList<>());
+
+        Request request = mock(Request.class);
+        Response mockResponse = Response.builder().status(200).request(request).body("Test", StandardCharsets.UTF_8).build();
+
+        when(stoerungsauskunftApi.postOutage(any())).thenReturn(mockResponse);
+        importExportService.exportStoerungsauskunftOutage(rabbitMqMessageDto);
+        verify(stoerungsauskunftApi, times(1)).postOutage(anyList());
+    }
+
+    @Test
     public void shouldThrowErrorWhenCallToExternalInterfacefailed() throws ParseException {
         RabbitMqMessageDto rabbitMqMessageDto = MockDataHelper.mockRabbitMqMessageDto();
 
@@ -116,5 +129,21 @@
 
     }
 
+    @Test
+    public void shoulImportUserNotificationMapperTest1() throws IOException {
+
+        ImportExportService importExportServicSpy = spy(importExportService);
+
+        InputStream is = new ClassPathResource("UsernotificationJsonResponse.json").getInputStream();
+        List<StoerungsauskunftUserNotification> userNotificationList =
+                objectMapper.readValue(is, new TypeReference<List<StoerungsauskunftUserNotification>>() {
+                });
+        when(stoerungsauskunftApi.getUserNotification(any(Integer.class))).thenReturn(userNotificationList);
+
+        importExportServicSpy.importUserNotifications();
+
+        verify(importExportServicSpy, times(userNotificationList.size())).pushForeignFailure(any(ForeignFailureMessageDto.class));
+    }
+
 
 }
diff --git a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/MessageConsumerServiceTest.java b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/MessageConsumerServiceTest.java
new file mode 100644
index 0000000..17d894b
--- /dev/null
+++ b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/service/MessageConsumerServiceTest.java
@@ -0,0 +1,85 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.StoerungsauskunftInterfaceApplication;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.api.StoerungsauskunftApi;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.config.TestConfiguration;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.RabbitMqMessageDto;
+import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.support.MockDataHelper;
+import org.junit.jupiter.api.Test;
+import org.springframework.amqp.rabbit.test.RabbitListenerTest;
+import org.springframework.amqp.rabbit.test.RabbitListenerTestHarness;
+import org.springframework.amqp.rabbit.test.TestRabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+
+import java.text.ParseException;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+@SpringBootTest(classes = StoerungsauskunftInterfaceApplication.class)
+@ContextConfiguration(classes = {TestConfiguration.class})
+@ActiveProfiles("test")
+@RabbitListenerTest
+public class MessageConsumerServiceTest {
+
+    @Autowired
+    private RabbitListenerTestHarness harness;
+
+    @SpyBean
+    private ImportExportService importExportService;
+
+    @Autowired
+    ObjectMapper objectMapper;
+
+    @MockBean
+    StoerungsauskunftApi stoerungsauskunftApi;
+
+    @Autowired
+    private TestRabbitTemplate testRabbitTemplate;
+
+    @Value("${spring.rabbitmq.exportQueue}")
+    private String exportQueue;
+
+    @Test
+    public void shouldExportForeignFailureMessageDto() throws JsonProcessingException {
+
+        RabbitMqMessageDto rabbitMqMessageDto = MockDataHelper.mockRabbitMqMessageDto();
+        String rabbitMqMessageDtoString = objectMapper.writeValueAsString(rabbitMqMessageDto);
+
+        testRabbitTemplate.convertAndSend(exportQueue, rabbitMqMessageDtoString);
+
+        verify(importExportService, times(1)).exportStoerungsauskunftOutage(any());
+    }
+
+    @Test
+    public void shouldIgnoreButLogInputError() throws ParseException {
+        testRabbitTemplate.convertAndSend(exportQueue, "false input");
+        verify(importExportService, times(0)).exportStoerungsauskunftOutage(any());
+    }
+
+
+}
diff --git a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/support/MockDataHelper.java b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/support/MockDataHelper.java
index 3a2a7c9..2de3b74 100644
--- a/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/support/MockDataHelper.java
+++ b/stoerungsauskunftInterface/src/test/java/org/eclipse/openk/gridfailureinformation/stoerauskunftinterface/support/MockDataHelper.java
@@ -14,11 +14,13 @@
  */
 package org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.support;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.FailureInformationDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.ForeignFailureDataDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.ForeignFailureMessageDto;
 import org.eclipse.openk.gridfailureinformation.stoerauskunftinterface.dtos.RabbitMqMessageDto;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
 import java.sql.Date;
diff --git a/stoerungsauskunftInterface/src/test/resources/UsernotificationJsonResponse.json b/stoerungsauskunftInterface/src/test/resources/UsernotificationJsonResponse.json
index 12b4250..fb469bf 100644
--- a/stoerungsauskunftInterface/src/test/resources/UsernotificationJsonResponse.json
+++ b/stoerungsauskunftInterface/src/test/resources/UsernotificationJsonResponse.json
@@ -19,12 +19,51 @@
     "city": "Flonheim",
     "ags": null,
     "district": null,
-    "street": "Am Obertor 13",
+    "street": "Am Obertor",
     "lat": "49.8031615",
     "lng": "8.1932478",
     "comment": "Zappenduster",
     "operatorOutageInArea": 0,
-    "houseNo": "12"
-
+    "houseNo": "13"
+  },
+  {
+    "id": 23,
+    "date": "28.5.2020 14:49:11",
+    "postcode": "55237",
+    "city": "Flonheim",
+    "ags": null,
+    "district": null,
+    "lat": "49.8031615",
+    "lng": "8.1932478",
+    "comment": "Zappenduster",
+    "operatorOutageInArea": 0
+  },
+  {
+    "id": 23,
+    "date": "28.5.2020 14:49:11",
+    "postcode": "55237",
+    "city": "Flonheim",
+    "ags": null,
+    "street": "",
+    "district": null,
+    "lat": "49.8031615",
+    "lng": "8.1932478",
+    "comment": "Zappenduster",
+    "operatorOutageInArea": 0,
+    "houseNo": ""
+  },
+  {
+    "id": 23,
+    "date": "28.5.2020 14:49:11",
+    "postcode": "55237",
+    "city": "Flonheim",
+    "ags": null,
+    "district": null,
+    "street": "Am Obertor",
+    "lat": "49.8031615",
+    "lng": "8.1932478",
+    "comment": "Zappenduster",
+    "phone": "01520123456",
+    "operatorOutageInArea": 0
   }
 ]
\ No newline at end of file
diff --git a/stoerungsauskunftInterface/src/test/resources/application.yml b/stoerungsauskunftInterface/src/test/resources/application.yml
index 602e91b..843be83 100644
--- a/stoerungsauskunftInterface/src/test/resources/application.yml
+++ b/stoerungsauskunftInterface/src/test/resources/application.yml
@@ -57,10 +57,6 @@
     enabled: false
     cron: 0 */15 * ? * *
 
-swagger:
-  baseUrl:
-  proxyUrl:
-
 ---
 
 spring:
diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/SwaggerConfig.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/SwaggerConfig.java
index 0cd28b0..66eb015 100644
--- a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/SwaggerConfig.java
+++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/SwaggerConfig.java
@@ -16,7 +16,7 @@
 @Log4j2
 @Configuration
 @EnableSwagger2
-@Profile("!prod")
+@Profile({"!test","!prod"})
 public class SwaggerConfig {
 
     @Value("${swagger.baseUrl}")
