/*
* Copyright (C) 2003-2014 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.forum.service;
import java.util.Arrays;
import java.util.List;
import org.exoplatform.forum.base.BaseForumServiceTestCase;
import org.exoplatform.forum.common.UserHelper;
import org.exoplatform.services.organization.User;
public class ForumServiceUtilsTestCase extends BaseForumServiceTestCase {
public void setUp() throws Exception {
super.setUp();
}
public void tearDown() throws Exception {
super.tearDown();
}
public void testHasPermission() throws Exception {
String userGroupMembership[] = null;
String userId = "";
assertFalse(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userGroupMembership = new String[] { "mary", "member:/platform/users" };
assertFalse(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userId = "user";
assertFalse(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userId = "mary";
assertTrue(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userId = "demo";
assertTrue(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userGroupMembership = new String[] { "john", "/platform/users" };
assertTrue(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userGroupMembership = new String[] { "root", "manager:/platform/users" };
assertFalse(ForumServiceUtils.hasPermission(userGroupMembership, userId));
userGroupMembership = new String[] { "root", "member:/platform/administrators" };
assertFalse(ForumServiceUtils.hasPermission(userGroupMembership, userId));
}
public void testHasPermissionWildcard() throws Exception {
//
assertTrue(ForumServiceUtils.hasPermission(new String[] { "*:/platform/users" }, "demo"));
assertTrue(ForumServiceUtils.hasPermission(new String[] { "*:/platform/users" }, "ghost"));
assertTrue(ForumServiceUtils.hasPermission(new String[] { "manager:/platform/users" }, "ghost"));
}
public void testIsGroupExpression() {
String expr = "demo";
assertFalse(ForumServiceUtils.isGroupExpression(expr));
expr = "manager:/platform/users";
assertFalse(ForumServiceUtils.isGroupExpression(expr));
expr = "/platform/users";
assertTrue(ForumServiceUtils.isGroupExpression(expr));
}
public void testIsMembershipExpression() {
String expr = "demo";
assertFalse(ForumServiceUtils.isMembershipExpression(expr));
expr = "manager:/platform/users";
assertTrue(ForumServiceUtils.isMembershipExpression(expr));
expr = "/platform/users";
assertFalse(ForumServiceUtils.isMembershipExpression(expr));
}
public void testGetUserPermission() throws Exception {
String userGroupMembership[] = null;
assertEquals(0, ForumServiceUtils.getUserPermission(userGroupMembership).size());
userGroupMembership = new String[] { "mary", "demo" };
assertEquals("[demo, mary]", ForumServiceUtils.getUserPermission(userGroupMembership).toString());
userGroupMembership = new String[] { "mary", "demo", "abc"};
assertEquals("[demo, mary]", ForumServiceUtils.getUserPermission(userGroupMembership).toString());
userGroupMembership = new String[] { "mary", "/platform/users"};
assertEquals("[demo, paul, jame, root, raul, john, ghost, mary]",
ForumServiceUtils.getUserPermission(userGroupMembership).toString());
userGroupMembership = new String[] { "john", "manager:/platform/administrators" };
assertEquals("[root, john]", ForumServiceUtils.getUserPermission(userGroupMembership).toString());
// disable user demo
UserHelper.getUserHandler().setEnabled("demo", false, true);
//
userGroupMembership = new String[] { "mary", "demo" };
assertEquals("[mary]", ForumServiceUtils.getUserPermission(userGroupMembership).toString());
//
userGroupMembership = new String[] { "/platform/users"};
assertEquals("[paul, jame, root, raul, john, ghost, mary]",
ForumServiceUtils.getUserPermission(userGroupMembership).toString());
// enable user demo
UserHelper.getUserHandler().setEnabled("demo", true, true);
//
userGroupMembership = new String[] { "mary", "demo" };
assertEquals("[demo, mary]", ForumServiceUtils.getUserPermission(userGroupMembership).toString());
//
userGroupMembership = new String[] { "/platform/users"};
assertEquals("[demo, paul, jame, root, raul, john, ghost, mary]",
ForumServiceUtils.getUserPermission(userGroupMembership).toString());
}
public void testGetUserPermissionWildcard() throws Exception {
assertListEquals("demo, paul, jame, root, raul, john, ghost, mary",
ForumServiceUtils.getUserPermission(new String[] { "*:/platform/users" }));
//
UserHelper.getUserHandler().setEnabled("demo", false, true);
//
assertListEquals("paul, jame, root, raul, john, ghost, mary",
ForumServiceUtils.getUserPermission(new String[] { "*:/platform/users" }));
assertListEquals("paul, jame, root, raul, john, ghost, mary",
ForumServiceUtils.getUserPermission(new String[] { "member:/platform/users" }));
//
assertListEquals("paul, root, ghost",
ForumServiceUtils.getUserPermission(new String[] { "manager:/platform/users" }));
//
createUser("user01", "/platform/users", "member");
assertListEquals("user01, paul, jame, root, john, raul, ghost, mary",
ForumServiceUtils.getUserPermission(new String[] { "member:/platform/users" }));
//
createUser("user02", "/platform/users", "member");
assertListEquals("john", ForumServiceUtils.getUserPermission(new String[] { "member:/platform/administrators" }));
//
createUser("user02", "/platform/administrators", "member");
assertListEquals("user02, john", ForumServiceUtils.getUserPermission(new String[] { "member:/platform/administrators" }));
createUser("user03", "/platform/guests", "member");
assertListEquals("user03", ForumServiceUtils.getUserPermission(new String[] { "*:/platform/guests" }));
assertListEquals("paul, root, ghost", ForumServiceUtils.getUserPermission(new String[] { "manager:/platform/users" }));
createUser("user03", "/platform/users", "manager");
assertListEquals("user03, paul, root, ghost", ForumServiceUtils.getUserPermission(new String[] { "manager:/platform/users" }));
// remove user
for (int i = 0; i < 4; i++) {
//
UserHelper.getUserHandler().removeUser("user0" + i, false);
}
//
UserHelper.getUserHandler().setEnabled("demo", true, true);
assertListEquals("demo, jame, paul, root, john, raul, ghost, mary",
ForumServiceUtils.getUserPermission(new String[] { "member:/platform/users" }));
}
private void createUser(String userName, String groupId, String membershipType) throws Exception {
//
User user = UserHelper.getUserHandler().findUserByName(userName);
if (user == null) {
user = UserHelper.getUserHandler().createUserInstance(userName);
user.setEmail(userName + "@plf.com");
user.setFirstName(userName);
user.setLastName(userName);
user.setPassword(userName);
user.setDisplayName(userName + " " + userName);
UserHelper.getUserHandler().createUser(user, true);
}
if(groupId != null) {
UserHelper.getMembershipHandler()
.linkMembership(user,
UserHelper.getGroupHandler().findGroupById(groupId),
UserHelper.getOrganizationService().getMembershipTypeHandler().findMembershipType(membershipType),
true);
}
}
private void assertListEquals(String valueString, List<String> list) {
if (valueString == null && list != null || valueString != null && list == null) {
fail();
}
//
List<String> values = Arrays.asList(valueString.replace(" ", "").split(","));
if (values.size() != list.size()) {
fail();
}
for (String val : values) {
if (!list.contains(val)) {
fail();
}
}
}
}