/* * 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.metadata; import java.util.List; import javax.jcr.Node; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; import org.exoplatform.services.cms.BasePath; import org.exoplatform.services.cms.metadata.MetadataService; 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 TestMetadataService extends BaseWCMTestCase { private MetadataService metadataService; private String expectedArticleDialogPath = "/exo:ecm/metadata/exo:article/dialogs/dialog1"; private NodeHierarchyCreator nodeHierarchyCreator; private String baseMetadataPath; private Session sessionDMS; static private final String EXO_ARTICLE = "exo:article"; public void setUp() throws Exception { super.setUp(); metadataService = (MetadataService)container.getComponentInstanceOfType(MetadataService.class); nodeHierarchyCreator = (NodeHierarchyCreator)container.getComponentInstanceOfType(NodeHierarchyCreator.class); baseMetadataPath = nodeHierarchyCreator.getJcrPath(BasePath.METADATA_PATH); applySystemSession(); sessionDMS = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository); } /** * Test MetadataServiceImpl.init() * Check all data initiated from repository in test-metadata-configuration.xml file * @throws Exception */ public void testInit() throws Exception { metadataService.init(); } /** * Test method: MetadataServiceImpl.getMetadataList() * Input: repository String * The name of repository * Expect: Return name of all NodeType in repository * @throws Exception */ public void testGetMetadataList() throws Exception { List<String> metadataTypes = metadataService.getMetadataList(); assertTrue(metadataTypes.contains("dc:elementSet")); } /** * Test method: MetadataServiceImpl.getAllMetadatasNodeType() * Input: repository String * The name of repository * Expect: Return all NodeType in repository with NodeType = exo:metadata * @throws Exception */ public void testGetAllMetadatasNodeType() throws Exception { List<NodeType> metadataTypes = metadataService.getAllMetadatasNodeType(); assertNotNull(metadataTypes.size()); } /** * Test method: MetadataServiceImpl.addMetadata() * Input: nodetype Node name for processing * isDialog true for dialog template * role permission * content content of template * isAddNew false if nodetype exist in repository, true if not * repository repository name * Expect: Add new nodetype and set property EXO_ROLES_PROP, EXO_TEMPLATE_FILE_PROP * @throws Exception */ public void testAddMetadata() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators;*:/platform/users", "This is content", true); Node myMetadata = (Node)sessionDMS.getItem("/exo:ecm/metadata/exo:article/dialogs/dialog1"); assertEquals("This is content", myMetadata.getNode("jcr:content").getProperty("jcr:data").getString()); String roles = metadataService.getMetadataRoles(EXO_ARTICLE, true); assertEquals("*:/platform/administrators; *:/platform/users", roles); } /** * Test method: MetadataServiceImpl.getMetadataTemplate() * Input: name Node name * isDialog true: Get dialog template content * false: Get view template content * repository repository name * Expect: Return "This is content" is content of dialog template node or view template in repository * @throws Exception */ public void testGetMetadataTemplate() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is content", true); assertEquals("This is content", metadataService.getMetadataTemplate(EXO_ARTICLE, true)); } /** * Test method: MetadataServiceImpl.removeMetadata() * Input: nodetype name of node * repository repository name * Expect: Remove metadata * @throws Exception */ public void testRemoveMetadata() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is content", true); assertEquals("This is content", metadataService.getMetadataTemplate(EXO_ARTICLE, true)); metadataService.removeMetadata(EXO_ARTICLE); assertNull(metadataService.getMetadataTemplate(EXO_ARTICLE, true)); } /** * Test method: MetadataServiceImpl.getExternalMetadataType() * Input: repository String * The name of repository * Expect: Remove metadata * @throws Exception */ public void testGetExternalMetadataType() throws Exception { List<String> extenalMetaTypes = metadataService.getExternalMetadataType(); assertEquals(2, extenalMetaTypes.size()); } /** * Test method: MetadataServiceImpl.getMetadataPath() * Input: name Node name * isDialog true: Get dialog template content * false: Get view template content * repository repository name * Expect: Return "/exo:ecm/metadata/exo:article/dialogs/dialog1" is path of dialog template or view tempate * @throws Exception */ public void testGetMetadataPath() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is my content", true); assertEquals(expectedArticleDialogPath, metadataService.getMetadataPath(EXO_ARTICLE, true)); } /** * Test method: MetadataServiceImpl.getMetadataRoles() * Input: name Node name * isDialog true: Get dialog template content * false: Get view template content * repository repository name * Expect: Return "/exo:ecm/metadata/exo:article/dialogs/dialog1" is path of dialog template or view tempate * @throws Exception */ public void testGetMetadataRoles() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is content", true); assertEquals("*:/platform/administrators", metadataService.getMetadataRoles(EXO_ARTICLE, true)); } /** * Test method: MetadataServiceImpl.hasMetadata() * Input: name Node name * repository repository name * Expect: true : Exist this node name * false: Not exist this node name * @throws Exception */ public void testHasMetadata() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is content", true); assertTrue(metadataService.hasMetadata(EXO_ARTICLE)); metadataService.removeMetadata(EXO_ARTICLE); assertFalse(metadataService.hasMetadata(EXO_ARTICLE)); } /** * Test method: MetadataServiceImpl.getMetadata(String metaName) * Input: metaName Name of Metadata * Expect: Return a Metadata node based on its name * @throws Exception */ public void testGetMetadata() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is content", true); Node node = metadataService.getMetadata(EXO_ARTICLE); assertEquals(node.getName(), EXO_ARTICLE); } /** * Test method: MetadataServiceImpl.getMetadataLabel(String metaName) * Input: metaName Name of Metadata * Expect: Return the label of Metadata node based on its name * @throws Exception */ public void testGetMetadataLabel() throws Exception { metadataService.addMetadata(EXO_ARTICLE, true, "*:/platform/administrators", "This is content", true); Node node = metadataService.getMetadata(EXO_ARTICLE); node.setProperty("label", "Article metadata label"); assertEquals("Article metadata label", metadataService.getMetadataLabel(EXO_ARTICLE)); } /** * Clean all metadata test node */ public void tearDown() throws Exception { Node myMetadata = (Node)sessionDMS.getItem(baseMetadataPath); if (myMetadata.hasNode("exo:article")) myMetadata.getNode("exo:article").remove(); sessionDMS.save(); super.tearDown(); } }