From 8e10645f5254107199183d30acd1a5ffe05a1c87 Mon Sep 17 00:00:00 2001
From: Thomas Schnaak <schnaak@uni-potsdam.de>
Date: Wed, 5 Sep 2018 21:17:44 +0200
Subject: [PATCH] #76 feat: added Test for ProjectDescriptionDAO and Bugfixes

---
 .../journal/model/ProjectDescription.java     |  20 +-
 .../model/dao/ProjectDescriptionDAOImpl.java  |   4 +-
 .../service/ProjectDescriptionImpl.java       |   3 +-
 .../dao/ProjectDescriptionImplDAOTest.java    | 229 ++++++++++++++++++
 4 files changed, 242 insertions(+), 14 deletions(-)
 create mode 100644 gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionImplDAOTest.java

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java
index d1e0558b..b5e5e3bd 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java
@@ -1,10 +1,9 @@
 package unipotsdam.gf.modules.journal.model;
 
-import unipotsdam.gf.core.management.project.Project;
 import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
 
 import java.util.ArrayList;
-import java.util.Map;
+import java.util.Date;
 
 import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml;
 
@@ -26,28 +25,29 @@ public class ProjectDescription {
     public ProjectDescription() {
     }
 
-    public ProjectDescription(String id, String name, String description, String project, ArrayList<Link> links, ArrayList<String> group, long timestamp) {
+    public ProjectDescription(String id, String name, String description, String project, ArrayList<Link> links, ArrayList<String> group) {
         this.id = id;
-        this.student = new StudentIdentifier(project,name);
+        this.student = new StudentIdentifier(project, name);
         this.descriptionHTML = convertMarkdownToHtml(description);
-        this.descriptionMD =description;
+        this.descriptionMD = description;
         this.links = links;
         this.group = group;
-        this.timestamp = timestamp;
-        this.open =true;
+        this.timestamp = new Date().getTime();
+        this.open = true;
     }
+
     public ProjectDescription(String id, String name, String description, String project, ArrayList<Link> links, ArrayList<String> group, long timestamp, boolean open) {
         this.id = id;
-        this.student = new StudentIdentifier(project,name);
+        this.student = new StudentIdentifier(project, name);
         this.descriptionHTML = convertMarkdownToHtml(description);
-        this.descriptionMD =description;
+        this.descriptionMD = description;
         this.links = links;
         this.group = group;
         this.timestamp = timestamp;
         this.open = open;
     }
 
-    public void setDescription (String description){
+    public void setDescription(String description) {
         this.descriptionMD = description;
         this.descriptionHTML = convertMarkdownToHtml(description);
     }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java
index 958d41bd..1f2be677 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java
@@ -115,7 +115,7 @@ public class ProjectDescriptionDAOImpl implements ProjectDescriptionDAO {
         connection.connect();
 
         // build and execute request
-        String request = "DELETE FROM projectdescription WHERE WHERE author = ? AND project = ?;";
+        String request = "DELETE FROM projectdescription WHERE author = ? AND project = ?;";
         connection.issueInsertOrDeleteStatement(request, studentIdentifier.getStudentId(),studentIdentifier.getProjectId());
 
         // close connection
@@ -148,7 +148,7 @@ public class ProjectDescriptionDAOImpl implements ProjectDescriptionDAO {
 
         // build and execute request
         String request = "SELECT * FROM projectdescription WHERE project = ? AND open = ?;";
-        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project, true);
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project.getId(), true);
 
         while (rs.next()) {
             userIds.add(getDescriptionFromResultSet(rs).getStudent().getStudentId());
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java
index b292898b..a6b88a5f 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java
@@ -12,7 +12,6 @@ import unipotsdam.gf.modules.journal.model.dao.ProjectDescriptionDAO;
 import unipotsdam.gf.modules.journal.model.dao.ProjectDescriptionDAOImpl;
 
 import java.util.ArrayList;
-import java.util.Date;
 
 public class ProjectDescriptionImpl implements ProjectDescriptionService {
 
@@ -25,7 +24,7 @@ public class ProjectDescriptionImpl implements ProjectDescriptionService {
         //if no description exists, create a new
         if(descriptionDAO.getDescription(studentIdentifier)==null){
             //TODO richtige Daten, standartwerte über config?
-            ProjectDescription description = new ProjectDescription("0", studentIdentifier.getStudentId(), "Hier soll ein Turtorialtext stehen", studentIdentifier.getProjectId(), null, null, new Date().getTime());
+            ProjectDescription description = new ProjectDescription("0", studentIdentifier.getStudentId(), "Hier soll ein Turtorialtext stehen", studentIdentifier.getProjectId(), null, null);
             descriptionDAO.createDescription(description);
         }
 
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionImplDAOTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionImplDAOTest.java
new file mode 100644
index 00000000..99bc6422
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionImplDAOTest.java
@@ -0,0 +1,229 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import org.junit.Test;
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.ProjectDescription;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class ProjectDescriptionImplDAOTest {
+
+    private final ProjectDescriptionDAO descriptionDAO = new ProjectDescriptionDAOImpl();
+    private final MysqlConnect connection = new MysqlConnect();
+
+    String testId = "-1";
+    String testStudent = "testStudent";
+    String testDescription = "testDescription";
+    String testProjekt = "testProjekt";
+    ArrayList<String> testGroup = new ArrayList<>();
+
+    ProjectDescription testProjectDescription = new ProjectDescription(testId, testStudent, testDescription, testProjekt, null /*Links are added in Service*/, testGroup);
+
+    @Test
+    public void createDescription() {
+
+        connection.connect();
+
+        ProjectDescription createDescription = testProjectDescription;
+        createDescription.getGroup().add("test");
+
+        descriptionDAO.createDescription(testProjectDescription);
+
+        ArrayList<ProjectDescription> resultProjectDescriptions = getProjectDescription();
+
+        //should be 1
+        assertEquals(1, resultProjectDescriptions.size());
+
+        ProjectDescription result = resultProjectDescriptions.get(0);
+
+        //check data
+        assertFalse(testId.equals(result.getId()));
+        assertEquals(testDescription, result.getDescriptionMD());
+        assertEquals(testStudent, result.getStudent().getStudentId());
+        assertEquals(testProjekt, result.getStudent().getProjectId());
+
+        cleanup(result.getId());
+        connection.close();
+    }
+
+    @Test
+    public void updateDescription() {
+
+        connection.connect();
+
+        ProjectDescription updateDescription = testProjectDescription;
+
+        create(updateDescription);
+
+        updateDescription.setDescription(testDescription + testDescription);
+
+        descriptionDAO.updateDescription(updateDescription);
+
+        ArrayList<ProjectDescription> resultProjectDescriptions = getProjectDescription();
+
+        //should be 1
+        assertEquals(1, resultProjectDescriptions.size());
+
+        ProjectDescription result = resultProjectDescriptions.get(0);
+
+        //check data
+        assertEquals(testId, result.getId());
+        assertEquals(testDescription + testDescription, result.getDescriptionMD());
+
+        cleanup(testId);
+        connection.close();
+
+    }
+
+    @Test
+    public void getDescriptionSI() {
+        connection.connect();
+
+        ProjectDescription getDescription = testProjectDescription;
+
+        create(getDescription);
+
+        ProjectDescription result = descriptionDAO.getDescription(new StudentIdentifier(testProjekt, testStudent));
+
+        assertEquals(testId, result.getId());
+        assertEquals(testDescription, result.getDescriptionMD());
+        assertEquals(testStudent, result.getStudent().getStudentId());
+        assertEquals(testProjekt, result.getStudent().getProjectId());
+
+        cleanup(result.getId());
+        connection.close();
+    }
+
+    @Test
+    public void getDescriptionID() {
+        connection.connect();
+
+        ProjectDescription getDescription = testProjectDescription;
+
+        create(getDescription);
+
+        ProjectDescription result = descriptionDAO.getDescription(testId);
+
+        assertEquals(testId, result.getId());
+        assertEquals(testDescription, result.getDescriptionMD());
+        assertEquals(testStudent, result.getStudent().getStudentId());
+        assertEquals(testProjekt, result.getStudent().getProjectId());
+
+        cleanup(result.getId());
+        connection.close();
+    }
+
+    @Test
+    public void deleteDescription() {
+        connection.connect();
+
+        ProjectDescription deleteDescription = testProjectDescription;
+
+        create(deleteDescription);
+
+        ArrayList<ProjectDescription> resultDescriptions = getProjectDescription();
+
+        //should be 1
+        assertEquals(1, resultDescriptions.size());
+
+        descriptionDAO.deleteDescription(new StudentIdentifier(testProjekt, testStudent));
+
+        resultDescriptions = getProjectDescription();
+
+        //should be 0
+        assertEquals(0, resultDescriptions.size());
+
+        connection.close();
+    }
+
+    @Test
+    public void closeDescription() {
+        connection.connect();
+
+        ProjectDescription closeDescription = testProjectDescription;
+
+        create(closeDescription);
+
+        ArrayList<ProjectDescription> resultDescriptions = getProjectDescription();
+
+        //should be 1
+        assertEquals(1, resultDescriptions.size());
+        assertTrue(resultDescriptions.get(0).isOpen());
+
+        descriptionDAO.closeDescription(testId);
+
+        resultDescriptions = getProjectDescription();
+
+        //should be 1
+        assertEquals(1, resultDescriptions.size());
+        assertFalse(resultDescriptions.get(0).isOpen());
+
+        connection.close();
+    }
+
+    @Test
+    public void getOpenDescriptions() {
+        connection.connect();
+
+        ProjectDescription openDescription = testProjectDescription;
+        create(openDescription);
+        openDescription.setId("-2");
+        create(openDescription);
+        openDescription.setId("-3");
+        openDescription.setOpen(false);
+        create(openDescription);
+
+        Project project = new Project();
+        project.setId(testProjekt);
+
+        ArrayList<String> resultDescriptions = descriptionDAO.getOpenDescriptions(project);
+        assertEquals(2, resultDescriptions.size());
+
+        cleanup("-1","-2","-3");
+        connection.close();
+    }
+
+
+    //Utility
+    private ArrayList<ProjectDescription> getProjectDescription() {
+        String request = "SELECT * FROM projectdescription WHERE project=?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, testProjekt);
+
+        ArrayList<ProjectDescription> resultDescriptions = new ArrayList<>();
+        while (rs.next()) {
+            resultDescriptions.add(getDescriptionFromResultSet(rs));
+        }
+        return resultDescriptions;
+    }
+
+    private void create(ProjectDescription projectDescription) {
+        String request = "INSERT INTO projectdescription(`id`, `author`, `project`, `text`, `open`) VALUES (?,?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, projectDescription.getId(), projectDescription.getStudent().getStudentId(), projectDescription.getStudent().getProjectId(), projectDescription.getDescriptionMD(), projectDescription.isOpen());
+    }
+
+    private void cleanup(String... ids) {
+        for (String id : ids) {
+            String request = "DELETE FROM projectdescription WHERE id = ? ;";
+            connection.issueInsertOrDeleteStatement(request, id);
+        }
+    }
+
+    private ProjectDescription getDescriptionFromResultSet(VereinfachtesResultSet rs) {
+        String id = rs.getString("id");
+        long timestamp = rs.getTimestamp(2).getTime();
+        String author = rs.getString("author");
+        String project = rs.getString("project");
+        String text = rs.getString("text");
+        boolean open = rs.getBoolean("open");
+
+        return new ProjectDescription(id, author, text, project, new ArrayList<>(), new ArrayList<>(), timestamp, open);
+    }
+
+}
-- 
GitLab