/*
* Copyright (C) 2003-2008 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.ecm.dms.scripts;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.Session;
import org.exoplatform.services.cms.BasePath;
import org.exoplatform.services.cms.scripts.ScriptService;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import org.exoplatform.services.wcm.BaseWCMTestCase;
/**
* Created by The eXo Platform SARL
* June 09, 2009
*/
public class TestScriptService extends BaseWCMTestCase {
private ScriptService scriptService;
private String expectedECMScriptHomePath = "/exo:ecm/scripts/ecm-explorer";
private String expectedBaseScriptPath = "/exo:ecm/scripts";
private NodeHierarchyCreator nodeHierarchyCreator;
private String cmsScriptsPath;
private Session sessionDMS;
public void setUp() throws Exception {
super.setUp();
scriptService = (ScriptService)container.getComponentInstanceOfType(ScriptService.class);
nodeHierarchyCreator = (NodeHierarchyCreator)container.getComponentInstanceOfType(NodeHierarchyCreator.class);
cmsScriptsPath = nodeHierarchyCreator.getJcrPath(BasePath.CMS_SCRIPTS_PATH);
applySystemSession();
sessionDMS = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository);
}
/**
* Test ScriptServiceImpl.init()
* Input: repository String
* The name of repository
* Expect: Return all data initiated from repository in test-scripts-configuration.xml file
* @throws Exception
*/
public void testInitRepo() throws Exception {
scriptService.initRepo();
assertTrue(sessionDMS.itemExists(cmsScriptsPath));
assertTrue(sessionDMS.itemExists(cmsScriptsPath + "/ecm-explorer"));
}
/**
* Test method: ScriptServiceImpl.getECMScriptHome()
* Input: repository String
* The name of repository
* provider SessionProvider
* Expect: Return "/exo:ecm/scripts/ecm-explorer" is path of node for ECM Explorer Scripts
* @throws Exception
*/
public void testGetECMScriptHome() throws Exception {
assertNotNull(scriptService.getECMScriptHome(sessionProviderService_.getSystemSessionProvider(null)));
assertEquals(expectedECMScriptHomePath, scriptService.getECMScriptHome(
sessionProviderService_.getSystemSessionProvider(null)).getPath());
}
/**
* Test method: ScriptServiceImpl.getECMActionScripts()
* Input: repository String
* The name of repository
* provider SessionProvider
* Expect: Return All node for ECM Action Scripts
* @throws Exception
*/
public void testGetECMActionScripts() throws Exception {
List<Node> listECMScripts = scriptService.getECMActionScripts(sessionProviderService_.getSystemSessionProvider(null));
assertTrue(listECMScripts.size() >0);
List<String> scriptPathList = new ArrayList<String>();
for (Node ECMScript : listECMScripts) {
scriptPathList.add(ECMScript.getPath());
}
assertTrue(scriptPathList.contains("/exo:ecm/scripts/ecm-explorer/action/AddTaxonomyActionScript.groovy"));
}
/**
* Test method: ScriptServiceImpl.getECMInterceptorScripts()
* Input: repository String
* The name of repository
* provider SessionProvider
* Expect: Return All node for ECM Interceptor Scripts
* @throws Exception
*/
public void testGetECMInterceptorScripts() throws Exception {
List<Node> listECMInterceptorcripts = scriptService.getECMInterceptorScripts(
sessionProviderService_.getSystemSessionProvider(null));
assertTrue(listECMInterceptorcripts.size() >0);
List<String> scriptPathList = new ArrayList<String>();
for (Node interceptorScript : listECMInterceptorcripts) {
scriptPathList.add(interceptorScript.getPath());
}
assertTrue(scriptPathList.contains("/exo:ecm/scripts/ecm-explorer/interceptor/PreNodeSaveInterceptor.groovy"));
}
/**
* Test method: ScriptServiceImpl.getECMWidgetScripts()
* Input: repository String
* The name of repository
* provider SessionProvider
* Expect: Return All node for ECM Widget Scripts
* @throws Exception
*/
public void testGetECMWidgetScripts() throws Exception {
List<Node> listECMWidgetScripts = scriptService.getECMWidgetScripts(sessionProviderService_.getSystemSessionProvider(null));
assertTrue(listECMWidgetScripts.size() >0);
List<String> scriptPathList = new ArrayList<String>();
for (Node widgetScript : listECMWidgetScripts) {
scriptPathList.add(widgetScript.getPath());
}
assertTrue(scriptPathList.contains("/exo:ecm/scripts/ecm-explorer/widget/FillSelectBoxWithCalendarCategories.groovy"));
}
/**
* Test method: ScriptServiceImpl.getScript()
* Input: scriptPath String
* The path of script
* repository String
* The name of repository
* Expect: Return script
* @throws Exception
*/
public void testGetScript() throws Exception {
assertNotNull(scriptService.getScript("ecm-explorer/action/AddTaxonomyActionScript.groovy"));
try {
scriptService.getScript("ecm-explorer/AddTaxonomyActionScript1.groovy");
fail();
} catch (Exception ex) {
}
}
/**
* Test method: ScriptServiceImpl.getBaseScriptPath()
* Expect: Return "/exo:ecm/scripts" is base path of script
* @throws Exception
*/
public void testGetBaseScriptPath() throws Exception {
assertEquals(expectedBaseScriptPath, scriptService.getBaseScriptPath());
}
/**
* Test method: ScriptServiceImpl.addScript()
* Input: name String
* The name of script
* text String
* repository String
* The name of repository
* provider SessionProvider
* Expect: Insert a new script
* @throws Exception
*/
public void testAddScript() throws Exception {
scriptService.addScript("Hello Name", "Hello Text", sessionProviderService_.getSystemSessionProvider(null));
Node hello = (Node)sessionDMS.getItem("/exo:ecm/scripts/Hello Name");
assertNotNull(hello);
assertEquals("Hello Text", hello.getNode("jcr:content").getProperty("jcr:data").getString());
}
/**
* Test method: ScriptServiceImpl.getScriptNode()
* Input: scriptName String
* The name of script
* repository String
* The name of repository
* provider SessionProvider
* Expect: Return script node
* @throws Exception
*/
public void testGetScriptNode() throws Exception {
scriptService.addScript("My script 2", "This is my script as text 2", sessionProviderService_.getSystemSessionProvider(null));
Node scriptNode = scriptService.getScriptNode("My script 2", sessionProviderService_.getSystemSessionProvider(null));
assertEquals("My script 2", scriptNode.getName());
assertEquals("This is my script as text 2", scriptNode.getNode("jcr:content").getProperty("jcr:data").getString());
}
/**
* Test method: ScriptServiceImpl.removeScript()
* Input: scriptPath String
* The path of script
* repository String
* The name of repository
* provider SessionProvider
* Expect: remove the script
* @throws Exception
*/
public void testRemoveScript() throws Exception {
scriptService.addScript("Hello Name", "Hello Text", sessionProviderService_.getSystemSessionProvider(null));
Node hello = scriptService.getScriptNode("Hello Name", sessionProviderService_.getSystemSessionProvider(null));
assertNotNull(hello);
assertEquals("Hello Text", hello.getNode("jcr:content").getProperty("jcr:data").getString());
scriptService.removeScript("Hello Name", sessionProviderService_.getSystemSessionProvider(null));
assertNull(scriptService.getScriptNode("Hello Name", sessionProviderService_.getSystemSessionProvider(null)));
}
/**
* Clean all scripts for testing
*/
public void tearDown() throws Exception {
Node rootScripts = (Node)sessionDMS.getItem(cmsScriptsPath);
String[] paths = new String[] {"My script", "My script 2", "Hello Name"};
for (String path : paths) {
if (rootScripts.hasNode(path)) {
rootScripts.getNode(path).remove();
}
}
sessionDMS.save();
super.tearDown();
}
}