package edu.asu.spring.quadriga.aspects;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
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 org.springframework.util.ReflectionUtils;
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.dictionary.IDictionary;
import edu.asu.spring.quadriga.domain.dictionary.IDictionaryCollaborator;
import edu.asu.spring.quadriga.domain.factory.dictionary.IDictionaryFactory;
import edu.asu.spring.quadriga.domain.factory.impl.dictionary.DictionaryFactory;
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.dictionary.Dictionary;
import edu.asu.spring.quadriga.domain.impl.dictionary.DictionaryCollaborator;
import edu.asu.spring.quadriga.exceptions.QuadrigaAccessException;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.dictionary.IDictionaryManager;
public class DictionaryAuthorizationTest {
@Mock
private IDictionaryManager dictionaryManager;
@InjectMocks
private DictionaryAuthorization authorization;
private List<IDictionaryCollaborator> collaborators;
@Before
public void init() throws QuadrigaStorageException {
dictionaryManager = Mockito.mock(IDictionaryManager.class);
MockitoAnnotations.initMocks(this);
IDictionary dictionary = new Dictionary();
final IUser owner = new User();
owner.setUserName("testuser");
dictionary.setOwner(owner);
dictionary.setDictionaryId("dictionaryId");
// create colaborator
IDictionaryCollaborator ccCollaborator = new DictionaryCollaborator();
ICollaborator collaborator = new Collaborator();
IUser collabUser = new User();
collabUser.setUserName("collabuser");
collaborator.setUserObj(collabUser);
// create collaborator roles
IQuadrigaRole role = new QuadrigaRole();
role.setId("role1");
List<IQuadrigaRole> roles = new ArrayList<IQuadrigaRole>();
roles.add(role);
collaborator.setCollaboratorRoles(roles);
ccCollaborator.setCollaborator(collaborator);
collaborators = new ArrayList<IDictionaryCollaborator>();
collaborators.add(ccCollaborator);
Mockito.when(dictionaryManager.getDictionaryDetails("dictionaryId")).thenReturn(dictionary);
Mockito.when(dictionaryManager.showCollaboratingUsers("dictionaryId")).thenReturn(collaborators);
}
@Test
public void testChkAuthorizationIsOwner() throws QuadrigaStorageException, QuadrigaAccessException {
// this should succeed because testuser is the owner of the collection
boolean authorized = authorization.chkAuthorization("testuser", "dictionaryId", new String[] { "" });
assertTrue(authorized);
}
@Test
public void testChkAuthorizationHasValidRole() throws QuadrigaStorageException, QuadrigaAccessException {
// this should succeed because collabuser is a collaborator and
// has a role that has access to the collection
boolean authorized = authorization.chkAuthorization("collabuser", "dictionaryId", new String[] { "role1" });
assertTrue(authorized);
}
@Test
public void testChkAuthorizationHasNoValidRole() throws QuadrigaStorageException, QuadrigaAccessException {
// this should succeed because collabuser is a collaborator but
// does not have a role that has access to the collection
boolean authorized = authorization.chkAuthorization("collabuser", "dictionaryId", new String[] { "role2" });
assertFalse(authorized);
}
@Test
public void testChkAuthorizationIsNotCollaborator() throws QuadrigaStorageException, QuadrigaAccessException {
// this should fail because testuser2 is not a collaborator
boolean authorized = authorization.chkAuthorization("testuser2", "dictionaryId", new String[] { "role1" });
assertFalse(authorized);
}
}