Package org.exoplatform.services.jcr.usecases.action

Source Code of org.exoplatform.services.jcr.usecases.action.TestAllActions

/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.usecases.action;

import org.apache.commons.chain.Context;
import org.apache.commons.chain.impl.ContextBase;
import org.exoplatform.services.command.action.Action;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
import org.exoplatform.services.jcr.impl.ext.action.SessionActionCatalog;
import org.exoplatform.services.jcr.impl.ext.action.SessionEventMatcher;
import org.exoplatform.services.jcr.usecases.BaseUsecasesTest;
import org.exoplatform.services.jcr.usecases.action.info.ActionInfo;
import org.exoplatform.services.jcr.usecases.action.info.CheckinActionInfo;
import org.exoplatform.services.jcr.usecases.action.info.CheckoutActionInfo;
import org.exoplatform.services.jcr.usecases.action.info.LockActionInfo;
import org.exoplatform.services.jcr.usecases.action.info.UnLockActionInfo;

import javax.jcr.Node;
import javax.jcr.RepositoryException;

/**
* @author <a href="mailto:Sergey.Kabashnyuk@gmail.com">Sergey Kabashnyuk</a>
* @version $Id: TestAllActions.java 11907 2008-03-13 15:36:21Z ksm $
*/
public class TestAllActions extends BaseUsecasesTest
{

   SessionActionCatalog catalog = null;

   private NodeTypeDataManager ntHolder;

   public void actionTest(ActionInfo action)
   {

      matchEventType(action);
      matchDeepPath(action);
      // TODO
      // matchNodeType(action);
      // matchParentNodeType(action);
   }

