/* * Copyright (C) 2003-2009 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.wcm.javascript; import java.util.Date; import javax.jcr.Node; import javax.jcr.NodeIterator; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.wcm.BaseWCMTestCase; import org.exoplatform.services.wcm.portal.LivePortalManagerService; /** * The Class TestXJavaScriptService. * * Created by The eXo Platform SAS * Author : Ngoc.Tran * ngoc.tran@exoplatform.com * July 15, 2008 */ public class TestXJavaScriptService extends BaseWCMTestCase { /** The javascript service. */ private XJavascriptService javascriptService; /** The Constant WEB_CONTENT_NODE_NAME. */ private static final String WEB_CONTENT_NODE_NAME = "webContent"; private Node documentNode; private Node sharedJsNode; public void setUp() throws Exception { super.setUp(); javascriptService = getService(XJavascriptService.class); applySystemSession(); documentNode = (Node) session.getItem("/sites content/live/classic/documents"); sharedJsNode = (Node) session.getItem("/sites content/live/classic/js"); } /** * Test get active java script_01. * * When parameter input is null */ public void testGetActiveJavaScript_01() { try { javascriptService.getActiveJavaScript(null); } catch (Exception e) { assertNotNull(e.getStackTrace()); } } /** * Test get active java script_02. * * When node input node type is not exo:webcontent. */ public void testGetActiveJavaScript_02() { try { Node nodeInput = documentNode.addNode(WEB_CONTENT_NODE_NAME); session.save(); String jsData = javascriptService.getActiveJavaScript(nodeInput); assertEquals("", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_03. * * When node input is exo:webcontent and have some child node but does not content mixin type. */ public void testGetActiveJavaScript_03() { try { Node webContent = documentNode.addNode(WEB_CONTENT_NODE_NAME, "exo:webContent"); webContent.setProperty("exo:title", WEB_CONTENT_NODE_NAME); webContent.addNode("jsFolder", "exo:jsFolder"); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_04. * * When node input is exo:webcontent and have some child node but have mixin type does not exo:jsFile. */ public void testGetActiveJavaScript_04() { try { Node webContent = documentNode.addNode(WEB_CONTENT_NODE_NAME, "exo:webContent"); webContent.setProperty("exo:title", WEB_CONTENT_NODE_NAME); Node jsFolder = webContent.addNode("jsFolder", "exo:jsFolder"); Node jsNode = jsFolder.addNode("default.js", "nt:file"); jsNode.setProperty("exo:active", false); Node jsContent = jsNode.addNode("jcr:content", "nt:resource"); jsContent.setProperty("jcr:encoding", "UTF-8"); jsContent.setProperty("jcr:mimeType", "text/javascript"); jsContent.setProperty("jcr:lastModified", new Date().getTime()); jsContent.setProperty("jcr:data", "This is the default.js file."); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_05. * * Child node have properties normal and value of exo:active is: * - "exo:active": false */ public void testGetActiveJavaScript_05() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); jsNode.setProperty("exo:active", false); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_06. * * Child node have properties normal and value of jcr:mimeType is: * - "jcr:mimeType": text/html */ public void testGetActiveJavaScript_06() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); Node jsContent = jsNode.getNode("jcr:content"); jsContent.setProperty("jcr:mimeType", "text/html"); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("This is the default.js file.", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_07. * * Child node have properties normal and value of jcr:mimeType is: * - "jcr:mimeType": text/javascript */ public void testGetActiveJavaScript_07() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); Node jsContent = jsNode.getNode("jcr:content"); jsContent.setProperty("jcr:mimeType", "text/javascript"); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("This is the default.js file.", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_08. * * Child node have properties normal and value of jcr:mimeType is: * - "jcr:mimeType": application/x-javascript */ public void testGetActiveJavaScript_08() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); Node jsContent = jsNode.getNode("jcr:content"); jsContent.setProperty("jcr:mimeType", "application/x-javascript"); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("This is the default.js file.", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_09. * * Child node have properties normal and value of jcr:mimeType is: * - "jcr:mimeType": text/ecmascript */ public void testGetActiveJavaScript_09() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); Node jsContent = jsNode.getNode("jcr:content"); jsContent.setProperty("jcr:mimeType", "text/ecmascript"); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("This is the default.js file.", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_10. * * Child node have properties normal and value of jcr:data is "" */ public void testGetActiveJavaScript_10() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); Node jsContent = jsNode.getNode("jcr:content"); jsContent.setProperty("jcr:data", ""); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_11. * * Child node have properties normal and value of jcr:data is: * - "jcr:data": This is the default.js file. */ public void testGetActiveJavaScript_11() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); Node jsNode = webContent.getNode("js").getNode("default.js"); Node jsContent = jsNode.getNode("jcr:content"); jsContent.setProperty("jcr:data", "This is the default.js file."); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("This is the default.js file.", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_12. * * Child node have properties normal and value of jcr:mimeType is: * - "jcr:data": alert('Test method getActiveJavaScript()');. */ public void testGetActiveJavaScript_12() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, "alert('Test method getActiveJavaScript()');"); session.save(); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("alert('Test method getActiveJavaScript()');", jsData); } catch(Exception e) { fail(); } } /** * Test get active java script_13. * * In case normal */ public void testGetActiveJavaScript_13() { try { Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); String jsData = javascriptService.getActiveJavaScript(webContent); assertEquals("This is the default.js file.", jsData); } catch (Exception e) { fail(); } } /** * Test update portal js on modify_01. * When node input is null. */ public void testUpdatePortalJSOnModify_01() { try { Node portalNode = findPortalNode(sessionProvider, documentNode); javascriptService.updatePortalJSOnModify(portalNode, null); session.save(); } catch(Exception e) { fail(); } } /** * Test update portal js on modify_02. * When Node input does not jsFile. */ public void testUpdatePortalJSOnModify_02() { try { Node portalNode = findPortalNode(sessionProvider, documentNode); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, null); createSharedJsNode(sharedJsNode); Node jsFolder = webContent.getNode("js"); javascriptService.updatePortalJSOnModify(portalNode, jsFolder); } catch(Exception e) { assertNotNull(e.getStackTrace()); } } /** * Test update portal js on modify_03. * When node input have jcr:data is "". */ public void testUpdatePortalJSOnModify_03() { try { Node portalNode = findPortalNode(sessionProvider, documentNode); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, ""); createSharedJsNode(sharedJsNode); Node jsNode = webContent.getNode("js").getNode("default.js"); javascriptService.updatePortalJSOnModify(portalNode, jsNode); session.save(); } catch(Exception e) { fail(); } } /** * Test update portal js on modify_04. * When node input have jcr:data is "When perform testUpdatePortalJSOnModify...". *//* public void testUpdatePortalJSOnModify_04() { try { JavascriptConfigService configService = null; Node portalNode = findPortalNode(sessionProvider, documentNode); createSharedJsNode(sharedJsNode); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, "When perform testUpdatePortalJSOnModify..."); Node jsNode = webContent.getNode("js").getNode("default.js"); javascriptService.updatePortalJSOnModify(portalNode, jsNode); session.save(); configService = getService(JavascriptConfigService.class); String jsData = new String(configService.getMergedJavascript()); assertEquals("\nWhen perform testUpdatePortalJSOnModify...", jsData); } catch(Exception e) { fail(); } } *//** * Test update portal js on modify_05. * When node input have jcr:data is "alert('testUpdatePortalJSOnModify...');". *//* public void testUpdatePortalJSOnModify_05() { try { JavascriptConfigService configService = null; Node portalNode = findPortalNode(sessionProvider, documentNode); createSharedJsNode(sharedJsNode); Node js = sharedJsNode.getNode("sharedJsFile.js"); js.setProperty("exo:priority", 2); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, "alert('testUpdatePortalJSOnModify...');"); Node jsNode = webContent.getNode("js").getNode("default.js"); javascriptService.updatePortalJSOnModify(portalNode, jsNode); session.save(); configService = getService(JavascriptConfigService.class); String jsData = new String(configService.getMergedJavascript()); assertEquals("\nalert('testUpdatePortalJSOnModify...');", jsData); } catch(Exception e) { fail(); } } public void testUpdatePortalJSOnModify_06() { try { JavascriptConfigService configService = null; WCMConfigurationService configurationService = WCMCoreUtils.getService(WCMConfigurationService.class);; LivePortalManagerService livePortalManagerService = getService(LivePortalManagerService.class); String sharedPortalName = configurationService.getSharedPortalName(REPO_NAME); Node portal = livePortalManagerService.getLivePortal(sessionProvider, sharedPortalName); Node sharedNode = (Node) session.getItem("/sites content/live/" + sharedPortalName + "/js"); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, "alert('testUpdatePortalJSOnModify...');"); Node jsNode = webContent.getNode("js").getNode("default.js"); createSharedJsNode(sharedNode); Node js = sharedNode.getNode("sharedJsFile.js"); js.setProperty("exo:priority", 1); javascriptService.updatePortalJSOnModify(portal, jsNode); session.save(); String jsData = ""; configService = getService(JavascriptConfigService.class); jsData = new String(configService.getMergedJavascript()); assertEquals("\nThis is the default.js file.alert('testUpdatePortalJSOnModify...');", jsData); session.save(); } catch(Exception e) { fail(); } }*/ /** * Test update portal js on remove_01. * When node input is null. */ public void testUpdatePortalJSOnRemove_01() { try { Node portalNode = findPortalNode(sessionProvider, documentNode); createSharedJsNode(sharedJsNode); javascriptService.updatePortalJSOnRemove(portalNode, null); } catch(Exception e) { assertNotNull(e.getStackTrace()); } } /** * Test update portal js on remove_03. * When Node input does not jsFile. */ public void testUpdatePortalJSOnRemove_03() { try { Node portalNode = findPortalNode(sessionProvider, documentNode); createSharedJsNode(sharedJsNode); javascriptService.updatePortalJSOnRemove(portalNode, sharedJsNode); } catch(Exception e) { assertNotNull(e); } } /** * Test update portal js on remove_04. * When node input have jcr:data is "". *//* public void testUpdatePortalJSOnRemove_04() { try { JavascriptConfigService configService = null; Node portalNode = findPortalNode(sessionProvider, documentNode); createSharedJsNode(sharedJsNode); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, ""); Node jsNode = webContent.getNode("js").getNode("default.js"); configService = getService(JavascriptConfigService.class); String jsData = ""; javascriptService.updatePortalJSOnRemove(portalNode, jsNode); session.save(); jsData = new String(configService.getMergedJavascript()); assertEquals("\nThis is the default.js file.", jsData); } catch(Exception e) { fail(); } } *//** * Test update portal js on remove_05. * When node input have jcr:data is "alert('testUpdatePortalJSOnModify...');". *//* public void testUpdatePortalJSOnRemove_05() { try { JavascriptConfigService configService = null; Node portalNode = findPortalNode(sessionProvider, documentNode); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, "alert('testUpdatePortalJSOnModify...');"); Node jsNode = webContent.getNode("js").getNode("default.js"); createSharedJsNode(sharedJsNode); Node js = sharedJsNode.getNode("sharedJsFile.js"); js.setProperty("exo:priority", 1); session.save(); String jsData = ""; configService = getService(JavascriptConfigService.class); javascriptService.updatePortalJSOnRemove(portalNode, jsNode); session.save(); jsData = new String(configService.getMergedJavascript()); assertEquals("\nThis is the default.js file.This is the default.js file.", jsData); } catch(Exception e) { fail(); } } *//** * Test update portal js on remove_06. * When portal node is shared portal. *//* public void testUpdatePortalJSOnRemove_06() { try { JavascriptConfigService configService = null; WCMConfigurationService configurationService = WCMCoreUtils.getService(WCMConfigurationService.class);; LivePortalManagerService livePortalManagerService = getService(LivePortalManagerService.class); String sharedPortalName = configurationService.getSharedPortalName(REPO_NAME); Node portal = livePortalManagerService.getLivePortal(sessionProvider, sharedPortalName); Node sharedNode = (Node) session.getItem("/sites content/live/" + sharedPortalName + "/js"); Node webContent = createWebcontentNode(documentNode, WEB_CONTENT_NODE_NAME, null, null, "alert('testUpdatePortalJSOnModify...');"); Node jsNode = webContent.getNode("js").getNode("default.js"); createSharedJsNode(sharedNode); String jsData = ""; configService = getService(JavascriptConfigService.class); javascriptService.updatePortalJSOnRemove(portal, jsNode); session.save(); jsData = new String(configService.getMergedJavascript()); assertEquals("\nThis is the default.js file.alert('testUpdatePortalJSOnModify...');", jsData); session.save(); } catch(Exception e) { fail(); } }*/ private Node findPortalNode(SessionProvider sessionProvider, Node child) throws Exception{ LivePortalManagerService livePortalManagerService = getService(LivePortalManagerService.class); String portalName = null; for(String portalPath: livePortalManagerService.getLivePortalsPath()) { if(child.getPath().startsWith(portalPath)) { portalName = livePortalManagerService.getPortalNameByPath(portalPath); break; } } if(portalName == null) return null; return livePortalManagerService.getLivePortal(sessionProvider, portalName); } private void createSharedJsNode(Node parentNode) throws Exception { Node jsNode; jsNode = parentNode.addNode("sharedJsFile.js", "nt:file"); if (!jsNode.isNodeType("exo:jsFile")) { jsNode.addMixin("exo:jsFile"); } jsNode.setProperty("exo:active", true); jsNode.setProperty("exo:priority", 2); jsNode.setProperty("exo:sharedJS", true); Node jsContent; try { jsContent = jsNode.getNode("jcr:content"); } catch (Exception ex) { jsContent = jsNode.addNode("jcr:content", "nt:resource"); } jsContent.setProperty("jcr:encoding", "UTF-8"); jsContent.setProperty("jcr:mimeType", "text/javascript"); jsContent.setProperty("jcr:lastModified", new Date().getTime()); String jsData = "This is the default.js file."; jsContent.setProperty("jcr:data", jsData); session.save(); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ public void tearDown() throws Exception { Node sharedPortalNode = (Node) session.getItem("/sites content/live/shared/js"); NodeIterator nodeIterator = documentNode.getNodes(); NodeIterator sharedNode = sharedJsNode.getNodes(); NodeIterator sharedIterator = sharedPortalNode.getNodes(); while(nodeIterator.hasNext()) { nodeIterator.nextNode().remove(); } while(sharedNode.hasNext()) { sharedNode.nextNode().remove(); } while(sharedIterator.hasNext()) { sharedIterator.nextNode().remove(); } session.save(); super.tearDown(); } }