/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.portal.mop.user;
import junit.framework.AssertionFailedError;
import org.exoplatform.component.test.ConfigurationUnit;
import org.exoplatform.component.test.ConfiguredBy;
import org.exoplatform.component.test.ContainerScope;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.portal.AbstractPortalTest;
import org.exoplatform.portal.config.DataStorage;
import org.exoplatform.portal.config.UserPortalConfig;
import org.exoplatform.portal.config.UserPortalConfigService;
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.portal.mop.SiteKey;
import org.exoplatform.portal.mop.Visibility;
import org.exoplatform.portal.mop.navigation.NavigationContext;
import org.exoplatform.portal.mop.navigation.NavigationServiceImpl;
import org.exoplatform.portal.mop.navigation.NavigationState;
import org.exoplatform.portal.mop.navigation.Scope;
import org.exoplatform.portal.pom.config.POMDataStorage;
import org.exoplatform.portal.pom.config.POMSessionManager;
import org.exoplatform.services.listener.Event;
import org.exoplatform.services.listener.Listener;
import org.exoplatform.services.listener.ListenerService;
import org.exoplatform.services.organization.OrganizationService;
import org.exoplatform.services.security.Authenticator;
import org.exoplatform.services.security.ConversationState;
import org.gatein.common.i18n.MapResourceBundle;
import org.gatein.mop.api.workspace.ObjectType;
import org.gatein.mop.api.workspace.Site;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
@ConfiguredBy({
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.test.jcr-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.identity-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.portal-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "org/exoplatform/portal/mop/user/configuration.xml")
})
public class TestUserPortal extends AbstractPortalTest
{
/** . */
private UserPortalConfigService userPortalConfigSer_;
/** . */
private OrganizationService orgService_;
/** . */
private DataStorage storage_;
/** . */
private POMSessionManager mgr;
/** . */
private Authenticator authenticator;
/** . */
private ListenerService listenerService;
/** . */
private LinkedList<Event> events;
/** . */
private boolean registered;
/** . */
private POMDataStorage mopStorage;
public TestUserPortal(String name)
{
super(name);
//
registered = false;
}
@Override
protected void setUp() throws Exception
{
Listener listener = new Listener()
{
@Override
public void onEvent(Event event) throws Exception
{
events.add(event);
}
};
PortalContainer container = getContainer();
userPortalConfigSer_ =
(UserPortalConfigService)container.getComponentInstanceOfType(UserPortalConfigService.class);
orgService_ = (OrganizationService)container.getComponentInstanceOfType(OrganizationService.class);
mgr = (POMSessionManager)container.getComponentInstanceOfType(POMSessionManager.class);
authenticator = (Authenticator)container.getComponentInstanceOfType(Authenticator.class);
listenerService = (ListenerService)container.getComponentInstanceOfType(ListenerService.class);
events = new LinkedList<Event>();
storage_ = (DataStorage)container.getComponentInstanceOfType(DataStorage.class);
mopStorage = (POMDataStorage)container.getComponentInstanceOfType(POMDataStorage.class);
// Register only once for all unit tests
if (!registered)
{
// I'm using this due to crappy design of
// org.exoplatform.services.listener.ListenerService
listenerService.addListener(DataStorage.PAGE_CREATED, listener);
listenerService.addListener(DataStorage.PAGE_REMOVED, listener);
listenerService.addListener(DataStorage.PAGE_UPDATED, listener);
}
}
private static Map<SiteKey, UserNavigation> toMap(UserPortalConfig cfg) throws Exception
{
return toMap(cfg.getUserPortal().getNavigations());
}
private static Map<SiteKey, UserNavigation> toMap(List<UserNavigation> navigations)
{
Map<SiteKey, UserNavigation> map = new HashMap<SiteKey, UserNavigation>();
for (UserNavigation nav : navigations)
{
map.put(nav.getKey(), nav);
}
return map;
}
/*
public void testUpdatePortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", "root");
assertNotNull(userPortalCfg);
PortalConfig portalCfg = userPortalCfg.getPortalConfig();
assertNotNull(portalCfg);
assertEquals(PortalConfig.PORTAL_TYPE, portalCfg.getType());
assertEquals("classic", portalCfg.getName());
assertEquals("en", portalCfg.getLocale());
portalCfg.setLocale("fr");
storage_.save(portalCfg);
userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", "root");
portalCfg = userPortalCfg.getPortalConfig();
assertEquals("fr", portalCfg.getLocale());
}
}.execute("root");
}
*/
public void testRootGetUserPortalConfig()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
Map<SiteKey, UserNavigation> navigations = toMap(userPortalCfg);
assertEquals(5, navigations.size());
assertTrue(navigations.containsKey(SiteKey.portal("classic")));
assertTrue(navigations.containsKey(SiteKey.user("root")));
assertTrue(navigations.containsKey(SiteKey.group("/platform/administrators")));
assertTrue(navigations.containsKey(SiteKey.group("/organization/management/executive-board")));
assertTrue(navigations.containsKey(SiteKey.group("/organization/management/executive-board")));
assertTrue(navigations.containsKey(SiteKey.group("/platform/users")));
// Now try with the specific api
UserNavigation rootNav = userPortalCfg.getUserPortal().getNavigation(SiteKey.user("root"));
assertNotNull(rootNav);
assertEquals(SiteKey.user("root"), rootNav.getKey());
}
}.execute("root");
}
public void testFilter()
{
UnitTest test = new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal portal = userPortalCfg.getUserPortal();
UserNavigation nav = portal.getNavigation(SiteKey.portal("classic"));
//
UserNode root = portal.getNode(nav, Scope.ALL, UserNodeFilterConfig.builder().build(), null);
assertNotNull(root.getChild("home"));
assertNotNull(root.getChild("webexplorer"));
}
};
//
test.execute("root");
test.execute();
}
public void testRefreshNavigations()
{
UnitTest test = new UnitTest()
{
public void doExecute() throws Exception
{
//
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal portal = userPortalCfg.getUserPortal();
//
NavigationServiceImpl service = new NavigationServiceImpl(mgr);
SiteKey navKey = SiteKey.group("/organization/management");
NavigationContext nav = new NavigationContext(navKey, new NavigationState(1));
//
NavigationContext got = service.loadNavigation(navKey);
assertEquals(null, got);
assertEquals(null, portal.getNavigation(navKey));
//
service.saveNavigation(nav);
assertEquals(null, portal.getNavigation(navKey));
portal.refresh();
assertNotNull(portal.getNavigation(navKey));
}
};
//
test.execute("root");
}
public void testFilterWithVisibility()
{
class Test extends UnitTest
{
final int authorizationMode;
final boolean guest;
final boolean displayedGuest;
final boolean systemGuest;
final boolean systemUsers;
final Visibility[] visibilities;
Test(int authorizationMode, boolean guest, boolean displayedGuest, boolean systemGuest, boolean systemUsers)
{
this(authorizationMode, guest, displayedGuest, systemGuest, systemUsers, (Visibility[])null);
}
Test(int authorizationMode, boolean guest, boolean displayedGuest, boolean systemGuest, boolean systemUsers, Visibility... visibilities)
{
this.authorizationMode = authorizationMode;
this.guest = guest;
this.displayedGuest = displayedGuest;
this.systemGuest = systemGuest;
this.systemUsers = systemUsers;
this.visibilities = visibilities;
}
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("system", getUserId());
UserPortal portal = userPortalCfg.getUserPortal();
UserNavigation nav = portal.getNavigation(SiteKey.portal("system"));
//
UserNodeFilterConfig.Builder builder = UserNodeFilterConfig.builder().withAuthMode(authorizationMode);
if (visibilities != null)
{
builder.withVisibility(visibilities);
}
UserNodeFilterConfig config = builder.build();
//
UserNode root = portal.getNode(nav, Scope.ALL, config, null);
assertEquals(guest, root.getChild("guest") != null);
assertEquals(displayedGuest, root.getChild("displayed_guest") != null);
assertEquals(systemGuest, root.getChild("system_guest") != null);
assertEquals(systemUsers, root.getChild("system_users") != null);
//
assertEquals(guest, portal.resolvePath(nav, config, "guest") != null);
assertEquals(displayedGuest, portal.resolvePath(nav, config, "displayed_guest") != null);
assertEquals(systemGuest, portal.resolvePath(nav, config, "system_guest") != null);
assertEquals(systemUsers, portal.resolvePath(nav, config, "system_users") != null);
}
}
//
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, true, true).execute();
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, true, true).execute("root");
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, true, true).execute("demo");
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, false, false, Visibility.DISPLAYED).execute();
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, false, false, Visibility.DISPLAYED).execute("root");
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, false, false, Visibility.DISPLAYED).execute("demo");
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, true, true, Visibility.DISPLAYED, Visibility.SYSTEM).execute();
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, true, true, Visibility.DISPLAYED, Visibility.SYSTEM).execute("root");
new Test(UserNodeFilterConfig.AUTH_NO_CHECK, true, true, true, true, Visibility.DISPLAYED, Visibility.SYSTEM).execute("demo");
//
new Test(UserNodeFilterConfig.AUTH_READ, true, true, true, false).execute();
new Test(UserNodeFilterConfig.AUTH_READ, true, true, true, true).execute("root");
new Test(UserNodeFilterConfig.AUTH_READ, true, true, true, true).execute("demo");
new Test(UserNodeFilterConfig.AUTH_READ, true, true, false, false, Visibility.DISPLAYED).execute();
new Test(UserNodeFilterConfig.AUTH_READ, true, true, false, false, Visibility.DISPLAYED).execute("root");
new Test(UserNodeFilterConfig.AUTH_READ, true, true, false, false, Visibility.DISPLAYED).execute("demo");
new Test(UserNodeFilterConfig.AUTH_READ, true, true, true, false, Visibility.DISPLAYED, Visibility.SYSTEM).execute();
new Test(UserNodeFilterConfig.AUTH_READ, true, true, true, true, Visibility.DISPLAYED, Visibility.SYSTEM).execute("root");
new Test(UserNodeFilterConfig.AUTH_READ, true, true, true, true, Visibility.DISPLAYED, Visibility.SYSTEM).execute("demo");
//
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false).execute();
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, true, true).execute("root");
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false).execute("demo");
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false, Visibility.DISPLAYED).execute();
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false, Visibility.DISPLAYED).execute("root");
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false, Visibility.DISPLAYED).execute("demo");
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false, Visibility.DISPLAYED, Visibility.SYSTEM).execute();
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, true, true, Visibility.DISPLAYED, Visibility.SYSTEM).execute("root");
new Test(UserNodeFilterConfig.AUTH_READ_WRITE, true, true, false, false, Visibility.DISPLAYED, Visibility.SYSTEM).execute("demo");
}
public void testFilterWithAuthorizationCheck()
{
class Check extends UnitTest
{
/** . */
boolean pass = true;
@Override
protected void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal portal = userPortalCfg.getUserPortal();
UserNavigation nav = portal.getNavigation(SiteKey.group("/platform/administrators"));
//
UserNode root = portal.getNode(nav, Scope.ALL, UserNodeFilterConfig.builder().withReadWriteCheck().build(), null);
pass &= root.getChild("administration") != null;
pass &= root.getChild("administration").getChild("communityManagement") != null;
}
}
//
Check root = new Check();
root.execute("root");
assertTrue(root.pass);
//
Check anon = new Check();
anon.execute("john");
assertFalse(anon.pass);
}
public void testFilterPropagation()
{
UnitTest test = new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("system", getUserId());
UserPortal portal = userPortalCfg.getUserPortal();
UserNavigation nav = portal.getNavigation(SiteKey.portal("system"));
//
UserNode root = portal.getNode(nav, Scope.SINGLE, UserNodeFilterConfig.builder().withVisibility(Visibility.DISPLAYED).build(), null);
assertFalse(root.hasChildrenRelationship());
//
portal.updateNode(root, Scope.ALL, null);
assertTrue(root.hasChildrenRelationship());
assertNotNull(root.getChild("guest"));
assertNotNull(root.getChild("displayed_guest"));
assertNull(root.getChild("system_users"));
}
};
//
test.execute("root");
}
/*
public void testJohnGetUserPortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", "john");
assertNotNull(userPortalCfg);
PortalConfig portalCfg = userPortalCfg.getPortalConfig();
assertNotNull(portalCfg);
assertEquals(PortalConfig.PORTAL_TYPE, portalCfg.getType());
assertEquals("classic", portalCfg.getName());
assertNotNull(userPortalCfg.getNavigations());
Map<String, PageNavigation> navigations = toMap(userPortalCfg);
assertEquals("expected to have 5 navigations instead of " + navigations, 5, navigations.size());
assertTrue(navigations.containsKey("portal::classic"));
assertTrue(navigations.containsKey("group::/platform/administrators"));
assertTrue(navigations.containsKey("group::/organization/management/executive-board"));
assertTrue(navigations.containsKey("group::/platform/users"));
assertTrue(navigations.containsKey("user::john"));
}
}.execute("john");
}
public void testMaryGetUserPortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", "mary");
assertNotNull(userPortalCfg);
PortalConfig portalCfg = userPortalCfg.getPortalConfig();
assertNotNull(portalCfg);
assertEquals(PortalConfig.PORTAL_TYPE, portalCfg.getType());
assertEquals("classic", portalCfg.getName());
assertNotNull(userPortalCfg.getNavigations());
Map<String, PageNavigation> navigations = toMap(userPortalCfg);
assertEquals(3, navigations.size());
assertTrue(navigations.containsKey("portal::classic"));
assertTrue(navigations.containsKey("group::/platform/users"));
assertTrue(navigations.containsKey("user::mary"));
}
}.execute("mary");
}
public void testGuestGetUserPortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", null);
assertNotNull(userPortalCfg);
PortalConfig portalCfg = userPortalCfg.getPortalConfig();
assertNotNull(portalCfg);
assertEquals(PortalConfig.PORTAL_TYPE, portalCfg.getType());
assertEquals("classic", portalCfg.getName());
assertNotNull(userPortalCfg.getNavigations());
Map<String, PageNavigation> navigations = toMap(userPortalCfg);
assertEquals("" + navigations, 1, navigations.size());
assertTrue(navigations.containsKey("portal::classic"));
}
}.execute(null);
}
*/
public void testNavigationOrder()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
List<UserNavigation> navigations = userPortal.getNavigations();
assertEquals("expected to have 5 navigations instead of " + navigations, 5, navigations.size());
assertEquals(SiteKey.portal("classic"), navigations.get(0).getKey()); // 1
assertEquals(SiteKey.group("/platform/administrators"), navigations.get(1).getKey()); // 2
assertEquals(SiteKey.user("root"), navigations.get(2).getKey()); // 3
assertEquals(SiteKey.group("/organization/management/executive-board"), navigations.get(3).getKey()); // 4
assertEquals(SiteKey.group("/platform/users"), navigations.get(4).getKey()); // 5
}
}.execute("root");
}
public void testPathResolution()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
//
UserNode nav = userPortal.resolvePath(null, "/");
assertEquals(SiteKey.portal("classic"), nav.getNavigation().getKey());
assertEquals("home", nav.getName());
assertEquals("default", nav.getParent().getName());
assertNull(nav.getParent().getParent());
//
nav = userPortal.resolvePath(null, "/foo");
assertEquals(SiteKey.portal("classic"), nav.getNavigation().getKey());
assertEquals("home", nav.getName());
assertEquals("default", nav.getParent().getName());
assertNull(nav.getParent().getParent());
//
nav = userPortal.resolvePath(null, "/home");
assertEquals(SiteKey.portal("classic"), nav.getNavigation().getKey());
assertEquals("home", nav.getName());
assertEquals("default", nav.getParent().getName());
assertNull(nav.getParent().getParent());
//
nav = userPortal.resolvePath(null, "/administration/communityManagement");
assertEquals(SiteKey.group("/platform/administrators"), nav.getNavigation().getKey());
assertEquals("communityManagement", nav.getName());
assertEquals("administration", nav.getParent().getName());
assertEquals("default", nav.getParent().getParent().getName());
assertNull(nav.getParent().getParent().getParent());
}
}.execute("root");
}
public void testFindBestAvailablePath()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("limited", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
// Without authentication
UserNode nav = userPortal.resolvePath(null, "/");
assertEquals(SiteKey.portal("limited"), nav.getNavigation().getKey());
assertEquals("foo", nav.getName());
nav = userPortal.resolvePath(null, "/foo");
assertEquals(SiteKey.portal("limited"), nav.getNavigation().getKey());
assertEquals("foo", nav.getName());
// With read auth
UserNodeFilterConfig.Builder builder = UserNodeFilterConfig.builder();
builder.withReadCheck();
UserNodeFilterConfig filterConfig = builder.build();
nav = userPortal.resolvePath(filterConfig, "/");
assertEquals(SiteKey.portal("limited"), nav.getNavigation().getKey());
assertEquals("bar", nav.getName());
nav = userPortal.resolvePath(filterConfig, "/foo");
assertNull(nav);
nav = userPortal.resolvePath(filterConfig, "/bit");
assertEquals(SiteKey.portal("limited"), nav.getNavigation().getKey());
assertEquals("bit", nav.getName());
// With read and write auth
builder = UserNodeFilterConfig.builder();
builder.withReadWriteCheck();
filterConfig = builder.build();
nav = userPortal.resolvePath(filterConfig, "/");
assertEquals(SiteKey.portal("limited"), nav.getNavigation().getKey());
assertEquals("bit", nav.getName());
nav = userPortal.resolvePath(filterConfig, "/foo");
assertNull(nav);
nav = userPortal.resolvePath(filterConfig, "/bar");
assertNull(nav);
nav = userPortal.resolvePath(filterConfig, "/bit");
assertEquals(SiteKey.portal("limited"), nav.getNavigation().getKey());
assertEquals("bit", nav.getName());
}
}.execute("demo");
}
public void testPathResolutionPerNavigation()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.group("/platform/administrators"));
//
UserNode path = userPortal.resolvePath(navigation, null, "/");
assertNull(path);
//
path = userPortal.resolvePath(navigation, null, "/foo");
assertNull(path);
//
path = userPortal.resolvePath(navigation, null, "/administration");
assertNotNull(path);
assertEquals("administration", path.getName());
//
path = userPortal.resolvePath(navigation, null, "/administration/communityManagement");
assertNotNull(path);
assertEquals("communityManagement", path.getName());
}
}.execute("root");
}
public void testLabel()
{
new UnitTest()
{
public void doExecute() throws Exception
{
SimpleUserPortalContext ctx = new SimpleUserPortalContext(Locale.ENGLISH);
Map<String, Object> map = new HashMap<String, Object>();
map.put("portal.classic.home", "foo");
map.put("portal.classic.emoh", "bar");
ctx.add(SiteKey.portal("classic"), new MapResourceBundle(map));
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId(), ctx);
UserPortal userPortal = userPortalCfg.getUserPortal();
//
UserNode path = userPortal.resolvePath(null, "/home");
assertEquals("#{portal.classic.home}", path.getLabel());
assertEquals("foo", path.getResolvedLabel());
// Note that we don't save otherwise that may affect other tests
// this is fine for this test I think
path.setLabel("#{portal.classic.emoh}");
assertEquals("bar", path.getResolvedLabel());
}
}.execute("root");
}
public void testExtendedLabel()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalContext ctx = new SimpleUserPortalContext(Locale.ENGLISH);
UserPortal portal = userPortalConfigSer_.getUserPortalConfig("extended", getUserId(), ctx).getUserPortal();
UserNode path = portal.resolvePath(null, "/bar");
assertEquals(null, path.getLabel());
assertEquals("bar_label_en", path.getResolvedLabel());
// Now test transient node
UserNode juu = path.addChild("juu");
assertEquals(null, juu.getLabel());
assertEquals("juu", juu.getResolvedLabel());
//
ctx = new SimpleUserPortalContext(Locale.FRENCH);
portal = userPortalConfigSer_.getUserPortalConfig("extended", getUserId(), ctx).getUserPortal();
path = portal.resolvePath(null, "/bar");
assertEquals(null, path.getLabel());
assertEquals("bar_label_fr", path.getResolvedLabel());
}
}.execute("root");
}
public void testLoadNode()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.group("/platform/administrators"));
//
UserNode root = userPortal.getNode(navigation, Scope.SINGLE, null, null);
assertEquals("default", root.getName());
assertEquals(1, root.getChildrenCount());
assertEquals(0, root.getChildren().size());
assertFalse(root.hasChildrenRelationship());
//
root = userPortal.getNode(navigation, Scope.CHILDREN, null, null);
assertEquals("default", root.getName());
assertEquals(1, root.getChildrenCount());
assertEquals(1, root.getChildren().size());
assertTrue(root.hasChildrenRelationship());
Iterator<UserNode> children = root.getChildren().iterator();
UserNode administration = children.next();
assertEquals("administration", administration.getName());
assertEquals(5, administration.getChildrenCount());
assertEquals(0, administration.getChildren().size());
assertFalse(administration.hasChildrenRelationship());
//
userPortal.updateNode(administration, Scope.CHILDREN, null);
assertEquals("administration", administration.getName());
assertEquals(5, administration.getChildrenCount());
assertEquals(5, administration.getChildren().size());
assertTrue(administration.hasChildrenRelationship());
//
UserNode registry = administration.getChildren().iterator().next();
assertEquals("registry", registry.getName());
assertEquals(0, registry.getChildrenCount());
assertEquals(0, registry.getChildren().size());
assertFalse(registry.hasChildrenRelationship());
// I'm too lazy to check the remaining nodes...
}
}.execute("root");
}
public void testPublicationTime()
{
new UnitTest()
{
public void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("test", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.portal("test"));
UserNode root = userPortal.getNode(navigation, Scope.ALL, UserNodeFilterConfig.builder().withTemporalCheck().build(), null);
GregorianCalendar start = new GregorianCalendar(2000, 2, 21, 1, 33, 0);
start.setTimeZone(TimeZone.getTimeZone("UTC"));
GregorianCalendar end = new GregorianCalendar(2050, 2, 21, 1, 33, 0);
end.setTimeZone(TimeZone.getTimeZone("UTC"));
assertEquals(3, root.getChildrenCount());
UserNode node1 = root.getChild("node_name1");
assertNotNull(node1);
assertEquals(start.getTimeInMillis(), node1.getStartPublicationTime());
assertEquals(end.getTimeInMillis(), node1.getEndPublicationTime());
UserNode node2 = root.getChild("node_name3");
assertNotNull(node2);
assertEquals(-1, node2.getStartPublicationTime());
assertEquals(end.getTimeInMillis(), node2.getEndPublicationTime());
UserNode node3 = root.getChild("node_name4");
assertNotNull(node3);
assertEquals(-1, node3.getStartPublicationTime());
assertEquals(-1, node3.getEndPublicationTime());
}
}.execute("root");
}
public void testSave()
{
new UnitTest()
{
public void doExecute() throws Exception
{
storage_.create(new PortalConfig("portal", "usernode_recursive"));
end(true);
//
begin();
Site site = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "usernode_recursive");
site.getRootNavigation().addChild("default");
end(true);
//
begin();
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("usernode_recursive", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.portal("usernode_recursive"));
UserNode root = userPortal.getNode(navigation, Scope.CHILDREN, null, null);
root.addChild("foo");
userPortal.saveNode(root, null);
end(true);
//
begin();
root = userPortal.getNode(navigation, Scope.ALL, null, null);
root.addChild("bar");
root.getChild("foo").addChild("juu");
userPortal.saveNode(root, null);
end(true);
//
begin();
userPortalCfg = userPortalConfigSer_.getUserPortalConfig("usernode_recursive", getUserId());
userPortal = userPortalCfg.getUserPortal();
navigation = userPortal.getNavigation(SiteKey.portal("usernode_recursive"));
root = userPortal.getNode(navigation, Scope.ALL, null, null);
assertNotNull(root.getChild("bar"));
UserNode foo = root.getChild("foo");
assertNotNull(foo.getChild("juu"));
root.removeChild("foo");
root.addChild("foo");
userPortal.saveNode(root, null);
end(true);
begin();
root = userPortal.getNode(navigation, Scope.ALL, null, null);
foo = root.getChild("foo");
assertNull(foo.getChild("juu"));
}
}.execute("root");
}
public void testInvalidateState()
{
new UnitTest()
{
public void doExecute() throws Exception
{
storage_.create(new PortalConfig("portal", "usernode_invalidate_uri"));
end(true);
//
begin();
Site site = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "usernode_invalidate_uri");
site.getRootNavigation().addChild("default");
end(true);
//
begin();
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("usernode_invalidate_uri", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.portal("usernode_invalidate_uri"));
UserNode root = userPortal.getNode(navigation, Scope.ALL, null, null);
UserNode foo = root.addChild("foo");
UserNode bar = root.addChild("bar");
assertEquals("foo", foo.getURI());
assertEquals("bar", bar.getURI());
userPortal.saveNode(root, null);
end(true);
begin();
//Move node --> change URI
foo.addChild(bar);
assertEquals("foo/bar", bar.getURI());
//Rename node --> URI should be changed too
bar.setName("bar2");
assertEquals("foo/bar2", bar.getURI());
userPortal.saveNode(bar, null);
end(true);
begin();
UserNode root2 = userPortal.getNode(navigation, Scope.ALL, null, null);
UserNode foo2 = root2.getChild("foo");
foo2.setName("foo2");
UserNode bar2 = foo2.getChild("bar2");
root2.addChild(bar2);
userPortal.saveNode(bar2, null);
end(true);
begin();
//Changes from other session : foo has been renamed, and bar has been moved
userPortal.updateNode(root, Scope.ALL, null);
assertEquals("foo2", foo.getURI());
assertEquals("bar2", bar.getURI());
}
}.execute("root");
}
public void testNodeExtension()
{
new UnitTest()
{
public void doExecute() throws Exception
{
storage_.create(new PortalConfig("portal", "node_extension"));
end(true);
//
begin();
Site site = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "node_extension");
site.getRootNavigation().addChild("default");
end(true);
begin();
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("node_extension", getUserId());
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.portal("node_extension"));
UserNode root1 = userPortal.getNode(navigation, Scope.CHILDREN, null, null);
end(true);
begin();
UserNode root2 = userPortal.getNode(navigation, Scope.CHILDREN, null, null);
UserNode foo2 = root2.addChild("foo");
userPortal.saveNode(root2, null);
end(true);
begin();
UserNode foo1 = root1.getChild("foo");
assertNull(foo1);
userPortal.updateNode(root1, Scope.GRANDCHILDREN, null);
foo1 = root1.getChild("foo");
assertNotNull(foo1);
foo1.addChild("bar");
userPortal.saveNode(root1, null);
end(true);
begin();
UserNode bar2 = foo2.getChild("bar");
assertNull(foo2.getChild("bar"));
userPortal.updateNode(foo2, Scope.GRANDCHILDREN, null);
bar2 = foo2.getChild("bar");
assertNotNull(bar2);
bar2.addChild("foo_bar");
userPortal.saveNode(root2, null);
end(true);
begin();
root1 = userPortal.getNode(navigation, Scope.ALL, null, null);
UserNode bar1 = root1.getChild("foo").getChild("bar");
assertNotNull(bar1);
assertNotNull(bar1.getChild("foo_bar"));
}
}.execute("root");
}
public void testCacheInvalidation()
{
new UnitTest()
{
public void doExecute() throws Exception
{
storage_.create(new PortalConfig("portal", "cache_invalidation"));
end(true);
//
begin();
Site site = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "cache_invalidation");
site.getRootNavigation().addChild("default");
end(true);
begin();
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("cache_invalidation", "root");
UserPortal userPortal = userPortalCfg.getUserPortal();
UserNavigation navigation = userPortal.getNavigation(SiteKey.portal("cache_invalidation"));
UserNode root = userPortal.getNode(navigation, Scope.CHILDREN, null, null);
root.addChild("foo");
userPortal.saveNode(root, null);
root = userPortal.getNode(navigation, Scope.CHILDREN, null, null);
assertNotNull(root.getChild("foo")); // should Cache be invalidated right after save()
}
}.execute("root");
}
public void testInfiniteLoop()
{
new UnitTest()
{
@Override
protected void doExecute() throws Exception
{
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("classic", getUserId());
UserPortal portal = userPortalCfg.getUserPortal();
UserNavigation nav = portal.getNavigation(SiteKey.group("/platform/administrators"));
//
UserNode root = portal.getNode(nav, Scope.GRANDCHILDREN, null, null);
portal.updateNode(root, Scope.GRANDCHILDREN, null); //Re-update the root node
Collection<UserNode> children = root.getChildren();
int level = 0;
for (UserNode child : children)
{
println(child, level);
}
}
private void println(UserNode node, int level)
{
Collection<UserNode> children = node.getChildren();
UserNode temp = null;
Iterator<UserNode> it = children.iterator();
while (it.hasNext())
{
UserNode child = it.next();
if (child == temp)
{
child = it.next();
fail("There is infinite loop");
}
temp = child;
println(child, level + 1);
}
}
}.execute("root");
}
/*
public void testCreateUserPortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
userPortalConfigSer_.createUserPortalConfig(PortalConfig.PORTAL_TYPE, "jazz", "test");
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("jazz", "root");
assertNotNull(userPortalCfg);
PortalConfig portalCfg = userPortalCfg.getPortalConfig();
assertNotNull(portalCfg);
assertEquals(PortalConfig.PORTAL_TYPE, portalCfg.getType());
assertEquals("jazz", portalCfg.getName());
assertNotNull(userPortalCfg.getNavigations());
Map<String, PageNavigation> navigations = toMap(userPortalCfg);
assertEquals("expected to have 5 navigations instead of " + navigations, 5, navigations.size());
assertTrue(navigations.containsKey("portal::jazz"));
assertTrue(navigations.containsKey("group::/platform/administrators"));
assertTrue(navigations.containsKey("group::/organization/management/executive-board"));
assertTrue(navigations.containsKey("group::/platform/users"));
assertTrue(navigations.containsKey("user::root"));
queryPage();
}
private void queryPage()
{
Query<Page> query = new Query<Page>("portal", null, null, null, Page.class);
try
{
storage_.find(query);
}
catch (Exception ex)
{
assertTrue("Exception while querying pages with new portal", false);
}
}
}.execute("root");
}
public void testRemoveUserPortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
userPortalConfigSer_.createUserPortalConfig(PortalConfig.PORTAL_TYPE, "jazz", "test");
UserPortalConfig userPortalCfg = userPortalConfigSer_.getUserPortalConfig("jazz", "root");
assertNotNull(userPortalCfg);
saveMOP();
userPortalConfigSer_.removeUserPortalConfig("jazz");
saveMOP();
assertNull(userPortalConfigSer_.getUserPortalConfig("jazz", "root"));
}
}.execute("root");
}
public void testRootGetMakableNavigations()
{
new UnitTest()
{
public void execute() throws Exception
{
Set<String> navigations = new HashSet<String>(userPortalConfigSer_.getMakableNavigations("root", false));
Set<String> expectedNavigations =
new HashSet<String>(Arrays.asList("/platform/users", "/organization/management/human-resources",
"/partners", "/customers", "/organization/communication", "/organization/management/executive-board",
"/organization/management", "/organization/operations", "/organization", "/platform",
"/organization/communication/marketing", "/platform/guests",
"/organization/communication/press-and-media", "/platform/administrators",
"/organization/operations/sales", "/organization/operations/finances"));
assertEquals(expectedNavigations, navigations);
}
}.execute(null);
}
public void testJohnGetMakableNavigations()
{
new UnitTest()
{
public void execute() throws Exception
{
Set<String> navigations = new HashSet<String>(userPortalConfigSer_.getMakableNavigations("john", false));
Set<String> expectedNavigations = Collections.singleton("/organization/management/executive-board");
assertEquals(expectedNavigations, navigations);
}
}.execute(null);
}
public void testMaryGetMakableNavigations()
{
new UnitTest()
{
public void execute() throws Exception
{
Set<String> navigations = new HashSet<String>(userPortalConfigSer_.getMakableNavigations("mary", false));
Set<String> expectedNavigations = Collections.emptySet();
assertEquals(expectedNavigations, navigations);
}
}.execute(null);
}
public void testRootGetPage()
{
new UnitTest()
{
public void execute() throws Exception
{
assertEquals("group::/platform/administrators::newAccount", userPortalConfigSer_.getPage(
"group::/platform/administrators::newAccount", null).getPageId());
assertEquals("group::/organization/management/executive-board::newStaff", userPortalConfigSer_.getPage(
"group::/organization/management/executive-board::newStaff", null).getPageId());
}
}.execute("root");
}
public void testJohnGetPage()
{
new UnitTest()
{
public void execute() throws Exception
{
assertEquals(null, userPortalConfigSer_.getPage("group::/platform/administrators::newAccount", null));
assertEquals("group::/organization/management/executive-board::newStaff", userPortalConfigSer_.getPage(
"group::/organization/management/executive-board::newStaff", null).getPageId());
}
}.execute("john");
}
public void testMaryGetPage()
{
new UnitTest()
{
public void execute() throws Exception
{
assertEquals(null, userPortalConfigSer_.getPage("group::/platform/administrators::newAccount", null));
assertEquals(null, userPortalConfigSer_.getPage(
"group::/organization/management/executive-board::newStaff", null));
}
}.execute("mary");
}
public void testAnonymousGetPage()
{
new UnitTest()
{
public void execute() throws Exception
{
assertEquals(null, userPortalConfigSer_.getPage("group::/platform/administrators::newAccount", null));
assertEquals(null, userPortalConfigSer_.getPage(
"group::/organization/management/executive-board::newStaff", null));
}
}.execute(null);
}
public void testRemovePage()
{
new UnitTest()
{
public void execute() throws Exception
{
Page page = new Page();
page.setOwnerType("group");
page.setOwnerId("/platform/administrators");
page.setName("newAccount");
assertTrue(events.isEmpty());
storage_.remove(page);
assertEquals(1, events.size());
Event event = events.removeFirst();
assertEquals(DataStorage.PAGE_REMOVED, event.getEventName());
Page p = ((Page)event.getData());
assertEquals("group", p.getOwnerType());
assertEquals("/platform/administrators", p.getOwnerId());
assertEquals("newAccount", p.getName());
assertEquals(null, userPortalConfigSer_.getPage("group::/platform/administrators::newAccount"));
}
}.execute(null);
}
public void testCreatePage()
{
new UnitTest()
{
public void execute() throws Exception
{
Page page = new Page();
page.setOwnerType("group");
page.setOwnerId("/platform/administrators");
page.setName("whatever");
assertTrue(events.isEmpty());
storage_.create(page);
assertEquals(1, events.size());
Event event = events.removeFirst();
assertEquals(DataStorage.PAGE_CREATED, event.getEventName());
Page p = ((Page)event.getData());
assertEquals("group", p.getOwnerType());
assertEquals("/platform/administrators", p.getOwnerId());
assertEquals("whatever", p.getName());
assertNotNull(userPortalConfigSer_.getPage("group::/platform/administrators::whatever"));
}
}.execute(null);
}
// Julien : see who added that and find out is test is relevant or not
public void testClonePage()
{
new UnitTest()
{
public void execute() throws Exception
{
Page page = new Page();
page.setOwnerType("group");
page.setOwnerId("/platform/administrators");
page.setName("whatever");
page.setTitle("testTitle");
storage_.create(page);
String newName = "newPage";
Page newPage = storage_.clonePage(page.getPageId(), page.getOwnerType(), page.getOwnerId(), newName);
assertEquals(newName, newPage.getName());
assertEquals(page.getTitle(), newPage.getTitle());
}
}.execute(null);
}
public void testUpdatePage()
{
new UnitTest()
{
public void execute() throws Exception
{
Page page = new Page();
page.setOwnerType("group");
page.setOwnerId("/platform/administrators");
page.setName("newAccount");
page.setShowMaxWindow(true);
page.setTitle("newAccount title");
assertTrue(events.isEmpty());
storage_.create(page);
assertEquals(1, events.size());
Event event = events.removeFirst();
assertEquals(DataStorage.PAGE_CREATED, event.getEventName());
Page p = ((Page)event.getData());
assertEquals("group", p.getOwnerType());
assertEquals("/platform/administrators", p.getOwnerId());
assertEquals("newAccount", p.getName());
assertEquals("newAccount title", p.getTitle());
assertTrue(p.isShowMaxWindow());
p.setShowMaxWindow(false);
storage_.save(p);
p = userPortalConfigSer_.getPage("group::/platform/administrators::newAccount");
assertFalse(p.isShowMaxWindow());
p.setShowMaxWindow(true);
storage_.save(p);
p = userPortalConfigSer_.getPage("group::/platform/administrators::newAccount");
assertTrue(p.isShowMaxWindow());
p.setShowMaxWindow(false);
storage_.save(p);
p = userPortalConfigSer_.getPage("group::/platform/administrators::newAccount");
assertFalse(p.isShowMaxWindow());
p.setShowMaxWindow(true);
storage_.save(p);
p = userPortalConfigSer_.getPage("group::/platform/administrators::newAccount");
assertTrue(p.isShowMaxWindow());
Page p2 = userPortalConfigSer_.getPage("group::/platform/administrators::newAccount");
assertEquals("group", p2.getOwnerType());
assertEquals("/platform/administrators", p2.getOwnerId());
assertEquals("newAccount", p2.getName());
// assertFalse(p2.isShowMaxWindow());
p2.setTitle("newAccount title 1");
p2.setShowMaxWindow(true);
storage_.save(p2);
Page p3 = userPortalConfigSer_.getPage("group::/platform/administrators::newAccount");
assertEquals("newAccount title 1", p3.getTitle());
// assertTrue(p3.isShowMaxWindow());
}
}.execute(null);
}
public void testRemoveNavigation()
{
new UnitTest()
{
public void execute() throws Exception
{
PageNavigation navigation = new PageNavigation();
navigation.setOwnerType("group");
navigation.setOwnerId("/platform/administrators");
assertTrue(events.isEmpty());
storage_.remove(navigation);
assertEquals(1, events.size());
Event event = events.removeFirst();
assertEquals(DataStorage.NAVIGATION_REMOVED, event.getEventName());
PageNavigation n = ((PageNavigation)event.getData());
assertEquals("group", n.getOwnerType());
assertEquals("/platform/administrators", n.getOwnerId());
assertEquals(null, storage_.getPageNavigation("group", "/platform/administrators"));
}
}.execute(null);
}
public void testCreateNavigation()
{
new UnitTest()
{
public void execute() throws Exception
{
PageNavigation navigation = new PageNavigation();
navigation.setOwnerType("group");
navigation.setOwnerId("/platform/administrators");
storage_.remove(navigation);
assertNotNull(events.removeLast());
assertTrue(events.isEmpty());
storage_.create(navigation);
assertEquals(1, events.size());
Event event = events.removeFirst();
assertEquals(DataStorage.NAVIGATION_CREATED, event.getEventName());
PageNavigation n = ((PageNavigation)event.getData());
assertEquals("group", n.getOwnerType());
assertEquals("/platform/administrators", n.getOwnerId());
PageNavigation n2 = storage_.getPageNavigation("group", "/platform/administrators");
assertEquals("group", n2.getOwnerType());
assertEquals("/platform/administrators", n2.getOwnerId());
}
}.execute(null);
}
*/
/*
public void testCreateMultipleNavigations(){
for(int i =0; i < 10; i++){
createNavigation(null, "group", "/platform/administrators" + i);
}
}
private void createNavigation(final String user, final String ownerType, final String ownerId)
{
new UnitTest()
{
public void execute() throws Exception
{
createNavigationInSeperatedThread();
}
private void createNavigationInSeperatedThread()
{
Thread task = new Thread()
{
public void run()
{
PageNavigation navigation = new PageNavigation();
navigation.setOwnerType(ownerType);
navigation.setOwnerId(ownerId);
try
{
userPortalConfigSer_.create(navigation);
Event event = events.removeFirst();
assertEquals(DataStorage.CREATE_NAVIGATION_EVENT, event.getEventName());
PageNavigation n1 = (PageNavigation)event.getSource();
assertEquals(ownerType, n1.getOwnerType());
assertEquals(ownerId, n1.getOwnerId());
PageNavigation n2 = storage_.getPageNavigation(ownerType, ownerId);
assertEquals(ownerType, n2.getOwnerType());
assertEquals(ownerId, n2.getOwnerId());
}
catch (Exception ex)
{
assertTrue("Failed while create '" + ownerType + " ' navigation for owner: " + ownerId, false);
ex.printStackTrace();
}
}
};
task.start();
try
{
task.sleep(200);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
}.execute(user);
}
*//*
public void testUpdateNavigation()
{
new UnitTest()
{
public void execute() throws Exception
{
PageNavigation navigation = new PageNavigation();
navigation.setOwnerType("group");
navigation.setOwnerId("/platform/administrators");
navigation.setPriority(3);
assertTrue(events.isEmpty());
storage_.save(navigation);
assertEquals(1, events.size());
Event event = events.removeFirst();
assertEquals(DataStorage.NAVIGATION_UPDATED, event.getEventName());
PageNavigation n = ((PageNavigation)event.getData());
assertEquals("group", n.getOwnerType());
assertEquals("/platform/administrators", n.getOwnerId());
assertEquals(3, n.getPriority());
PageNavigation n2 = storage_.getPageNavigation("group", "/platform/administrators");
assertEquals("group", n2.getOwnerType());
assertEquals("/platform/administrators", n2.getOwnerId());
assertEquals(3, n2.getPriority());
}
}.execute(null);
}
public void testRenewPage()
{
new UnitTest()
{
public void execute() throws Exception
{
Page clone = storage_.clonePage("portal::test::test4", "portal", "test", "test5");
assertNotNull(clone);
assertEquals("portal", clone.getOwnerType());
assertEquals("test", clone.getOwnerId());
assertEquals("test5", clone.getName());
//
Application<Portlet> app = (Application<Portlet>)clone.getChildren().get(0);
Portlet prefs2 = storage_.load(app.getState(), ApplicationType.PORTLET);
assertEquals(new PortletBuilder().add("template",
"par:/groovy/groovy/webui/component/UIBannerPortlet.gtmpl").build(), prefs2);
// Update prefs of original page
PortletPreferences prefs = new PortletPreferences();
prefs.setWindowId("portal#test:/web/BannerPortlet/banner");
storage_.save(prefs);
//
prefs2 = storage_.load(app.getState(), ApplicationType.PORTLET);
assertEquals(new PortletBuilder().add("template",
"par:/groovy/groovy/webui/component/UIBannerPortlet.gtmpl").build(), prefs2);
}
}.execute(null);
}
public void testCreateFromTemplate()
{
new UnitTest()
{
public void execute() throws Exception
{
Page clone = userPortalConfigSer_.createPageTemplate("dashboard", "portal", "test");
assertNotNull(clone);
assertEquals("portal", clone.getOwnerType());
assertEquals("test", clone.getOwnerId());
//
assertEquals(1, clone.getChildren().size());
//
Application<Portlet> app = (Application<Portlet>)clone.getChildren().get(0);
assertEquals("Dashboard", app.getTitle());
assertNotNull(app.getState());
assertEquals("dashboard/DashboardPortlet", storage_.getId(app.getState()));
// assertEquals("portal", app.getInstanceState().getOwnerType());
// assertEquals("test", app.getInstanceState().getOwnerId());
Portlet prefs2 = storage_.load(app.getState(), ApplicationType.PORTLET);
assertNull(prefs2);
}
}.execute(null);
}
public void testOverwriteUserLayout()
{
new UnitTest()
{
public void execute() throws Exception
{
mgr.clearCache();
PortalConfig cfg = storage_.getPortalConfig(PortalConfig.USER_TYPE, "overwritelayout");
assertNotNull(cfg);
Container container = cfg.getPortalLayout();
assertNotNull(container);
assertEquals(2, container.getChildren().size());
assertTrue(container.getChildren().get(0) instanceof PageBody);
assertTrue(((Application)container.getChildren().get(1)).getType() == ApplicationType.PORTLET);
Application<Portlet> pa = (Application<Portlet>)container.getChildren().get(1);
ApplicationState<Portlet> state = pa.getState();
assertEquals("overwrite_application_ref/overwrite_portlet_ref", storage_.getId(state));
}
}.execute(null);
}
public void testUserTemplate()
{
new UnitTest()
{
public void execute() throws Exception
{
assertNull(storage_.getPortalConfig(PortalConfig.USER_TYPE, "user"));
assertNull(storage_.getPortalConfig(PortalConfig.USER_TYPE, "julien"));
//
UserHandler userHandler = orgService_.getUserHandler();
User user = userHandler.createUserInstance("julien");
user.setPassword("default");
user.setFirstName("default");
user.setLastName("default");
user.setEmail("exo@exoportal.org");
userHandler.createUser(user, true);
//
PortalConfig cfg = storage_.getPortalConfig(PortalConfig.USER_TYPE, "julien");
assertNotNull(cfg);
Container container = cfg.getPortalLayout();
assertNotNull(container);
assertEquals(2, container.getChildren().size());
assertTrue(container.getChildren().get(0) instanceof PageBody);
assertTrue(((Application)container.getChildren().get(1)).getType() == ApplicationType.PORTLET);
Application<Portlet> pa = (Application<Portlet>)container.getChildren().get(1);
ApplicationState state = pa.getState();
assertEquals("foo/bar", storage_.getId(pa.getState()));
}
}.execute(null);
}
public void testGroupTemplate()
{
new UnitTest()
{
public void execute() throws Exception
{
String groupName = "groupTest";
assertNull(storage_.getPortalConfig(PortalConfig.GROUP_TYPE, groupName));
//
GroupHandler groupHandler = orgService_.getGroupHandler();
Group group = groupHandler.createGroupInstance();
group.setGroupName(groupName);
group.setDescription("this is a group for test");
groupHandler.addChild(null, group, true);
//
PortalConfig cfg = storage_.getPortalConfig(PortalConfig.GROUP_TYPE, "/" + groupName);
assertNotNull(cfg);
Container container = cfg.getPortalLayout();
assertNotNull(container);
assertEquals(4, container.getChildren().size());
assertTrue(container.getChildren().get(2) instanceof PageBody);
assertTrue(((Application)container.getChildren().get(1)).getType() == ApplicationType.PORTLET);
groupHandler.removeGroup(group, true);
}
}.execute(null);
}
public void testCacheUserPortalConfig()
{
new UnitTest()
{
public void execute() throws Exception
{
mgr.clearCache();
DataCache cache = mgr.getDecorator(DataCache.class);
long readCount0 = cache.getReadCount();
userPortalConfigSer_.getUserPortalConfig("classic", null);
long readCount1 = cache.getReadCount();
assertTrue(readCount1 > readCount0);
userPortalConfigSer_.getUserPortalConfig("classic", null);
long readCount2 = cache.getReadCount();
assertEquals(readCount1, readCount2);
}
}.execute(null);
}
public void testCachePage()
{
new UnitTest()
{
public void execute() throws Exception
{
mgr.clearCache();
DataCache cache = mgr.getDecorator(DataCache.class);
long readCount0 = cache.getReadCount();
userPortalConfigSer_.getPage("portal::test::test1");
long readCount1 = cache.getReadCount();
assertTrue(readCount1 > readCount0);
userPortalConfigSer_.getPage("portal::test::test1");
long readCount2 = cache.getReadCount();
assertEquals(readCount1, readCount2);
}
}.execute(null);
}
public void testCachePageNavigation()
{
new UnitTest()
{
public void execute() throws Exception
{
mgr.clearCache();
DataCache cache = mgr.getDecorator(DataCache.class);
long readCount0 = cache.getReadCount();
storage_.getPageNavigation("portal", "test");
long readCount1 = cache.getReadCount();
assertTrue(readCount1 > readCount0);
storage_.getPageNavigation("portal", "test");
long readCount2 = cache.getReadCount();
assertEquals(readCount1, readCount2);
}
}.execute(null);
}
*/
private abstract class UnitTest
{
/** . */
private String userId;
protected final void execute()
{
execute(null);
}
protected final void execute(String userId)
{
Throwable failure = null;
//
begin();
//
ConversationState conversationState = null;
if (userId != null)
{
try
{
conversationState = new ConversationState(authenticator.createIdentity(userId));
}
catch (Exception e)
{
failure = e;
}
}
//
if (failure == null)
{
// Clear cache for test
mgr.clearCache();
//
this.userId = userId;
ConversationState.setCurrent(conversationState);
try
{
doExecute();
}
catch (Exception e)
{
failure = e;
log.error("Test failed", e);
}
finally
{
this.userId = null;
ConversationState.setCurrent(null);
end();
}
}
// Report error as a junit assertion failure
if (failure != null)
{
AssertionFailedError err = new AssertionFailedError();
err.initCause(failure);
throw err;
}
}
public final String getUserId()
{
return userId;
}
protected abstract void doExecute() throws Exception;
}
}