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