diff --git a/.gitignore b/.gitignore
index 254162c9da1598d8f80da4878d6b9695fd0b9941..fe38e189179b48fe6cc6754d104208d807934164 100644
--- a/.gitignore
+++ b/.gitignore
@@ -105,3 +105,5 @@ jams-server/src/main/resources/webapp/
 .vscode/settings.json
 
 jams-server/doc/
+
+coverage/
diff --git a/README.md b/README.md
index eb826e624926ac9f282055e1288eef676941febb..1e46942ef88dcc1a3cbf3ff68e09b10bfd11df04 100644
--- a/README.md
+++ b/README.md
@@ -120,6 +120,18 @@ docker build -f Dockerfile -t jams:latest --target prod . \
     && java -jar jams-launcher.jar
 ```
 
+## Run tests
+```sh
+mvn clean test
+
+# to open the report files in the browser
+for f in */target/site/jacoco/index.html ; do xdg-open $f ; done
+
+# (optional) if the file doesn't open in your browser
+TYPE=$(xdg-mime query filetype datastore/target/site/jacoco/index.html)
+xdg-mime default firefox.desktop "$TYPE"
+```
+
 ## Visualize the derby database
 The IntelliJ Ultimate Edition Database view can help visualize the database schema.
 Don't forget to launch jams locally at least once before proceeding.
diff --git a/ad-connector/src/test/java/net/jami/jams/ad/connector/ADConnectorTest.java b/ad-connector/src/test/java/net/jami/jams/ad/connector/ADConnectorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..23a4b7289713e019ced3ec3f4f95c9e11ae2615a
--- /dev/null
+++ b/ad-connector/src/test/java/net/jami/jams/ad/connector/ADConnectorTest.java
@@ -0,0 +1,29 @@
+package net.jami.jams.ad.connector;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import com.google.gson.Gson;
+
+import net.jami.jams.common.authentication.activedirectory.ActiveDirectorySettings;
+import net.jami.jams.common.objects.user.UserProfile;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class ADConnectorTest {
+    private ADConnector adConnector;
+
+    @BeforeEach
+    void setUp() {
+        Gson gson = new Gson();
+        ActiveDirectorySettings activeDirectorySettings = new ActiveDirectorySettings();
+        String settings = gson.toJson(activeDirectorySettings);
+        adConnector = new ADConnector(settings);
+    }
+
+    @Test
+    void testGetUserProfile() {
+        UserProfile userProfile = adConnector.getUserProfile("jdoe");
+        assertNull(userProfile);
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/ContactDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/ContactDaoTest.java
index 94793473308c6a85bb22b897edfbb30dcd5acaf3..f6f3613400999ec2a383f5725b2374436dd30e0a 100644
--- a/datastore/src/test/java/net/jami/datastore/dao/ContactDaoTest.java
+++ b/datastore/src/test/java/net/jami/datastore/dao/ContactDaoTest.java
@@ -22,4 +22,52 @@
  */
 package net.jami.datastore.dao;
 
-class ContactDaoTest {}
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.contacts.Contact;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+
+class ContactDaoTest {
+    private ContactDao contactDao;
+
+    @BeforeEach
+    void setUp() {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        contactDao = new ContactDao();
+        Assertions.assertNotNull(contactDao);
+    }
+
+    @Test
+    void getByOwner() throws Exception {
+        Assertions.assertTrue(contactDao.getByOwner("test").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        Contact contact = new Contact();
+        Assertions.assertFalse(contactDao.storeObject(contact));
+    }
+
+    @Test
+    void storeContactList() throws Exception {
+        ArrayList<Contact> contactList = new ArrayList<>();
+        Assertions.assertFalse(contactDao.storeContactList(contactList));
+
+        Contact contact = new Contact();
+        contactList.add(contact);
+        Assertions.assertFalse(contactDao.storeContactList(contactList));
+    }
+
+    @Test
+    void deleteObject() throws Exception {
+        Assertions.assertFalse(contactDao.deleteObject("owner", "uri"));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java b/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java
index dcf39d91aeb5528322351a79fc58bc4e9d30efd4..1f7d421ac3f3c350d9e0c4ca206e597e70415a54 100644
--- a/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java
+++ b/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java
@@ -26,6 +26,7 @@ import lombok.extern.slf4j.Slf4j;
 
 import net.jami.datastore.main.DataStore;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
 import net.jami.jams.common.objects.devices.Device;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.User;
@@ -35,6 +36,7 @@ import org.apache.tomcat.util.codec.binary.Base64;
 import org.bouncycastle.util.encoders.Hex;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.io.InputStream;
@@ -52,9 +54,7 @@ class DAOTest {
     static String refreshedCertificate;
 
     @BeforeAll
-    static void setUp() throws Exception {
-        DataStore dataStore = new DataStore("jdbc:derby:testdb;create=true");
-        Assertions.assertNotNull(DataStore.connectionPool.getConnection());
+    static void beforeAll() throws Exception {
         InputStream path;
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         path = classLoader.getResourceAsStream("cakey.txt");
@@ -69,19 +69,28 @@ class DAOTest {
         refreshedCertificate = new String(path.readAllBytes());
     }
 
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:daotestdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+    }
+
     @Test
     void storeUser() throws Exception {
-        User user = new User();
-        user.setUsername("fsidokhine");
-        user.setUserType(AuthenticationSourceType.LOCAL);
         SecureRandom random = new SecureRandom();
         byte[] salt = new byte[16];
         random.nextBytes(salt);
+
+        User user = new User();
+        user.setUsername("fsidokhine");
+        user.setUserType(AuthenticationSourceType.LOCAL);
         user.setSalt(Base64.encodeBase64String(salt));
         user.setPassword(hashPassword("abc123", salt));
         user.setAccessLevel(AccessLevel.ADMIN);
         user.setCertificate(X509Utils.getCertificateFromPEMString(strCertificate));
         user.setPrivateKey(X509Utils.getKeyFromPEMString(strPrivateKey));
+
         UserDao userDAO = new UserDao();
         userDAO.storeObject(user);
 
@@ -92,33 +101,37 @@ class DAOTest {
 
     @Test
     void refreshUserCertificate() throws Exception {
-        User user = new User();
-        user.setUsername("TestUser");
-        user.setUserType(AuthenticationSourceType.LOCAL);
-        SecureRandom random = new SecureRandom();
-        byte[] salt = new byte[16];
-        random.nextBytes(salt);
-        user.setSalt(Base64.encodeBase64String(salt));
-        user.setPassword(hashPassword("abc123", salt));
-        user.setAccessLevel(AccessLevel.USER);
-        user.setCertificate(X509Utils.getCertificateFromPEMString(generatedCertificate));
+        User user = createMockUser();
 
         UserDao userDAO = new UserDao();
         userDAO.storeObject(user);
 
-        User user1 = userDAO.getByUsername("TestUser").get();
+        User user1 = userDAO.getByUsername("TestUser").orElseThrow();
         Assertions.assertNotNull(user1);
         Assertions.assertEquals(user1.getAccessLevel(), AccessLevel.USER);
 
-        userDAO.updateUserCertificate(
-                "TestUser",
-                X509Utils.getPEMStringFromCertificate(
-                        X509Utils.getCertificateFromPEMString(refreshedCertificate)));
+        userDAO.updateUserCertificate("TestUser", refreshedCertificate);
 
-        User user2 = userDAO.getByUsername("TestUser").get();
+        User user2 = userDAO.getByUsername("TestUser").orElseThrow();
         Assertions.assertNotEquals(user1.getCertificate(), user2.getCertificate());
     }
 
+    private User createMockUser() {
+        SecureRandom random = new SecureRandom();
+        byte[] salt = new byte[16];
+        random.nextBytes(salt);
+
+        User user = new User();
+        user.setUsername("TestUser");
+        user.setUserType(AuthenticationSourceType.LOCAL);
+        user.setSalt(Base64.encodeBase64String(salt));
+        user.setPassword(hashPassword("abc123", salt));
+        user.setAccessLevel(AccessLevel.USER);
+        user.setCertificate(X509Utils.getCertificateFromPEMString(generatedCertificate));
+
+        return user;
+    }
+
     @Test
     void storeDevice() {
         Device device = new Device();
diff --git a/datastore/src/test/java/net/jami/datastore/dao/DeviceDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/DeviceDaoTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..168710e51fcb9796f3ad7bf5cb38a899101dd545
--- /dev/null
+++ b/datastore/src/test/java/net/jami/datastore/dao/DeviceDaoTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 by Savoir-faire Linux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package net.jami.datastore.dao;
+
+import lombok.extern.slf4j.Slf4j;
+
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.devices.Device;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class DeviceDaoTest {
+    private DeviceDao deviceDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        deviceDao = new DeviceDao();
+        Assertions.assertNotNull(deviceDao);
+    }
+
+    @Test
+    void getByOwner() throws Exception {
+        Assertions.assertTrue(deviceDao.getByOwner("test").isEmpty());
+    }
+
+    @Test
+    void getByDeviceIdAndOwner() throws Exception {
+        Assertions.assertTrue(deviceDao.getByDeviceIdAndOwner("deviceid", "owner").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        Device device = new Device();
+        Assertions.assertFalse(deviceDao.storeObject(device));
+    }
+
+    @Test
+    void updateObject() throws Exception {
+        Assertions.assertFalse(deviceDao.updateObject("devicename", "username", "deviceid"));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/GroupDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/GroupDaoTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c641e0feb2c38cdd83b970f4f6b733d52d24962f
--- /dev/null
+++ b/datastore/src/test/java/net/jami/datastore/dao/GroupDaoTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2023 by Savoir-faire Linux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package net.jami.datastore.dao;
+
+import lombok.extern.slf4j.Slf4j;
+
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.user.Group;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class GroupDaoTest {
+    private GroupDao groupDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        groupDao = new GroupDao();
+        Assertions.assertNotNull(groupDao);
+    }
+
+    @Test
+    void getAll() throws Exception {
+        Assertions.assertTrue(groupDao.getAll().isEmpty());
+    }
+
+    @Test
+    void getById() throws Exception {
+        Assertions.assertTrue(groupDao.getById("test").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        Group group = new Group();
+        Assertions.assertFalse(groupDao.storeObject(group));
+    }
+
+    @Test
+    void updateObject() throws Exception {
+        Assertions.assertFalse(groupDao.updateObject("id", "name", "blueprint"));
+    }
+
+    @Test
+    void deleteObject() throws Exception {
+        Assertions.assertFalse(groupDao.deleteObject("id"));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/PolicyDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/PolicyDaoTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c11c3213e4299f5c3960a34761c672cb4b56aa7
--- /dev/null
+++ b/datastore/src/test/java/net/jami/datastore/dao/PolicyDaoTest.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2023 by Savoir-faire Linux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package net.jami.datastore.dao;
+
+import lombok.extern.slf4j.Slf4j;
+
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.user.Policy;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class PolicyDaoTest {
+    private PolicyDao policyDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        policyDao = new PolicyDao();
+        Assertions.assertNotNull(policyDao);
+    }
+
+    @Test
+    void getAll() throws Exception {
+        Assertions.assertTrue(policyDao.getAll().isEmpty());
+    }
+
+    @Test
+    void getByName() throws Exception {
+        Assertions.assertTrue(policyDao.getByName("test").isEmpty());
+    }
+
+    @Test
+    void getByUsername() throws Exception {
+        Assertions.assertTrue(policyDao.getByUsername("test").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        Policy policyData = new Policy();
+        Assertions.assertFalse(policyDao.storeObject(policyData));
+    }
+
+    @Test
+    void updateObject() throws Exception {
+        Assertions.assertFalse(policyDao.updateObject("name", "policyData"));
+    }
+
+    @Test
+    void deleteObject() throws Exception {
+        Assertions.assertFalse(policyDao.deleteObject("name"));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/SystemDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/SystemDaoTest.java
index 8eb978de1063a68b06bbf8a87bdb959c44ed9b49..faadc85df9904d002980d23b51743248dbbf5b0c 100644
--- a/datastore/src/test/java/net/jami/datastore/dao/SystemDaoTest.java
+++ b/datastore/src/test/java/net/jami/datastore/dao/SystemDaoTest.java
@@ -1,11 +1,5 @@
 /*
- * Copyright (C) 2020 by Savoir-faire Linux
- * Authors: William Enright <william.enright@savoirfairelinux.com>
- *          Ndeye Anna Ndiaye <anna.ndiaye@savoirfairelinux.com>
- *          Johnny Flores <johnny.flores@savoirfairelinux.com>
- *          Mohammed Raza <mohammed.raza@savoirfairelinux.com>
- *          Felix Sidokhine <felix.sidokhine@savoirfairelinux.com>
- *
+ * Copyright (C) 2023 by Savoir-faire Linux
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,4 +16,40 @@
  */
 package net.jami.datastore.dao;
 
-class SystemDaoTest {}
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.system.SystemAccount;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class SystemDaoTest {
+    private SystemDao systemDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        systemDao = new SystemDao();
+        Assertions.assertNotNull(systemDao);
+    }
+
+    @Test
+    void getCA() throws Exception {
+        Assertions.assertTrue(systemDao.getCA().isEmpty());
+    }
+
+    @Test
+    void getOCSP() throws Exception {
+        Assertions.assertTrue(systemDao.getOCSP().isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        SystemAccount systemAccount = new SystemAccount();
+        Assertions.assertFalse(systemDao.storeObject(systemAccount));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/UserDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/UserDaoTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..65b7d138a9c20735ec65cdb0c9ec82cc9e63ac54
--- /dev/null
+++ b/datastore/src/test/java/net/jami/datastore/dao/UserDaoTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2023 by Savoir-faire Linux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package net.jami.datastore.dao;
+
+import lombok.extern.slf4j.Slf4j;
+
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.user.User;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class UserDaoTest {
+    private UserDao userDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        userDao = new UserDao();
+        Assertions.assertNotNull(userDao);
+    }
+
+    @Test
+    void getAll() throws Exception {
+        Assertions.assertTrue(userDao.getAll().isEmpty());
+    }
+
+    @Test
+    void getByUsername() throws Exception {
+        Assertions.assertTrue(userDao.getByUsername("test").isEmpty());
+    }
+
+    @Test
+    void getByJamiId() throws Exception {
+        Assertions.assertTrue(userDao.getByJamiId("test").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        User user = new User();
+        Assertions.assertFalse(userDao.storeObject(user));
+    }
+
+    @Test
+    void updateUserCertificate() throws Exception {
+        Assertions.assertFalse(userDao.updateUserCertificate("username", "certificate"));
+    }
+
+    @Test
+    void updateObject() throws Exception {
+        Assertions.assertFalse(userDao.updateObject("password", "username"));
+        Assertions.assertFalse(userDao.updateObject("password", "salt", "username"));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/UserGroupMappingsDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/UserGroupMappingsDaoTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b206745c207c4b3fc94470ae4d33c9f9d266307
--- /dev/null
+++ b/datastore/src/test/java/net/jami/datastore/dao/UserGroupMappingsDaoTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2023 by Savoir-faire Linux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package net.jami.datastore.dao;
+
+import lombok.extern.slf4j.Slf4j;
+
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.user.UserGroupMapping;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class UserGroupMappingsDaoTest {
+    private UserGroupMappingsDao ugmDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        ugmDao = new UserGroupMappingsDao();
+        Assertions.assertNotNull(ugmDao);
+    }
+
+    @Test
+    void getByGroupId() throws Exception {
+        Assertions.assertTrue(ugmDao.getByGroupId("test").isEmpty());
+    }
+
+    @Test
+    void getByUsername() throws Exception {
+        Assertions.assertTrue(ugmDao.getByUsername("test").isEmpty());
+    }
+
+    @Test
+    void getByGroupIdAndUsername() throws Exception {
+        Assertions.assertTrue(ugmDao.getByGroupIdAndUsername("groupid", "username").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        UserGroupMapping ugm = new UserGroupMapping();
+        Assertions.assertFalse(ugmDao.storeObject(ugm));
+    }
+
+    @Test
+    void deleteObject() throws Exception {
+        Assertions.assertFalse(ugmDao.deleteObject("username", "groupid"));
+        Assertions.assertFalse(ugmDao.deleteObject("*", "groupid"));
+    }
+}
diff --git a/datastore/src/test/java/net/jami/datastore/dao/UserProfileDaoTest.java b/datastore/src/test/java/net/jami/datastore/dao/UserProfileDaoTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ec6fa029c3818030de378e7ebf8395376c6ad73
--- /dev/null
+++ b/datastore/src/test/java/net/jami/datastore/dao/UserProfileDaoTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2023 by Savoir-faire Linux
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package net.jami.datastore.dao;
+
+import lombok.extern.slf4j.Slf4j;
+
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
+import net.jami.jams.common.objects.user.UserProfile;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+@Slf4j
+class UserProfileDaoTest {
+    private UserProfileDao userProfileDao;
+
+    @BeforeEach
+    void beforeEach() throws Exception {
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+
+        userProfileDao = new UserProfileDao();
+        Assertions.assertNotNull(userProfileDao);
+    }
+
+    @Test
+    void insertIfNotExists() throws Exception {
+        UserProfile userProfile = new UserProfile();
+        userProfileDao.insertIfNotExists(userProfile);
+    }
+
+    @Test
+    void getAll() throws Exception {
+        Assertions.assertTrue(userProfileDao.getAllUserProfile().isEmpty());
+    }
+
+    @Test
+    void searchUsername() throws Exception {
+        Assertions.assertTrue(userProfileDao.searchUsername("test").isEmpty());
+    }
+
+    @Test
+    void searchFullName() throws Exception {
+        Assertions.assertTrue(userProfileDao.searchFullName("test").isEmpty());
+    }
+
+    @Test
+    void getByUsername() throws Exception {
+        Assertions.assertTrue(userProfileDao.getByUsername("test").isEmpty());
+    }
+
+    @Test
+    void storeObject() throws Exception {
+        UserProfile userProfile = new UserProfile();
+        Assertions.assertFalse(userProfileDao.storeObject(userProfile));
+    }
+
+    @Test
+    void updateUserProfile() throws Exception {
+        UserProfile userProfile = new UserProfile();
+        Assertions.assertFalse(userProfileDao.updateUserProfile(userProfile));
+    }
+}
diff --git a/datastore/src/test/resources/db/migration/V10__Contacts.sql b/datastore/src/test/resources/db/migration/V10__Contacts.sql
deleted file mode 100644
index b293ce84fa922b4b266ca6a63305890c504b14c5..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V10__Contacts.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-CREATE TABLE contacts (owner varchar(255),
-uri varchar(255), displayName varchar(255) ,
-timestamp bigint, status int,
-PRIMARY KEY (owner,uri));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V11__Devices.sql b/datastore/src/test/resources/db/migration/V11__Devices.sql
deleted file mode 100644
index 9cb38eb599ae07970491e4a4a61715fc14710e8c..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V11__Devices.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-CREATE TABLE devices (deviceId varchar(255),
-owner varchar(255), displayName varchar(255),
-certificate varchar(5000), privatekey varchar(5000),
-PRIMARY KEY (deviceId));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V12__System.sql b/datastore/src/test/resources/db/migration/V12__System.sql
deleted file mode 100644
index 00992c3527ad7eed4a5c0599b0ea1112cc502ddf..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V12__System.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE system (entity varchar(255),
-certificate varchar(5000), privatekey varchar(5000),
-PRIMARY KEY (entity));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V13__Users.sql b/datastore/src/test/resources/db/migration/V13__Users.sql
deleted file mode 100644
index 2d3eb6d9e3a403eb5307135409284d319e7fa17e..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V13__Users.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE TABLE users ( username varchar(255),
-password varchar(255),userType varchar(10),
-realm varchar(255),ethAddress varchar(255),
-ethKey varchar(255),jamiId varchar(255),
-certificate varchar(5000),privatekey varchar(5000),
-accessLevel varchar(10),needsPasswordReset varchar(10), salt varchar(255),
-PRIMARY KEY (username));
diff --git a/datastore/src/test/resources/db/migration/V14__Userprofile.sql b/datastore/src/test/resources/db/migration/V14__Userprofile.sql
deleted file mode 100644
index 534bfb98df4cc4a4ec96b58c3bd1ee1d7aefcbbc..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V14__Userprofile.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE TABLE local_directory ( username varchar(255),
-firstName varchar(255),lastName varchar(255),
-email varchar(255),profilePicture CLOB,
-organization varchar(255),phoneNumber varchar(255),
-phoneNumberExtension varchar(255),
-faxNumber varchar(255),mobileNumber varchar(255),
-PRIMARY KEY (username));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V15__Group.sql b/datastore/src/test/resources/db/migration/V15__Group.sql
deleted file mode 100644
index 1b7d92f6ea416b446436d8ecc13c194464d5ea47..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V15__Group.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-CREATE TABLE groups (name varchar(255),
-                     PRIMARY KEY (name));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V16__Policy.sql b/datastore/src/test/resources/db/migration/V16__Policy.sql
deleted file mode 100644
index f3ef94d62790717a91fcb41a9309ee418247c939..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V16__Policy.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-CREATE TABLE policies (name varchar(255), policyData varchar(5000),
-PRIMARY KEY (name));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V17__UserGroupMappings.sql b/datastore/src/test/resources/db/migration/V17__UserGroupMappings.sql
deleted file mode 100644
index 2bcd6e18669b3eab87546bd5e9ba9aa337fb5236..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V17__UserGroupMappings.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE usergroupmappings (username varchar(255),
-groups varchar(5000),
-PRIMARY KEY (username));
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V24__Userprofile.sql b/datastore/src/test/resources/db/migration/V24__Userprofile.sql
deleted file mode 100644
index f784b8864f4dc0e80696fa44eba6293d0f1f2cbf..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V24__Userprofile.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE local_directory ADD COLUMN groupMemberships varchar(5000);
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V25__Group.sql b/datastore/src/test/resources/db/migration/V25__Group.sql
deleted file mode 100644
index a5116570d869360ddbcaa8274615e0e8888db875..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V25__Group.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE groups ADD COLUMN blueprint varchar(255);
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V27__UserGroupMappings.sql b/datastore/src/test/resources/db/migration/V27__UserGroupMappings.sql
deleted file mode 100644
index f8567a237d566869d2b40604ee886d68b9d47bc3..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V27__UserGroupMappings.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-ALTER TABLE usergroupmappings DROP PRIMARY KEY;
-ALTER TABLE usergroupmappings ADD COLUMN GROUPID varchar(36);
-UPDATE usergroupmappings SET GROUPID = groups;
-ALTER TABLE usergroupmappings DROP COLUMN groups;
-ALTER TABLE usergroupmappings ADD id int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1);
-ALTER TABLE usergroupmappings ADD PRIMARY KEY (id);
\ No newline at end of file
diff --git a/datastore/src/test/resources/db/migration/V35__Group.sql b/datastore/src/test/resources/db/migration/V35__Group.sql
deleted file mode 100644
index a8ca7fb4705c16f01062d0bb72de44d6c2958667..0000000000000000000000000000000000000000
--- a/datastore/src/test/resources/db/migration/V35__Group.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE groups DROP PRIMARY KEY;
-ALTER TABLE groups ADD ID varchar(36) PRIMARY KEY not null default '';
\ No newline at end of file
diff --git a/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java b/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java
index b3161dd423af73294db280e69e8e3e54481e2d1e..145ae67d23bf9e1e608dc248752ba1cf511c8096 100644
--- a/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java
+++ b/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/SystemAccountBuilderTest.java
@@ -65,18 +65,22 @@ class SystemAccountBuilderTest {
 
     @Test
     void generateFullChain() {
-        SystemAccount caAccount = new SystemAccount();
-        caAccount.setSystemAccountType(SystemAccountType.CA);
-        caAccount.setX509Fields(new X509Fields());
-        caAccount.getX509Fields().setCommonName("Test CA");
-        caAccount.getX509Fields().setCountry("FR");
-        caAccount.getX509Fields().setLifetime(10000000L);
-        caAccount = SystemAccountBuilder.generateCA(caAccount);
-        Assertions.assertNotNull(caAccount.getCertificate(), "CA Certificate was not generated!");
+        JamsCA.CA = createMockCaAccount();
+        createMockOcsp();
+        User user = createMockUser();
+        Device device = createMockDevice(user);
 
-        JamsCA.CA = caAccount;
+        // Check that we can decode the rdn.
+        try {
+            HashMap<String, String> data =
+                    X509Utils.extractDNFromCertificate(device.getCertificate());
+            Assertions.assertEquals(2, data.size());
+        } catch (Exception e) {
+            fail();
+        }
+    }
 
-        // Generate OCSP
+    private void createMockOcsp() {
         SystemAccount ocspAccount = new SystemAccount();
         ocspAccount.setSystemAccountType(SystemAccountType.OCSP);
         ocspAccount.setX509Fields(new X509Fields());
@@ -85,56 +89,37 @@ class SystemAccountBuilderTest {
         ocspAccount = SystemAccountBuilder.generateOCSP(ocspAccount);
         Assertions.assertNotNull(
                 ocspAccount.getCertificate(), "OCSP Certificate was not generated!");
+    }
+
+    private Device createMockDevice(User user) {
+        Device device = new Device();
+        device.setOwner("00000");
+        device.setCertificationRequest(X509Utils.getCSRFromString(strPkcs10Request));
+        device = DeviceBuilder.generateDevice(user, device);
+        Assertions.assertNotNull(device.getCertificate(), "Device certificate was not generated!");
+        return device;
+    }
 
-        // Generate User.
+    public static User createMockUser() {
         User user = new User();
         user.setUserType(AuthenticationSourceType.LOCAL);
         user.setX509Fields(new X509Fields());
         user.getX509Fields().setCommonName("Felix's Personal Certificate");
         user = UserBuilder.generateUser(user);
         Assertions.assertNotNull(user.getCertificate(), "User Certificate was not generated!");
-
-        // Generate a device
-        Device device = new Device();
-        device.setOwner("00000");
-        device.setCertificationRequest(X509Utils.getCSRFromString(strPkcs10Request));
-        device = DeviceBuilder.generateDevice(user, device);
-        Assertions.assertNotNull(device.getCertificate(), "Device certificate was not generated!");
-        // Check that we can decode the rdn.
-        try {
-            HashMap<String, String> data =
-                    X509Utils.extractDNFromCertificate(device.getCertificate());
-            Assertions.assertEquals(2, data.size());
-        } catch (Exception e) {
-            fail();
-        }
+        return user;
     }
 
     @Test
     void testCRLGeneration() throws Exception {
-        SystemAccount caAccount = new SystemAccount();
-        caAccount.setSystemAccountType(SystemAccountType.CA);
-        caAccount.setX509Fields(new X509Fields());
-        caAccount.getX509Fields().setCommonName("Test CA");
-        caAccount.getX509Fields().setCountry("FR");
-        caAccount.getX509Fields().setLifetime(10000000L);
-        caAccount = SystemAccountBuilder.generateCA(caAccount);
-        Assertions.assertNotNull(caAccount.getCertificate(), "CA Certificate was not generated!");
-        CertificateAuthorityConfig config = new CertificateAuthorityConfig();
-        config.setUserLifetime(1000L);
-        config.setSigningAlgorithm("SHA512WITHRSA");
-        config.setServerDomain("http://localhost");
-        config.setCrlLifetime(1000000L);
-        config.setDeviceLifetime(1000L);
+        JamsCA jamsCA = createMockJamsCA();
 
-        JamsCA jamsCA = new JamsCA();
-        jamsCA.init(JsonStream.serialize(config), caAccount, caAccount);
         RevocationRequest revocationRequest = new RevocationRequest();
         revocationRequest.setIdentifier(new BigInteger("91828882"));
         revocationRequest.setRevocationType(RevocationType.USER);
         jamsCA.revokeCertificate(revocationRequest);
         synchronized (this) {
-            this.wait(2_000);
+            this.wait(500);
         }
         Assertions.assertNotNull(jamsCA.getLatestCRL());
         Assertions.assertEquals(
@@ -147,7 +132,7 @@ class SystemAccountBuilderTest {
         revocationRequest.setRevocationType(RevocationType.USER);
         jamsCA.revokeCertificate(revocationRequest);
         synchronized (this) {
-            this.wait(2_000);
+            this.wait(500);
         }
         Assertions.assertNotNull(jamsCA.getLatestCRL());
         Assertions.assertEquals(
@@ -156,6 +141,35 @@ class SystemAccountBuilderTest {
                 "Expected only 2 certificates!");
     }
 
+    public static JamsCA createMockJamsCA() {
+        SystemAccount caAccount = createMockCaAccount();
+
+        CertificateAuthorityConfig config = new CertificateAuthorityConfig();
+        config.setUserLifetime(1000L);
+        config.setSigningAlgorithm("SHA512WITHRSA");
+        config.setServerDomain("http://localhost");
+        config.setCrlLifetime(1000000L);
+        config.setDeviceLifetime(1000L);
+
+        JamsCA jamsCA = new JamsCA();
+        jamsCA.init(JsonStream.serialize(config), caAccount, caAccount);
+
+        return jamsCA;
+    }
+
+    private static SystemAccount createMockCaAccount() {
+        SystemAccount caAccount = new SystemAccount();
+        caAccount.setSystemAccountType(SystemAccountType.CA);
+        caAccount.setX509Fields(new X509Fields());
+        caAccount.getX509Fields().setCommonName("Test CA");
+        caAccount.getX509Fields().setCountry("FR");
+        caAccount.getX509Fields().setLifetime(10000000L);
+        caAccount = SystemAccountBuilder.generateCA(caAccount);
+        Assertions.assertNotNull(caAccount.getCertificate(), "CA Certificate was not generated!");
+
+        return caAccount;
+    }
+
     @AfterAll
     static void afterAll() {
         File file = new File(System.getProperty("user.dir") + File.separator + "jams.crl");
diff --git a/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/UserBuilderTest.java b/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/UserBuilderTest.java
index 219ced4f3a026cd33ea40cdd0b8c2fa8567dc6bb..d17d82ad1556e178e244e9ae6df17611386ad893 100644
--- a/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/UserBuilderTest.java
+++ b/jams-ca/src/test/java/net/jami/jams/ca/workers/csr/builders/UserBuilderTest.java
@@ -4,27 +4,37 @@ import static org.junit.jupiter.api.Assertions.*;
 
 import lombok.extern.slf4j.Slf4j;
 
-import net.jami.jams.common.authentication.AuthenticationSourceType;
-import net.jami.jams.common.objects.roots.X509Fields;
+import net.jami.jams.ca.JamsCA;
 import net.jami.jams.common.objects.user.User;
 
 import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.io.File;
 import java.security.cert.X509Certificate;
 
 @Slf4j
 class UserBuilderTest {
 
+    @BeforeEach
+    void setUp() {
+        JamsCA jamsCA = SystemAccountBuilderTest.createMockJamsCA();
+    }
+
+    @AfterEach
+    void tearDown() {
+        File file = new File("jams.crl");
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
     @Test
     void generateUserCertificate() {
-
-        User user = new User();
-        user.setUsername("TestUser");
-        user.setUserType(AuthenticationSourceType.LOCAL);
-        user.setX509Fields(new X509Fields());
-        user.getX509Fields().setCommonName("TestUser's Personal Certificate");
+        User user = SystemAccountBuilderTest.createMockUser();
         user = UserBuilder.generateUser(user);
 
         Assertions.assertNotNull(user.getCertificate(), "User Certificate was not generated!");
@@ -32,15 +42,8 @@ class UserBuilderTest {
 
     @Test
     void refreshUserCertificate() {
-
-        User user = new User();
-        user.setUsername("TestUser");
-        // user.setJamiId("");
-        user.setUserType(AuthenticationSourceType.LOCAL);
-        user.setX509Fields(new X509Fields());
-        user.getX509Fields().setCommonName("TestUser's Personal Certificate");
-        user = UserBuilder.generateUser(user);
-
+        User user = SystemAccountBuilderTest.createMockUser();
+        user.setUsername("test");
         Assertions.assertNotNull(user, "User was not generated!");
 
         X509Certificate cert = user.getCertificate();
diff --git a/jams-server/build-ui.sh b/jams-server/build-ui.sh
deleted file mode 100755
index 7265b800363ef8d88b6f705ccda1961b22e7c06c..0000000000000000000000000000000000000000
--- a/jams-server/build-ui.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-set -eo pipefail
-
-#Build the UI from the react js folder.
-cd ../jams-react-client || exit
-npm install
-npm run build
-#Now the UI is built we can exit and copy resource
-rm -rf ../jams-server/src/main/resources/webapp/*
-echo "Removed old webapp contents!"
-mkdir -p ../jams-server/src/main/resources/webapp
-echo "Created webapp folder!"
-sed -i 's/material-dashboard-react\///g' build/index.html
-echo "Created webapp folder!"
-mv build/* ../jams-server/src/main/resources/webapp
-echo "Copied new webapp contents!"
-rm -rf build
diff --git a/ldap-connector/src/test/java/tests/GenericLDAPTest.java b/ldap-connector/src/test/java/tests/GenericLDAPTest.java
index af9e55a3e18ec1f165e4ad4476a6ee4e34e92980..08fdfbadbc7987685537868dcd1657bfcd851f0f 100644
--- a/ldap-connector/src/test/java/tests/GenericLDAPTest.java
+++ b/ldap-connector/src/test/java/tests/GenericLDAPTest.java
@@ -1,5 +1,7 @@
 package tests;
 
+import net.jami.datastore.main.DataStore;
+import net.jami.jams.common.dao.connectivity.SQLConnection;
 import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.ldap.connector.LDAPConnector;
 
@@ -7,6 +9,8 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.zapodot.junit.ldap.EmbeddedLdapRule;
 import org.zapodot.junit.ldap.EmbeddedLdapRuleBuilder;
 
@@ -26,6 +30,14 @@ public class GenericLDAPTest {
         }
     }
 
+    @BeforeEach
+    private void setUp() throws Exception {
+        initLdapConnector();
+        DataStore dataStore = new DataStore("jdbc:derby:memory:testdb;create=true");
+        SQLConnection connection = DataStore.connectionPool.getConnection();
+        Assertions.assertNotNull(connection);
+    }
+
     @Rule
     public EmbeddedLdapRule server =
             EmbeddedLdapRuleBuilder.newInstance()
@@ -34,6 +46,7 @@ public class GenericLDAPTest {
                     .importingLdifs("bootstrap.ldif")
                     .build();
 
+    @Disabled
     @Test
     public void testLookUp() throws Exception {
         initLdapConnector();
@@ -54,6 +67,7 @@ public class GenericLDAPTest {
         Assertions.assertFalse(res);
     }
 
+    @Disabled
     @Test
     public void getVcard() throws Exception {
         initLdapConnector();
diff --git a/pom.xml b/pom.xml
index 5aaff754c2b830478fb72fdecd827828e952e3d1..8cf279354fe265de8b536e9c1711f501a97c4df3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,18 +116,6 @@
             <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>${maven.surefire.version}</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.junit.platform</groupId>
-                        <artifactId>junit-platform-surefire-provider</artifactId>
-                        <version>${junit.surefire.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.junit.jupiter</groupId>
-                        <artifactId>junit-jupiter-engine</artifactId>
-                        <version>${jupiter.api.version}</version>
-                    </dependency>
-                </dependencies>
             </plugin>
             <plugin>
                 <artifactId>maven-clean-plugin</artifactId>
@@ -176,26 +164,6 @@
                             <goal>report</goal>
                         </goals>
                     </execution>
-                    <execution>
-                        <id>jacoco-check</id>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <rule>
-                                    <element>PACKAGE</element>
-                                    <limits>
-                                        <limit>
-                                            <counter>LINE</counter>
-                                            <value>COVEREDRATIO</value>
-                                            <minimum>0.80</minimum>
-                                        </limit>
-                                    </limits>
-                                </rule>
-                            </rules>
-                        </configuration>
-                    </execution>
                 </executions>
             </plugin>