   public void matchDeepPath(ActionInfo actionInfo)
   {

      try
      {
         Node node = prepareNode(root, "FirsPath", null, null);
         Node node2 = prepareNode(node, "DeepPath", null, null);
         Node node3 = prepareNode(node2, "ThirdPath", null, null);
         Node otherNode = prepareNode(root, "Other", null, null);
         DummyAction daction = new DummyAction();
         // test by path
         prepareActionCatalog(daction, actionInfo.getEventType(), new QPath[]{((NodeImpl)node).getInternalPath()},
            true, null, null, null);
         assertEquals(0, daction.getActionExecuterCount());
         Context ctx = new ContextBase();
         ctx.put("node", otherNode);
         actionInfo.execute(ctx);
         assertEquals(0, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         ctx.put("node", node3);
         actionInfo.execute(ctx);
         assertEquals(1, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         // Not deep
         daction = new DummyAction();
         prepareActionCatalog(daction, actionInfo.getEventType(), new QPath[]{((NodeImpl)node).getInternalPath()},
            false, null, null, null);

         assertEquals(0, daction.getActionExecuterCount());

         ctx.put("node", otherNode);
         actionInfo.execute(ctx);
         assertEquals(0, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         ctx.put("node", node3);
         actionInfo.execute(ctx);
         assertEquals(0, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         node.remove();
         otherNode.remove();
         session.save();
      }
      catch (RepositoryException e)
      {
         e.printStackTrace();
         fail("matchDeepPath test fail. " + e.getLocalizedMessage());
      }

   }

   public void matchEventType(ActionInfo actionInfo)
   {
      try
      {
         DummyAction daction = new DummyAction();

         prepareActionCatalog(daction, actionInfo.getEventType(), null, true, null, null, null);
         assertEquals(0, daction.getActionExecuterCount());
         Node node = prepareNode(root, "seampletest", null, null);
         assertEquals(0, daction.getActionExecuterCount());

         Context ctx = new ContextBase();
         ctx.put("node", node);
         actionInfo.execute(ctx);

         assertEquals(1, daction.getActionExecuterCount());

         actionInfo.tearDown(ctx);
         node.remove();
         session.save();
      }
      catch (RepositoryException e)
      {
         e.printStackTrace();
         fail("matchByNodeType test fail. " + e.getLocalizedMessage());
      }

   }

   public void matchNodeType(ActionInfo actionInfo)
   {

      try
      {
         Node node = prepareNode(root, "firsPath", "nt:folder", null);
         Node node2 = prepareNode(root, "firsPath", null, null);
         DummyAction daction = new DummyAction();
         // test by path
         SessionEventMatcher matcher =
            prepareActionCatalog(daction, actionInfo.getEventType(), null, true, new InternalQName[]{session
               .getLocationFactory().parseJCRName("nt:folder").getInternalName()}, null, null);

         assertEquals(0, daction.getActionExecuterCount());
         Context ctx = new ContextBase();
         ctx.put("node", node);
         actionInfo.execute(ctx);
         assertEquals(1, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         daction = new DummyAction();
         matcher =
            prepareActionCatalog(daction, actionInfo.getEventType(), null, true, new InternalQName[]{session
               .getLocationFactory().parseJCRName("nt:folder").getInternalName()}, null, null);

         assertEquals(0, daction.getActionExecuterCount());

         ctx.put("node", node2);
         actionInfo.execute(ctx);
         assertEquals(0, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         node.remove();
         node2.remove();
         session.save();

      }
      catch (RepositoryException e)
      {
         e.printStackTrace();
         fail("matchNodeType test fail. " + e.getLocalizedMessage());
      }

   };

   public void matchParentNodeType(ActionInfo actionInfo)
   {
      try
      {
         Node n1 = root.addNode("n1");
         Node node = prepareNode(root, "firsPath", "nt:folder", "nt:folder");
         DummyAction daction = new DummyAction();
         // test by path
         SessionEventMatcher matcher =
            prepareActionCatalog(daction, actionInfo.getEventType(), null, true, null, new InternalQName[]{session
               .getLocationFactory().parseJCRName("nt:folder").getInternalName()},

            null);

         assertEquals(0, daction.getActionExecuterCount());
         Context ctx = new ContextBase();
         ctx.put("node", n1);
         actionInfo.execute(ctx);
         assertEquals(0, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         ctx.put("node", node);
         actionInfo.execute(ctx);
         assertEquals(1, daction.getActionExecuterCount());
         actionInfo.tearDown(ctx);

         n1.remove();
         node.remove();
         session.save();

      }
      catch (RepositoryException e)
      {
         e.printStackTrace();
         fail("matchParentNodeType test fail. " + e.getLocalizedMessage());
      }
   }

   public SessionEventMatcher prepareActionCatalog(Action action, int event, QPath[] paths, boolean isDeep,
      InternalQName[] nodeTypeNames, InternalQName[] parentNodeTypeNames, String[] workspaces)
   {

      catalog.clear();

      // test by path
      SessionEventMatcher matcher = new SessionEventMatcher(event, paths, isDeep, workspaces, null, ntHolder);

      catalog.addAction(matcher, action);
      return matcher;
   }

   public Node prepareNode(Node rootNode, String name, String nodeType, String parentNodeType)
      throws RepositoryException
   {
      Node currentRoot = rootNode;
      if (parentNodeType != null)
      {
         currentRoot = currentRoot.addNode("firs_sub_node", parentNodeType);
      }

      return nodeType != null ? currentRoot.addNode(name, nodeType) : currentRoot.addNode(name);
   }

   @Override
   public void setUp() throws Exception
   {
      super.setUp();
      catalog = (SessionActionCatalog)container.getComponentInstanceOfType(SessionActionCatalog.class);
      ntHolder = session.getWorkspace().getNodeTypesHolder();
   }

   public void testActionCheckin()
   {
      actionTest(new CheckinActionInfo());
   }

   public void testActionCheckout()
   {
      actionTest(new CheckoutActionInfo());
   }

   public void testActionLock()
   {
      actionTest(new LockActionInfo());
   }

   public void testActionUnLock()
   {
      actionTest(new UnLockActionInfo());
   }
}
TOP

Related Classes of org.exoplatform.services.jcr.usecases.action.TestAllActions

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.