package org.exoplatform.portal.mop.page; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; 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.config.DataStorage; import org.exoplatform.portal.config.model.Page; import org.exoplatform.portal.mop.AbstractMOPTest; import org.exoplatform.portal.mop.EventType; import org.exoplatform.portal.mop.SiteKey; 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.gatein.mop.api.workspace.ObjectType; /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</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 = "org/exoplatform/portal/mop/page/configuration.xml") }) public class TestPageServiceWrapper extends AbstractMOPTest { /** . */ private ListenerService listenerService; /** . */ private POMSessionManager mgr; /** . */ protected PageService serviceWrapper; @Override protected void setUp() throws Exception { PortalContainer container = getContainer(); // serviceWrapper = (PageService) container.getComponentInstanceOfType(PageService.class); listenerService = (ListenerService) container.getComponentInstanceOfType(ListenerService.class); mgr = (POMSessionManager) container.getComponentInstanceOfType(POMSessionManager.class); // super.setUp(); } public void testInitialization() { PageContext page = serviceWrapper.loadPage(SiteKey.portal("classic").page("homepage")); assertNotNull(page); PageState state = page.getState(); assertEquals("Home Page", state.getDisplayName()); assertEquals(Arrays.asList("Everyone"), state.getAccessPermissions()); assertEquals("*:/platform/administrators", state.getEditPermission()); assertNull(state.getFactoryId()); assertFalse(state.getShowMaxWindow()); } public void testNotification() { class ListenerImpl extends Listener<PageService, PageKey> { /** . */ private final LinkedList<Event<PageService, PageKey>> events = new LinkedList<Event<PageService, PageKey>>(); @Override public void onEvent(Event<PageService, PageKey> event) throws Exception { events.addLast(event); } } // ListenerImpl createListener = new ListenerImpl(); ListenerImpl updateListener = new ListenerImpl(); ListenerImpl destroyListener = new ListenerImpl(); // listenerService.addListener(EventType.PAGE_CREATED, createListener); listenerService.addListener(EventType.PAGE_UPDATED, updateListener); listenerService.addListener(EventType.PAGE_DESTROYED, destroyListener); // mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "notification").getRootPage() .addChild("pages"); sync(true); // PageKey key = SiteKey.portal("notification").page("home"); // Create PageContext page = new PageContext(key, new PageState("home", "description", true, null, Collections.singletonList("foo"), "bar", Collections.singletonList("moveAppsPermissions"), Collections.singletonList("moveContainersPermissions"))); assertTrue(serviceWrapper.savePage(page)); assertEquals(1, createListener.events.size()); assertEquals(0, updateListener.events.size()); assertEquals(0, destroyListener.events.size()); // Update page.setState(new PageState("home2", "description2", false, null, Collections.singletonList("foo"), "bar", Collections .singletonList("moveAppsPermissions"), Collections.singletonList("moveContainersPermissions"))); assertFalse(serviceWrapper.savePage(page)); assertEquals(1, createListener.events.size()); assertEquals(1, updateListener.events.size()); assertEquals(0, destroyListener.events.size()); // Destroy page.setState(new PageState("home2", "description2", false, null, Collections.singletonList("foo"), "bar", Collections .singletonList("moveAppsPermissions"), Collections.singletonList("moveContainersPermissions"))); assertTrue(serviceWrapper.destroyPage(key)); assertEquals(1, createListener.events.size()); assertEquals(1, updateListener.events.size()); assertEquals(1, destroyListener.events.size()); } public void testDataStorageSynchronization() throws Exception { // Create a page *foo* mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "datastorage_sync").getRootPage() .addChild("pages").addChild("foo"); sync(true); PageKey fooKey = SiteKey.portal("datastorage_sync").page("foo"); // Check the existence of the page and its layout DataStorage storage = (DataStorage) getContainer().getComponentInstanceOfType(DataStorage.class); Page page = storage.getPage(fooKey.format()); assertNotNull(page); assertEquals("foo", page.getName()); assertEquals(Collections.EMPTY_LIST, page.getChildren()); assertNotNull(serviceWrapper.loadPage(fooKey)); // Delete page assertTrue(serviceWrapper.destroyPage(fooKey)); assertNull(storage.getPage(fooKey.format())); assertNull(serviceWrapper.loadPage(fooKey)); sync(true); // Check for subsequence actions assertNull(storage.getPage(fooKey.format())); } }