//package edu.asu.spring.quadriga.web.workbench;
//
//import static org.junit.Assert.assertEquals;
//import static org.junit.Assert.assertTrue;
//
//import java.security.Principal;
//import java.util.ArrayList;
//import java.util.List;
//
//import org.codehaus.jettison.json.JSONException;
//import org.junit.After;
//import org.junit.AfterClass;
//import org.junit.Before;
//import org.junit.BeforeClass;
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.test.context.ContextConfiguration;
//import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
//import org.springframework.web.servlet.ModelAndView;
//
//import edu.asu.spring.quadriga.accesschecks.ICheckProjectSecurity;
//import edu.asu.spring.quadriga.db.workbench.IDBConnectionModifyProjectManager;
//import edu.asu.spring.quadriga.db.workbench.IDBConnectionRetrieveProjectManager;
//import edu.asu.spring.quadriga.db.workspace.IDBConnectionModifyWSManager;
//import edu.asu.spring.quadriga.domain.ICollaborator;
//import edu.asu.spring.quadriga.domain.IUser;
//import edu.asu.spring.quadriga.domain.enums.EProjectAccessibility;
//import edu.asu.spring.quadriga.domain.factories.IUserFactory;
//import edu.asu.spring.quadriga.domain.factory.workbench.IProjectFactory;
//import edu.asu.spring.quadriga.domain.factory.workspace.IWorkspaceFactory;
//import edu.asu.spring.quadriga.domain.workbench.IProject;
//import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
//import edu.asu.spring.quadriga.service.IUserManager;
//import edu.asu.spring.quadriga.service.workbench.IRetrieveProjCollabManager;
//import edu.asu.spring.quadriga.service.workbench.IRetrieveProjectManager;
//import edu.asu.spring.quadriga.service.workspace.IListWSManager;
//
//@ContextConfiguration(locations={"file:src/test/resources/spring-dbconnectionmanager.xml",
//"file:src/test/resources/root-context.xml"})
//@RunWith(SpringJUnit4ClassRunner.class)
//public class RetrieveProjectControllerTest {
//
// RetrieveProjectController retrieveProjectController;
//
// @Autowired
// IDBConnectionRetrieveProjectManager dbConnect;
//
// @Autowired
// IDBConnectionModifyProjectManager dbModifyConnect;
//
// @Autowired
// IDBConnectionModifyWSManager dbWorkspaceConnect;
//
// @Autowired
// IRetrieveProjectManager retrieveProjectManager;
//
// @Autowired
// IListWSManager wsManager;
//
// @Autowired
// IUserFactory userFactory;
//
// @Autowired
// IUserManager userManager;
//
// @Autowired
// IProjectFactory projectFactory;
//
// @Autowired
// IWorkspaceFactory workspaceFactory;
//
// @Autowired
// ICheckProjectSecurity projectSecurity;
//
// @Autowired
// private IRetrieveProjCollabManager projectManager;
//
// @BeforeClass
// public static void setUpBeforeClass() throws Exception {
//
// }
//
// @AfterClass
// public static void tearDownAfterClass() throws Exception {
// }
//
// @Before
// public void setUp() throws Exception {
//
// retrieveProjectController = new RetrieveProjectController();
// retrieveProjectController.setProjectManager(retrieveProjectManager);
// retrieveProjectController.setWsManager(wsManager);
// retrieveProjectController.setProjectSecurity(projectSecurity);
//
// String[] databaseQuery = new String[20];
// databaseQuery[0] = "INSERT INTO tbl_quadriga_user(fullname,username,passwd,email,quadrigarole,createdby,createddate,updatedby,updateddate)VALUES('user1','user1',NULL,'user1@lsa.asu.edu','role5,role1','user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[1] = "INSERT INTO tbl_quadriga_user(fullname,username,passwd,email,quadrigarole,createdby,createddate,updatedby,updateddate)VALUES('user2','user2',NULL,'user2@lsa.asu.edu','role5,role1','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[2] = "INSERT INTO tbl_project(projectname,description,unixname,projectid,projectowner,accessibility,updatedby,updateddate,createdby,createddate) VALUES ('proj1','test project','proj1','PROJ_1','user1','ACCESSIBLE','user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[3] = "INSERT INTO tbl_project(projectname,description,unixname,projectid,projectowner,accessibility,updatedby,updateddate,createdby,createddate) VALUES ('proj2','test project','proj2','PROJ_2','user1','ACCESSIBLE','user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[4] = "INSERT INTO tbl_project(projectname,description,unixname,projectid,projectowner,accessibility,updatedby,updateddate,createdby,createddate) VALUES ('proj3','test project','proj3','PROJ_3','user2','ACCESSIBLE','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[5] = "INSERT INTO tbl_project(projectname,description,unixname,projectid,projectowner,accessibility,updatedby,updateddate,createdby,createddate) VALUES ('proj4','test project','proj4','PROJ_4','user2','ACCESSIBLE','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[6] = "INSERT INTO tbl_project(projectname,description,unixname,projectid,projectowner,accessibility,updatedby,updateddate,createdby,createddate) VALUES ('proj5','test project','proj5','PROJ_5','user2','ACCESSIBLE','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[7] = "INSERT INTO tbl_project(projectname,description,unixname,projectid,projectowner,accessibility,updatedby,updateddate,createdby,createddate) VALUES ('proj6','test project','proj6','PROJ_6','user2','ACCESSIBLE','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[8] = "INSERT INTO tbl_project_collaborator(projectid,collaboratoruser,collaboratorrole,updatedby,updateddate,createdby,createddate) VALUES ('PROJ_3','user1','collaborator_role1','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[9] = "INSERT INTO tbl_project_collaborator(projectid,collaboratoruser,collaboratorrole,updatedby,updateddate,createdby,createddate) VALUES ('PROJ_4','user1','collaborator_role2','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[10] = "INSERT INTO tbl_workspace(workspacename,description,workspaceid,workspaceowner,isarchived,isdeactivated,updatedby,updateddate,createdby,createddate) VALUES ('ws1','testing workspace','WS_1','user1',0,0,'user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[11] = "INSERT INTO tbl_workspace(workspacename,description,workspaceid,workspaceowner,isarchived,isdeactivated,updatedby,updateddate,createdby,createddate) VALUES ('ws2','testing workspace','WS_2','user1',0,0,'user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[12] = "INSERT INTO tbl_workspace(workspacename,description,workspaceid,workspaceowner,isarchived,isdeactivated,updatedby,updateddate,createdby,createddate) VALUES ('ws3','testing workspace','WS_3','user2',0,0,'user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[13] = "INSERT INTO tbl_workspace(workspacename,description,workspaceid,workspaceowner,isarchived,isdeactivated,updatedby,updateddate,createdby,createddate) VALUES ('ws4','testing workspace','WS_4','user2',0,0,'user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[14] = "INSERT INTO tbl_project_workspace(projectid,workspaceid,updatedby,updateddate,createdby,createddate) VALUES ('PROJ_5','WS_1','user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[15] = "INSERT INTO tbl_project_workspace(projectid,workspaceid,updatedby,updateddate,createdby,createddate) VALUES ('PROJ_5','WS_2','user1',CURDATE(),'user1',CURDATE())";
// databaseQuery[16] = "INSERT INTO tbl_project_workspace(projectid,workspaceid,updatedby,updateddate,createdby,createddate) VALUES ('PROJ_6','WS_3','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[17] = "INSERT INTO tbl_project_workspace(projectid,workspaceid,updatedby,updateddate,createdby,createddate) VALUES ('PROJ_6','WS_4','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[18] = "INSERT INTO tbl_workspace_collaborator(workspaceid,username,collaboratorrole,updatedby,updateddate,createdby,createddate) VALUES ('WS_3','user1','wscollab_role1','user2',CURDATE(),'user2',CURDATE())";
// databaseQuery[19] = "INSERT INTO tbl_workspace_collaborator(workspaceid,username,collaboratorrole,updatedby,updateddate,createdby,createddate) VALUES ('WS_4','user1','wscollab_role1','user2',CURDATE(),'user2',CURDATE())";
// for(String query : databaseQuery)
// {
//// ((DBConnectionRetrieveProjectManager)dbConnect).setupTestEnvironment(query);
// }
// }
//
// @After
// public void tearDown() throws Exception
// {
// String[] databaseQuery = new String[6];
// databaseQuery[0] = "DELETE FROM tbl_workspace_collaborator WHERE workspaceid IN ('WS_3','WS_4')";
// databaseQuery[1] = "DELETE FROM tbl_project_workspace WHERE projectid IN ('PROJ_5','PROJ_6')";
// databaseQuery[2] = "DELETE FROM tbl_workspace WHERE workspaceid IN ('WS_1','WS_2','WS_3','WS_4')";
// databaseQuery[3] = "DELETE FROM tbl_project_collaborator WHERE projectid IN ('PROJ_3','PROJ_4')";
// databaseQuery[4] = "DELETE FROM tbl_project WHERE projectid IN ('PROJ_1','PROJ_2','PROJ_3','PROJ_4','PROJ_5','PROJ_6')";
// databaseQuery[5] = "DELETE FROM tbl_quadriga_user WHERE username IN ('user1','user2')";
// for(String query : databaseQuery)
// {
//// ((DBConnectionRetrieveProjectManager)dbConnect).setupTestEnvironment(query);
// }
// }
//
// @SuppressWarnings("unchecked")
// @Test
// public void testGetProjectListByOwner() throws QuadrigaStorageException, JSONException
// {
// //create the project objects and compare it with the retrieved objects
// List<IProject> tempProjectList = new ArrayList<IProject>();
// List<IProject> projectList = null;
// IProject project = null;
// IUser user = null;
// ModelAndView model;
// boolean success = false;
// Principal principal = new Principal() {
// @Override
// public String getName() {
// return "user1";
// }
// };
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_1");
// project.setProjectName("proj1");
// project.setDescription("test project");
// project.setUnixName("proj1");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user1");
// project.setOwner(user);
// tempProjectList.add(project);
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_2");
// project.setProjectName("proj2");
// project.setDescription("test project");
// project.setUnixName("proj2");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user1");
// project.setOwner(user);
// tempProjectList.add(project);
//
// model = retrieveProjectController.getProjectList(principal);
//
// projectList = (List<IProject>) model.getModelMap().get("projectlistasowner");
//
// for (IProject tempproject : projectList)
// {
// if(tempProjectList.contains(tempproject))
// {
// tempProjectList.remove(tempproject);
// }
// }
//
// if(tempProjectList.size() == 0)
// {
// success = true;
// }
//
// assertTrue(success);
// }
//
// @SuppressWarnings("unchecked")
// @Test
// public void testGetProjectListByCollaborator() throws QuadrigaStorageException, JSONException
// {
// //create the project objects and compare it with the retrieved objects
// List<IProject> tempProjectList = new ArrayList<IProject>();
// List<IProject> projectList = null;
// IProject project = null;
// IUser user = null;
// ModelAndView model;
// boolean success = false;
// Principal principal = new Principal() {
// @Override
// public String getName() {
// return "user1";
// }
// };
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_3");
// project.setProjectName("proj3");
// project.setDescription("test project");
// project.setUnixName("proj3");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user2");
// project.setOwner(user);
// tempProjectList.add(project);
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_4");
// project.setProjectName("proj4");
// project.setDescription("test project");
// project.setUnixName("proj4");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user2");
// project.setOwner(user);
// tempProjectList.add(project);
//
// model = retrieveProjectController.getProjectList(principal);
//
// projectList = (List<IProject>) model.getModelMap().get("projectlistascollaborator");
//
// for (IProject tempproject : projectList)
// {
// if(tempProjectList.contains(tempproject))
// {
// tempProjectList.remove(tempproject);
// }
// }
//
// if(tempProjectList.size() == 0)
// {
// success = true;
// }
//
// assertTrue(success);
// }
//
// @SuppressWarnings("unchecked")
// @Test
// public void testGetProjectListByWorkspaceOwner() throws QuadrigaStorageException, JSONException
// {
// //create the project objects and compare it with the retrieved objects
// List<IProject> tempProjectList = new ArrayList<IProject>();
// List<IProject> projectList = null;
// IProject project = null;
// IUser user = null;
// ModelAndView model;
// boolean success = false;
// Principal principal = new Principal() {
// @Override
// public String getName() {
// return "user1";
// }
// };
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_5");
// project.setProjectName("proj5");
// project.setDescription("test project");
// project.setUnixName("proj5");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user2");
// project.setOwner(user);
// tempProjectList.add(project);
//
// model = retrieveProjectController.getProjectList(principal);
//
// projectList = (List<IProject>) model.getModelMap().get("projectlistaswsowner");
//
// for (IProject tempproject : projectList)
// {
// if(tempProjectList.contains(tempproject))
// {
// tempProjectList.remove(tempproject);
// }
// }
//
// if(tempProjectList.size() == 0)
// {
// success = true;
// }
//
// assertTrue(success);
// }
//
// @SuppressWarnings("unchecked")
// @Test
// public void testGetProjectListByWSCollaborator() throws QuadrigaStorageException, JSONException
// {
// //create the project objects and compare it with the retrieved objects
// List<IProject> tempProjectList = new ArrayList<IProject>();
// List<IProject> projectList = null;
// IProject project = null;
// IUser user = null;
// ModelAndView model;
// boolean success = false;
// Principal principal = new Principal() {
// @Override
// public String getName() {
// return "user1";
// }
// };
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_6");
// project.setProjectName("proj6");
// project.setDescription("test project");
// project.setUnixName("proj6");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user2");
// project.setOwner(user);
// tempProjectList.add(project);
//
// model = retrieveProjectController.getProjectList(principal);
//
// projectList = (List<IProject>) model.getModelMap().get("projectlistaswscollaborator");
//
// for (IProject tempproject : projectList)
// {
// if(tempProjectList.contains(tempproject))
// {
// tempProjectList.remove(tempproject);
// }
// }
//
// if(tempProjectList.size() == 0)
// {
// success = true;
// }
//
// assertTrue(success);
// }
//
// @Test
// public void testGetProjectDetails() throws QuadrigaStorageException {
// {
// //create the project objects and compare it with the retrieved objects
// IProject project = null;
// IProject tempProject = null;
// IUser user = null;
// ModelAndView model;
// List<ICollaborator> collaboratorList;
//
// Principal principal = new Principal() {
// @Override
// public String getName() {
// return "user1";
// }
// };
//
// project = projectFactory.createProjectObject();
// project.setProjectId("PROJ_5");
// project.setProjectName("proj5");
// project.setDescription("test project");
// project.setUnixName("proj5");
// project.setProjectAccess(EProjectAccessibility.PUBLIC);
// user = userManager.getUserDetails("user2");
// project.setOwner(user);
//
// collaboratorList = projectManager.getProjectCollaborators("PROJ_5");
// project.setCollaborators(collaboratorList);
//
// model = retrieveProjectController.getProjectDetails("PROJ_5", principal);
//
// tempProject = (IProject) model.getModelMap().get("project");
//
// assertEquals(project,tempProject);
// }
//
// }
//
//}