/* * JBoss, Home of Professional Open Source. * Copyright 2012, Red Hat, Inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * 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.gatein.api.navigation; import static org.junit.Assert.assertNotNull; import java.util.Arrays; import java.util.HashSet; import java.util.Locale; import junit.framework.AssertionFailedError; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.component.test.ConfigurationUnit; import org.exoplatform.component.test.ConfiguredBy; import org.exoplatform.component.test.ContainerScope; import org.exoplatform.component.test.KernelLifeCycle; import org.exoplatform.container.PortalContainer; import org.exoplatform.container.component.RequestLifeCycle; import org.exoplatform.portal.config.DataStorage; import org.exoplatform.portal.config.Query; import org.exoplatform.portal.config.model.PortalConfig; import org.exoplatform.portal.mop.SiteKey; import org.exoplatform.portal.mop.SiteType; import org.exoplatform.portal.mop.navigation.NavigationContext; import org.exoplatform.portal.mop.navigation.NavigationService; import org.exoplatform.portal.mop.navigation.NavigationState; import org.exoplatform.portal.mop.page.PageContext; import org.exoplatform.portal.mop.page.PageKey; import org.exoplatform.portal.mop.page.PageService; import org.exoplatform.portal.mop.page.PageState; import org.exoplatform.services.security.Identity; import org.exoplatform.services.security.IdentityRegistry; import org.exoplatform.services.security.MembershipEntry; import org.gatein.api.BasicPortalRequest; import org.gatein.api.Portal; import org.gatein.api.Util; import org.gatein.api.common.AttributesTest; import org.gatein.api.page.PageId; import org.gatein.api.security.Permission; import org.gatein.api.security.User; import org.gatein.api.site.SiteId; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; /** * Runs tests from {@link AttributesTest} on {@link ApiNodeAttributes}. * * @author <a href="mailto:ppalaga@redhat.com">Peter Palaga</a> * */ @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 = "conf/exo.portal.component.resources-configuration.xml"), @ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.web.oauth-configuration.xml"), @ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.api-configuration.xml") }) public class ApiNodeAttributesTest extends AttributesTest { @ClassRule public static KernelLifeCycle kernelLifeCycle = new KernelLifeCycle(); protected PortalContainer container; protected Portal portal; protected SiteId defaultSiteId; protected IdentityRegistry identityRegistry; @After public void after() throws Exception { BasicPortalRequest.setInstance(null); try { cleanup(); } finally { RequestLifeCycle.end(); } } @Before public void before() { defaultSiteId = new SiteId("classic"); container = kernelLifeCycle.getContainer(); portal = (Portal) container.getComponentInstanceOfType(Portal.class); assertNotNull("Portal component not found in container", portal); identityRegistry = (IdentityRegistry) container.getComponentInstanceOfType(IdentityRegistry.class); RequestLifeCycle.begin(container); HashSet<MembershipEntry> memberships = new HashSet<MembershipEntry>(); memberships.add(new MembershipEntry("/platform/users", "member")); Identity john = new Identity("john", memberships); identityRegistry.register(john); BasicPortalRequest.setInstance(new BasicPortalRequest(new User("john"), defaultSiteId, NodePath.root(), Locale.ENGLISH, portal, new BasicPortalRequest.BasicURIResolver("/portal"))); createSite(defaultSiteId); Navigation navigation = portal.getNavigation(defaultSiteId); Node root = navigation.getRootNode(Nodes.visitChildren()); this.attributes = root.getAttributes(); } protected void createSite(SiteId siteId, String... pages) { createSite(siteId, true, pages); } protected void createSite(SiteId siteId, boolean createNav, String... pages) { try { DataStorage dataStorage = (DataStorage) container.getComponentInstanceOfType(DataStorage.class); NavigationService navService = (NavigationService) container.getComponentInstanceOfType(NavigationService.class); SiteKey siteKey = Util.from(siteId); PortalConfig config = new PortalConfig(siteKey.getTypeName(), siteKey.getName()); config.setAccessPermissions(Util.from(Permission.everyone())); dataStorage.create(config); if (createNav) { NavigationContext nav = new NavigationContext(new SiteKey(siteKey.getTypeName(), siteKey.getName()), new NavigationState(null)); navService.saveNavigation(nav); } createPage(siteId, pages); } catch (Exception e) { AssertionFailedError afe = new AssertionFailedError(); afe.initCause(e); throw afe; } } protected void createPage(SiteId siteId, String... pages) { PageService pageService = (PageService) container.getComponentInstanceOfType(PageService.class); SiteKey siteKey = Util.from(siteId); for (String page : pages) { pageService.savePage(new PageContext(new PageKey(siteKey, page), new PageState("displayName", "description", false, null, Arrays.asList("Everyone"), "Everyone", Arrays.asList("Everyone"), Arrays.asList("Everyone")))); } } protected void setPermission(PageId pageId, String editPermission, String... accessPermissions) { PageKey pageKey = Util.from(pageId); PageService pageService = (PageService) container.getComponentInstanceOfType(PageService.class); PageContext p = pageService.loadPage(pageKey); p.setState(p.getState().builder().editPermission(editPermission).accessPermissions(accessPermissions).build()); pageService.savePage(p); } private void cleanup() throws Exception { DataStorage dataStorage = (DataStorage) container.getComponentInstanceOfType(DataStorage.class); SiteType[] types = new SiteType[] { SiteType.PORTAL, SiteType.GROUP, SiteType.USER }; for (SiteType type : types) { Query<PortalConfig> q = new Query<PortalConfig>(type.getName(), null, PortalConfig.class); ListAccess<PortalConfig> la = dataStorage.find2(q); for (PortalConfig portalConfig : la.load(0, la.getSize())) { dataStorage.remove(portalConfig); } } } }