/*
* 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.HashMap;
import java.util.Locale;
import javax.jcr.Node;
import org.exoplatform.services.ecm.publication.AlreadyInPublicationLifecycleException;
import org.exoplatform.services.ecm.publication.NotInPublicationLifecycleException;
import org.exoplatform.services.ecm.publication.PublicationPlugin;
import org.exoplatform.services.ecm.publication.PublicationService;
import org.exoplatform.services.security.ConversationState;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* exo@exoplatform.com
* Jul 24, 2012
*/
public class TestPublicationService 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 PublicationService publicationService_;
private PublicationPlugin plugin_;
private Node node_;
public void setUp() throws Exception {
super.setUp();
publicationService_ = WCMCoreUtils.getService(PublicationService.class);
applySystemSession();
node_ = session.getRootNode().addNode(TEST);
session.save();
ConversationState c = new ConversationState(new Identity(session.getUserID()));
ConversationState.setCurrent(c);
plugin_ = new DumpPublicationPlugin();
plugin_.setName("Simple");
plugin_.setDescription("Simple");
publicationService_.addPublicationPlugin(plugin_);
}
public void tearDown() throws Exception {
publicationService_.getPublicationPlugins().clear();
node_.remove();
session.save();
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_.getPublicationPlugins().size());
}
/**
* tests get publication plugin:
* add 3 publication plugins, get the total plugins and check if the number is 3
*/
public void testGetPublicationPlugins() throws Exception {
assertEquals(1, publicationService_.getPublicationPlugins().size());
}
/**
* tests enrolle node in lifecycle:
* enrolle node in lifecycle and then check if it is enrolled
*/
public void testEnrollNodeInLifecycle() throws Exception {
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(ENROLLED, node_.getProperty(CURRENT_STATE).getString());
}
/**
* tests if node is enrolled in lifecycle:
* enrolle node in lifecycle and then check if it is enrolled
*/
public void testIsNodeEnrolledInLifecycle() throws Exception {
Node node1 = node_.addNode("test1");
session.save();
Exception e = null;
//-------------------------------------
try {
publicationService_.enrollNodeInLifecycle(node1, plugin_.getLifecycleName());
publicationService_.enrollNodeInLifecycle(node1, plugin_.getLifecycleName());
} catch (AlreadyInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
//-------------------------------------
// Node node2 = node_.addNode("test2");
// node2.addMixin(DumpPublicationPlugin.WCM_PUBLICATION_MIXIN);
// node2.setProperty("publication:lifecycleName", "test");
// node2.setProperty("publication:currentState", "test");
// node2.setProperty("publication:history", new String[]{"test"});
// session.save();
// e = null;
// try {
// publicationService_.enrollNodeInLifecycle(node2, plugin_.getLifecycleName());
// } catch (NoSuchNodeTypeException ex) {
// e = ex;
// }
// assertNotNull(e);
//-------------------------------------
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertTrue(publicationService_.isNodeEnrolledInLifecycle(node_));
}
/**
* tests changing state for a node
*/
public void testChangeState() throws Exception {
HashMap<String, String> context = new HashMap<String, String>();
context.put("visibility", "true");
Node node1 = node_.addNode("test1");
session.save();
Exception e = null;
try {
publicationService_.changeState(node1, PUBLISHED, context);
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
publicationService_.changeState(node_, PUBLISHED, context);
assertEquals(PUBLISHED, node_.getProperty(CURRENT_STATE).getString());
}
/**
* tests getting state image
*/
public void testGetStateImage() throws Exception {
Exception e = null;
try {
publicationService_.getStateImage(node_, new Locale("en"));
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertNotNull(publicationService_.getStateImage(node_, new Locale("en")));
}
/**
* tests getting current state
*/
public void testGetCurrentState() throws Exception {
Exception e = null;
try {
publicationService_.getCurrentState(node_);
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(ENROLLED, publicationService_.getCurrentState(node_));
}
/**
* tests getting user info
*/
public void testGetUserInfo() throws Exception {
Exception e = null;
try {
publicationService_.getUserInfo(node_, new Locale("en"));
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(null, publicationService_.getUserInfo(node_, new Locale("en")));
}
/**
* tests adding log
*/
public void testAddLog() throws Exception {
Exception e = null;
try {
publicationService_.addLog(node_, new String[] {"log1"});
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
publicationService_.addLog(node_, new String[] {"log1"});
publicationService_.addLog(node_, new String[] {"log2"});
assertEquals(3, node_.getProperty(DumpPublicationPlugin.HISTORY).getValues().length);
}
/**
* tests getting logs
*/
public void testGetLog() throws Exception {
Exception e = null;
try {
publicationService_.getLog(node_);
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
publicationService_.addLog(node_, new String[] {"log1"});
publicationService_.addLog(node_, new String[] {"log2"});
assertEquals(3, publicationService_.getLog(node_).length);
}
/**
* tests getting node life cycle name
*/
public void testGetNodeLifecycleName() throws Exception {
Exception e = null;
try {
publicationService_.getNodeLifecycleName(node_);
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(plugin_.getLifecycleName(), publicationService_.getNodeLifecycleName(node_));
}
/**
* tests getting node life cycle Description
*/
public void testGetNodeLifecycleDescription() throws Exception {
Exception e = null;
try {
publicationService_.getNodeLifecycleDesc(node_);
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(plugin_.getDescription(), publicationService_.getNodeLifecycleDesc(node_));
}
/**
* tests unsubscribing life cycle
*/
public void testUnsubscribeLifecycle() throws Exception {
Exception e = null;
try {
publicationService_.unsubcribeLifecycle(node_);
} catch (NotInPublicationLifecycleException ex) {
e = ex;
}
assertNotNull(e);
node_.addMixin("exo:sortable");
session.save();
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
publicationService_.unsubcribeLifecycle(node_);
assertFalse(node_.isNodeType(DumpPublicationPlugin.PUBLICATION));
}
/**
* tests isunsubscribe life cycle
*/
public void testIsUnsubscribeLifecycle() throws Exception {
Exception e = null;
assertTrue(publicationService_.isUnsubcribeLifecycle(node_));
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertFalse(publicationService_.isUnsubcribeLifecycle(node_));
}
/**
* tests get node publish
* @throws Exception
*/
public void testGetNodePublish() throws Exception {
assertNull(publicationService_.getNodePublish(node_, null));
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals(node_, publicationService_.getNodePublish(node_, null));
assertEquals(node_, publicationService_.getNodePublish(node_, plugin_.getLifecycleName()));
}
/**
* tests getLocalizedAndSubstituteLog
*/
public void testGetLocalizedAndSubstituteLog() throws Exception {
assertEquals("Test EN", publicationService_.getLocalizedAndSubstituteLog(
new Locale("en"), "PublicationService.test.test", new String[]{}));
}
/**
* tests getLocalizedAndSubstituteLog
*/
public void testGetLocalizedAndSubstituteLog2() throws Exception {
publicationService_.enrollNodeInLifecycle(node_, plugin_.getLifecycleName());
assertEquals("PublicationService.test.test", publicationService_.getLocalizedAndSubstituteLog(
node_, new Locale("en"), "PublicationService.test.test", new String[]{}));
}
}