diff --git a/fda-authentication-service/rest-service/src/main/resources/application-local.yml b/fda-authentication-service/rest-service/src/main/resources/application-local.yml
index 5fb6430cb6ee3d46b9a593f42d9cb2ccb1450082..95bf2eba31b51743612d0d680ecac54be1e32272 100644
--- a/fda-authentication-service/rest-service/src/main/resources/application-local.yml
+++ b/fda-authentication-service/rest-service/src/main/resources/application-local.yml
@@ -20,6 +20,10 @@ spring:
     name: authentication-service
   cloud:
     loadbalancer.ribbon.enabled: false
+  rabbitmq:
+    host: localhost
+    username: fda
+    password: fda
   mail:
     default-encoding: UTF-8
     host: ""
diff --git a/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index ef68ed84a85b12821b7040e434a222087bf099da..b228f91cb143ea25252ba1bb2e2dc248c633c0f1 100644
--- a/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -21,6 +21,10 @@ public abstract class BaseUnitTest {
     public final static String USER_1_TITLES_BEFORE = "Dr.";
     public final static String USER_1_TITLES_AFTER = "MSc BSc";
     public final static Boolean USER_1_VERIFIED = true;
+    public final static Boolean USER_1_THEME_DARK = false;
+    public final static Instant USER_1_CREATED = Instant.now()
+            .minus(1, ChronoUnit.DAYS);
+    public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED;
 
     public final static User USER_1 = User.builder()
             .id(USER_1_ID)
@@ -32,6 +36,9 @@ public abstract class BaseUnitTest {
             .titlesBefore(USER_1_TITLES_BEFORE)
             .titlesAfter(USER_1_TITLES_AFTER)
             .emailVerified(USER_1_VERIFIED)
+            .themeDark(USER_1_THEME_DARK)
+            .created(USER_1_CREATED)
+            .lastModified(USER_1_LAST_MODIFIED)
             .build();
 
     public final static Long USER_2_ID = 2L;
@@ -39,6 +46,10 @@ public abstract class BaseUnitTest {
     public final static String USER_2_USERNAME = "jdoe2";
     public final static String USER_2_PASSWORD = "s3cr3t1nf0rm4t10n";
     public final static Boolean USER_2_VERIFIED = false;
+    public final static Boolean USER_2_THEME_DARK = false;
+    public final static Instant USER_2_CREATED = Instant.now()
+            .minus(1, ChronoUnit.DAYS);
+    public final static Instant USER_2_LAST_MODIFIED = USER_1_CREATED;
 
     public final static User USER_2 = User.builder()
             .id(USER_2_ID)
@@ -46,22 +57,27 @@ public abstract class BaseUnitTest {
             .email(USER_2_EMAIL)
             .password(USER_2_PASSWORD)
             .emailVerified(USER_2_VERIFIED)
+            .themeDark(USER_2_THEME_DARK)
+            .created(USER_2_CREATED)
+            .lastModified(USER_2_LAST_MODIFIED)
             .build();
 
     public final static Long TOKEN_1_ID = 1L;
-    public final static Boolean TOKEN_1_PROCESSED = true;
+    public final static Boolean TOKEN_1_PROCESSED = false;
     public final static String TOKEN_1_TOKEN = "mysecrettokenrandomlygenerated";
     public final static Instant TOKEN_1_VALID_TO = Instant.now()
             .plus(1, ChronoUnit.DAYS);
 
     public final static Long TOKEN_2_ID = 2L;
-    public final static Boolean TOKEN_2_PROCESSED = false;
+    public final static Boolean TOKEN_2_PROCESSED = true;
     public final static String TOKEN_2_TOKEN = "blahblahblah";
     public final static Instant TOKEN_2_VALID_TO = Instant.now()
             .plus(1, ChronoUnit.DAYS);
 
     public final static TimeSecret TOKEN_1 = TimeSecret.builder()
             .id(TOKEN_1_ID)
+            .uid(USER_1_ID)
+            .user(USER_1)
             .token(TOKEN_1_TOKEN)
             .processed(TOKEN_1_PROCESSED)
             .validTo(TOKEN_1_VALID_TO)
@@ -69,6 +85,8 @@ public abstract class BaseUnitTest {
 
     public final static TimeSecret TOKEN_2 = TimeSecret.builder()
             .id(TOKEN_2_ID)
+            .uid(USER_2_ID)
+            .user(USER_2)
             .token(TOKEN_2_TOKEN)
             .processed(TOKEN_2_PROCESSED)
             .validTo(TOKEN_2_VALID_TO)
diff --git a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceIntegrationTest.java b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceUnitTest.java
similarity index 56%
rename from fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceIntegrationTest.java
rename to fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceUnitTest.java
index 63d0dcfb403d7404eab73786edaedef94dddc7b8..5cebcc365200c4789ba3b6c05e1b9cb99bafa386 100644
--- a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceIntegrationTest.java
+++ b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceUnitTest.java
@@ -2,7 +2,6 @@ package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.ReadyConfig;
-import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserEmailFailedException;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -10,21 +9,24 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.mail.MailSendException;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.thymeleaf.context.Context;
 
-import java.time.Instant;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
 
 @Log4j2
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+@TestPropertySource(properties = {"spring.mail.username=test"})
 @SpringBootTest
 @ExtendWith(SpringExtension.class)
-public class MailServiceIntegrationTest extends BaseUnitTest {
+public class MailServiceUnitTest extends BaseUnitTest {
 
     @MockBean
     private ReadyConfig readyConfig;
@@ -32,37 +34,32 @@ public class MailServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private MailService mailService;
 
+    @MockBean
+    private JavaMailSender mailSender;
+
     @Test
     public void send_succeeds() throws UserEmailFailedException {
-        final User user = User.builder()
-                .username(USER_1_USERNAME)
-                .password(USER_1_PASSWORD)
-                .firstname(USER_1_FIRSTNAME)
-                .lastname(USER_1_LASTNAME)
-                .email("martinweiseat@gmail.com")
-                .build();
         final Context context = new Context();
-        context.setVariable("username", user.getUsername());
+        context.setVariable("username", USER_1_USERNAME);
+
+        /* mock */
 
         /* test */
-        mailService.send(user, "Test", "welcome-mail.txt", context);
+        mailService.send(USER_1, "Test", "welcome-mail.txt", context);
     }
 
     @Test
     public void send_fails() {
-        final User user = User.builder()
-                .username(USER_1_USERNAME)
-                .password(USER_1_PASSWORD)
-                .firstname(USER_1_FIRSTNAME)
-                .lastname(USER_1_LASTNAME)
-                .email("doesnotexist@gmail.com")
-                .build();
         final Context context = new Context();
-        context.setVariable("username", user.getUsername());
+        context.setVariable("username", USER_1_USERNAME);
+
+        /* mock */
+        doThrow(MailSendException.class).when(mailSender)
+                .send(any(SimpleMailMessage.class));
 
         /* test */
         assertThrows(UserEmailFailedException.class, () -> {
-            mailService.send(user, "Test", "welcome-mail.txt", context);
+            mailService.send(USER_1, "Test", "welcome-mail.txt", context);
         });
     }
 
diff --git a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
index e9bee850458e7705e1ff1be868cdd7b880a2331b..3313fd289535ca85d52f7d2d95a710061a401768 100644
--- a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
+++ b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
@@ -5,9 +5,7 @@ import at.tuwien.api.auth.SignupRequestDto;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
-import at.tuwien.repositories.TimeSecretRepository;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,14 +28,6 @@ public class UserServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private UserService userService;
 
-    @Autowired
-    private TimeSecretRepository tokenRepository;
-
-    @BeforeEach
-    public void beforeEach() {
-        tokenRepository.save(TOKEN_1);
-    }
-
     @Test
     public void create_succeeds()
             throws UserNameExistsException, RoleNotFoundException, UserEmailExistsException {
diff --git a/fda-authentication-service/rest-service/src/test/resources/application.properties b/fda-authentication-service/rest-service/src/test/resources/application.properties
index 1f8a9f4089f393b2a8d25f28472a80a35658aab5..88c58a85e34098a6ef1eddde183d20544dc6fb1c 100644
--- a/fda-authentication-service/rest-service/src/test/resources/application.properties
+++ b/fda-authentication-service/rest-service/src/test/resources/application.properties
@@ -1,3 +1,6 @@
+# enable local spring profile
+spring.profiles.active=local
+
 # disable discovery
 spring.cloud.discovery.enabled = false
 
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java
index f3b39383019b258b79fe099be16db55b4f9d21c9..8be30d7e90f8f3d8f0dd91e0b39a574996eb8e5e 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java
@@ -2,6 +2,7 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.container.*;
+import at.tuwien.auth.PermissionEvaluatorImpl;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.ContainerEndpoint;
 import at.tuwien.exception.*;
@@ -43,6 +44,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private ImageRepository imageRepository;
 
+    @MockBean
+    private PermissionEvaluatorImpl permissionEvaluator;
+
     @Autowired
     private ContainerEndpoint containerEndpoint;
 
@@ -59,6 +63,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void create_succeeds() throws ImageNotFoundException, DockerClientException, UserNotFoundException, ContainerAlreadyExistsException {
         final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
                 .name(CONTAINER_1_NAME)
@@ -166,6 +171,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void modify_start_succeeds() throws DockerClientException, ContainerNotFoundException {
         final ContainerChangeDto request = ContainerChangeDto.builder()
                 .action(ContainerActionTypeDto.START)
@@ -180,6 +186,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void modify_stop_succeeds() throws DockerClientException, ContainerNotFoundException, ContainerStillRunningException {
         final ContainerChangeDto request = ContainerChangeDto.builder()
                 .action(ContainerActionTypeDto.STOP)
@@ -194,6 +201,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void modify_startDocker_fails() throws DockerClientException, ContainerNotFoundException {
         final ContainerChangeDto request = ContainerChangeDto.builder()
                 .action(ContainerActionTypeDto.START)
@@ -208,6 +216,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void modify_stopDocker_fails() throws DockerClientException, ContainerNotFoundException {
         final ContainerChangeDto request = ContainerChangeDto.builder()
                 .action(ContainerActionTypeDto.STOP)
@@ -222,6 +231,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void modify_stopNoContainer_fails() throws DockerClientException, ContainerNotFoundException {
         final ContainerChangeDto request = ContainerChangeDto.builder()
                 .action(ContainerActionTypeDto.STOP)
@@ -236,11 +246,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void delete_noContainer_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException {
         doThrow(new ContainerNotFoundException("no container"))
                 .when(containerService)
                 .remove(CONTAINER_1_ID);
 
+        doReturn(true)
+                .when(permissionEvaluator)
+                .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
+
         /* test */
         assertThrows(ContainerNotFoundException.class, () -> {
             containerEndpoint.delete(CONTAINER_1_ID);
@@ -248,22 +263,32 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException {
         doNothing()
                 .when(containerService)
                 .remove(CONTAINER_1_ID);
 
+        doReturn(true)
+                .when(permissionEvaluator)
+                .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
+
         /* test */
         final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID);
         assertEquals(HttpStatus.OK, response.getStatusCode());
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void delete_docker_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException {
         doThrow(new DockerClientException("docker failed"))
                 .when(containerService)
                 .remove(CONTAINER_1_ID);
 
+        doReturn(true)
+                .when(permissionEvaluator)
+                .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
+
         /* test */
         assertThrows(DockerClientException.class, () -> {
             containerEndpoint.delete(CONTAINER_1_ID);
@@ -271,11 +296,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "RESEARCHER")
     public void delete_dockerStillRunning_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException {
         doThrow(new ContainerStillRunningException("container running"))
                 .when(containerService)
                 .remove(CONTAINER_1_ID);
 
+        doReturn(true)
+                .when(permissionEvaluator)
+                .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
+
         /* test */
         assertThrows(ContainerStillRunningException.class, () -> {
             containerEndpoint.delete(CONTAINER_1_ID);
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java
index 8f7943572c47095a5096be38babeeea462720486..a493798a86c5d0b237ece8732324af3347569b1a 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java
@@ -17,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.security.Principal;
@@ -53,6 +54,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void create_succeeds()
             throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException {
         final ImageCreateDto request = ImageCreateDto.builder()
@@ -75,6 +77,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void create_duplicate_fails()
             throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException {
         final ImageCreateDto request = ImageCreateDto.builder()
@@ -98,6 +101,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void create_notExists_fails()
             throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException {
         final ImageCreateDto request = ImageCreateDto.builder()
@@ -148,6 +152,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void delete_success() throws ImageNotFoundException, PersistenceException {
 
         /* mock */
@@ -161,6 +166,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void delete_fails() throws ImageNotFoundException, PersistenceException {
 
         /* mock */
@@ -175,6 +181,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void update_succeeds() throws ImageNotFoundException, DockerClientException {
         final ImageChangeDto request = ImageChangeDto.builder()
                 .defaultPort(1111)
@@ -186,6 +193,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(roles = "DEVELOPER")
     public void update_notFound_fails() throws ImageNotFoundException, DockerClientException {
         final ImageChangeDto request = ImageChangeDto.builder()
                 .defaultPort(1111)
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java
index 058dc455054d2458d9c24004c40afd7eba9033a7..0ed93482e34f9262300863a8f9a08e5949ced292 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java
@@ -6,10 +6,12 @@ import com.github.dockerjava.api.model.NetworkSettings;
 import lombok.SneakyThrows;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.TestPropertySource;
 
 import java.lang.reflect.Field;
 import java.util.Map;
 
+@TestPropertySource(locations = "classpath:application.properties")
 public abstract class BaseMappingTest {
 
     @Configuration
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
index 5cf765ec8d460b0f2b1df66427dd534fd8939863..3bee59433e1f40b4902e510de7dde41644a37f86 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
@@ -30,6 +30,7 @@ import java.security.Principal;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
 
 @Log4j2
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@@ -40,6 +41,9 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private UserService userService;
+
     @Autowired
     private ContainerServiceImpl containerService;
 
@@ -151,6 +155,11 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
                 .build();
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
 
+        /* mock */
+        doReturn(null)
+                .when(userService)
+                .findByUsername(USER_1_USERNAME);
+
         /* test */
         final Container container = containerService.create(request, principal);
         assertEquals(CONTAINER_1_NAME, container.getName());
@@ -168,10 +177,13 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
 
         /* mock */
+        doReturn(null)
+                .when(userService)
+                .findByUsername(USER_1_USERNAME);
         containerService.create(request, principal);
 
         /* test */
-        assertThrows(DockerClientException.class, () -> {
+        assertThrows(ContainerAlreadyExistsException.class, () -> {
             containerService.create(request, principal);
         });
     }
diff --git a/fda-container-service/rest-service/src/test/resources/application.properties b/fda-container-service/rest-service/src/test/resources/application.properties
index 1f8a9f4089f393b2a8d25f28472a80a35658aab5..88c58a85e34098a6ef1eddde183d20544dc6fb1c 100644
--- a/fda-container-service/rest-service/src/test/resources/application.properties
+++ b/fda-container-service/rest-service/src/test/resources/application.properties
@@ -1,3 +1,6 @@
+# enable local spring profile
+spring.profiles.active=local
+
 # disable discovery
 spring.cloud.discovery.enabled = false
 
diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java
index 3a80f1fae455c44a2f7e5276d2d77cbbd57b040e..914d6ffe388f0592c2ab1fae1118877ead00da38 100644
--- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java
+++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java
@@ -9,6 +9,7 @@ import at.tuwien.service.impl.RabbitMqServiceImpl;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Network;
+import com.github.dockerjava.api.model.PortBinding;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
@@ -20,6 +21,8 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Profile;
+import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.io.IOException;
@@ -32,6 +35,7 @@ import static at.tuwien.config.DockerConfig.hostConfig;
 @Log4j2
 @SpringBootTest
 @ExtendWith(SpringExtension.class)
+@ActiveProfiles("test-noelastic")
 public class AmqpServiceIntegrationTest extends BaseUnitTest {
 
     private static final String AMQP_EXCHANGE = "fda";
@@ -72,10 +76,15 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest {
 
         /* create amqp */
         final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-public"))
+                .withHostConfig(
+                        hostConfig
+                                .withNetworkMode("fda-public")
+                                .withPortBindings(PortBinding.parse("5671:5671"), PortBinding.parse("5672:5672"))
+                )
                 .withName(BROKER_NAME)
                 .withIpv4Address(BROKER_IP)
                 .withHostName(BROKER_HOSTNAME)
+                .withEnv("RABBITMQ_DEFAULT_USER=fda", "RABBITMQ_DEFAULT_PASS=fda")
                 .exec();
         dockerClient.startContainerCmd(request.getId())
                 .exec();
diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
index 03667028d238ebf169476e85b43db790bf6f7605..ec9236eedb60cde656223efaea5ad762a11de2fa 100644
--- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
+++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
@@ -17,6 +17,7 @@ import com.github.dockerjava.api.model.Bind;
 import com.github.dockerjava.api.model.ExposedPort;
 import com.github.dockerjava.api.model.HostConfig;
 import com.github.dockerjava.api.model.Network;
+import com.github.dockerjava.api.model.PortBinding;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
@@ -31,10 +32,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.security.Principal;
-import java.util.Optional;
 
 import static at.tuwien.config.DockerConfig.*;
-import static org.junit.jupiter.api.Assertions.*;
 
 @Log4j2
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@@ -92,12 +91,14 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* create elastic search */
         final CreateContainerResponse search = dockerClient.createContainerCmd(SEARCH_IMAGE + ":" + SEARCH_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-public"))
+                .withHostConfig(
+                        hostConfig
+                                .withNetworkMode("fda-public")
+                                .withPortBindings(PortBinding.parse("9200:9200"), PortBinding.parse("9300:9300"))
+                )
                 .withName(SEARCH_NAME)
                 .withIpv4Address(SEARCH_IP)
                 .withHostName(SEARCH_HOSTNAME)
-                .withHostConfig(new HostConfig()
-                        .withPortBindings())
                 .withEnv("discovery.type=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m", "logger.level=WARN")
                 .exec();
         CONTAINER_SEARCH.setHash(search.getId());
diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
index 16e899bd7aba7789a658fb28a2269bc86f83008d..eba11700e14884b430a014642f1c1d1ce4eb6eef 100644
--- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
+++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
@@ -3,14 +3,17 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.DatabaseCreateDto;
 import at.tuwien.config.ReadyConfig;
+import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.*;
 import at.tuwien.repository.jpa.ContainerRepository;
 import at.tuwien.repository.jpa.DatabaseRepository;
 import at.tuwien.service.impl.MariaDbServiceImpl;
+import at.tuwien.service.impl.RabbitMqServiceImpl;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Network;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
 import org.hibernate.Session;
@@ -21,9 +24,9 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-import java.nio.channels.Channel;
 import java.security.Principal;
 import java.util.List;
 import java.util.Optional;
@@ -36,6 +39,7 @@ import static org.mockito.Mockito.*;
 @Log4j2
 @SpringBootTest
 @ExtendWith(SpringExtension.class)
+@ActiveProfiles("test-noelastic")
 public class DatabaseServiceUnitTest extends BaseUnitTest {
 
     @MockBean
@@ -44,6 +48,9 @@ public class DatabaseServiceUnitTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private RabbitMqServiceImpl rabbitMqService;
+
     @Autowired
     private MariaDbServiceImpl databaseService;
 
@@ -53,137 +60,79 @@ public class DatabaseServiceUnitTest extends BaseUnitTest {
     @MockBean
     private ContainerRepository containerRepository;
 
-    @BeforeAll
-    public static void beforeAll() throws InterruptedException {
-        afterAll();
-        /* create networks */
-        dockerClient.createNetworkCmd()
-                .withName("fda-userdb")
-                .withIpam(new Network.Ipam()
-                        .withConfig(new Network.Ipam.Config()
-                                .withSubnet("172.28.0.0/16")))
-                .withEnableIpv6(false)
-                .exec();
-        dockerClient.createNetworkCmd()
-                .withName("fda-public")
-                .withIpam(new Network.Ipam()
-                        .withConfig(new Network.Ipam.Config()
-                                .withSubnet("172.29.0.0/16")))
-                .withEnableIpv6(false)
-                .exec();
-
-        /* create amqp */
-        final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-public"))
-                .withName(BROKER_NAME)
-                .withIpv4Address(BROKER_IP)
-                .withHostName(BROKER_HOSTNAME)
-                .exec();
-        dockerClient.startContainerCmd(request.getId())
-                .exec();
-        Thread.sleep(12 * 1000);
+    @Test
+    public void findAll_succeeds() {
+        /* mock */
+        when(databaseRepository.findAll(CONTAINER_1_ID))
+                .thenReturn(List.of(DATABASE_1));
+
+        /* test */
+        final List<Database> response = databaseService.findAll(CONTAINER_1_ID);
+        assertEquals(1, response.size());
+        assertEquals(DATABASE_1, response.get(0));
     }
 
-    @AfterAll
-    public static void afterAll() {
-        /* stop containers and remove them */
-        dockerClient.listContainersCmd()
-                .withShowAll(true)
-                .exec()
-                .forEach(container -> {
-                    log.info("Delete container {}", container.getNames()[0]);
-                    try {
-                        dockerClient.stopContainerCmd(container.getId()).exec();
-                    } catch (NotModifiedException e) {
-                        // ignore
-                    }
-                    dockerClient.removeContainerCmd(container.getId()).exec();
-                });
-
-        /* remove networks */
-        dockerClient.listNetworksCmd()
-                .exec()
-                .stream()
-                .filter(n -> n.getName().startsWith("fda"))
-                .forEach(network -> {
-                    log.info("Delete network {}", network.getName());
-                    dockerClient.removeNetworkCmd(network.getId()).exec();
-                });
+    @Test
+    public void findById_succeeds() throws DatabaseNotFoundException {
+        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+
+        /* mock */
+        when(databaseRepository.findById(DATABASE_1_ID))
+                .thenReturn(Optional.of(DATABASE_1));
+
+        final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID);
+
+        /* test */
+        assertEquals(DATABASE_1, response);
+    }
+
+    @Test
+    public void findById_notFound_fails() {
+        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+
+        /* mock */
+        when(databaseRepository.findById(DATABASE_1_ID))
+                .thenReturn(Optional.empty());
+
+        /* test */
+        assertThrows(DatabaseNotFoundException.class, () -> {
+            databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID);
+        });
+    }
+
+    @Test
+    public void delete_notFound_fails() {
+        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+
+        /* mock */
+        when(containerRepository.findById(CONTAINER_1_ID))
+                .thenReturn(Optional.of(mock(Container.class)));
+        when(databaseRepository.findById(DATABASE_1_ID))
+                .thenReturn(Optional.empty());
+
+        /* test */
+        assertThrows(DatabaseNotFoundException.class, () -> {
+            databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal);
+        });
+    }
+
+    @Test
+    public void create_notFound_fails() {
+        final DatabaseCreateDto request = DatabaseCreateDto.builder()
+                .name(DATABASE_1_NAME)
+                .build();
+        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+
+        /* mock */
+        when(containerRepository.findById(CONTAINER_1_ID))
+                .thenReturn(Optional.empty());
+
+        /* test */
+        assertThrows(ContainerNotFoundException.class, () -> {
+            databaseService.create(CONTAINER_1_ID, request, principal);
+        });
     }
 
-//    @Test
-//    public void findAll_succeeds() {
-//        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
-//
-//        /* mock */
-//        when(databaseRepository.findAllByPublicAndContainerIdOrMine(CONTAINER_1_ID, USER_1_USERNAME))
-//                .thenReturn(List.of(DATABASE_1));
-//
-//        /* test */
-//        final List<Database> response = databaseService.findAll(CONTAINER_1_ID, principal);
-//        assertEquals(1, response.size());
-//        assertEquals(DATABASE_1, response.get(0));
-//    }
-//
-//    @Test
-//    public void findById_succeeds() throws DatabaseNotFoundException {
-//        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
-//
-//        /* mock */
-//        when(databaseRepository.findById(DATABASE_1_ID))
-//                .thenReturn(Optional.of(DATABASE_1));
-//
-//        final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal);
-//
-//        /* test */
-//        assertEquals(DATABASE_1, response);
-//    }
-//
-//    @Test
-//    public void findById_notFound_fails() {
-//        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
-//
-//        /* mock */
-//        when(databaseRepository.findById(DATABASE_1_ID))
-//                .thenReturn(Optional.empty());
-//
-//        /* test */
-//        assertThrows(DatabaseNotFoundException.class, () -> {
-//            databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal);
-//        });
-//    }
-//
-//    @Test
-//    public void delete_notFound_fails() {
-//        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
-//
-//        /* mock */
-//        when(databaseRepository.findById(DATABASE_1_ID))
-//                .thenReturn(Optional.empty());
-//
-//        /* test */
-//        assertThrows(DatabaseNotFoundException.class, () -> {
-//            databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal);
-//        });
-//    }
-//
-//    @Test
-//    public void create_notFound_fails() {
-//        final DatabaseCreateDto request = DatabaseCreateDto.builder()
-//                .name(DATABASE_1_NAME)
-//                .build();
-//        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
-//
-//        /* mock */
-//        when(containerRepository.findById(CONTAINER_1_ID))
-//                .thenReturn(Optional.empty());
-//
-//        /* test */
-//        assertThrows(ContainerNotFoundException.class, () -> {
-//            databaseService.create(CONTAINER_1_ID, request, principal);
-//        });
-//    }
-//
 //    @Test
 //    public void getSession_fails() {
 //        /* no mock needed since unit test */
diff --git a/fda-database-service/rest-service/src/test/resources/application.properties b/fda-database-service/rest-service/src/test/resources/application.properties
index 7676dffdf898557eec4630f71def8b976a3779c4..498d2d1a96bb71a90c77c1f4f72d27af55dc1ed2 100644
--- a/fda-database-service/rest-service/src/test/resources/application.properties
+++ b/fda-database-service/rest-service/src/test/resources/application.properties
@@ -1,3 +1,6 @@
+# enable local spring profile
+spring.profiles.active=local
+
 # disable discovery
 spring.cloud.discovery.enabled = false
 
@@ -15,4 +18,6 @@ spring.jpa.hibernate.ddl-auto=create-drop
 spring.jpa.show-sql=false
 
 # disable elasticsearch
-spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
\ No newline at end of file
+spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
+
+spring.rabbitmq.host=fda-broker-service
\ No newline at end of file
diff --git a/fda-identifier-service/rest-service/src/main/resources/application-local.yml b/fda-identifier-service/rest-service/src/main/resources/application-local.yml
new file mode 100644
index 0000000000000000000000000000000000000000..63590d22680698edecf0b66a181f762752626cfb
--- /dev/null
+++ b/fda-identifier-service/rest-service/src/main/resources/application-local.yml
@@ -0,0 +1,37 @@
+app.version: '@project.version@'
+spring:
+  main.banner-mode: off
+  datasource:
+    url: jdbc:postgresql://localhost:5432/fda
+    driver-class-name: org.postgresql.Driver
+    username: postgres
+    password: postgres
+  jpa:
+    show-sql: false
+    database-platform: org.hibernate.dialect.PostgreSQLDialect
+    hibernate:
+      ddl-auto: validate
+    open-in-view: false
+    properties:
+      hibernate:
+        jdbc:
+          time_zone: UTC
+  application:
+    name: authentication-service
+  cloud:
+    loadbalancer.ribbon.enabled: false
+server.port: 9096
+logging:
+  pattern.console: "%d %highlight(%-5level) %msg%n"
+  level:
+    root: warn
+    at.tuwien.: debug
+    at.tuwien.auth.UserPermissionEvaluator: trace
+    org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug
+eureka:
+  instance.hostname: authentication-service
+  client.serviceUrl.defaultZone: http://localhost:9090/eureka/
+fda:
+  ready.path: ./ready
+  website: localhost:3000
+  gateway.endpoint: http://localhost:9095
\ No newline at end of file
diff --git a/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index c17eec400b6b20d290b8ba2e2469696e7854d9dc..7c053503858fa166e51149e910b0ca661260ec51 100644
--- a/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -11,11 +11,13 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.identifier.Creator;
 import at.tuwien.entities.identifier.Identifier;
+import at.tuwien.entities.identifier.IdentifierType;
 import at.tuwien.entities.identifier.VisibilityType;
 import at.tuwien.entities.user.User;
 import org.springframework.test.context.TestPropertySource;
 
 import java.time.Instant;
+import java.time.temporal.ChronoUnit;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -27,12 +29,19 @@ public abstract class BaseUnitTest {
     public final static String USER_1_PASSWORD = "junit";
     public final static String USER_1_EMAIL = "junit@example.com";
     public final static Boolean USER_1_EMAIL_VERIFIED = true;
+    public final static Boolean USER_1_THEME_DARK = false;
+    public final static Instant USER_1_CREATED = Instant.now()
+            .minus(1, ChronoUnit.DAYS);
+    public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED;
 
     public final static User USER_1 = User.builder()
             .username(USER_1_USERNAME)
             .password(USER_1_PASSWORD)
             .email(USER_1_EMAIL)
             .emailVerified(USER_1_EMAIL_VERIFIED)
+            .themeDark(USER_1_THEME_DARK)
+            .created(USER_1_CREATED)
+            .lastModified(USER_1_LAST_MODIFIED)
             .build();
 
     public final static Long DATABASE_1_ID = 1L;
@@ -45,7 +54,7 @@ public abstract class BaseUnitTest {
     public final static String DATABASE_2_NAME = "Test Database 2";
     public final static String DATABASE_2_INTERNAL_NAME = "test_database_2";
     public final static String DATABASE_2_EXCHANGE = "fda." + DATABASE_2_INTERNAL_NAME;
-    public final static Boolean DATABASE_2_PUBLIC = true;
+    public final static Boolean DATABASE_2_PUBLIC = false;
 
     public final static Long TABLE_1_ID = 1L;
     public final static String TABLE_1_NAME = "Rainfall";
@@ -236,6 +245,7 @@ public abstract class BaseUnitTest {
 
     public final static Long IDENTIFIER_1_ID = 1L;
     public final static Long IDENTIFIER_1_QUERY_ID = QUERY_1_ID;
+    public final static Long IDENTIFIER_1_CONTAINER_ID = CONTAINER_1_ID;
     public final static Long IDENTIFIER_1_DATABASE_ID = DATABASE_1_ID;
     public final static String IDENTIFIER_1_DESCRIPTION = "Selecting all from the weather Australia table";
     public final static String IDENTIFIER_1_TITLE = "Australia weather data";
@@ -251,15 +261,19 @@ public abstract class BaseUnitTest {
     public final static String IDENTIFIER_1_QUERY = "SELECT `id` FROM `foobar`";
     public final static String IDENTIFIER_1_NORMALIZED = "SELECT `id` FROM `foobar`";
     public final static Long IDENTIFIER_1_RESULT_NUMBER = 2L;
+    public final static String IDENTIFIER_1_PUBLISHER = "Australian Government";
+    public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.SUBSET;
+    public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.SUBSET;
 
     public final static Long IDENTIFIER_2_ID = 2L;
     public final static Long IDENTIFIER_2_QUERY_ID = QUERY_2_ID;
-    public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_1_ID;
+    public final static Long IDENTIFIER_2_CONTAINER_ID = CONTAINER_2_ID;
+    public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_2_ID;
     public final static String IDENTIFIER_2_DESCRIPTION = "Selecting all from the weather Austria table";
     public final static String IDENTIFIER_2_TITLE = "Austria weather data";
     public final static String IDENTIFIER_2_DOI = "10.1000/183";
-    public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.EVERYONE;
-    public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE;
+    public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.SELF;
+    public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.SELF;
     public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1641588352);
     public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1541588352);
     public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1541588352);
@@ -271,11 +285,14 @@ public abstract class BaseUnitTest {
     public final static String IDENTIFIER_2_QUERY = "SELECT `id` FROM `foobar`";
     public final static String IDENTIFIER_2_NORMALIZED = "SELECT `id` FROM `foobar`";
     public final static Long IDENTIFIER_2_RESULT_NUMBER = 2L;
+    public final static String IDENTIFIER_2_PUBLISHER = "Austrian Government";
+    public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET;
+    public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET;
 
     public final static Identifier IDENTIFIER_1 = Identifier.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(CONTAINER_1_ID)
-            .databaseId(DATABASE_1_ID)
+            .containerId(IDENTIFIER_1_CONTAINER_ID)
+            .databaseId(IDENTIFIER_1_DATABASE_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
             .title(IDENTIFIER_1_TITLE)
@@ -290,12 +307,14 @@ public abstract class BaseUnitTest {
             .query(IDENTIFIER_1_QUERY)
             .queryNormalized(IDENTIFIER_1_NORMALIZED)
             .resultNumber(IDENTIFIER_1_RESULT_NUMBER)
+            .publisher(IDENTIFIER_1_PUBLISHER)
+            .type(IDENTIFIER_1_TYPE)
             .build();
 
     public final static Identifier IDENTIFIER_2 = Identifier.builder()
             .id(IDENTIFIER_2_ID)
-            .containerId(CONTAINER_2_ID)
-            .databaseId(DATABASE_2_ID)
+            .containerId(IDENTIFIER_2_CONTAINER_ID)
+            .databaseId(IDENTIFIER_2_DATABASE_ID)
             .queryId(IDENTIFIER_2_QUERY_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
             .title(IDENTIFIER_2_TITLE)
@@ -312,6 +331,8 @@ public abstract class BaseUnitTest {
             .query(IDENTIFIER_2_QUERY)
             .queryNormalized(IDENTIFIER_2_NORMALIZED)
             .resultNumber(IDENTIFIER_2_RESULT_NUMBER)
+            .publisher(IDENTIFIER_2_PUBLISHER)
+            .type(IDENTIFIER_2_TYPE)
             .build();
 
     public final static Creator CREATOR_1 = Creator.builder()
@@ -401,12 +422,16 @@ public abstract class BaseUnitTest {
 
     public final static IdentifierCreateDto IDENTIFIER_1_DTO_REQUEST = IdentifierCreateDto.builder()
             .qid(IDENTIFIER_1_QUERY_ID)
+            .cid(IDENTIFIER_1_CONTAINER_ID)
+            .dbid(IDENTIFIER_1_DATABASE_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
             .title(IDENTIFIER_1_TITLE)
             .doi(IDENTIFIER_1_DOI)
             .visibility(IDENTIFIER_1_VISIBILITY_DTO)
             .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR)
             .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO))
+            .publisher(IDENTIFIER_1_PUBLISHER)
+            .type(IDENTIFIER_1_TYPE_DTO)
             .build();
 
     public final static String RELATED_IDENTIFIER_1_VALUE = "10.5281/zenodo.6637333";
@@ -421,6 +446,8 @@ public abstract class BaseUnitTest {
 
     public final static IdentifierCreateDto IDENTIFIER_2_DTO_REQUEST = IdentifierCreateDto.builder()
             .qid(IDENTIFIER_2_QUERY_ID)
+            .cid(IDENTIFIER_2_CONTAINER_ID)
+            .dbid(IDENTIFIER_2_DATABASE_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
             .title(IDENTIFIER_2_TITLE)
             .doi(IDENTIFIER_2_DOI)
@@ -430,6 +457,8 @@ public abstract class BaseUnitTest {
             .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH)
             .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR)
             .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO))
+            .publisher(IDENTIFIER_2_PUBLISHER)
+            .type(IDENTIFIER_2_TYPE_DTO)
             .build();
 
     public final static String COLUMN_1_INTERNAL_NAME = "id";
diff --git a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
index c63498e58ae6a9b3c5d5823f79b1d0da8f56948b..3ce48e11a5e94b3ed2d37f62965e42d26097116d 100644
--- a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
+++ b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
@@ -67,6 +67,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
         creatorRepository.save(CREATOR_1);
         creatorRepository.save(CREATOR_2);
         IDENTIFIER_1.setCreators(List.of(CREATOR_1, CREATOR_2));
+        identifierRepository.save(IDENTIFIER_1);
+        containerRepository.save(CONTAINER_2);
+        databaseRepository.save(DATABASE_2);
     }
 
     @Test
@@ -76,6 +79,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
         /* mock */
         identifierRepository.save(Identifier.builder()
                 .id(IDENTIFIER_2_ID)
+                .containerId(IDENTIFIER_2_CONTAINER_ID)
                 .queryId(IDENTIFIER_2_QUERY_ID)
                 .databaseId(IDENTIFIER_2_DATABASE_ID)
                 .description(IDENTIFIER_2_DESCRIPTION)
@@ -84,8 +88,10 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
                 .visibility(IDENTIFIER_2_VISIBILITY)
                 .created(IDENTIFIER_2_CREATED)
                 .lastModified(IDENTIFIER_2_MODIFIED)
-                .creators(List.of(CREATOR_1, CREATOR_2))
+                .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR)
                 .deleted(Instant.now().minus(4, ChronoUnit.MINUTES))
+                .publisher(IDENTIFIER_2_PUBLISHER)
+                .type(IDENTIFIER_2_TYPE)
                 .build());
 
         /* test */
@@ -100,6 +106,8 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
         assertEquals(2, response.get(0).getCreators().size());
         assertEquals(CREATOR_1_ID, response.get(0).getCreators().get(0).getId());
         assertEquals(CREATOR_2_ID, response.get(0).getCreators().get(1).getId());
+        assertEquals(IDENTIFIER_1_PUBLISHER, response.get(0).getPublisher());
+        assertEquals(IDENTIFIER_1_TYPE, response.get(0).getType());
     }
 
     @Test
@@ -110,11 +118,11 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
         final String bearer = "Bearer abcxyz";
 
         /* mock */
-        when(queryServiceGateway.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer))
+        when(queryServiceGateway.find(CONTAINER_2_ID, DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer))
                 .thenReturn(QUERY_2_DTO);
 
         /* test */
-        final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST,              principal, bearer);
+        final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, principal, bearer);
         assertEquals(IDENTIFIER_2_ID, response.getId());
         assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabaseId());
         assertEquals(IDENTIFIER_2_QUERY_ID, response.getQueryId());
@@ -126,13 +134,17 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
 
     @Test
     public void create_queryNotExists_fails() throws QueryNotFoundException, RemoteUnavailableException {
-        final IdentifierCreateDto request = IdentifierCreateDto.builder()
+        IdentifierCreateDto request = IdentifierCreateDto.builder()
                 .qid(IDENTIFIER_2_QUERY_ID)
+                .cid(IDENTIFIER_2_CONTAINER_ID)
+                .dbid(IDENTIFIER_2_DATABASE_ID)
                 .description(IDENTIFIER_2_DESCRIPTION)
                 .title(IDENTIFIER_2_TITLE)
                 .doi(IDENTIFIER_2_DOI)
                 .visibility(IDENTIFIER_2_VISIBILITY_DTO)
-                .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO))
+                .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR)
+                .publisher(IDENTIFIER_2_PUBLISHER)
+                .type(IDENTIFIER_2_TYPE_DTO)
                 .build();
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
         final String bearer = "Bearer abcxyz";
@@ -140,7 +152,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
         /* mock */
         doThrow(QueryNotFoundException.class)
                 .when(queryServiceGateway)
-                .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
+                .find(CONTAINER_2_ID, DATABASE_2_ID, request, bearer);
 
         /* test */
         assertThrows(QueryNotFoundException.class, () -> {
@@ -149,21 +161,23 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     }
 
     @Test
-    public void create_identifierAlreadyExists_fails() throws QueryNotFoundException, RemoteUnavailableException {
-        final IdentifierCreateDto request = IdentifierCreateDto.builder()
+    public void create_identifierAlreadyExists_fails() {
+        IdentifierCreateDto request = IdentifierCreateDto.builder()
                 .qid(IDENTIFIER_1_QUERY_ID)
-                .description(IDENTIFIER_2_DESCRIPTION)
-                .title(IDENTIFIER_2_TITLE)
-                .doi(IDENTIFIER_2_DOI)
-                .visibility(IDENTIFIER_2_VISIBILITY_DTO)
-                .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO))
+                .cid(IDENTIFIER_1_CONTAINER_ID)
+                .dbid(IDENTIFIER_1_DATABASE_ID)
+                .description(IDENTIFIER_1_DESCRIPTION)
+                .title(IDENTIFIER_1_TITLE)
+                .doi(IDENTIFIER_1_DOI)
+                .visibility(IDENTIFIER_1_VISIBILITY_DTO)
+                .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR)
+                .publisher(IDENTIFIER_1_PUBLISHER)
+                .type(IDENTIFIER_1_TYPE_DTO)
                 .build();
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
         final String bearer = "Bearer abcxyz";
 
         /* mock */
-        when(queryServiceGateway.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, bearer))
-                .thenReturn(QUERY_1_DTO);
 
         /* test */
         assertThrows(IdentifierAlreadyExistsException.class, () -> {
@@ -179,7 +193,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
         /* mock */
         doThrow(RemoteUnavailableException.class)
                 .when(queryServiceGateway)
-                .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
+                .find(CONTAINER_2_ID, DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
 
         /* test */
         assertThrows(RemoteUnavailableException.class, () -> {
@@ -224,7 +238,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     public void update_succeeds() throws IdentifierNotFoundException {
 
         /* test */
-        final Identifier response = identifierService.update( IDENTIFIER_1_ID,                IDENTIFIER_1_DTO);
+        final Identifier response = identifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO);
         assertEquals(IDENTIFIER_1_ID, response.getId());
         assertEquals(IDENTIFIER_1_DATABASE_ID, response.getDatabaseId());
         assertEquals(IDENTIFIER_1_QUERY_ID, response.getQueryId());
@@ -236,16 +250,18 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
 
     @Test
     public void publish_everyone_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException {
+        identifierRepository.save(IDENTIFIER_2);
 
         /* test */
-        identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE);
+        identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
     }
 
     @Test
     public void publish_trusted_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException {
+        identifierRepository.save(IDENTIFIER_2);
 
         /* test */
-        identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.TRUSTED);
+        identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.TRUSTED);
     }
 
     @Test
@@ -261,42 +277,13 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @Transactional
     public void publish_alreadyPublished_fails()
             throws IdentifierAlreadyPublishedException, IdentifierNotFoundException {
+        identifierRepository.save(IDENTIFIER_2);
 
         /* mock */
-        identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE);
+        identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
 
         /* test */
         assertThrows(IdentifierAlreadyPublishedException.class, () -> {
-            identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE);
-        });
-    }
-
-    @Test
-    public void publish_queryNotFound_fails() throws QueryNotFoundException, RemoteUnavailableException {
-        final String bearer = "Bearer abcxyz";
-
-        /* mock */
-        doThrow(QueryNotFoundException.class)
-                .when(queryServiceGateway)
-                .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
-
-        /* test */
-        assertThrows(IdentifierNotFoundException.class, () -> {
-            identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
-        });
-    }
-
-    @Test
-    public void publish_serviceUnavailable_fails() throws QueryNotFoundException, RemoteUnavailableException {
-        final String bearer = "Bearer abcxyz";
-
-        /* mock */
-        doThrow(RemoteUnavailableException.class)
-                .when(queryServiceGateway)
-                .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
-
-        /* test */
-        assertThrows(IdentifierNotFoundException.class, () -> {
             identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
         });
     }
diff --git a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java
index d5ac9887b370727dd79ce32c9f078bf791276f2e..a52662d6ffd1ff9cbca7adc8bde3abbe1e7c7222 100644
--- a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java
+++ b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java
@@ -3,6 +3,7 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.query.QueryDto;
 import at.tuwien.api.identifier.IdentifierCreateDto;
+import at.tuwien.api.identifier.IdentifierTypeDto;
 import at.tuwien.api.identifier.VisibilityTypeDto;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.*;
@@ -56,7 +57,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
                 .thenReturn(List.of(IDENTIFIER_1));
 
         /* test */
-        final List<Identifier> response = identifierService.findAll(CONTAINER_1_ID, DATABASE_1_ID);
+        final List<Identifier> response = identifierService.findAll(DATABASE_1_ID, null);
         assertEquals(1, response.size());
         assertEquals(IDENTIFIER_1, response.get(0));
     }
@@ -106,6 +107,9 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
             throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException,
             QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException {
         final IdentifierCreateDto request = IdentifierCreateDto.builder()
+                .cid(CONTAINER_1_ID)
+                .dbid(DATABASE_1_ID)
+                .type(IdentifierTypeDto.SUBSET)
                 .qid(IDENTIFIER_1_QUERY_ID)
                 .description(IDENTIFIER_1_DESCRIPTION)
                 .title(IDENTIFIER_1_TITLE)
diff --git a/fda-identifier-service/rest-service/src/test/resources/application.properties b/fda-identifier-service/rest-service/src/test/resources/application.properties
index 1226b46442ad34bf669e591ee5b99d5ca29ce823..66bbc590167342f17c9e94c07cba9d1dffc0680c 100644
--- a/fda-identifier-service/rest-service/src/test/resources/application.properties
+++ b/fda-identifier-service/rest-service/src/test/resources/application.properties
@@ -1,3 +1,6 @@
+# enable local spring profile
+spring.profiles.active=local
+
 # disable discovery
 spring.cloud.discovery.enabled = false
 
diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java
index 7e4c8beaa63577324bcc2598326f28e5068a5da6..f39af4ee7b302650ba31b46a711577e70cb60d57 100644
--- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java
+++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java
@@ -34,6 +34,7 @@ public class QueryDto {
     private Long dbid;
 
     @JsonIgnore
+    @EqualsAndHashCode.Exclude
     @NotNull(message = "created by is required")
     private Long createdBy;
 
diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java
index ec6dc13ee2e386e1ca397fd3ecaa440f94f73cff..3ed32c1cb646a0033b0569c82ea1867144ee843f 100644
--- a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java
+++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java
@@ -9,6 +9,7 @@ import lombok.*;
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
+@EqualsAndHashCode
 public class GrantedAuthorityDto {
 
     @Schema(example = "ROLE_RESEARCHER")
diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
index 87e543d7696e802dc59032111ac290396447a43e..04cc9be61a59f3c91a9dc3e9e7bed57a845fc2eb 100644
--- a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
+++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
@@ -15,6 +15,7 @@ import java.util.List;
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
+@EqualsAndHashCode
 public class UserDto {
 
     @NotNull
@@ -51,13 +52,17 @@ public class UserDto {
     @Schema(example = "true")
     private Boolean themeDark;
 
+    @EqualsAndHashCode.Exclude
     private List<ContainerDto> containers;
 
+    @EqualsAndHashCode.Exclude
     private List<ContainerDto> databases;
 
+    @EqualsAndHashCode.Exclude
     private List<ContainerDto> identifiers;
 
     @ToString.Exclude
+    @EqualsAndHashCode.Exclude
     @JsonIgnore
     private String password;
 
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index 66690f544def964c23c4b647d16036e137525d60..c54769404bc35fe1bfa03c472de3a0cfc84dda0c 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -1,8 +1,12 @@
 package at.tuwien;
 
+import at.tuwien.api.database.query.QueryBriefDto;
 import at.tuwien.api.database.query.QueryDto;
+import at.tuwien.api.user.UserDto;
 import at.tuwien.entities.container.image.ContainerImageDate;
 import at.tuwien.entities.database.table.columns.concepts.Concept;
+import at.tuwien.entities.user.RoleType;
+import at.tuwien.entities.user.User;
 import at.tuwien.querystore.Query;
 import at.tuwien.entities.container.Container;
 import at.tuwien.entities.container.image.ContainerImage;
@@ -15,6 +19,7 @@ import at.tuwien.entities.database.table.columns.TableColumnType;
 import org.springframework.test.context.TestPropertySource;
 
 import java.time.Instant;
+import java.util.Collections;
 import java.util.List;
 
 import static java.time.temporal.ChronoUnit.*;
@@ -22,7 +27,29 @@ import static java.time.temporal.ChronoUnit.*;
 @TestPropertySource(locations = "classpath:application.properties")
 public abstract class BaseUnitTest {
 
+    public final static long USER_1_ID = 1;
     public final static String USER_1_USERNAME = "junit";
+    public final static String USER_1_EMAIL = "junit@example.com";
+    public final static Instant USER_1_CREATED = Instant.now().minus(1, HOURS);
+    public final static User USER_1 = User.builder()
+            .id(USER_1_ID)
+            .username(USER_1_USERNAME)
+            .email(USER_1_EMAIL)
+            .emailVerified(true)
+            .themeDark(false)
+            .password("password")
+            .roles(Collections.singletonList(RoleType.ROLE_RESEARCHER))
+            .created(USER_1_CREATED)
+            .lastModified(USER_1_CREATED)
+            .build();
+    public final static UserDto USER_1_DTO = UserDto.builder()
+            .id(USER_1_ID)
+            .username(USER_1_USERNAME)
+            .email(USER_1_EMAIL)
+            .emailVerified(true)
+            .themeDark(false)
+            .password("password")
+            .build();
 
     public final static String DATABASE_NET = "fda-userdb";
 
@@ -322,8 +349,8 @@ public abstract class BaseUnitTest {
     public final static Long COLUMN_4_5_ID = 13L;
     public final static Integer COLUMN_4_5_ORDINALPOS = 4;
     public final static Boolean COLUMN_4_5_PRIMARY = false;
-    public final static String COLUMN_4_5_NAME = "Eggs";
-    public final static String COLUMN_4_5_INTERNAL_NAME = "eggs";
+    public final static String COLUMN_4_5_NAME = "Bread";
+    public final static String COLUMN_4_5_INTERNAL_NAME = "bread";
     public final static TableColumnType COLUMN_4_5_TYPE = TableColumnType.BOOLEAN;
     public final static Long COLUMN_4_5_DATE_FORMAT = null;
     public final static Boolean COLUMN_4_5_NULL = true;
@@ -364,8 +391,8 @@ public abstract class BaseUnitTest {
     public final static Long COLUMN_4_8_ID = 16L;
     public final static Integer COLUMN_4_8_ORDINALPOS = 7;
     public final static Boolean COLUMN_4_8_PRIMARY = false;
-    public final static String COLUMN_4_8_NAME = "Milk";
-    public final static String COLUMN_4_8_INTERNAL_NAME = "milk";
+    public final static String COLUMN_4_8_NAME = "Water";
+    public final static String COLUMN_4_8_INTERNAL_NAME = "water";
     public final static TableColumnType COLUMN_4_8_TYPE = TableColumnType.BOOLEAN;
     public final static Long COLUMN_4_8_DATE_FORMAT = null;
     public final static Boolean COLUMN_4_8_NULL = true;
@@ -392,8 +419,8 @@ public abstract class BaseUnitTest {
     public final static Long COLUMN_4_10_ID = 18L;
     public final static Integer COLUMN_4_10_ORDINALPOS = 9;
     public final static Boolean COLUMN_4_10_PRIMARY = false;
-    public final static String COLUMN_4_10_NAME = "Airborne";
-    public final static String COLUMN_4_10_INTERNAL_NAME = "airborne";
+    public final static String COLUMN_4_10_NAME = "Waterborne";
+    public final static String COLUMN_4_10_INTERNAL_NAME = "waterborne";
     public final static TableColumnType COLUMN_4_10_TYPE = TableColumnType.BOOLEAN;
     public final static Long COLUMN_4_10_DATE_FORMAT = null;
     public final static Boolean COLUMN_4_10_NULL = true;
@@ -736,6 +763,7 @@ public abstract class BaseUnitTest {
             .resultHash(QUERY_1_RESULT_HASH)
             .created(QUERY_1_CREATED)
             .execution(QUERY_1_EXECUTION)
+            .createdBy(USER_1_ID)
             .build();
 
     public final static QueryDto QUERY_1_DTO = QueryDto.builder()
@@ -746,6 +774,20 @@ public abstract class BaseUnitTest {
             .resultHash(QUERY_1_RESULT_HASH)
             .created(QUERY_1_CREATED)
             .execution(QUERY_1_EXECUTION)
+            .createdBy(USER_1_ID)
+            .creator(USER_1_DTO)
+            .build();
+
+    public final static QueryBriefDto QUERY_1_BRIEF_DTO = QueryBriefDto.builder()
+            .id(QUERY_1_ID)
+            .cid(QUERY_1_CONTAINER_ID)
+            .dbid(QUERY_1_DATABASE_ID)
+            .query(QUERY_1_STATEMENT)
+            .resultHash(QUERY_1_RESULT_HASH)
+            .created(QUERY_1_CREATED)
+            .execution(QUERY_1_EXECUTION)
+            .createdBy(USER_1_ID)
+            .creator(USER_1_DTO)
             .build();
 
     public final static List<TableColumn> TABLE_1_COLUMNS = List.of(TableColumn.builder()
@@ -772,6 +814,7 @@ public abstract class BaseUnitTest {
                     .internalName(COLUMN_1_2_INTERNAL_NAME)
                     .columnType(COLUMN_1_2_TYPE)
                     .dfid(COLUMN_1_2_DATE_FORMAT)
+                    .dateFormat(IMAGE_DATE_1)
                     .isNullAllowed(COLUMN_1_2_NULL)
                     .isUnique(COLUMN_1_2_UNIQUE)
                     .autoGenerated(COLUMN_1_2_AUTO_GENERATED)
@@ -1822,6 +1865,7 @@ public abstract class BaseUnitTest {
             .container(CONTAINER_1)
             .internalName(DATABASE_1_INTERNALNAME)
             .exchange(DATABASE_1_EXCHANGE)
+            .creator(USER_1)
             .build();
 
     public final static Database DATABASE_2 = Database.builder()
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java
index 2d438aad87ded46447f7b3409c16d092700e2091..08c6dea41bcff66418c0400e185b6221f05e3e50 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java
@@ -1,25 +1,38 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.ExportResource;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import at.tuwien.service.DatabaseService;
+import at.tuwien.service.QueryService;
+import at.tuwien.service.TableService;
 import at.tuwien.service.impl.QueryServiceImpl;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
+import org.apache.http.impl.io.EmptyInputStream;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.test.context.support.WithMockUser;
+import org.springframework.security.test.context.support.WithSecurityContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.security.Principal;
 import java.time.Instant;
 
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
 
 @Log4j2
 @SpringBootTest
@@ -29,11 +42,20 @@ public class ExportEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private ExportEndpoint exportEndpoint;
 
     @MockBean
-    private QueryServiceImpl queryService;
+    private QueryService queryService;
+
+    @MockBean
+    private DatabaseService databaseService;
 
     @Test
     public void export_timestampNull_succeeds() throws TableNotFoundException, DatabaseConnectionException,
@@ -41,6 +63,17 @@ public class ExportEndpointUnitTest extends BaseUnitTest {
             PaginationException, ContainerNotFoundException, NotAllowedException, QueryMalformedException {
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
 
+        /* mock */
+        doReturn(DATABASE_1, DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
+        doReturn(
+                ExportResource.builder()
+                        .resource(new InputStreamResource(EmptyInputStream.nullInputStream()))
+                        .filename("/tmp/filename")
+                        .build()
+        ).when(queryService)
+                .findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null);
+
         /* test */
         final ResponseEntity<InputStreamResource> response = exportEndpoint.export(CONTAINER_1_ID, DATABASE_1_ID,
                 TABLE_1_ID, null, principal);
@@ -56,6 +89,17 @@ public class ExportEndpointUnitTest extends BaseUnitTest {
                 .minusMillis(1000 * 1000);
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
 
+        /* mock */
+        doReturn(DATABASE_1, DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
+        doReturn(
+                ExportResource.builder()
+                        .resource(new InputStreamResource(EmptyInputStream.nullInputStream()))
+                        .filename("/tmp/filename")
+                        .build()
+        ).when(queryService)
+                .findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request);
+
         /* test */
         final ResponseEntity<InputStreamResource> response = exportEndpoint.export(CONTAINER_1_ID, DATABASE_1_ID,
                 TABLE_1_ID, request, principal);
@@ -72,6 +116,17 @@ public class ExportEndpointUnitTest extends BaseUnitTest {
                 .plusMillis(1000 * 1000);
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
 
+        /* mock */
+        doReturn(DATABASE_1, DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
+        doReturn(
+                ExportResource.builder()
+                        .resource(new InputStreamResource(EmptyInputStream.nullInputStream()))
+                        .filename("/tmp/filename")
+                        .build()
+        ).when(queryService)
+                .findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request);
+
         /* test */
         final ResponseEntity<InputStreamResource> response = exportEndpoint.export(CONTAINER_1_ID, DATABASE_1_ID,
                 TABLE_1_ID, request, principal);
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
index a01d82a75ac70bf94d6cd6cd3984032d252c07f9..7d53a289675c58b64d13628c7b8aca173d1920ad 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
@@ -1,9 +1,13 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.config.ReadyConfig;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 @Log4j2
@@ -11,4 +15,13 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 @ExtendWith(SpringExtension.class)
 public class QueryEndpointUnitTest extends BaseUnitTest {
 
+    @MockBean
+    private ReadyConfig readyConfig;
+
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
 }
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
index 5b33e69326dfc7a0a7e402add1418671dce31326..362d7d12b9348e91265abc2edfd8d123072a2083 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
@@ -5,8 +5,12 @@ import at.tuwien.api.database.query.QueryBriefDto;
 import at.tuwien.api.database.query.QueryDto;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import at.tuwien.service.DatabaseService;
 import at.tuwien.service.QueryService;
+import at.tuwien.service.UserService;
 import at.tuwien.service.impl.StoreServiceImpl;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
 import org.junit.jupiter.api.Test;
@@ -16,12 +20,18 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.authentication.TestingAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.security.Principal;
+import java.util.Collections;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.when;
 
 @Log4j2
@@ -32,6 +42,12 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private StoreEndpoint storeEndpoint;
 
@@ -41,31 +57,47 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private StoreServiceImpl storeService;
 
+    @MockBean
+    private UserService userService;
+
+    @MockBean
+    private DatabaseService databaseService;
+
     @Test
+    @WithMockUser(username = USER_1_USERNAME)
     public void findAll_succeeds() throws QueryStoreException, DatabaseNotFoundException, ImageNotSupportedException,
             ContainerNotFoundException, NotAllowedException, DatabaseConnectionException, TableMalformedException {
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
 
         /* mock */
-        when(storeService.findAll(CONTAINER_1_ID, DATABASE_1_ID, true))
-                .thenReturn(List.of(QUERY_1));
+        doReturn(List.of(QUERY_1)).when(storeService)
+                .findAll(CONTAINER_1_ID, DATABASE_1_ID, true);
+        doReturn(Collections.singletonList(USER_1)).when(userService)
+                .findAll();
+        doReturn(DATABASE_1, DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         final ResponseEntity<List<QueryBriefDto>> response = storeEndpoint.findAll(CONTAINER_1_ID, DATABASE_1_ID, true, principal);
         assertEquals(HttpStatus.OK, response.getStatusCode());
         assertNotNull(response.getBody());
         assertEquals(1, response.getBody().size());
-        assertEquals(QUERY_1_DTO, response.getBody().get(0));
+        assertEquals(QUERY_1_BRIEF_DTO, response.getBody().get(0));
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
     public void find_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
             ImageNotSupportedException, ContainerNotFoundException, UserNotFoundException, NotAllowedException, DatabaseConnectionException {
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
 
         /* mock */
-        when(storeService.findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID))
-                .thenReturn(QUERY_1);
+        doReturn(QUERY_1).when(storeService)
+                .findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID);
+        doReturn(USER_1).when(userService)
+                .find(USER_1_ID);
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         final ResponseEntity<QueryDto> response = storeEndpoint.find(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID, principal);
@@ -74,13 +106,16 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
     public void find_notFound_fails() throws QueryNotFoundException, DatabaseNotFoundException,
             ImageNotSupportedException, ContainerNotFoundException, QueryStoreException, DatabaseConnectionException {
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
 
         /* mock */
-        when(storeService.findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID))
-                .thenThrow(QueryNotFoundException.class);
+        doThrow(QueryNotFoundException.class).when(storeService)
+                .findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID);
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(QueryNotFoundException.class, () -> {
@@ -89,13 +124,16 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
     public void find_dbNotFound_fails() throws QueryNotFoundException, DatabaseNotFoundException,
             ImageNotSupportedException, ContainerNotFoundException, QueryStoreException, DatabaseConnectionException {
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
 
         /* mock */
-        when(storeService.findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID))
-                .thenThrow(DatabaseNotFoundException.class);
+        doThrow(DatabaseNotFoundException.class).when(storeService)
+                .findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID);
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(DatabaseNotFoundException.class, () -> {
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java
index 4b93f6ab3eaead520d3356ed1b86f777f4868a33..71be63fc134cbf6c3b3a669b50b0dd90efad06e9 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java
@@ -6,7 +6,10 @@ import at.tuwien.api.database.query.QueryResultDto;
 import at.tuwien.api.database.table.TableCsvDto;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import at.tuwien.service.DatabaseService;
 import at.tuwien.service.impl.QueryServiceImpl;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
 import org.junit.jupiter.api.Test;
@@ -16,6 +19,8 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.security.Principal;
@@ -23,6 +28,9 @@ import java.time.Instant;
 import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 
 @Log4j2
 @SpringBootTest
@@ -32,19 +40,33 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private TableDataEndpoint dataEndpoint;
 
     @MockBean
     private QueryServiceImpl queryService;
 
+    @MockBean
+    private DatabaseService databaseService;
+
     @Test
+    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
     public void insert_succeeds() throws TableNotFoundException, TableMalformedException, DatabaseNotFoundException,
             ImageNotSupportedException, ContainerNotFoundException, NotAllowedException, DatabaseConnectionException, QueryMalformedException {
         final ImportDto request = ImportDto.builder()
                 .location("test:csv/csv_01.csv")
                 .build();
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         final ResponseEntity<?> response = dataEndpoint.importCsv(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request,
@@ -54,13 +76,18 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME)
     public void insert_locationNull_succeeds() throws TableNotFoundException, TableMalformedException,
             DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException,
             NotAllowedException, DatabaseConnectionException {
         final TableCsvDto request = TableCsvDto.builder()
                 .data(Map.of("key", "value"))
                 .build();
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         final ResponseEntity<?> response = dataEndpoint.insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request,
@@ -70,8 +97,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void insert_locationAndDataNull_fails() {
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+    @WithMockUser(username = USER_1_USERNAME)
+    public void insert_locationAndDataNull_fails() throws DatabaseNotFoundException, TableNotFoundException, TableMalformedException, DatabaseConnectionException, ImageNotSupportedException, ContainerNotFoundException {
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1, DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
+        doThrow(TableMalformedException.class).when(queryService)
+                .insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, (TableCsvDto) null);
 
         /* test */
         assertThrows(TableMalformedException.class, () -> {
@@ -80,32 +114,47 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME)
     public void getAll_succeeds() throws TableNotFoundException, DatabaseConnectionException, TableMalformedException,
             DatabaseNotFoundException, ImageNotSupportedException, PaginationException, ContainerNotFoundException,
             QueryStoreException, NotAllowedException, QueryMalformedException, SortException {
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, principal, null, null, null, null, null);
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME)
     public void findAll_noPagination_succeeds() throws TableNotFoundException, DatabaseConnectionException,
             TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException,
             ContainerNotFoundException, QueryStoreException, NotAllowedException, QueryMalformedException, SortException {
         final Long page = null;
         final Long size = null;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, principal, DATABASE_1_CREATED, page, size, null, null);
     }
 
     @Test
-    public void findAll_pageNull_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void findAll_pageNull_fails() throws DatabaseNotFoundException {
         final Long page = null;
         final Long size = 1L;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -114,10 +163,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void findAll_sizeNull_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void findAll_sizeNull_fails() throws DatabaseNotFoundException {
         final Long page = 1L;
         final Long size = null;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -126,10 +180,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void findAll_negativePage_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void findAll_negativePage_fails() throws DatabaseNotFoundException {
         final Long page = -1L;
         final Long size = 1L /* arbitrary */;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -138,10 +197,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void findAll_sizeZero_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void findAll_sizeZero_fails() throws DatabaseNotFoundException {
         final Long page = 1L /* arbitrary */;
         final Long size = 0L;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -150,10 +214,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void findAll_sizeNegative_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void findAll_sizeNegative_fails() throws DatabaseNotFoundException {
         final Long page = 1L /* arbitrary */;
         final Long size = -1L;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -162,10 +231,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void getAll_parameter2_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void getAll_parameter2_fails() throws DatabaseNotFoundException {
         final Long page = 1L;
         final Long size = 0L;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -174,10 +248,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
-    public void getAll_parameter_fails() {
+    @WithMockUser(username = USER_1_USERNAME)
+    public void getAll_parameter_fails() throws DatabaseNotFoundException {
         final Long page = -1L;
         final Long size = 10L;
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         assertThrows(PaginationException.class, () -> {
@@ -186,12 +265,17 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME)
     public void getAllTotal_succeeds() throws TableNotFoundException, DatabaseConnectionException,
             TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException,
             PaginationException, ContainerNotFoundException, QueryStoreException, NotAllowedException,
             QueryMalformedException, SortException {
         final Instant timestamp = Instant.now();
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         final ResponseEntity<QueryResultDto> response = dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID,
@@ -201,12 +285,17 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @WithMockUser(username = USER_1_USERNAME)
     public void getAllCount_succeeds() throws TableNotFoundException, DatabaseConnectionException,
             TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException,
             PaginationException, ContainerNotFoundException, QueryStoreException, NotAllowedException,
             QueryMalformedException, SortException {
         final Instant timestamp = Instant.now();
-        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+        final Principal principal = SecurityContextHolder.getContext().getAuthentication();
+
+        /* mock */
+        doReturn(DATABASE_1).when(databaseService)
+                .find(CONTAINER_1_ID, DATABASE_1_ID);
 
         /* test */
         final ResponseEntity<QueryResultDto> response = dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID,
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java
index bcf4838697aa1863b758e40cd12cb099f1d764bf..227e901e652c57ce64bc44eb706e04580200089d 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java
@@ -12,12 +12,14 @@ import at.tuwien.exception.DatabaseNotFoundException;
 import at.tuwien.exception.ImageNotSupportedException;
 import at.tuwien.exception.TableMalformedException;
 import at.tuwien.exception.TableNotFoundException;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.repository.jpa.TableRepository;
 import at.tuwien.service.QueryService;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Bind;
 import com.github.dockerjava.api.model.Network;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
@@ -41,6 +43,7 @@ import java.util.Map;
 import static at.tuwien.config.DockerConfig.dockerClient;
 import static at.tuwien.config.DockerConfig.hostConfig;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.doReturn;
 
 @Log4j2
 @SpringBootTest
@@ -50,14 +53,15 @@ public class QueryMapperTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private QueryMapper queryMapper;
 
-    @BeforeEach
-    public void beforeEach() {
-        TABLE_1.setDatabase(DATABASE_1);
-    }
-
     @Test
     public void dataColumnToObject_succeeds() {
         final TableColumn request = TableColumn.builder()
@@ -68,6 +72,8 @@ public class QueryMapperTest extends BaseUnitTest {
                 .columnType(TableColumnType.TIMESTAMP)
                 .internalName("date")
                 .name("Date")
+                .dateFormat(ContainerImageDate.builder().build())
+                .table(TABLE_1)
                 .build();
 
         /* mock */
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java
index a76389ac94804d4ac5b29460429798fa16b86190..3f3e9506361bcba3167e8e326c31ab0bbea2956d 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java
@@ -6,11 +6,13 @@ import at.tuwien.config.DockerConfig;
 import at.tuwien.config.MariaDbConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.repository.jpa.TableRepository;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Bind;
 import com.github.dockerjava.api.model.Network;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.Test;
 import org.junit.jupiter.api.*;
@@ -40,6 +42,12 @@ public class DataServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private TableRepository tableRepository;
 
@@ -69,13 +77,12 @@ public class DataServiceIntegrationTest extends BaseUnitTest {
                 "./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d";
         log.trace("container bind {}", bind);
         final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
+                .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind)))
                 .withName(CONTAINER_1_INTERNALNAME)
                 .withIpv4Address(CONTAINER_1_IP)
                 .withHostName(CONTAINER_1_INTERNALNAME)
                 .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb",
                         "MARIADB_DATABASE=weather")
-                .withBinds(Bind.parse(bind))
                 .exec();
         /* start */
         CONTAINER_1.setHash(response.getId());
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
index b4740ae3e28f3a3c17c68b61e7bbf77ac73df045..455cc6a4bce926ea5bea3fb7b12ae31c0c768f04 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
@@ -2,14 +2,18 @@ package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.query.QueryResultDto;
+import at.tuwien.api.database.table.TableCsvDto;
 import at.tuwien.config.DockerConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.repository.jpa.*;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Bind;
+import com.github.dockerjava.api.model.ExposedPort;
 import com.github.dockerjava.api.model.Network;
+import com.rabbitmq.client.Channel;
 import lombok.SneakyThrows;
 import lombok.extern.log4j.Log4j2;
 import org.junit.Rule;
@@ -17,24 +21,30 @@ import org.junit.rules.Timeout;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.sql.DataSource;
 import java.io.File;
 import java.math.BigInteger;
+import java.sql.SQLException;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 
 import static at.tuwien.config.DockerConfig.dockerClient;
 import static at.tuwien.config.DockerConfig.hostConfig;
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.when;
 
 
 @Log4j2
@@ -46,6 +56,12 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private QueryService queryService;
 
@@ -82,13 +98,13 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
                 "./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d";
         log.trace("container bind {}", bind);
         final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
+                .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp")))
                 .withName(CONTAINER_1_INTERNALNAME)
                 .withIpv4Address(CONTAINER_1_IP)
                 .withHostName(CONTAINER_1_INTERNALNAME)
                 .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb",
                         "MARIADB_DATABASE=weather")
-                .withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp"))
+                //.withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp"))
                 .exec();
         CONTAINER_1.setHash(response.getId());
         DockerConfig.startContainer(CONTAINER_1);
@@ -99,13 +115,13 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
         log.trace("container bind {}", bind);
         final CreateContainerResponse response2 =
                 dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
-                        .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
+                        .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind2), Bind.parse("/tmp:/tmp")))
                         .withName(CONTAINER_2_INTERNALNAME)
                         .withIpv4Address(CONTAINER_2_IP)
                         .withHostName(CONTAINER_2_INTERNALNAME)
                         .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb",
                                 "MARIADB_DATABASE=zoo")
-                        .withBinds(Bind.parse(bind2), Bind.parse("/tmp:/tmp"))
+                        //.withBinds(Bind.parse(bind2), Bind.parse("/tmp:/tmp"))
                         .exec();
         CONTAINER_1.setHash(response.getId());
         CONTAINER_2.setHash(response2.getId());
@@ -155,23 +171,22 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
         databaseRepository.save(DATABASE_3);
         /* create tables */
         TABLE_1.setDatabase(DATABASE_1);
+        TABLE_1.setColumns(TABLE_1_COLUMNS);
+        TABLE_1_COLUMNS.forEach(column -> column.setTable(TABLE_1));
         tableRepository.save(TABLE_1);
         TABLE_2.setDatabase(DATABASE_1);
+        TABLE_2.setColumns(TABLE_2_COLUMNS);
+        TABLE_2_COLUMNS.forEach(column -> column.setTable(TABLE_2));
         tableRepository.save(TABLE_2);
         TABLE_3.setDatabase(DATABASE_3);
         tableRepository.save(TABLE_3);
         TABLE_4.setDatabase(DATABASE_2);
-        tableRepository.save(TABLE_4);
-        TABLE_5.setDatabase(DATABASE_2);
-        tableRepository.save(TABLE_5);
-        /* create columns */
-        TABLE_1.setColumns(TABLE_1_COLUMNS);
-        tableRepository.save(TABLE_1);
-        TABLE_2.setColumns(TABLE_2_COLUMNS);
-        tableRepository.save(TABLE_2);
         TABLE_4.setColumns(TABLE_4_COLUMNS);
+        TABLE_4_COLUMNS.forEach(column -> column.setTable(TABLE_4));
         tableRepository.save(TABLE_4);
+        TABLE_5.setDatabase(DATABASE_2);
         TABLE_5.setColumns(TABLE_5_COLUMNS);
+        TABLE_5_COLUMNS.forEach(column -> column.setTable(TABLE_5));
         tableRepository.save(TABLE_5);
     }
 
@@ -201,6 +216,70 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
         assertEquals(0.0, result.getResult().get(2).get(COLUMN_1_5_INTERNAL_NAME));
     }
 
+    @Test
+    public void selectAll_succeeds() throws TableNotFoundException, DatabaseConnectionException,
+            DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, PaginationException,
+            ContainerNotFoundException, QueryMalformedException, SQLException {
+        final Long page = 0L;
+        final Long size = 10L;
+
+        /* test */
+        queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size);
+    }
+
+    @Test
+    public void selectAll_noTable_fails() {
+        final Long page = 0L;
+        final Long size = 10L;
+
+        /* test */
+        assertThrows(TableNotFoundException.class, () -> {
+            queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, -1L, Instant.now(), page, size);
+        });
+    }
+
+    @Test
+    public void selectAll_noDatabase_fails() {
+        final Long page = 0L;
+        final Long size = 10L;
+
+        /* test */
+        assertThrows(DatabaseNotFoundException.class, () -> {
+            queryService.findAll(CONTAINER_1_ID, -1L, TABLE_1_ID, Instant.now(), page, size);
+        });
+    }
+
+    @Test
+    public void insert_columns_fails() {
+        final TableCsvDto request = TableCsvDto.builder()
+                .data(Map.of("key", "some_value"))
+                .build();
+
+        /* test */
+        assertThrows(TableMalformedException.class, () -> {
+            queryService.insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request);
+        });
+    }
+
+    @Test
+    public void findAll_timestampMissing_succeeds() throws TableNotFoundException, DatabaseConnectionException,
+            TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException,
+            ContainerNotFoundException, QueryMalformedException {
+
+        /* test */
+        queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, null, null);
+    }
+
+    @Test
+    public void findAll_timestampBeforeCreation_succeeds() throws TableNotFoundException, DatabaseConnectionException,
+            TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException,
+            ContainerNotFoundException, QueryMalformedException {
+        final Instant timestamp = DATABASE_1_CREATED.minus(1, ChronoUnit.SECONDS);
+
+        /* test */
+        queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, timestamp, null, null);
+    }
+
     @SneakyThrows
     private static Instant toInstant(String str) {
         final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceUnitTest.java
deleted file mode 100644
index 4aa314c293c47b93c1e55ce80fd18773631a0d4b..0000000000000000000000000000000000000000
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceUnitTest.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package at.tuwien.service;
-
-import at.tuwien.BaseUnitTest;
-import at.tuwien.api.database.table.TableCsvDto;
-import at.tuwien.config.DockerConfig;
-import at.tuwien.config.ReadyConfig;
-import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.DatabaseRepository;
-import at.tuwien.repository.jpa.TableRepository;
-import com.github.dockerjava.api.command.CreateContainerResponse;
-import com.github.dockerjava.api.exception.NotModifiedException;
-import com.github.dockerjava.api.model.Bind;
-import com.github.dockerjava.api.model.Network;
-import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Optional;
-
-import static at.tuwien.config.DockerConfig.dockerClient;
-import static at.tuwien.config.DockerConfig.hostConfig;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.Mockito.when;
-
-@SpringBootTest
-@ExtendWith(SpringExtension.class)
-@Log4j2
-public class QueryServiceUnitTest extends BaseUnitTest {
-
-    @MockBean
-    private ReadyConfig readyConfig;
-
-    @Autowired
-    private QueryService queryService;
-
-    @MockBean
-    private DatabaseRepository databaseRepository;
-
-    @MockBean
-    private TableRepository tableRepository;
-
-    @BeforeAll
-    public static void beforeAll() throws InterruptedException {
-        afterAll();
-        /* create network */
-        dockerClient.createNetworkCmd()
-                .withName("fda-userdb")
-                .withIpam(new Network.Ipam()
-                        .withConfig(new Network.Ipam.Config()
-                                .withSubnet("172.28.0.0/16")))
-                .withEnableIpv6(false)
-                .exec();
-        /* create container */
-        final String bind = new File("./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d";
-        log.trace("container bind {}", bind);
-        final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
-                .withName(CONTAINER_1_INTERNALNAME)
-                .withIpv4Address(CONTAINER_1_IP)
-                .withHostName(CONTAINER_1_INTERNALNAME)
-                .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather")
-                .withBinds(Bind.parse(bind))
-                .exec();
-        final String bind3 = new File("./src/test/resources/traffic").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d";
-        log.trace("container bind {}", bind3);
-        final CreateContainerResponse response3 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
-                .withName(CONTAINER_3_INTERNALNAME)
-                .withIpv4Address(CONTAINER_3_IP)
-                .withHostName(CONTAINER_3_INTERNALNAME)
-                .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=traffic")
-                .withBinds(Bind.parse(bind3))
-                .exec();
-        /* start */
-        CONTAINER_1.setHash(response.getId());
-        CONTAINER_3.setHash(response3.getId());
-        DockerConfig.startContainer(CONTAINER_1);
-        DockerConfig.startContainer(CONTAINER_3);
-    }
-
-    @AfterAll
-    public static void afterAll() {
-        /* stop containers and remove them */
-        dockerClient.listContainersCmd()
-                .withShowAll(true)
-                .exec()
-                .forEach(container -> {
-                    log.info("Delete container {}", Arrays.asList(container.getNames()));
-                    try {
-                        dockerClient.stopContainerCmd(container.getId()).exec();
-                    } catch (NotModifiedException e) {
-                        // ignore
-                    }
-                    dockerClient.removeContainerCmd(container.getId()).exec();
-                });
-        /* remove networks */
-        dockerClient.listNetworksCmd()
-                .exec()
-                .stream()
-                .filter(n -> n.getName().startsWith("fda"))
-                .forEach(network -> {
-                    log.info("Delete network {}", network.getName());
-                    dockerClient.removeNetworkCmd(network.getId()).exec();
-                });
-    }
-
-    @BeforeEach
-    public void beforeEach() {
-        TABLE_1.setDatabase(DATABASE_1);
-        TABLE_2.setDatabase(DATABASE_2);
-        TABLE_3.setDatabase(DATABASE_3);
-    }
-
-    @Test
-    public void selectAll_succeeds() throws TableNotFoundException, DatabaseConnectionException,
-            DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, PaginationException,
-            ContainerNotFoundException, QueryMalformedException {
-        final Long page = 0L;
-        final Long size = 10L;
-
-        /* mock */
-        when(databaseRepository.findById(DATABASE_1_ID))
-                .thenReturn(Optional.of(DATABASE_1));
-        when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID))
-                .thenReturn(Optional.of(TABLE_1));
-
-        /* test */
-        queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size);
-    }
-
-    @Test
-    public void selectAll_noTable_fails() {
-        final Long page = 0L;
-        final Long size = 10L;
-
-        /* mock */
-        when(databaseRepository.findById(DATABASE_1_ID))
-                .thenReturn(Optional.of(DATABASE_1));
-        when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID))
-                .thenReturn(Optional.empty());
-
-        /* test */
-        assertThrows(TableNotFoundException.class, () -> {
-            queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size);
-        });
-    }
-
-    @Test
-    public void selectAll_noDatabase_fails() {
-        final Long page = 0L;
-        final Long size = 10L;
-
-        /* mock */
-        when(databaseRepository.findById(DATABASE_1_ID))
-                .thenReturn(Optional.empty());
-        when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID))
-                .thenReturn(Optional.of(TABLE_1));
-
-        /* test */
-        assertThrows(DatabaseNotFoundException.class, () -> {
-            queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size);
-        });
-    }
-
-    @Test
-    public void insert_columns_fails() {
-        final TableCsvDto request = TableCsvDto.builder()
-                .data(Map.of("key", "some_value"))
-                .build();
-
-        /* mock */
-        when(databaseRepository.findById(DATABASE_1_ID))
-                .thenReturn(Optional.of(DATABASE_1));
-        when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID))
-                .thenReturn(Optional.of(TABLE_1));
-
-        /* test */
-        assertThrows(TableMalformedException.class, () -> {
-            queryService.insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request);
-        });
-    }
-
-    @Test
-    public void findAll_timestampMissing_succeeds() throws TableNotFoundException, DatabaseConnectionException,
-            TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException,
-            ContainerNotFoundException, QueryMalformedException {
-
-        /* mock */
-        when(databaseRepository.findById(DATABASE_1_ID))
-                .thenReturn(Optional.of(DATABASE_1));
-        when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID))
-                .thenReturn(Optional.of(TABLE_1));
-
-        /* test */
-        queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, null, null);
-    }
-
-    @Test
-    public void findAll_timestampBeforeCreation_succeeds() throws TableNotFoundException, DatabaseConnectionException,
-            TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException,
-            ContainerNotFoundException, QueryMalformedException {
-        final Instant timestamp = DATABASE_1_CREATED.minus(1, ChronoUnit.SECONDS);
-
-        /* mock */
-        when(databaseRepository.findById(DATABASE_1_ID))
-                .thenReturn(Optional.of(DATABASE_1));
-        when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID))
-                .thenReturn(Optional.of(TABLE_1));
-
-        /* test */
-        queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, timestamp, null, null);
-    }
-
-}
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java
index fe4ee84a35c9bf179439b0885c7f65ebb1068014..b876f84afefb3b449a427f4b2fa3525c6115f1c2 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java
@@ -7,11 +7,13 @@ import at.tuwien.config.DockerConfig;
 import at.tuwien.config.MariaDbConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.repository.jpa.TableRepository;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Bind;
 import com.github.dockerjava.api.model.Network;
+import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,6 +43,12 @@ public class StoreServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private StoreService storeService;
 
@@ -62,12 +70,11 @@ public class StoreServiceIntegrationTest extends BaseUnitTest {
         final String bind = new File("./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d";
         log.trace("container bind {}", bind);
         final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
-                .withHostConfig(hostConfig.withNetworkMode("fda-userdb"))
+                .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind)))
                 .withName(CONTAINER_1_INTERNALNAME)
                 .withIpv4Address(CONTAINER_1_IP)
                 .withHostName(CONTAINER_1_INTERNALNAME)
                 .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather")
-                .withBinds(Bind.parse(bind))
                 .exec();
         /* start */
         CONTAINER_1.setHash(response.getId());
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java
index 0a33960b59f4b6deecf961d1e0775eb2e96af920..177db87a8e34436ee98889b21937beeaeb1b1916 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java
@@ -10,6 +10,7 @@ import at.tuwien.config.MariaDbConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.exception.*;
+import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.repository.jpa.DatabaseRepository;
 import at.tuwien.repository.jpa.ImageRepository;
 import at.tuwien.repository.jpa.TableColumnRepository;
@@ -18,6 +19,7 @@ import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.api.exception.NotModifiedException;
 import com.github.dockerjava.api.model.Bind;
 import com.github.dockerjava.api.model.Network;
+import com.rabbitmq.client.Channel;
 import lombok.SneakyThrows;
 import lombok.extern.log4j.Log4j2;
 import net.sf.jsqlparser.JSQLParserException;
@@ -60,6 +62,12 @@ public class TableServiceTest extends BaseUnitTest {
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private Channel channel;
+
+    @MockBean
+    private RabbitMqListenerImpl rabbitMqListener;
+
     @Autowired
     private ImageRepository imageRepository;
 
diff --git a/fda-query-service/rest-service/src/test/resources/application.properties b/fda-query-service/rest-service/src/test/resources/application.properties
index 1f8a9f4089f393b2a8d25f28472a80a35658aab5..88c58a85e34098a6ef1eddde183d20544dc6fb1c 100644
--- a/fda-query-service/rest-service/src/test/resources/application.properties
+++ b/fda-query-service/rest-service/src/test/resources/application.properties
@@ -1,3 +1,6 @@
+# enable local spring profile
+spring.profiles.active=local
+
 # disable discovery
 spring.cloud.discovery.enabled = false