/** * Copyright (C) Intersect 2012. * * This module contains Proprietary Information of Intersect, * and should be treated as Confidential. */ package au.org.intersect.exsite9.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.stub; import java.io.File; import java.io.IOException; import java.util.Iterator; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import org.junit.After; import org.junit.Before; import org.junit.Test; import au.org.intersect.exsite9.dao.DAOTest; import au.org.intersect.exsite9.dao.ProjectDAO; import au.org.intersect.exsite9.dao.ResearchFileDAO; import au.org.intersect.exsite9.dao.factory.FolderDAOFactory; import au.org.intersect.exsite9.dao.factory.GroupDAOFactory; import au.org.intersect.exsite9.dao.factory.MetadataAssociationDAOFactory; import au.org.intersect.exsite9.dao.factory.ProjectDAOFactory; import au.org.intersect.exsite9.dao.factory.ResearchFileDAOFactory; import au.org.intersect.exsite9.domain.Folder; import au.org.intersect.exsite9.domain.Project; import au.org.intersect.exsite9.domain.ResearchFile; import au.org.intersect.exsite9.dto.ProjectFieldsDTO; /** * Tests {@link ResearchFileService} */ public class FileServiceUnitTest extends DAOTest { private final String testDirName = System.getProperty("java.io.tmpdir") + File.separator + "exsite9-FolderUnitTest"; private File testDirFile = null; private ResearchFileService fileService = null; @Before public void setUp() { testDirFile = new File(testDirName); testDirFile.mkdir(); } @After public void tearDown() { File testDirFile = new File(testDirName); File[] files = testDirFile.listFiles(); for(File file : files) { file.delete(); } testDirFile.delete(); } @Test public void identifyNewFilesForProjectEmptyFolderTest() { EntityManagerFactory emf = mock(EntityManagerFactory.class); stub(emf.createEntityManager()).toReturn(createEntityManager()); ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory(); ProjectDAO projectDAO = projectDAOFactory.createInstance(emf.createEntityManager()); ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory(); final MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory(); FolderDAOFactory folderDAOFactory = new FolderDAOFactory(); GroupDAOFactory groupDAOFactory = new GroupDAOFactory(); Project project = new Project(new ProjectFieldsDTO("name", "owner", "institution", "email", "desc", "collectionType", "rightsStatement", "accessRights", "license", "identifier", "subject", "electronicLocation", "physicalLocation", "placeOrRegionName", "geoCoverage", "datesOfCapture", "citationInformation", "counries", "languages", null, "fundingBody", "grantID", "relatedParty", "relatedGrant", "relatedInformation")); projectDAO.createProject(project); Folder f = new Folder(testDirFile); project.getFolders().add(f); fileService = new ResearchFileService(emf, projectDAOFactory,researchFileDAOFactory, metadataAssociationDAOFactory,folderDAOFactory, groupDAOFactory); fileService.identifyNewFilesForProject(project); assertTrue(project.getNewFilesNode().getResearchFiles().isEmpty()); } @Test public void identifyNewFilesForProjectSingleFileTest() throws IOException { EntityManagerFactory emf = mock(EntityManagerFactory.class); stub(emf.createEntityManager()).toReturn(createEntityManager()); ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory(); ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory(); MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory(); FolderDAOFactory folderDAOFactory = new FolderDAOFactory(); GroupDAOFactory groupDAOFactory = new GroupDAOFactory(); Project project = new Project(new ProjectFieldsDTO("name", "owner", "institution", "email", "desc", "collectionType", "rightsStatement", "accessRights", "license", "identifier", "subject", "electronicLocation", "physicalLocation", "placeOrRegionName", "geoCoverage", "datesOfCapture", "citationInformation", "counries", "languages", null, "fundingBody", "grantID", "relatedParty", "relatedGrant", "relatedInformation")); Folder f = new Folder(testDirFile); File.createTempFile("test-file-1", ".txt", testDirFile); project.getFolders().add(f); ProjectDAO projectDAO = new ProjectDAO(createEntityManager()); projectDAO.createProject(project); fileService = new ResearchFileService(emf, projectDAOFactory,researchFileDAOFactory, metadataAssociationDAOFactory,folderDAOFactory, groupDAOFactory); fileService.identifyNewFilesForProject(project); assertTrue(project.getNewFilesNode().getResearchFiles().size() == 1); EntityManager em = createEntityManager(); ResearchFileDAO researchFileDAO = researchFileDAOFactory.createInstance(em); Iterator<ResearchFile> iter = project.getNewFilesNode().getResearchFiles().iterator(); while(iter.hasNext()) { ResearchFile file1 = iter.next(); ResearchFile file2 = researchFileDAO.findById(file1.getId()); assertEquals(file1, file2); } em.close(); } @Test public void testIdentifyNewFiles() throws IOException { EntityManagerFactory emf = mock(EntityManagerFactory.class); stub(emf.createEntityManager()).toReturn(createEntityManager()) .toReturn(createEntityManager()) .toReturn(createEntityManager()); ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory(); ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory(); MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory(); FolderDAOFactory folderDAOFactory = new FolderDAOFactory(); GroupDAOFactory groupDAOFactory = new GroupDAOFactory(); Project project = new Project(new ProjectFieldsDTO("name", "owner", "institution", "email", "desc", "collectionType", "rightsStatement", "accessRights", "license", "identifier", "subject", "electronicLocation", "physicalLocation", "placeOrRegionName", "geoCoverage", "datesOfCapture", "citationInformation", "counries", "languages", null, "fundingBody", "grantID", "relatedParty", "relatedGrant", "relatedInformation")); project.setId(2L); final ProjectDAO projectDAO = new ProjectDAO(createEntityManager()); projectDAO.createProject(project); Folder f = new Folder(testDirFile); project.getFolders().add(f); fileService = new ResearchFileService(emf, projectDAOFactory,researchFileDAOFactory, metadataAssociationDAOFactory,folderDAOFactory, groupDAOFactory); File.createTempFile("test-file-1", ".txt", testDirFile); fileService.identifyNewFilesForProject(project); assertEquals("List has one entry",1,project.getNewFilesNode().getResearchFiles().size()); fileService.identifyNewFilesForProject(project); assertEquals("List has one entry",1,project.getNewFilesNode().getResearchFiles().size()); File.createTempFile("test-file-2", ".txt", testDirFile); fileService.identifyNewFilesForProject(project); assertEquals("List has two entries",2,project.getNewFilesNode().getResearchFiles().size()); } }