From 680726edbd35dcf09cfb665caf82f7e427ca17f6 Mon Sep 17 00:00:00 2001
From: Martin Staehr <software@mstaehr.net>
Date: Sat, 15 Sep 2018 23:31:52 +0200
Subject: [PATCH] #40 feat: implement last tests for groupDAO; fix bugs;
 implement update for group

---
 .../gf/core/management/group/GroupDAO.java    | 11 +++--
 .../core/database/InMemoryMySqlConnect.java   |  3 +-
 .../core/management/group/GroupDAOTest.java   | 40 ++++++++++++++++++-
 3 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java
index a1586385..6d9a5381 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java
@@ -30,11 +30,13 @@ public class GroupDAO {
     public void persist(Group group) {
         connect.connect();
         String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)";
+        // TODO: refactor insert or delete to get the full object back from database to get group or just use UUID instead of autoincrement
         connect.issueInsertOrDeleteStatement(mysqlRequestGroup, group.getProjectId(), group.getChatRoomId());
 
         for (User groupMember : group.getMembers()) {
             String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)";
             connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), group.getProjectId());
+            // TODO: fix -> getProjectId is not correct. it need to be the groupId
         }
         connect.close();
 
@@ -42,8 +44,8 @@ public class GroupDAO {
 
     public void update(Group group) {
         connect.connect();
-        String mysqlRequest = "UPDATE groups SET projectId=?,chatRoomid=?";
-        connect.issueUpdateStatement(mysqlRequest, group.getProjectId(), group.getChatRoomId());
+        String mysqlRequest = "UPDATE groups SET projectId = ?, chatRoomId = ? where id = ?";
+        connect.issueUpdateStatement(mysqlRequest, group.getProjectId(), group.getChatRoomId(), group.getId());
         connect.close();
         // TODO: implement update of groupuser if needed later (if member list need to be updated)
     }
@@ -80,9 +82,6 @@ public class GroupDAO {
         ArrayList<Group> groups = new ArrayList<>();
         groupHashMap.forEach((key, group) -> groups.add(group));
         connect.close();
-        if (groups.isEmpty()) {
-            return null;
-        }
         return groups;
     }
 
@@ -95,7 +94,7 @@ public class GroupDAO {
             User user = ResultSetUtil.getUserFromResultSet(vereinfachtesResultSet);
             String chatRoomId = vereinfachtesResultSet.getString("chatRoomId");
             ArrayList<User> userList = new ArrayList<>(Collections.singletonList(user));
-            Group group = new Group(userList, projectId, chatRoomId);
+            Group group = new Group(id, userList, projectId, chatRoomId);
             existingGroups.put(id, group);
         }
     }
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/InMemoryMySqlConnect.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/InMemoryMySqlConnect.java
index 9fb25b23..d9f49c3e 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/InMemoryMySqlConnect.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/InMemoryMySqlConnect.java
@@ -19,7 +19,8 @@ public class InMemoryMySqlConnect extends MysqlConnect {
 
     private Connection getDatabaseConnection() throws ManagedProcessException, SQLException {
         DBConfigurationBuilder config = DBConfigurationBuilder.newBuilder();
-        config.setPort(0);
+        // set port for testing statically
+        config.setPort(3307);
         DB db = DB.newEmbeddedDB(config.build());
 
         db.start();
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java
index 4c1ea155..340eb2c5 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java
@@ -1,6 +1,5 @@
 package unipotsdam.gf.core.management.group;
 
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import uk.co.jemos.podam.api.PodamFactory;
@@ -10,8 +9,12 @@ import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.core.management.user.UserDAO;
 
 import java.util.Arrays;
+import java.util.List;
 
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
 
 public class GroupDAOTest {
 
@@ -38,9 +41,42 @@ public class GroupDAOTest {
         group = new Group(Arrays.asList(userStudent, userDocent), "1", "1");
     }
 
+    @Test
+    public void testExist() {
+        inMemoryMySqlConnect.connect();
+        String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)";
+        inMemoryMySqlConnect.issueInsertOrDeleteStatement(mysqlRequestGroup, group.getProjectId(), group.getChatRoomId());
+
+        for (User groupMember : group.getMembers()) {
+            String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)";
+            inMemoryMySqlConnect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), group.getProjectId());
+        }
+
+        assertThat(groupDAO.exists(group), is(true));
+        inMemoryMySqlConnect.tearDown();
+    }
+
     @Test
     public void testPersist() {
         groupDAO.persist(group);
-        Assert.assertThat(groupDAO.exists(group), is(true));
+        assertThat(groupDAO.exists(group), is(true));
+    }
+
+    @Test
+    public void testUpdate() {
+        groupDAO.persist(group);
+        assertThat(groupDAO.exists(group), is(true));
+        Group groupWithId = groupDAO.getGroupsByProjectId(group.getProjectId()).get(0);
+        groupWithId.setChatRoomId("neu");
+        groupDAO.update(groupWithId);
+        assertThat(groupDAO.exists(groupWithId), is(true));
+    }
+
+    @Test
+    public void testGetGroupsByProjectId() {
+        groupDAO.persist(group);
+        List<Group> groups = groupDAO.getGroupsByProjectId(group.getProjectId());
+        assertThat(groups, hasSize(1));
+        assertThat(groups.get(0), equalTo(group));
     }
 }
-- 
GitLab