package org.exoplatform.forum.service;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;
import java.util.List;
import org.exoplatform.commons.testing.AbstractExoContainerTestCase;
import org.exoplatform.commons.testing.AssertUtils;
import org.exoplatform.commons.testing.mock.SimpleMockOrganizationService;
import org.exoplatform.component.test.ConfigurationUnit;
import org.exoplatform.component.test.ConfiguredBy;
import org.exoplatform.component.test.ContainerScope;
import org.exoplatform.services.organization.auth.OrganizationAuthenticatorImpl;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.security.IdentityRegistry;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@ConfiguredBy( { @ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/ForumServiceUtils-configuration.xml") })
public class TestForumServiceUtils extends AbstractExoContainerTestCase {
protected SimpleMockOrganizationService organizationService = null;
protected IdentityRegistry identityRegistry = null;
@BeforeMethod
protected void setUp() throws Exception {
// PortalContainer container = PortalContainer.getInstance();
organizationService = getComponent(SimpleMockOrganizationService.class);// (SimpleMockOrganizationService)container.getComponentInstanceOfType(OrganizationService.class);
identityRegistry = getComponent(IdentityRegistry.class);// //(IdentityRegistry)container.getComponentInstanceOfType(IdentityRegistry.class);
}
@Test
public void testHasPermission() throws Exception {
String user = "user1";
organizationService.addMemberships(user, "*:/platform/users");
simulateAuthenticate(user);
assertFalse(ForumServiceUtils.hasPermission(null, user));
assertFalse(ForumServiceUtils.hasPermission(new String[] { " " }, user));
assertTrue(ForumServiceUtils.hasPermission(new String[] { user }, user));
assertFalse(ForumServiceUtils.hasPermission(new String[] { "foo" }, user));
assertTrue(ForumServiceUtils.hasPermission(new String[] { "/platform/users" }, user));
assertTrue(ForumServiceUtils.hasPermission(new String[] { "/platform/users", user }, user));
// must match one (OR)
assertTrue(ForumServiceUtils.hasPermission(new String[] { "/platform/users", "user2" }, user));
assertFalse(ForumServiceUtils.hasPermission(new String[] { "/foo" }, user));
// suspicious * should theorically match 'admin'
assertTrue(ForumServiceUtils.hasPermission(new String[] { "admin:/platform/users" }, user));
assertTrue(ForumServiceUtils.hasPermission(new String[] { "*:/platform/users" }, user));
}
private void simulateAuthenticate(String user) throws Exception {
Identity identity = new OrganizationAuthenticatorImpl(organizationService).createIdentity(user);
identityRegistry.register(identity);
}
@Test
public void testGetPermissionNull() throws Exception {
List<String> emptyList = ForumServiceUtils.getUserPermission(null);
assertNotNull(emptyList);
assertEquals(0, emptyList.size());
}
@Test
public void testGetPermissionByGroup() throws Exception {
// organizationService.addMemberships("user1", "*:/platform/users");
// organizationService.addMemberships("user2", "*:/platform/users");
// organizationService.addMemberships("user3", "*:/platform");
//
// assertEquals(2, ForumServiceUtils.getUserPermission(new String [] {"/platform/users"}).size());
// AssertUtils.assertContains(ForumServiceUtils.getUserPermission(new String [] {"/platform/users"}), "user1", "user2");
// AssertUtils.assertNotContains(ForumServiceUtils.getUserPermission(new String [] {"/platform/users"}), "user3");
// AssertUtils.assertContains(ForumServiceUtils.getUserPermission(new String [] {"/platform/users", "/platform"}), "user1", "user2", "user3");
}
@Test
public void testGetPermissionByUser() throws Exception {
organizationService.addMemberships("user1", "*:/platform/users");
organizationService.addMemberships("user3", "*:/platform/users");
assertEquals(1, ForumServiceUtils.getUserPermission(new String[] { "user1" }).size());
AssertUtils.assertContains(ForumServiceUtils.getUserPermission(new String[] { "user1" }), "user1");
// matching permission against a user return this user at minimum
assertEquals(1, ForumServiceUtils.getUserPermission(new String[] { "user2" }).size());
AssertUtils.assertContains(ForumServiceUtils.getUserPermission(new String[] { "user2" }), "user2");
AssertUtils.assertContains(ForumServiceUtils.getUserPermission(new String[] { "user1", "user2" }), "user1", "user2");
AssertUtils.assertNotContains(ForumServiceUtils.getUserPermission(new String[] { "user1", "user2" }), "user3");
AssertUtils.assertContains(ForumServiceUtils.getUserPermission(new String[] { "user1", "user2" }), "user1", "user2");
}
@Test
public void testGetPermissionByMembership() throws Exception {
organizationService.addMemberships("user1", "*:/platform/users");
}
}