package edu.ualberta.med.biobank.test.action.security;
import java.util.HashSet;
import java.util.Set;
import junit.framework.Assert;
import org.hibernate.Transaction;
import org.junit.Test;
import edu.ualberta.med.biobank.common.action.exception.AccessDeniedException;
import edu.ualberta.med.biobank.common.action.security.RoleGetAllAction;
import edu.ualberta.med.biobank.common.action.security.RoleGetAllInput;
import edu.ualberta.med.biobank.common.action.security.RoleGetAllOutput;
import edu.ualberta.med.biobank.model.PermissionEnum;
import edu.ualberta.med.biobank.model.Rank;
import edu.ualberta.med.biobank.model.Role;
import edu.ualberta.med.biobank.model.User;
import edu.ualberta.med.biobank.test.Factory.Domain;
import edu.ualberta.med.biobank.test.action.TestAction;
public class TestRoleGetAllAction extends TestAction {
@Test
public void superAdminAccess() {
exec(new RoleGetAllAction(new RoleGetAllInput()));
}
@Test
public void adminAccess() {
Transaction tx = session.beginTransaction();
User user = factory.createUser();
factory.createMembership(Domain.CENTER_STUDY, Rank.ADMINISTRATOR);
tx.commit();
try {
execAs(user, new RoleGetAllAction(new RoleGetAllInput()));
Assert.fail();
} catch (AccessDeniedException e) {
}
}
@Test
public void normalAccess() {
Transaction tx = session.beginTransaction();
User user = factory.createUser();
tx.commit();
try {
execAs(user, new RoleGetAllAction(new RoleGetAllInput()));
Assert.fail();
} catch (AccessDeniedException e) {
}
}
@Test
public void managerAccess() {
Transaction tx = session.beginTransaction();
User manager = factory.createUser();
tx.commit();
try {
execAs(manager, new RoleGetAllAction(new RoleGetAllInput()));
Assert.fail();
} catch (AccessDeniedException e) {
}
}
@Test
public void upToDate() {
Transaction tx = session.beginTransaction();
Role newRole = factory.createRole();
tx.commit();
RoleGetAllOutput output;
output = exec(new RoleGetAllAction(new RoleGetAllInput()));
Set<Role> postInsertActionRoles = output.getAllRoles();
Assert.assertTrue("role not found",
postInsertActionRoles.contains(newRole));
@SuppressWarnings("unchecked")
Set<Role> dbRoles =
new HashSet<Role>(session.createCriteria(Role.class)
.list());
Assert.assertEquals("unexpected roles",
postInsertActionRoles, dbRoles);
tx = session.beginTransaction();
session.delete(newRole);
tx.commit();
output = exec(new RoleGetAllAction(new RoleGetAllInput()));
Set<Role> postDeleteActionRoles = output.getAllRoles();
Assert.assertTrue("role not removed",
!postDeleteActionRoles.contains(newRole));
}
@Test
public void inited() {
Transaction tx = session.beginTransaction();
Role r1 = factory.createRole();
r1.getPermissions().addAll(PermissionEnum.valuesList());
session.update(r1);
Role r2 = factory.createRole();
r2.getPermissions().add(PermissionEnum.REPORTS);
session.update(r2);
factory.createRole();
tx.commit();
RoleGetAllOutput output =
exec(new RoleGetAllAction(new RoleGetAllInput()));
for (Role role : output.getAllRoles()) {
role.getId();
role.getName();
for (PermissionEnum perm : role.getPermissions()) {
perm.getId();
perm.getName();
}
}
}
}