/**
* 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.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.stub;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import org.junit.Test;
import au.org.intersect.exsite9.dao.DAOTest;
import au.org.intersect.exsite9.dao.ResearchFileDAO;
import au.org.intersect.exsite9.dao.SchemaDAO;
import au.org.intersect.exsite9.dao.factory.FolderDAOFactory;
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.dao.factory.SubmissionPackageDAOFactory;
import au.org.intersect.exsite9.domain.FieldOfResearch;
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.domain.Schema;
import au.org.intersect.exsite9.dto.ProjectFieldsDTO;
/**
* Tests {@link ProjectService}
*/
public final class ProjectServiceUnitTest extends DAOTest
{
private ProjectService projectService;
@Test
public void createNewProjectTest()
{
EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager());
ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
final Schema schema = new Schema("", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema);
Project project = projectService.createProject(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"), schema);
Project newProject = projectDAOFactory.createInstance(createEntityManager()).findById(project.getId());
assertEquals(project, newProject);
}
@Test
public void mapFolderToProjectTest()
{
EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager());
ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
Folder folder = new Folder(new File("/tmp"));
final Schema schema = new Schema("", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema);
Project project = projectService.createProject(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"), schema);
projectService.mapFolderToProject(project, folder);
Project newProject = projectDAOFactory.createInstance(createEntityManager()).findById(project.getId());
assertEquals(project, newProject);
}
@Test
public void removeFoldersFromprojectTest()
{
EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager())
.toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager());
Folder folder1 = new Folder(new File("/tmp1"));
Folder folder2 = new Folder(new File("/tmp2"));
ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
final Schema schema = new Schema("", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema);
Project project = projectService.createProject(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"), schema);
projectService.mapFolderToProject(project, folder1);
projectService.mapFolderToProject(project, folder2);
List<String> deletedFolderList = new ArrayList<String>(0);
deletedFolderList.add(folder2.getFolder().getAbsolutePath());
projectService.removeFoldersFromProject(project, deletedFolderList);
Project newProject = projectDAOFactory.createInstance(createEntityManager()).findById(project.getId());
assertEquals(1, newProject.getFolders().size());
assertEquals(folder1.getFolder().getPath(), newProject.getFolders().get(0).getFolder().getPath());
}
@Test
public void testGetAllProjects()
{
final EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager())
.toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager());
final ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
final FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
final ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
final MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
final SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
final SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
assertEquals(0, projectService.getAllProjects().size());
final Schema schema = new Schema("", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema);
final ProjectFieldsDTO p1dto = new ProjectFieldsDTO("p1", "owner", "institution", "email", "desc",
"collectionType", "rightsStatement", "accessRights", "license", "identifier", "subject",
"electronicLocation", "physicalLocation", "placeOrRegionName", "geoCoverage", "datesOfCapture",
"citationInformation", "counries", "languages", null, "fundingBody", "grantID", "relatedParty", "relatedGrant",
"relatedInformation");
final Project p1 = projectService.createProject(p1dto, schema);
assertNotNull(p1.getId());
List<Project> out = projectService.getAllProjects();
assertEquals(1, out.size());
assertEquals(p1, out.get(0));
final ProjectFieldsDTO p2dto = new ProjectFieldsDTO("p2", "owner", "institution", "email", "desc",
"collectionType", "rightsStatement", "accessRights", "license", "identifier", "subject",
"electronicLocation", "physicalLocation", "placeOrRegionName", "geoCoverage", "datesOfCapture",
"citationInformation", "counries", "languages", null, "fundingBody", "grantID", "relatedParty", "relatedGrant",
"relatedInformation");
final Project p2 = projectService.createProject(p2dto, schema);
assertNotNull(p2.getId());
out = projectService.getAllProjects();
assertEquals(2, out.size());
assertTrue(out.contains(p1));
assertTrue(out.contains(p2));
}
@Test
public void testEditProject()
{
final EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager())
.toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager());
final ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
final FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
final ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
final MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
final SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
final SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
assertEquals(0, projectService.getAllProjects().size());
final Schema schema = new Schema("", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema);
final ProjectFieldsDTO p1dto = 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");
final Project p1 = projectService.createProject(p1dto, schema);
assertNotNull(p1.getId());
final String name = "newName";
final String owner = "newOwner";
final String institution = "newInstitution";
final String email = "new email";
final String description = "newDesc";
final String collectionType = "newcollectionType";
final String rightsStatement = "newrights";
final String accessRights = "newaccessRights";
final String license = "newlicense";
final String identifier = "newidentifier";
final String subject = "newsubject";
final String electronicLocation = "newelectronicLocation";
final String physicalLocation = "newphysicalLocation";
final String placeOrRegionName = "newplaceOrRegionName";
final String geographicalCoverage = "newgeoCoverage";
final String datesOfCapture = "newdatesOfCapture";
final String citationInfo = "newcitationInfo";
final String countries = "newCountries";
final String languages = "newlanguages";
final FieldOfResearch fieldOfResearch = new FieldOfResearch("new Code", "new FOR");
final String fundingBody = "newFundingBody";
final String grantID = "newGrantID";
final String relatedParty = "newrelatedParty";
final String relatedGrant = "newrelatedActivity";
final String relatedInfo = "newrelatedInfo";
final ProjectFieldsDTO updatedFields = new ProjectFieldsDTO(name, owner, institution, email, description, collectionType,
rightsStatement, accessRights, license, identifier, subject, electronicLocation, physicalLocation,
placeOrRegionName, geographicalCoverage, datesOfCapture, citationInfo, countries, languages, fieldOfResearch,
fundingBody, grantID, relatedParty, relatedGrant, relatedInfo);
projectService.editProject(updatedFields, p1.getId());
final Project editedProject = projectService.findProjectById(p1.getId());
assertEquals(p1, editedProject);
assertEquals(name, editedProject.getName());
assertEquals(owner, editedProject.getOwner());
assertEquals(institution, editedProject.getInstitution());
assertEquals(email, editedProject.getEmail());
assertEquals(description, editedProject.getDescription());
assertEquals(collectionType, editedProject.getCollectionType());
assertEquals(rightsStatement, editedProject.getRightsStatement());
assertEquals(accessRights, editedProject.getAccessRights());
assertEquals(license, editedProject.getLicence());
assertEquals(identifier, editedProject.getIdentifier());
assertEquals(subject, editedProject.getSubject());
assertEquals(electronicLocation, editedProject.getElectronicLocation());
assertEquals(physicalLocation, editedProject.getPhysicalLocation());
assertEquals(placeOrRegionName, editedProject.getPlaceOrRegionName());
assertEquals(geographicalCoverage, editedProject.getGeographicalCoverage());
assertEquals(datesOfCapture, editedProject.getDatesOfCapture());
assertEquals(citationInfo, editedProject.getCitationInformation());
assertEquals(countries, editedProject.getCountries());
assertEquals(languages, editedProject.getLanguages());
assertEquals(fieldOfResearch, editedProject.getFieldOfResearch());
assertEquals(grantID, editedProject.getGrantID());
assertEquals(relatedParty, editedProject.getRelatedParty());
assertEquals(relatedGrant, editedProject.getRelatedGrant());
assertEquals(relatedInfo, editedProject.getRelatedInformation());
}
@Test
public void updateFolderPathTest()
{
EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager())
.toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager());
ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
ResearchFileDAO researchFileDAO = researchFileDAOFactory.createInstance(emf.createEntityManager());
Folder folder = new Folder(new File("/tmp"));
ResearchFile file1 = new ResearchFile(new File("/tmp/file1.txt"));
ResearchFile file2 = new ResearchFile(new File("/tmp/file2.txt"));
researchFileDAO.createResearchFile(file1);
researchFileDAO.createResearchFile(file2);
folder.getFiles().add(file1);
folder.getFiles().add(file2);
final Schema schema = new Schema("", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema);
Project project = projectService.createProject(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"), schema);
projectService.mapFolderToProject(project, folder);
File updatedFileObject = new File("/new/location");
projectService.updateFolderPath(folder.getId(), updatedFileObject);
Folder folderFromDB = folderDAOFactory.createInstance(emf.createEntityManager()).findById(folder.getId());
assertTrue(folderFromDB.getFolder().getPath().equals(updatedFileObject.getPath()));
for (ResearchFile file : folderFromDB.getFiles())
{
assertEquals(updatedFileObject.getAbsolutePath() + File.separator + file.getFile().getName(), file.getFile().getAbsolutePath());
}
}
@Test
public void testEditProjectSchema()
{
EntityManagerFactory emf = mock(EntityManagerFactory.class);
stub(emf.createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager())
.toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager()).toReturn(createEntityManager());
ProjectDAOFactory projectDAOFactory = new ProjectDAOFactory();
FolderDAOFactory folderDAOFactory = new FolderDAOFactory();
ResearchFileDAOFactory researchFileDAOFactory = new ResearchFileDAOFactory();
MetadataAssociationDAOFactory metadataAssociationDAOFactory = new MetadataAssociationDAOFactory();
SubmissionPackageDAOFactory submissionPackageDAOFactory = new SubmissionPackageDAOFactory();
SchemaDAO schemaDAO = new SchemaDAO(emf.createEntityManager());
projectService = new ProjectService(emf, projectDAOFactory, folderDAOFactory, researchFileDAOFactory,
metadataAssociationDAOFactory, submissionPackageDAOFactory);
final Schema schema1 = new Schema("schema1", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema1);
assertNotNull(schema1.getId());
final Schema schema2 = new Schema("schema2", "", "", Boolean.TRUE);
schemaDAO.createSchema(schema2);
assertNotNull(schema2.getId());
final Project project = projectService.createProject(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"), schema1);
assertNotNull(project.getId());
projectService.editProject(schema2, project.getId());
final Project updatedProject = projectService.findProjectById(project.getId());
assertEquals(schema2, updatedProject.getSchema());
}
}