Switch to side-by-side view

--- a
+++ b/src/test/java/net/timbusproject/legalmanagement/test/TestProjectManager.java
@@ -0,0 +1,206 @@
+package net.timbusproject.legalmanagement.test;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import net.timbusproject.legalmanagement.data.LegalDocRead;
+import net.timbusproject.legalmanagement.data.LegalDocument;
+import net.timbusproject.legalmanagement.data.Project;
+import net.timbusproject.legalmanagement.tools.ProjectManager;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.HSQLDialect;
+import org.hibernate.service.ServiceRegistryBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestProjectManager extends TestCase {
+
+	int projectCount = 5;
+	int legalDocCount = 10;
+	String userName = "testUser";
+	
+	@Before
+	public void setUp() throws Exception {
+
+		Configuration configuration = new Configuration();
+		configuration.setProperty(Environment.DRIVER, "org.hsqldb.jdbcDriver");
+		configuration.setProperty(Environment.URL, "jdbc:hsqldb:mem:LLMPersistenceTest");
+		configuration.setProperty(Environment.USER, "sa");
+		configuration.setProperty(Environment.DIALECT, HSQLDialect.class.getName());
+		configuration.setProperty(Environment.SHOW_SQL, "true");
+		configuration.setProperty(Environment.POOL_SIZE, "1");
+		configuration.setProperty(Environment.HBM2DDL_AUTO, "create");
+
+		configuration.setProperty("javax.persistence.validation.mode", "NONE");
+		String filename = new String("datamapping.hbm.xml");
+		configuration.addInputStream(this.getClass().getClassLoader().getResourceAsStream(filename));
+		ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
+				.getProperties());
+		SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
+        ProjectManager.setSessionFactory(sessionFactory);
+	
+      	Session session = sessionFactory.openSession();
+		session.beginTransaction();
+
+		// generate and store Projects
+		for (int i = 0; i < projectCount; i++) {
+			long nameExtension = (long) (i * 10 + 9 * Math.random());
+			Project project = new Project();
+			project.setUser(userName);
+			project.setName("testProject" + nameExtension);
+			session.save(project);
+		}
+		
+		// generate and store LegalDocs
+		for (int i = 0; i < legalDocCount; i++) {
+			long nameExtension = (long) (i * 10 + 9 * Math.random());
+
+			String docId = "testdoc" + nameExtension;
+			LegalDocument legalDoc = new LegalDocument();
+			legalDoc.setDocId(docId);
+			session.save(legalDoc);
+		}
+
+		session.getTransaction().commit();
+        
+        
+        
+	}
+
+	@After
+	public void tearDown() throws Exception {
+	}
+
+	public void testProjectFactory() {
+		ProjectManager pm1 = ProjectManager.getprojectManager();
+		ProjectManager pm2 = ProjectManager.getprojectManager();
+		assertNotNull(pm1);
+		assertNotNull(pm2);
+		assertEquals(pm1, pm2);
+		assertEquals(ProjectManager.class,pm1.getClass());
+		assertEquals(ProjectManager.class,pm2.getClass());		
+	}
+
+	public void testGenerateProject() {
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project = pm.generateProject("projecteins",userName);
+		assertEquals("projecteins",project.getName());
+		assertEquals(userName,project.getUser());
+	}
+
+	public void testAddProject() {
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project = pm.generateProject("projecteins",userName);
+		assertEquals("projecteins",project.getName());
+		assertEquals(userName,project.getUser());
+		pm.addProject(project);
+		Project project1 = pm.getProject(project.getId());
+		assertEquals(project.getName(),project1.getName());
+	}
+
+	
+	public void testEditProject() {
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project1 = pm.getProject(addLegalReadToProject());
+		Long projectID = project1.getId();
+		Project newProject = new Project();
+		newProject.setName("helloProject");
+		newProject.setDescription("another Project Description for now");
+		assertFalse(newProject.getName().equals(project1.getName()));
+		assertFalse(newProject.getDescription().equals(project1.getDescription()));
+		project1 = pm.editProject(project1.getId(), newProject);
+		assertEquals(newProject.getName(), project1.getName());
+		assertEquals(newProject.getDescription(), project1.getDescription());
+		assertEquals(projectID, project1.getId());
+		project1 =  pm.getProject(projectID);
+		assertEquals(newProject.getName(), project1.getName());
+		assertEquals(newProject.getDescription(), project1.getDescription());
+		assertEquals(projectID, project1.getId());
+		
+//		Session session = ProjectManager.getSessionFactory().openSession();
+//		assertEquals(session.getNamedQuery("LegalDocs.findAll").list().size(), project1.getLegalDocsRead().size());
+	}
+
+	public void testGetProject() {
+	    ProjectManager pm = ProjectManager.getprojectManager();
+	    List<Project> projects = pm.getProjects(userName);
+	    Project project = projects.get(0);
+	    Project directProject = pm.getProject(project.getId());
+	    assertEquals(directProject.getId(),project.getId());
+	    assertEquals(project.getId(), directProject.getId());
+	}
+
+	public void testDeleteProject(){
+		ProjectManager pm = ProjectManager.getprojectManager();
+		List<Project> projects = pm.getProjects(userName);
+		pm.deleteProject(projects.get(0).getId());
+		assertEquals(projects.size()-1, pm.getProjects(userName).size());
+		assertNull(pm.getProject(projects.get(0).getId()));
+	}
+	
+	public void testDeleteLegalDocsRead() {
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project1 = pm.getProject(addLegalReadToProject());
+        long proj_id = project1.getId();
+        int numberOfLegalDocs = project1.getLegalDocsRead().size();
+        assertTrue(0 < numberOfLegalDocs);
+		HashSet<LegalDocument> legalDocs = new HashSet<LegalDocument>();
+		legalDocs.add(project1.getLegalDocsRead().iterator().next().getDocument());
+		ProjectManager.getprojectManager().removeDocsFromProject(project1, legalDocs);
+		assertEquals(numberOfLegalDocs-1, project1.getLegalDocsRead().size());
+		legalDocs =  new HashSet<LegalDocument>();
+		for (Iterator<LegalDocRead> iter = project1.getLegalDocsRead().iterator(); iter.hasNext();) {
+			legalDocs.add(iter.next().getDocument());
+		}
+		ProjectManager.getprojectManager().removeDocsFromProject(project1, legalDocs);
+		Project project = pm.getProject(proj_id);
+		assertEquals(0, project.getLegalDocsRead().size());
+	}
+
+	public void testAddAssessment() {
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project = (Project) pm.getProjects(userName).get(0);
+		assertEquals(0, project.getAssessments().size());
+		project = pm.addAssessment(project.getId(), "Funny new Text");
+		assertEquals(1, project.getAssessments().size());
+		assertEquals(1, pm.getProject(project.getId()).getAssessments().size());
+	}
+	
+	public void testChangeTime() throws InterruptedException{
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project1 = pm.getProject(addLegalReadToProject());
+        long proj_id = project1.getId();
+        LegalDocRead legalDocRead = project1.getLegalDocsRead().iterator().next();
+        Date changed = legalDocRead.getChangeDate();
+        Thread.sleep(1000);
+        legalDocRead = pm.markDocAsRead(project1, legalDocRead.getDocument());
+        assertFalse(changed.equals(legalDocRead.getChangeDate()));
+	}
+	
+	private long addLegalReadToProject(){
+		ProjectManager pm = ProjectManager.getprojectManager();
+		Project project = pm.generateProject("projecteins",userName);
+		pm.addProject(project);
+		Session session = ProjectManager.getSessionFactory().openSession();
+		Query query = session.getNamedQuery("LegalDocs.findAll");
+		List<LegalDocument> legalDocs = query.list();
+		pm.addDocsToProject(project, new HashSet<LegalDocument>(legalDocs));
+		return project.getId();
+	}
+
+}