/* * 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.relation; import java.util.ArrayList; import java.util.List; import javax.jcr.Node; import javax.jcr.Value; import org.exoplatform.services.cms.relations.RelationsService; import org.exoplatform.services.wcm.BaseWCMTestCase; /** * Created by The eXo Platform SARL * June 09, 2009 */ public class TestRelationsService extends BaseWCMTestCase { private RelationsService relationsService; private static final String RELATION_MIXIN = "exo:relationable"; private static final String RELATION_PROP = "exo:relation"; public void setUp() throws Exception { super.setUp(); relationsService = (RelationsService) container.getComponentInstanceOfType(RelationsService.class); applySystemSession(); } /** * Test method: RelationsServiceImpl.init() * Input: repository The name of repository * Expect: Initial the root of relation node and its sub node * @throws Exception */ public void testInit() throws Exception { } /** * Test method: RelationsServiceImpl.addRelation() * Input: node Specify the node wants to remove a relation * relationPath The path of relation * repository The name of repository * Expect: Removes the relation to the given node * @throws Exception */ public void testAddRelation() throws Exception { Node root = session.getRootNode(); Node aaa = root.addNode("AAA"); Node bbb = root.addNode("BBB"); session.save(); relationsService.addRelation(aaa, bbb.getPath(), COLLABORATION_WS); assertTrue(aaa.isNodeType(RELATION_MIXIN)); Value[] values = aaa.getProperty(RELATION_PROP).getValues(); Node relatedNode = session.getNodeByUUID(values[0].getString()); assertEquals(bbb.getPath(), relatedNode.getPath()); } /** * Test method: RelationsServiceImpl.hasRelations() * Input: node Specify the node wants to check relation * Expect: Returns true is the given node has relation * @throws Exception */ public void testHasRelations() throws Exception { Node root = session.getRootNode(); Node aaa = root.addNode("AAA"); Node bbb = root.addNode("BBB"); session.save(); relationsService.addRelation(aaa, bbb.getPath(), COLLABORATION_WS); assertTrue(relationsService.hasRelations(aaa)); assertFalse(relationsService.hasRelations(bbb)); } /** * Test method: RelationsServiceImpl.getRelations() * Input: node Specify the node wants to get all node relative to it * repository The name of repository * provider The SessionProvider object is used to managed Sessions * Expect: Return all node that has relation to the given node * @throws Exception */ public void testGetRelations() throws Exception { Node root = session.getRootNode(); Node aaa = root.addNode("AAA"); Node bbb = root.addNode("BBB"); Node ccc = root.addNode("CCC"); Node ddd = root.addNode("DDD"); session.save(); relationsService.addRelation(aaa, bbb.getPath(), COLLABORATION_WS); relationsService.addRelation(aaa, ccc.getPath(), COLLABORATION_WS); List<Node> listRelation = relationsService.getRelations(aaa, sessionProviderService_.getSystemSessionProvider(null)); List<String> relationPathList = new ArrayList<String>(); for (Node relation : listRelation) { relationPathList.add(relation.getPath()); } assertTrue(relationPathList.contains(bbb.getPath())); assertTrue(relationPathList.contains(ccc.getPath())); assertFalse(relationPathList.contains(ddd.getPath())); } /** * Test method: RelationsServiceImpl.removeRelation() * Input: node Specify the node wants to remove a relation * relationPath The path of relation * repository The name of repository * Expect: Removes the relation to the given node * @throws Exception */ public void testRemoveRelation() throws Exception { Node root = session.getRootNode(); Node aaa = root.addNode("AAA"); Node bbb = root.addNode("BBB"); Node ccc = root.addNode("CCC"); Node ddd = root.addNode("DDD"); session.save(); relationsService.addRelation(aaa, bbb.getPath(), COLLABORATION_WS); relationsService.addRelation(aaa, ccc.getPath(), COLLABORATION_WS); relationsService.addRelation(aaa, ddd.getPath(), COLLABORATION_WS); List<Node> listBeforeRemove = relationsService.getRelations(aaa, sessionProviderService_.getSystemSessionProvider(null)); List<String> pathBeforeRemove = new ArrayList<String>(); for (Node relation : listBeforeRemove) { pathBeforeRemove.add(relation.getPath()); } assertTrue(pathBeforeRemove.contains(bbb.getPath())); assertTrue(pathBeforeRemove.contains(ccc.getPath())); assertTrue(pathBeforeRemove.contains(ddd.getPath())); relationsService.removeRelation(aaa, "/DDD"); List<Node> listAfterRemove = relationsService.getRelations(aaa, sessionProviderService_.getSystemSessionProvider(null)); List<String> pathAfterRemove = new ArrayList<String>(); for (Node relation : listAfterRemove) { pathAfterRemove.add(relation.getPath()); } assertTrue(pathAfterRemove.contains(bbb.getPath())); assertTrue(pathAfterRemove.contains(ccc.getPath())); assertFalse(pathAfterRemove.contains(ddd.getPath())); } /** * Clean all node for testing */ public void tearDown() throws Exception { Node root = session.getRootNode(); String[] paths = new String[] {"AAA", "BBB", "CCC", "DDD"}; for (String path : paths) { if (root.hasNode(path)) { root.getNode(path).remove(); } } session.save(); super.tearDown(); } }