From 15f6e093ee68f5a52b67e4d8588312a6ce6ac9a0 Mon Sep 17 00:00:00 2001
From: tudtianus <tudtianus@gmail.com>
Date: Fri, 31 Aug 2018 15:24:50 +0200
Subject: [PATCH] #76 feat: unitTests for JournalDAO, fix: Bug in
 getAllByProject where some wrong Journals where returned

---
 .../modules/journal/model/dao/JournalDAO.java |   2 +-
 .../journal/model/dao/JournalDAOImpl.java     |  10 +-
 .../journal/service/JournalServiceImpl.java   |   2 +-
 .../gf/modules/journal/util/JournalUtils.java |   2 +-
 .../journal/model/dao/JournalDAOImplTest.java | 317 ++++++++++++++++++
 5 files changed, 325 insertions(+), 8 deletions(-)
 create mode 100644 gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImplTest.java

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java
index ef61f37c..56a0943a 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java
@@ -17,7 +17,7 @@ public interface JournalDAO {
 
     Journal getJournal(String id);
 
-    ArrayList<Journal> getAllByProject(String project);
+    ArrayList<Journal> getAllByProject(String project, String student);
 
     ArrayList<Journal> getAllByProjectAndFilter(String project, String student, JournalFilter filter);
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java
index 2ae0dff6..0ea36890 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java
@@ -96,7 +96,7 @@ public class JournalDAOImpl implements JournalDAO {
     }
 
     @Override
-    public ArrayList<Journal> getAllByProject(String project) {
+    public ArrayList<Journal> getAllByProject(String project, String student) {
 
         ArrayList<Journal> journals = new ArrayList<>();
 
@@ -105,8 +105,8 @@ public class JournalDAOImpl implements JournalDAO {
         connection.connect();
 
         // build and execute request
-        String request = "SELECT * FROM journals WHERE project= ?;";
-        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project);
+        String request = "SELECT * FROM journals WHERE project= ? AND (author = ? OR visibility = \"ALL\" or visibility = \"GROUP\");";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project, student);
 
         while (rs.next()) {
             journals.add(getJournalFromResultSet(rs));
@@ -145,7 +145,7 @@ public class JournalDAOImpl implements JournalDAO {
     @Override
     public ArrayList<Journal> getAllByProjectAndFilter(String project, String student, JournalFilter filter) {
         if (filter == JournalFilter.ALL) {
-            return getAllByProject(project);
+            return getAllByProject(project, student);
         } else {
             return getAllByStudent(student);
         }
@@ -176,7 +176,7 @@ public class JournalDAOImpl implements JournalDAO {
 
         // build and execute request
         String request = "SELECT * FROM journals WHERE project = ? AND open = ?;";
-        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project, true);
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project.getId(), true);
 
         while (rs.next()) {
             userIds.add(getJournalFromResultSet(rs).getStudentIdentifier().getStudentId());
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java
index 41e0d747..23fcd996 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java
@@ -63,7 +63,7 @@ public class JournalServiceImpl implements JournalService {
     public ArrayList<Journal> getAllJournals(String student, String project) {
         log.debug(">> get all journals(" + student + "," + project + ")");
 
-        return journalDAO.getAllByProject(project);
+        return journalDAO.getAllByProject(project, student);
     }
 
     @Override
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java
index d38cf359..dbab0277 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java
@@ -70,7 +70,7 @@ public class JournalUtils {
         //TODO Formatstring
         String request = "SELECT COUNT(*) > 0 AS `exists` FROM " + table+ " WHERE id = ?;";
         VereinfachtesResultSet rs = connection.issueSelectStatement(request,id);
-        log.debug("querry: " + rs.toString());
+        JournalUtils.log.debug("querry: " + rs.toString());
         if (rs.next()) {
             // save the response
             int count = rs.getInt("exists");
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImplTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImplTest.java
new file mode 100644
index 00000000..008ec65f
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImplTest.java
@@ -0,0 +1,317 @@
+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.Journal;
+import unipotsdam.gf.modules.journal.model.JournalFilter;
+import unipotsdam.gf.modules.journal.model.Visibility;
+import unipotsdam.gf.modules.journal.util.JournalUtils;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.*;
+
+public class JournalDAOImplTest {
+
+    private final JournalDAO journalDAO = new JournalDAOImpl();
+    private final MysqlConnect connection = new MysqlConnect();
+    private final String testId = "-1";
+    private final String testStudent = "testStudent";
+    private final String testProject = "testProject";
+    private final String testEntry = "This is a Test";
+    private final Visibility testVisibility = Visibility.ALL;
+    private final Category testCategory = Category.TITEL;
+    private final Journal testJournal = new Journal(testId, new StudentIdentifier(testProject, testStudent), testEntry, testVisibility, testCategory);
+
+    @Test
+    public void createJournal() {
+
+        // Create Journal
+        Journal createJournal = testJournal;
+        journalDAO.createJournal(createJournal);
+
+        connection.connect();
+
+        // Get that Journal
+        ArrayList<Journal> resultJournals = getJournals();
+
+        //Only one Journal should exist
+        assertEquals(1, resultJournals.size());
+
+        Journal resultJournal = resultJournals.get(0);
+
+        //check if data correct
+        assertEquals(resultJournal.getStudentIdentifier().getStudentId(), testStudent);
+        assertEquals(resultJournal.getStudentIdentifier().getProjectId(), testProject);
+        assertEquals(resultJournal.getEntryMD(), testEntry);
+
+        //Journal should get real id while create
+        assertFalse(resultJournal.getId().equals(testId));
+
+        assertEquals(resultJournal.getVisibility(), testVisibility);
+        assertEquals(resultJournal.getCategory(), testCategory);
+
+        //cleanup
+        cleanup(resultJournal.getId());
+
+        connection.close();
+    }
+
+    @Test
+    public void updateJournal() {
+
+        Journal updateJournal = testJournal;
+        //createJournal
+
+        connection.connect();
+
+        // build and execute request
+        create(updateJournal);
+
+        //change Data
+        Visibility newVisibility = Visibility.MINE;
+        Category newCategory = Category.DURCHFUEHRUNG;
+        String newEntry = "Still a test";
+
+        updateJournal.setVisibility(newVisibility);
+        updateJournal.setCategory(newCategory);
+        updateJournal.setEntry(newEntry);
+
+        //update that Journal
+        journalDAO.updateJournal(updateJournal);
+
+        //check if update successful
+        ArrayList<Journal> resultJournals = getJournals();
+
+        //Only one Journal should exist
+        assertEquals(1, resultJournals.size());
+
+        Journal resultJournal = resultJournals.get(0);
+
+        //check if data correct
+        assertEquals(resultJournal.getStudentIdentifier().getStudentId(), testStudent);
+        assertEquals(resultJournal.getStudentIdentifier().getProjectId(), testProject);
+        assertEquals(resultJournal.getEntryMD(), newEntry);
+        assertEquals(resultJournal.getId(), testId);
+        assertEquals(resultJournal.getVisibility(), newVisibility);
+        assertEquals(resultJournal.getCategory(), newCategory);
+
+        //cleanup
+        cleanup(updateJournal.getId());
+        connection.close();
+
+    }
+
+    @Test
+    public void deleteJournal() {
+        Journal deleteJournal = testJournal;
+
+        //createJournal
+        connection.connect();
+
+        // build and execute request
+        create(deleteJournal);
+
+        //check if Journal was added
+        ArrayList<Journal> resultJournals = getJournals();
+
+        assertEquals(1, resultJournals.size());
+
+        Journal resultJournal = resultJournals.get(0);
+
+
+        //delete Journal
+        journalDAO.deleteJournal(resultJournal.getId());
+
+        //check if deleted
+        resultJournals = getJournals();
+
+        assertEquals(0, resultJournals.size());
+
+        connection.close();
+    }
+
+    @Test
+    public void getJournal() {
+
+        //create Journal
+        Journal getJournal = testJournal;
+        //createJournal
+
+        connection.connect();
+
+        // build and execute request
+        create(getJournal);
+
+        //get that Journal
+        Journal resultJournal = journalDAO.getJournal(testId);
+
+        //check data
+        assertEquals(resultJournal.getStudentIdentifier().getStudentId(), testStudent);
+        assertEquals(resultJournal.getStudentIdentifier().getProjectId(), testProject);
+        assertEquals(resultJournal.getEntryMD(), testEntry);
+        assertEquals(resultJournal.getId(), testId);
+        assertEquals(resultJournal.getVisibility(), testVisibility);
+        assertEquals(resultJournal.getCategory(), testCategory);
+
+        //cleanup
+        cleanup(resultJournal.getId());
+
+        connection.close();
+
+    }
+
+    @Test
+    public void getAllByProject() {
+        connection.connect();
+
+        //add Some Journals
+        Journal j1 = testJournal;
+        create(j1);
+        j1.setId("-2");
+        create(j1);
+        j1.setId("-3");
+        j1.getStudentIdentifier().setProjectId("otherProject");
+        create(j1);
+
+        //get for project
+        ArrayList<Journal> resultJournals = journalDAO.getAllByProject(testProject, testStudent);
+
+        //should be 2 Journals
+        assertEquals(2, resultJournals.size());
+
+        //should be j1 and j2
+        for (Journal j : resultJournals) {
+            assertTrue(j.getId().equals("-1") || j.getId().equals("-2"));
+        }
+
+        //cleanup
+        cleanup("-1", "-2", "-3");
+    }
+
+    @Test
+    public void getAllByProjectAndFilter() {
+
+        connection.connect();
+
+        //Create some journals
+        Journal j1 = testJournal;
+        create(j1);
+        j1.getStudentIdentifier().setStudentId("otherStudent");
+        j1.setId("-2");
+        create(j1);
+        j1.setId("-3");
+        j1.setVisibility(Visibility.MINE);
+        create(j1);
+
+        //all should return 2 Journals
+        assertEquals(2, journalDAO.getAllByProjectAndFilter(testProject, testStudent, JournalFilter.ALL).size());
+
+        //Own should return 1 Journal
+        assertEquals(1, journalDAO.getAllByProjectAndFilter(testProject, testStudent, JournalFilter.OWN).size());
+
+        //Cleanup
+        cleanup("-1", "-2", "-3");
+        connection.close();
+    }
+
+    @Test
+    public void closeJournal() {
+        connection.connect();
+
+        //create Journal
+        Journal closeJournal = testJournal;
+        create(closeJournal);
+
+        Journal resultJournal = getJournals().get(0);
+
+        //check if open
+        assertTrue(resultJournal.isOpen());
+
+        //close Journal
+        journalDAO.closeJournal(resultJournal.getId());
+
+        //check if closed
+        resultJournal = getJournals().get(0);
+        assertFalse(resultJournal.isOpen());
+
+        //cleanup
+        cleanup(resultJournal.getId());
+    }
+
+    @Test
+    public void getOpenJournals() {
+        connection.connect();
+
+        Project openProject = new Project();
+        openProject.setId(testProject);
+
+        //create some Journals
+        Journal j1 = testJournal;
+        create(j1);
+        j1.setOpen(false);
+        j1.setId("-2");
+        create(j1);
+        j1.setId("-3");
+        j1.getStudentIdentifier().setProjectId("otherProject");
+        create(j1);
+
+        //getOpenJournals
+        ArrayList<String> resultJournals = journalDAO.getOpenJournals(openProject);
+
+        //should be 1 Journal
+        assertEquals(1, resultJournals.size());
+
+        //should be journal -1
+        assertEquals(testStudent, resultJournals.get(0));
+
+        cleanup("-1", "-2", "-3");
+        connection.close();
+    }
+
+
+    //utility
+
+    private ArrayList<Journal> getJournals() {
+        String request = "SELECT * FROM journals WHERE project= ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, testProject);
+
+        ArrayList<Journal> resultJournals = new ArrayList<>();
+        while (rs.next()) {
+            resultJournals.add(getJournalFromResultSet(rs));
+        }
+        return resultJournals;
+    }
+
+    private void create(Journal getJournal) {
+        String createRequest = "INSERT INTO journals (`id`, `author`, `project`, `text`, `visibility`,`category`, `open` ) VALUES (?,?,?,?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(createRequest, getJournal.getId(), getJournal.getStudentIdentifier().getStudentId(),
+                getJournal.getStudentIdentifier().getProjectId(), getJournal.getEntryMD(), getJournal.getVisibility(), getJournal.getCategory(), getJournal.isOpen());
+    }
+
+    private void cleanup(String... ids) {
+        for (String id : ids) {
+            String deleteRequest = "DELETE FROM journals WHERE id = ?;";
+            connection.issueInsertOrDeleteStatement(deleteRequest, id);
+        }
+    }
+
+    private Journal getJournalFromResultSet(VereinfachtesResultSet rs) {
+
+        String id = rs.getString("id");
+        long timestamp = rs.getTimestamp(2).getTime();
+        String student = rs.getString("author");
+        String project = rs.getString("project");
+        String text = rs.getString("text");
+        String visibility = rs.getString("visibility");
+        String category = rs.getString("category");
+        boolean open = rs.getBoolean("open");
+
+        return new Journal(id, new StudentIdentifier(project, student), text, timestamp, JournalUtils.stringToVisibility(visibility), JournalUtils.stringToCategory(category), open);
+
+    }
+}
\ No newline at end of file
-- 
GitLab