/* * Copyright Siemens AG, 2013-2015. Part of the SW360 Portal Project. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.sw360.projects; import com.google.common.collect.ImmutableMap; import org.eclipse.sw360.datahandler.TestUtils; import org.eclipse.sw360.datahandler.common.DatabaseSettings; import org.eclipse.sw360.datahandler.common.SW360Utils; import org.eclipse.sw360.datahandler.couchdb.DatabaseConnector; import org.eclipse.sw360.datahandler.db.ComponentDatabaseHandler; import org.eclipse.sw360.datahandler.db.ProjectDatabaseHandler; import org.eclipse.sw360.datahandler.entitlement.ProjectModerator; import org.eclipse.sw360.datahandler.thrift.RequestStatus; import org.eclipse.sw360.datahandler.thrift.SW360Exception; import org.eclipse.sw360.datahandler.thrift.projects.Project; import org.eclipse.sw360.datahandler.thrift.projects.ProjectRelationship; import org.eclipse.sw360.datahandler.thrift.users.User; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import java.util.ArrayList; import java.util.List; import static org.eclipse.sw360.datahandler.common.SW360Utils.getProjectIds; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.junit.Assert.assertEquals; public class ProjectHandlerTest { private static final String dbName = DatabaseSettings.COUCH_DB_DATABASE; private static final String attachmentDbName = DatabaseSettings.COUCH_DB_ATTACHMENTS; private static final User user1 = new User().setEmail("user1").setDepartment("AB CD EF"); private static final User user2 = new User().setEmail("user2").setDepartment("AB CD FE"); private static final User user3 = new User().setEmail("user3").setDepartment("AB CD EF"); ProjectHandler handler; @Before public void setUp() throws Exception { List<Project> projects = new ArrayList<>(); projects.add(new Project().setId("P1").setName("Project1").setBusinessUnit("AB CD EF").setCreatedBy("user1")); projects.add(new Project().setId("P2").setName("Project2").setBusinessUnit("AB CD FE").setCreatedBy("user2")); projects.get(1).addToContributors("user1"); projects.add(new Project().setId("P3").setName("Project3").setBusinessUnit("AB CD EF").setCreatedBy("user3")); // Create the database TestUtils.createDatabase(DatabaseSettings.getConfiguredHttpClient(), dbName); // Prepare the database DatabaseConnector databaseConnector = new DatabaseConnector(DatabaseSettings.getConfiguredHttpClient(), dbName); for (Project project : projects) { databaseConnector.add(project); } // Create the connector handler = new ProjectHandler(); } @After public void tearDown() throws Exception { // Delete the database TestUtils.deleteDatabase(DatabaseSettings.getConfiguredHttpClient(), dbName); } @Test public void testGetMyProjects() throws Exception { assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); } @Test public void testGetAccessibleProjects() throws Exception { assertEquals(3, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user3).size()); } @Test public void testGetProjectByIdUser1_1() throws Exception { Project project1 = handler.getProjectById("P1", user1); assertEquals("P1", project1.getId()); } @Test(expected = SW360Exception.class) public void testGetProjectByIdUser1_2() throws Exception { handler.getProjectById("P1", user2); } @Test public void testGetProjectByIdUser1_3() throws Exception { Project project1 = handler.getProjectById("P1", user3); assertEquals("P1", project1.getId()); } @Test public void testGetProjectByIdUser2_1() throws Exception { Project project2 = handler.getProjectById("P2", user1); assertEquals("P2", project2.getId()); } @Test public void testGetProjectByIdUser2_2() throws Exception { Project project2 = handler.getProjectById("P2", user2); assertEquals("P2", project2.getId()); } @Test(expected = SW360Exception.class) public void testGetProjectByIdUser2_3() throws Exception { handler.getProjectById("P2", user3); } @Test public void testGetProjectByIdUser3_1() throws Exception { Project project3 = handler.getProjectById("P3", user1); assertEquals("P3", project3.getId()); } @Test(expected = SW360Exception.class) public void testGetProjectByIdUser3_2() throws Exception { handler.getProjectById("P3", user2); } @Test public void testGetProjectByIdUser3_3() throws Exception { Project project3 = handler.getProjectById("P3", user3); assertEquals("P3", project3.getId()); } @Test public void testAddProject() throws Exception { Project project4 = new Project(); project4.setName("Project4").setBusinessUnit("AB CD FE"); String id = handler.addProject(project4, user2).getId(); Project projectActual = handler.getProjectById(id, user2); assertEquals("Project4", projectActual.getName()); assertEquals("user2", projectActual.getCreatedBy()); assertEquals(SW360Utils.getCreatedOn(), projectActual.getCreatedOn()); assertEquals("AB CD FE", projectActual.getBusinessUnit()); assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(2, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(3, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user3).size()); } // @Test // public void testDuplicateProject() throws Exception { // String id = handler.duplicateProject("P1", "Project1a", user3); // Project projectNew = handler.getProjectById(id, user3); // // assertEquals("Project1a", projectNew.getName()); // assertEquals("user3", projectNew.getCreatedBy()); // assertEquals(DataHandlerUtils.getCreatedOn(), projectNew.getCreatedOn()); // assertEquals("AB CD EF", projectNew.getBusinessUnit()); // // assertEquals(2, handler.getMyProjectsSummary(user1.getEmail()).size()); // assertEquals(1, handler.getMyProjectsSummary(user2.getEmail()).size()); // assertEquals(2, handler.getMyProjectsSummary(user3.getEmail()).size()); // // assertEquals(3, handler.getBUProjectsSummarySummary(user1.getDepartment()).size()); // assertEquals(1, handler.getBUProjectsSummarySummary(user2.getDepartment()).size()); // assertEquals(3, handler.getBUProjectsSummarySummary(user3.getDepartment()).size()); // // assertEquals(4, handler.getAccessibleProjectsSummarySummary(user1).size()); // assertEquals(1, handler.getAccessibleProjectsSummarySummary(user2).size()); // assertEquals(3, handler.getAccessibleProjectsSummarySummary(user3).size()); // } @Test public void testUpdateProject1_1() throws Exception { Project project1 = handler.getProjectById("P1", user1); project1.setName("Project1new"); project1.setBusinessUnit("AB CD FE"); RequestStatus status = handler.updateProject(project1, user1); assertEquals(RequestStatus.SUCCESS, status); assertEquals("Project1new", handler.getProjectById("P1", user1).getName()); assertEquals("AB CD FE", handler.getProjectById("P1", user1).getBusinessUnit()); assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(3, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user3).size()); } @Test public void testUpdateProject2_1() throws Exception { ProjectModerator moderator = Mockito.mock(ProjectModerator.class); ProjectDatabaseHandler handler = new ProjectDatabaseHandler(DatabaseSettings.getConfiguredHttpClient(), dbName, attachmentDbName, moderator, new ComponentDatabaseHandler(DatabaseSettings.getConfiguredHttpClient(), dbName, attachmentDbName)); Project project2 = handler.getProjectById("P2", user1); project2.setName("Project2new"); Mockito.doReturn(RequestStatus.SENT_TO_MODERATOR).when(moderator).updateProject(project2, user1); RequestStatus status = handler.updateProject(project2, user1); // Now contributors can also change the project assertEquals(RequestStatus.SUCCESS, status); // assertEquals(RequestStatus.SENT_TO_MODERATOR, status); // assertEquals("Project2", handler.getProjectById("P2", user1).getName()); // Mockito.verify(moderator, times(1)).updateProject(project2, user1.getEmail()); // Mockito.verifyNoMoreInteractions(moderator); } @Test public void testUpdateProject2_2() throws Exception { Project project2 = handler.getProjectById("P2", user2); project2.setName("Project2new"); project2.setBusinessUnit("AB CD EF"); RequestStatus status = handler.updateProject(project2, user2); assertEquals(RequestStatus.SUCCESS, status); assertEquals("Project2new", handler.getProjectById("P2", user2).getName()); assertEquals("AB CD EF", handler.getProjectById("P2", user2).getBusinessUnit()); assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(3, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(3, handler.getAccessibleProjectsSummary(user3).size()); } @Test public void testUpdateProject3_3() throws Exception { Project project3 = handler.getProjectById("P3", user3); project3.setName("Project3new"); project3.setBusinessUnit("AB CD FE"); RequestStatus status = handler.updateProject(project3, user3); assertEquals(RequestStatus.SUCCESS, status); assertEquals("Project3new", handler.getProjectById("P3", user3).getName()); assertEquals("AB CD FE", handler.getProjectById("P3", user3).getBusinessUnit()); assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user3).size()); } ////////////////////////////////////////////////////////////////////////////////////// @Test(expected = Exception.class) public void testDeleteProject1_1() throws Exception { RequestStatus status = handler.deleteProject("P1", user1); assertEquals(RequestStatus.SUCCESS, status); assertEquals(1, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user3).size()); boolean deleted = (handler.getProjectById("P1", user1) == null); assertEquals(true, deleted); } @Test public void testDontDeleteUsedProject1_1() throws Exception { final Project p2 = handler.getProjectById("P2", user2); p2.setLinkedProjects(ImmutableMap.of("P1", ProjectRelationship.CONTAINED)); handler.updateProject(p2,user2); RequestStatus status = handler.deleteProject("P1", user1); assertEquals(RequestStatus.IN_USE, status); assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(3, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user3).size()); boolean deleted = (handler.getProjectById("P1", user1) == null); assertEquals(false, deleted); } @Test(expected = Exception.class) public void testDeleteProject2_2() throws Exception { RequestStatus status = handler.deleteProject("P2", user2); assertEquals(RequestStatus.SUCCESS, status); assertEquals(1, handler.getMyProjects(user1.getEmail()).size()); assertEquals(0, handler.getMyProjects(user2.getEmail()).size()); assertEquals(1, handler.getMyProjects(user3.getEmail()).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(0, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user3).size()); boolean deleted = (handler.getProjectById("P2", user2) == null); assertEquals(true, deleted); } @Test(expected = Exception.class) public void testDeleteProject3_3() throws Exception { RequestStatus status = handler.deleteProject("P3", user3); assertEquals(RequestStatus.SUCCESS, status); assertEquals(2, handler.getMyProjects(user1.getEmail()).size()); assertEquals(1, handler.getMyProjects(user2.getEmail()).size()); assertEquals(0, handler.getMyProjects(user3.getEmail()).size()); assertEquals(2, handler.getAccessibleProjectsSummary(user1).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user2).size()); assertEquals(1, handler.getAccessibleProjectsSummary(user3).size()); boolean deleted = (handler.getProjectById("P3", user3) == null); assertEquals(true, deleted); } @Test public void testSearchByName() throws Exception { List<Project> projects = handler.searchByName("Project1", user1); assertThat(getProjectIds(projects), containsInAnyOrder("P1")); } }