/***************************************************************************
* 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.ecm.dms.view;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.AccessDeniedException;
import javax.jcr.Node;
import javax.jcr.Session;
import org.exoplatform.services.cms.BasePath;
import org.exoplatform.services.cms.views.ManageViewService;
import org.exoplatform.services.cms.views.ViewConfig;
import org.exoplatform.services.cms.views.ViewConfig.Tab;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import org.exoplatform.services.wcm.BaseWCMTestCase;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
/**
* Created by The eXo Platform SARL
* Author : Hoang Van Hung
* hunghvit@gmail.com
* Jun 18, 2009
*/
public class TestManageViewService extends BaseWCMTestCase {
ManageViewService manageViewService;
NodeHierarchyCreator nodeHierarchyCreator;
Session sessionDMS;
private static final String VIEW_NODETYPE = "exo:view";
private static final String TAB_NODETYPE = "exo:tab";
protected final static String TEMPLATE_NODETYPE = "exo:template";
private String viewsPath;
private String templatesPathEx;
public void setUp() throws Exception {
super.setUp();
manageViewService = (ManageViewService)container.getComponentInstanceOfType(ManageViewService.class);
nodeHierarchyCreator = (NodeHierarchyCreator)container.getComponentInstanceOfType(NodeHierarchyCreator.class);
viewsPath = nodeHierarchyCreator.getJcrPath(BasePath.CMS_VIEWS_PATH);
templatesPathEx = nodeHierarchyCreator.getJcrPath(BasePath.ECM_EXPLORER_TEMPLATES);
applySystemSession();
sessionDMS = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository);
}
/**
* Check data that is defined from test-taxonomies-configuration.xml file
* Expect: All data is registered
* @throws Exception
*/
private void checkInitData() throws Exception {
List<?> buttons = manageViewService.getButtons();
assertTrue(buttons.size() > 0);
assertTrue(buttons.contains("ManageAuditing"));
assertTrue(buttons.contains("ManagePublications"));
assertTrue(buttons.contains("ManageVersions"));
assertTrue(buttons.contains("ViewNodeType"));
assertTrue(buttons.contains("WatchDocument"));
assertTrue(sessionDMS.itemExists(viewsPath));
assertTrue(sessionDMS.itemExists(templatesPathEx));
assertTrue(sessionDMS.itemExists(viewsPath + "/admin-view"));
assertTrue(sessionDMS.itemExists(viewsPath + "/admin-view/Admin"));
assertTrue(sessionDMS.itemExists(viewsPath + "/admin-view/Info"));
assertTrue(sessionDMS.itemExists(viewsPath + "/admin-view/Actions"));
assertTrue(sessionDMS.itemExists(viewsPath + "/admin-view/Collaboration"));
assertTrue(sessionDMS.itemExists(viewsPath + "/anonymous-view"));
assertTrue(sessionDMS.itemExists(viewsPath + "/anonymous-view/Actions"));
}
/**
* Test ManageViewServiceImpl.init()
* Check all data initiated from repository
* @throws Exception
*/
public void testInit() throws Exception {
manageViewService.init();
checkInitData();
}
/**
* Test ManageViewServiceImpl.addView()
* Input: Add one view with tab to system:
* name = templateTest,
* permission = *:/platform/administrators,
* path to template = /exo:ecm/views/templates/ecm-explorer/ListView
* 2 tab: detail tab with 2 buttons: ViewNodeType,ViewContent; glide tab with one button: ViewNodeType
* Output: Node view is registered with all component and properties defined above
* @throws Exception
*/
public void testAddView() throws Exception {
String name = "templateTest";
String permission = "*:/platform/administrators";
String template = "/ecm-explorer/SystemView.gtmpl";
Tab tab1 = new Tab();
Tab tab2 = new Tab();
tab1.setTabName("detail");
tab1.setButtons("ViewNodeType;ViewContent");
tab2.setTabName("glide");
tab2.setButtons("ViewNodeType");
List<Tab> lstTab = new ArrayList<Tab>();
lstTab.add(tab1);
lstTab.add(tab2);
manageViewService.addView(name, permission, template, lstTab);
Node templateTest = (Node)sessionDMS.getItem(viewsPath + "/" + name);
assertEquals(VIEW_NODETYPE, templateTest.getPrimaryNodeType().getName());
assertEquals(permission, templateTest.getProperty("exo:accessPermissions").getString());
assertEquals(template, templateTest.getProperty("exo:template").getString());
Node templateTestTab1 = templateTest.getNode("detail");
assertEquals(TAB_NODETYPE, templateTestTab1.getPrimaryNodeType().getName());
assertEquals("ViewNodeType;ViewContent", templateTestTab1.getProperty("exo:buttons").getString());
Node templateTestTab2 = templateTest.getNode("glide");
assertEquals(TAB_NODETYPE, templateTestTab2.getPrimaryNodeType().getName());
}
/**
* Test ManageViewServiceImpl.getViewByName()
* Input: name of view: admin-view
* Expect: Return node admin-view with node type = exo:view
* @throws Exception
*/
public void testGetViewByName() throws Exception {
Node adminView = manageViewService.getViewByName("admin-view", WCMCoreUtils.getSystemSessionProvider());
assertEquals(VIEW_NODETYPE, adminView.getPrimaryNodeType().getName());
}
/**
* Test ManageViewServiceImpl.getButtons()
* Get all buttons that are registered
*/
public void testGetButtons() {
//refer to testStart() method
}
/**
* Test ManageViewServiceImpl.removeView()
* Input: Remove one view anonymous-view
* Expect: anonymous-view in viewsPath does not exist
* @throws Exception
*/
public void testRemoveView() throws Exception {
manageViewService.removeView("anonymous-view");
assertFalse(sessionDMS.itemExists(viewsPath + "/anonymous-view"));
}
/**
* Test ManageViewServiceImpl.getAllViews()
* Input: Get all views (after remove anonymous-view in testRemoveView method
* Expect: Return 8 views (view total is 9 views)
* @throws Exception
*/
public void testGetAllViews() throws Exception {
List<ViewConfig> viewList = manageViewService.getAllViews();
assertNotNull(viewList.size());
}
/**
* Test ManageViewServiceImpl.hasView()
* Input: admin-view, admin_view
* Expect: 1. Return true with view name = admin-view in path = /exo:ecm/views/userviews in dms-system
* 2. Return false with view name = admin_view in path = /exo:ecm/views/userviews in dms-system
* @throws Exception
*/
public void testHasView() throws Exception {
assertTrue(manageViewService.hasView("admin-view"));
assertFalse(manageViewService.hasView("admin_view"));
}
/**
* Test ManageViewServiceImpl.getTemplateHome()
* Input: Path alias to template
* Expect: Node in dms-system workspace
* @throws Exception
*/
public void testGetTemplateHome() throws Exception {
Node homeNode = manageViewService.getTemplateHome(BasePath.CMS_VIEWS_PATH, WCMCoreUtils.getSystemSessionProvider());
assertEquals("/exo:ecm/views/userviews", homeNode.getPath());
}
/**
* Test ManageViewServiceImpl.getAllTemplates()
* Input: Get all template in alias path = ecmExplorerTemplates
* Expect: Return 5 view template: SystemView, CoverFlow, IconView, ListView, ThumbnailsView
* @throws Exception
*/
public void testGetAllTemplates() throws Exception {
List<Node> lstNode = manageViewService.getAllTemplates(BasePath.ECM_EXPLORER_TEMPLATES,
WCMCoreUtils.getSystemSessionProvider());
assertEquals(1, lstNode.size());
assertEquals("SystemView", lstNode.get(0).getName());
}
/**
* Test ManageViewServiceImpl.addTemplate()
* Input: Add new template SimpleView, SystemView with data content is defined in variable
* templateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; " +
"import org.exoplatform.web.application.Parameter;" +
"import org.exoplatform.webui.core.UIRightClickPopupMenu;%>" +
"<div id=$componentId></div>"
* Expect: 2 new templates (SimpleView, SystemView) are added with property exo:templateFile is value of variable templateFile
* @throws Exception
*/
public void testAddTemplate() throws Exception {
String templateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; " +
"import org.exoplatform.web.application.Parameter;" +
"import org.exoplatform.webui.core.UIRightClickPopupMenu;%>" +
"<div id=$componentId></div>";
manageViewService.addTemplate("SimpleView", templateFile, templatesPathEx);
Node simpleViewNode = (Node)sessionDMS.getItem(templatesPathEx + "/SimpleView");
assertEquals("nt:file", simpleViewNode.getPrimaryNodeType().getName());
assertEquals(templateFile, simpleViewNode.getNode("jcr:content").getProperty("jcr:data").getString());
manageViewService.removeTemplate(templatesPathEx + "/SimpleView");
}
/**
* Test add template with system session provider
* @throws Exception
*/
public void testAddTemplate2() throws Exception {
String templateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; "
+ "import org.exoplatform.web.application.Parameter;"
+ "import org.exoplatform.webui.core.UIRightClickPopupMenu;%>"
+ "<div id=$componentId></div>";
manageViewService.addTemplate("SimpleView",
templateFile,
templatesPathEx,
WCMCoreUtils.getSystemSessionProvider());
Node simpleViewNode = (Node) sessionDMS.getItem(templatesPathEx + "/SimpleView");
assertEquals("nt:file", simpleViewNode.getPrimaryNodeType().getName());
assertEquals(templateFile, simpleViewNode.getNode("jcr:content")
.getProperty("jcr:data")
.getString());
manageViewService.removeTemplate(templatesPathEx + "/SimpleView",
WCMCoreUtils.getSystemSessionProvider());
}
/**
* Test add template with user session provider
* expected result: AccessDeniedException
* @throws Exception
*/
public void testAddTemplate3() throws Exception {
applyUserSession("marry", "gtn",DMSSYSTEM_WS);
String templateFile = "<%import org.exo platform.ecm.webui.utils.Utils; "
+ "import org.exoplatform.web.application.Parameter;"
+ "import org.exoplatform.webui.core.UIRightClickPopupMenu;%>"
+ "<div id=$componentId></div>";
try {
manageViewService.addTemplate("SimpleView",
templateFile,
templatesPathEx,
sessionProviderService_.getSessionProvider(null));
fail();
} catch (AccessDeniedException ade) {
assertTrue(true);
}
}
/**
* Test ManageViewServiceImpl.removeTemplate()
* Input: Remove template with name = /PathList in path templatesPathCb
* Expect: Node with above path does not exist
* @throws Exception
*/
public void testRemoveTemplate() throws Exception {
String templateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; " +
"import org.exoplatform.web.application.Parameter;" +
"import org.exoplatform.webui.core.UIRightClickPopupMenu;%>" +
"<div id=$componentId></div>";
manageViewService.addTemplate("SimpleView", templateFile, templatesPathEx);
manageViewService.removeTemplate(templatesPathEx + "/SimpleView");
assertFalse(sessionDMS.itemExists(templatesPathEx + "/SimpleView"));
}
/**
* Test ManageViewServiceImpl.removeTemplate() Input: Remove template with
* name = /PathList in path templatesPathCb Expect: Node with above path does
* not exist
*
* @throws Exception
*/
public void testRemoveTemplate2() throws Exception {
String templateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; "
+ "import org.exoplatform.web.application.Parameter;"
+ "import org.exoplatform.webui.core.UIRightClickPopupMenu;%>"
+ "<div id=$componentId></div>";
manageViewService.addTemplate("SimpleView",
templateFile,
templatesPathEx,
WCMCoreUtils.getSystemSessionProvider());
manageViewService.removeTemplate(templatesPathEx + "/SimpleView",
WCMCoreUtils.getSystemSessionProvider());
assertFalse(sessionDMS.itemExists(templatesPathEx + "/SimpleView"));
}
public void testRemoveTemplate3() throws Exception {
applyUserSession("marry", "gtn",DMSSYSTEM_WS);
try {
manageViewService.removeTemplate(templatesPathEx + "/SystemView",
sessionProviderService_.getSessionProvider(null));
fail();
} catch (AccessDeniedException ade) {
assertTrue(true);
}
}
/**
* test updateTemplate() method with system session provider
*
* @throws Exception
*/
public void testUpdateTemplate() throws Exception {
String templateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; "
+ "import org.exoplatform.web.application.Parameter;"
+ "import org.exoplatform.webui.core.UIRightClickPopupMenu;%>"
+ "<div id=$componentId></div>";
String updateTemplateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; "
+ "import org.exoplatform.web.application.Parameter;"
+ "import org.exoplatform.webui.core.UIRightClickPopupMenu;%>"
+ "<div id=$componentId></div>";
manageViewService.addTemplate("SimpleView",
templateFile,
templatesPathEx,
WCMCoreUtils.getSystemSessionProvider());
Node simpleViewNode = (Node)sessionDMS.getItem(templatesPathEx + "/SimpleView");
assertEquals("nt:file", simpleViewNode.getPrimaryNodeType().getName());
assertEquals(templateFile, simpleViewNode.getNode("jcr:content")
.getProperty("jcr:data")
.getString());
manageViewService.updateTemplate("SimpleView",
updateTemplateFile,
templatesPathEx,
WCMCoreUtils.getSystemSessionProvider());
simpleViewNode = (Node)sessionDMS.getItem(templatesPathEx + "/SimpleView");
assertEquals("nt:file", simpleViewNode.getPrimaryNodeType().getName());
assertEquals(updateTemplateFile, simpleViewNode.getNode("jcr:content")
.getProperty("jcr:data")
.getString());
manageViewService.removeTemplate(templatesPathEx + "/SimpleView",
WCMCoreUtils.getSystemSessionProvider());
assertFalse(sessionDMS.itemExists(templatesPathEx + "/SimpleView"));
}
/**
* test updateTemplate() method with user session provider
*
* @throws Exception
*/
public void testUpdateTemplate2() throws Exception {
applyUserSession("marry", "gtn", DMSSYSTEM_WS);
String updateTemplateFile = "<%import org.exoplatform.ecm.webui.utils.Utils; "
+ "import org.exoplatform.web.application.Parameter;"
+ "import org.exoplatform.webui.core.UIRightClickPopupMenu;%>"
+ "<div id=$componentId></div>";
try {
manageViewService.updateTemplate("SystemView",
updateTemplateFile,
templatesPathEx,
sessionProviderService_.getSessionProvider(null));
fail();
} catch (AccessDeniedException ade) {
assertTrue(true);
}
}
/**
* Test ManageViewServiceImpl.addTab()
* Input: Add more tab in icon-view: tab = My View, buttons = Zoom Out; Zoom In
* Expect: One tab with these buttons are added, all tabs and buttons of old views does not change
* @throws Exception
*/
public void testAddTab() throws Exception {
Node nodeHome = (Node)sessionDMS.getItem(viewsPath + "/admin-view");
String buttons = "Zoom Out; Zoom In";
manageViewService.addTab(nodeHome, "My View", buttons);
Node tab = (Node)sessionDMS.getItem(viewsPath + "/admin-view/My View");
assertEquals(TAB_NODETYPE, tab.getPrimaryNodeType().getName());
assertEquals(buttons, tab.getProperty("exo:buttons").getString());
tab = (Node)sessionDMS.getItem(viewsPath + "/admin-view/Actions");
assertEquals(TAB_NODETYPE, tab.getPrimaryNodeType().getName());
assertEquals("addFolder; addDocument; editDocument; upload; addSymLink", tab.getProperty("exo:buttons").getString().trim());
manageViewService.addTab(nodeHome, "Actions", buttons);
tab = (Node)sessionDMS.getItem(viewsPath + "/admin-view/Actions");
assertEquals(TAB_NODETYPE, tab.getPrimaryNodeType().getName());
assertEquals(buttons, tab.getProperty("exo:buttons").getString());
}
/**
* Clean templateTest node
*/
public void tearDown() throws Exception {
if (sessionDMS.itemExists(viewsPath + "/templateTest")) {
Node templateTest = (Node)sessionDMS.getItem(viewsPath + "/templateTest");
templateTest.remove();
sessionDMS.save();
sessionDMS.logout();
}
super.tearDown();
}
}