/*
* Copyright (C) 2003-2012 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.wcm.publication;
import java.util.LinkedList;
import javax.jcr.Node;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.container.component.RequestLifeCycle;
import org.exoplatform.portal.config.DataStorage;
import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.portal.mop.EventType;
import org.exoplatform.portal.mop.navigation.NavigationService;
import org.exoplatform.portal.pom.config.POMSessionManager;
import org.exoplatform.portal.pom.spi.portlet.Portlet;
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.ConversationState;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.wcm.core.NodetypeConstant;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* exo@exoplatform.com
* Jul 26, 2012
*/
public class TestWCMPublicationService extends BasePublicationTestCase {
private static final String CURRENT_STATE = "publication:currentState";
private static final String TEST = "test";
private static final String ENROLLED = "enrolled";
private static final String PUBLISHED = "published";
private WCMPublicationService publicationService_;
private WebpagePublicationPlugin plugin_;
private Node node_;
private PortalConfig portal_;
private Page page_;
private Portlet portlet_;
//-----------------
/** . */
private final String testPage = "portal::classic::testPage";
/** . */
private final String testPortletPreferences = "portal#classic:/web/BannerPortlet/testPortletPreferences";
/** . */
private DataStorage storage_;
/** . */
private NavigationService navService;
/** . */
private POMSessionManager mgr;
/** . */
private LinkedList<Event> events;
/** . */
private ListenerService listenerService;
/** . */
private OrganizationService org;
public void setUp() throws Exception {
super.setUp();
publicationService_ = WCMCoreUtils.getService(WCMPublicationService.class);
RequestLifeCycle.begin(PortalContainer.getInstance());
applySystemSession();
node_ = session.getRootNode().addNode(TEST);
node_.addMixin(NodetypeConstant.MIX_REFERENCEABLE);
session.save();
ConversationState c = new ConversationState(new Identity(session.getUserID()));
ConversationState.setCurrent(c);
plugin_ = new DumpPublicationPlugin();
plugin_.setName("Simple publication");
plugin_.setDescription("Simple publication");
publicationService_.addPublicationPlugin(plugin_);
//--------------------------------
Listener listener = new Listener()
{
@Override
public void onEvent(Event event) throws Exception
{
events.add(event);
}
};
PortalContainer container = PortalContainer.getInstance();
storage_ = (DataStorage)container.getComponentInstanceOfType(DataStorage.class);
mgr = (POMSessionManager)container.getComponentInstanceOfType(POMSessionManager.class);
navService = (NavigationService)container.getComponentInstanceOfType(NavigationService.class);
events = new LinkedList<Event>();
listenerService = (ListenerService)container.getComponentInstanceOfType(ListenerService.class);
org = WCMCoreUtils.getService(OrganizationService.class);
listenerService.addListener(DataStorage.PAGE_CREATED, listener);
listenerService.addListener(DataStorage.PAGE_REMOVED, listener);
listenerService.addListener(DataStorage.PAGE_UPDATED, listener);
listenerService.addListener(EventType
.NAVIGATION_CREATED, listener);
listenerService.addListener(EventType.NAVIGATION_DESTROYED, listener);
listenerService.addListener(EventType.NAVIGATION_UPDATED, listener);
listenerService.addListener(DataStorage.PORTAL_CONFIG_CREATED, listener);
listenerService.addListener(DataStorage.PORTAL_CONFIG_UPDATED, listener);
listenerService.addListener(DataStorage.PORTAL_CONFIG_REMOVED, listener);
}
public void tearDown() throws Exception {
publicationService_.getWebpagePublicationPlugins().clear();
node_.remove();
session.save();
RequestLifeCycle.end();
super.tearDown();
}
/**
* tests add publication plugin:
* add 1 publication plugins and check if the total plugins number is 1
*/
public void testAddPublicationPlugin() throws Exception {
assertEquals(1, publicationService_.getWebpagePublicationPlugins().size());
}
/**
* tests get publication plugin:
* add 3 publication plugins, get the total plugins and check if the number is 3
*/
public void testGetWebpagePublicationPlugins() throws Exception {
assertEquals(1, publicationService_.getWebpagePublicationPlugins().size());
}
/**
* tests enrolling node in life cycle 1
*/
public void testEnrollNodeInLifecycle1() throws Exception {
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(ENROLLED, node_.getProperty(CURRENT_STATE).getString());
}
/**
* tests enrolling node in life cycle 2
*/
public void testEnrollNodeInLifecycle2() throws Exception {
Exception e = null;
try {
publicationService_.enrollNodeInLifecycle(node_, "classic", node_.getSession().getUserID());
} catch (Exception ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, "test", node_.getSession().getUserID());
assertEquals(ENROLLED, node_.getProperty(CURRENT_STATE).getString());
}
/**
* tests if node is enrolled in lifecycle
*/
public void testIsEnrolledWCMInLifecycle() throws Exception {
assertFalse(publicationService_.isEnrolledInWCMLifecycle(node_));
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertTrue(publicationService_.isEnrolledInWCMLifecycle(node_));
}
/**
* tests getting content state
*/
public void testGetContentState() throws Exception {
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(ENROLLED, publicationService_.getContentState(node_));
}
/**
* tests unsubscribing node
*/
public void testUnsubscribeLifecycle() throws Exception {
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
publicationService_.unsubcribeLifecycle(node_);
assertFalse(publicationService_.isEnrolledInWCMLifecycle(node_));
}
/**
* tests update life cycle on change content 1
*/
public void testUpdateLifecyleOnChangeContent1() throws Exception {
publicationService_.updateLifecyleOnChangeContent(
node_, "test", node_.getSession().getUserID(), PUBLISHED);
assertEquals(PUBLISHED, publicationService_.getContentState(node_));
publicationService_.updateLifecyleOnChangeContent(
node_, "test", node_.getSession().getUserID(), "temp");
assertEquals(DumpPublicationPlugin.DEFAULT_STATE, publicationService_.getContentState(node_));
}
/**
* tests update life cycle on change content 2
*/
public void testUpdateLifecyleOnChangeContent2() throws Exception {
publicationService_.updateLifecyleOnChangeContent(
node_, "test", node_.getSession().getUserID());
assertEquals(DumpPublicationPlugin.DEFAULT_STATE, publicationService_.getContentState(node_));
}
}