package edu.asu.spring.quadriga.accesschecks;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import edu.asu.spring.quadriga.accesschecks.impl.ProjectSecurityChecker;
import edu.asu.spring.quadriga.dao.workbench.IProjectAccessDAO;
import edu.asu.spring.quadriga.domain.ICollaborator;
import edu.asu.spring.quadriga.domain.IQuadrigaRole;
import edu.asu.spring.quadriga.domain.IUser;
import edu.asu.spring.quadriga.domain.impl.Collaborator;
import edu.asu.spring.quadriga.domain.impl.QuadrigaRole;
import edu.asu.spring.quadriga.domain.impl.User;
import edu.asu.spring.quadriga.domain.impl.workbench.ProjectCollaborator;
import edu.asu.spring.quadriga.domain.workbench.IProjectCollaborator;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.workbench.IProjectCollaboratorManager;
public class ProjectSecurityCheckerTest {
@Mock
private IProjectAccessDAO mockedManager;
@InjectMocks
private ProjectSecurityChecker securityChecker;
@Mock
private IProjectCollaboratorManager mockedProjectManager;
@Before
public void init() throws QuadrigaStorageException {
mockedManager = Mockito.mock(IProjectAccessDAO.class);
mockedProjectManager = Mockito.mock(IProjectCollaboratorManager.class);
MockitoAnnotations.initMocks(this);
Mockito.when(mockedManager.getProjectOwner("project1")).thenReturn("user1");
Mockito.when(mockedManager.getNrOfOwnedProjects("user1")).thenReturn(3);
Mockito.when(mockedManager.getNrOfOwnedProjects("user2")).thenReturn(0);
Mockito.when(mockedManager.getNrOfOwnedProjects("user3")).thenReturn(1);
Mockito.when(mockedManager.getNrOfProjectsCollaboratingOn("user1", "role1")).thenReturn(3);
Mockito.when(mockedManager.getNrOfProjectsCollaboratingOn("user2", "role1")).thenReturn(0);
Mockito.when(mockedManager.getNrOfProjectsCollaboratingOn("user3", "role1")).thenReturn(1);
IProjectCollaborator pColl1 = new ProjectCollaborator();
ICollaborator coll1 = new Collaborator();
IUser user1 = new User();
user1.setUserName("user1");
coll1.setUserObj(user1);
IQuadrigaRole role = new QuadrigaRole();
role.setId("role1");
List<IQuadrigaRole> roles = new ArrayList<IQuadrigaRole>();
roles.add(role);
coll1.setCollaboratorRoles(roles);
pColl1.setCollaborator(coll1);
List<IProjectCollaborator> collabs = new ArrayList<IProjectCollaborator>();
collabs.add(pColl1);
Mockito.when(mockedProjectManager.getProjectCollaborators("project1")).thenReturn(collabs);
}
@Test
public void testUserIsProjectOwner() throws QuadrigaStorageException {
assertTrue(securityChecker.isProjectOwner("user1", "project1"));
}
@Test
public void testUserIsNotProjectOwner() throws QuadrigaStorageException {
assertFalse(securityChecker.isProjectOwner("user2", "project1"));
}
@Test
public void testIsOwnerOfSeveralProjects() throws QuadrigaStorageException {
assertTrue(securityChecker.ownsAtLeastOneProject("user1"));
}
@Test
public void testIsNoOwner() throws QuadrigaStorageException {
assertFalse(securityChecker.ownsAtLeastOneProject("user2"));
}
@Test
public void testIsOwnerOfOneProject() throws QuadrigaStorageException {
assertTrue(securityChecker.ownsAtLeastOneProject("user3"));
}
/**
* Tests
* {@link edu.asu.spring.quadriga.accesschecks.impl.ProjectSecurityChecker.collaboratesOnAtLeastOneProject(String,
* String)}
*
* @throws QuadrigaStorageException
*/
@Test
public void testIsCollaboratingOnSeveralProjects() throws QuadrigaStorageException {
assertTrue(securityChecker.collaboratesOnAtLeastOneProject("user1", "role1"));
}
/**
* Tests
* {@link edu.asu.spring.quadriga.accesschecks.impl.ProjectSecurityChecker.collaboratesOnAtLeastOneProject(String,
* String)}
*
* @throws QuadrigaStorageException
*/
@Test
public void testIsNoCollaborator() throws QuadrigaStorageException {
assertFalse(securityChecker.collaboratesOnAtLeastOneProject("user2", "role1"));
}
/**
* Tests
* {@link edu.asu.spring.quadriga.accesschecks.impl.ProjectSecurityChecker.collaboratesOnAtLeastOneProject(String,
* String)}
*
* @throws QuadrigaStorageException
*/
@Test
public void testIsCollaboratingOnOneProject() throws QuadrigaStorageException {
assertTrue(securityChecker.collaboratesOnAtLeastOneProject("user3", "role1"));
}
/**
* Tests
* {@link edu.asu.spring.quadriga.accesschecks.impl.ProjectSecurityChecker.isUserCollaboratorOnProject(String,
* String, String)}
*
* @throws QuadrigaStorageException
*/
@Test
public void testUserHasProjectAccess() throws QuadrigaStorageException {
assertTrue(securityChecker.isUserCollaboratorOnProject("user1", "project1", "role1"));
}
}