/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.security;
import java.util.Arrays;
import java.util.List;
import net.jforum.entities.Group;
import net.jforum.entities.Role;
import net.jforum.util.SecurityConstants;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Rafael Steil
*/
public class RoleManagerTestCase {
@Test
public void readOnlyGroupACantAccessForumGroupBIsReadOnlyShoudlNotBeAbleToCreateTopics() {
Group g1 = new Group();
g1.addRole(this.newRole(SecurityConstants.FORUM_READ_ONLY, Arrays.asList(1)));
g1.addRole(this.newRole(SecurityConstants.FORUM_REPLY_ONLY, Arrays.asList(5)));
g1.addRole(this.newRole(SecurityConstants.FORUM, Arrays.asList(1)));
g1.addRole(this.newRole(SecurityConstants.FORUM, Arrays.asList(5)));
Group g2 = new Group();
g2.addRole(this.newRole("some role"));
RoleManager manager = new RoleManager();
manager.setGroups(Arrays.asList(g1, g2));
Assert.assertTrue(manager.isForumAllowed(1));
Assert.assertTrue(manager.isForumReadOnly(1));
Assert.assertTrue(manager.isForumReplyOnly(5));
}
@Test
public void readReplyOnlyShouldRetainOnlyCommonValues() {
Group g1 = new Group();
g1.addRole(this.newRole(SecurityConstants.FORUM_READ_ONLY, Arrays.asList(1, 2, 3)));
g1.addRole(this.newRole(SecurityConstants.FORUM_REPLY_ONLY, Arrays.asList(7)));
Group g2 = new Group();
g2.addRole(this.newRole(SecurityConstants.FORUM_READ_ONLY, Arrays.asList(2, 3)));
g2.addRole(this.newRole(SecurityConstants.FORUM_REPLY_ONLY, Arrays.asList(7, 9)));
Group g3 = new Group();
g3.addRole(this.newRole(SecurityConstants.FORUM_READ_ONLY, Arrays.asList(3)));
g3.addRole(this.newRole(SecurityConstants.FORUM_REPLY_ONLY, Arrays.asList(9, 13, 14)));
RoleManager manager = new RoleManager();
manager.setGroups(Arrays.asList(g1, g2, g3));
Assert.assertFalse(manager.isForumReadOnly(1));
Assert.assertFalse(manager.isForumReadOnly(2));
Assert.assertTrue(manager.isForumReadOnly(3));
Assert.assertFalse(manager.isForumReplyOnly(7));
Assert.assertFalse(manager.isForumReplyOnly(9));
Assert.assertFalse(manager.isForumReplyOnly(13));
Assert.assertFalse(manager.isForumReplyOnly(14));
}
@Test
public void readReplyOnlyShouldAllowEverything() {
Group g1 = new Group();
g1.addRole(this.newRole(SecurityConstants.FORUM, Arrays.asList(1, 2, 3, 7)));
g1.addRole(this.newRole(SecurityConstants.FORUM_READ_ONLY, Arrays.asList(1, 2, 3)));
g1.addRole(this.newRole(SecurityConstants.FORUM_REPLY_ONLY, Arrays.asList(7)));
Group g2 = new Group();
g2.addRole(this.newRole(SecurityConstants.FORUM, Arrays.asList(1, 2, 3, 7)));
g2.addRole(this.newRole("some role"));
RoleManager manager = new RoleManager();
manager.setGroups(Arrays.asList(g1, g2));
Assert.assertFalse(manager.isForumReadOnly(1));
Assert.assertFalse(manager.isForumReadOnly(2));
Assert.assertFalse(manager.isForumReadOnly(3));
Assert.assertFalse(manager.isForumReadOnly(7));
Assert.assertFalse(manager.isForumReplyOnly(7));
Assert.assertTrue(manager.roleExists("some role"));
}
@Test
public void singleRoleExists() {
Group g = new Group(); g.addRole(this.newRole("role1"));
RoleManager manager = new RoleManager(); manager.setGroups(Arrays.asList(g));
Assert.assertTrue(manager.roleExists("role1"));
}
@Test
public void roleWithValuesExists() {
Group g = new Group(); g.addRole(this.newRole("role1", Arrays.asList(1, 2)));
RoleManager manager = new RoleManager(); manager.setGroups(Arrays.asList(g));
Assert.assertTrue(manager.roleExists("role1"));
Assert.assertTrue(manager.roleExists("role1", 1));
Assert.assertTrue(manager.roleExists("role1", 2));
Assert.assertFalse(manager.roleExists("role1", 3));
}
@Test
public void twoGroupsSameRoleWithDifferentValuesShouldMerge() {
Group g1 = new Group(); g1.addRole(this.newRole("role1", Arrays.asList(1, 2)));
Group g2 = new Group(); g2.addRole(this.newRole("role1", Arrays.asList(2, 3, 4)));
RoleManager manager = new RoleManager(); manager.setGroups(Arrays.asList(g1, g2));
Assert.assertTrue(manager.roleExists("role1"));
Assert.assertTrue(manager.roleExists("role1", 1));
Assert.assertTrue(manager.roleExists("role1", 2));
Assert.assertTrue(manager.roleExists("role1", 3));
Assert.assertTrue(manager.roleExists("role1", 4));
}
@Test
public void twoGroupsUniqueRoles() {
Group g1 = new Group(); g1.addRole(this.newRole("role1"));
Group g2 = new Group(); g2.addRole(this.newRole("role2"));
RoleManager manager = new RoleManager(); manager.setGroups(Arrays.asList(g1, g2));
Assert.assertTrue(manager.roleExists("role1"));
Assert.assertTrue(manager.roleExists("role2"));
}
@Test
public void twoGroupsSameRoleShouldExist() {
Group g1 = new Group(); g1.addRole(this.newRole("role1"));
Group g2 = new Group(); g2.addRole(this.newRole("role1"));
RoleManager manager = new RoleManager(); manager.setGroups(Arrays.asList(g1, g2));
Assert.assertTrue(manager.roleExists("role1"));
}
private Role newRole(String name, List<Integer> values) {
Role role = new Role();
role.setName(name);
role.getRoleValues().addAll(values);
return role;
}
private Role newRole(String name) {
Role role = new Role();
role.setName(name);
return role;
}
}