Package org.infoglue.cms.applications.mydesktoptool.actions

Source Code of org.infoglue.cms.applications.mydesktoptool.actions.ViewMyDesktopToolStartPageActionTest

/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
*  Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including 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, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*
* $Id: ViewMyDesktopToolStartPageActionTest.java,v 1.7 2006/03/06 16:54:01 mattias Exp $
*/
package org.infoglue.cms.applications.mydesktoptool.actions;

import java.util.Iterator;
import java.util.List;

import org.infoglue.cms.applications.common.Session;
import org.infoglue.cms.controllers.kernel.impl.simple.WorkflowController;
import org.infoglue.cms.entities.mydesktop.WorkflowActionVO;
import org.infoglue.cms.entities.mydesktop.WorkflowVO;
import org.infoglue.cms.util.FakeHttpServletRequest;
import org.infoglue.cms.util.FakeHttpServletResponse;
import org.infoglue.cms.util.WebWorkTestCase;
import org.infoglue.cms.util.WorkflowTestCase;

import webwork.action.Action;
import webwork.action.ActionContext;

import com.opensymphony.module.propertyset.PropertySet;

/**
* @author <a href="mailto:jedprentice@gmail.com">Jed Prentice</a>
*/
public class ViewMyDesktopToolStartPageActionTest extends WebWorkTestCase
{
  private static final WorkflowController controller = WorkflowController.getController();

  private ViewMyDesktopToolStartPageAction action = new ViewMyDesktopToolStartPageAction();
  private FakeHttpServletRequest request = new FakeHttpServletRequest();

  protected void setUp() throws Exception
  {
    super.setUp();
    new Session().setInfoGluePrincipal(getAdminPrincipal());

    ActionContext.setRequest(request);
    action.setServletRequest(request);
    action.setServletResponse(new FakeHttpServletResponse());
  }

  public void testExecute() throws Exception
  {
    assertSuccess(action.doExecute());
    assertEquals("Wrong number of available workflows:", 2, action.getAvailableWorkflowVOList().size());
  }

  public void testExecute2ActiveWorkflows() throws Exception
  {
    WorkflowVO workflow1 = controller.initializeWorkflow(getAdminPrincipal(), "Create News", 0, WorkflowController.createWorkflowParameters(request));
    WorkflowVO workflow2 = controller.initializeWorkflow(getAdminPrincipal(), "Create User", 0, WorkflowController.createWorkflowParameters(request));

    try
    {
      assertSuccess(action.doExecute());
      assertEquals("Wrong number of available workflows:", 2, action.getAvailableWorkflowVOList().size());
      assertTrue("There should be at least 2 current workflows", action.getWorkflowVOList().size() >= 2);

      List availableActions = action.getWorkflowActionVOList();
      assertTrue("There should be at least 2 current actions", availableActions.size() >= 2);
      assertContains(availableActions, createCreateNews(workflow1.getWorkflowId()));
      assertContains(availableActions, createRegisterUser(workflow2.getWorkflowId()));
    }
    finally
    {
      finishWorkflow(workflow1.getIdAsPrimitive());
      finishWorkflow(workflow2.getIdAsPrimitive());
    }
  }

  public void testStartWorkflowCreateNews() throws Exception
  {
    startCreateNews();

    try
    {
      assertNull("Available workflows should be null:", action.getAvailableWorkflowVOList());
      assertNull("Current workflows should be null:", action.getWorkflowVOList());
    }
    finally
    {
      finishWorkflow();
    }
  }

  public void testStartWorkflowCreateUser() throws Exception
  {
    startWorkflow("Create User", Action.SUCCESS);

    try
    {
      assertFalse("There should be at least 1 current workflow", action.getWorkflowVOList().isEmpty());
      List workflowActions = action.getWorkflowActionVOList();
      assertFalse("There should be at least 1 current action", workflowActions.isEmpty());
      assertContains(workflowActions, createRegisterUser(action.getWorkflow().getWorkflowId()));
    }
    finally
    {
      finishWorkflow();
    }
  }

  public void testInvokeCreateNews() throws Exception
  {
    startCreateNews();

    try
    {
      assertNone(invokeCreateNews());
      assertNull("Available workflows should be null:", action.getAvailableWorkflowVOList());
      assertNull("Current workflows should be null:", action.getWorkflowVOList());

      PropertySet propertySet = controller.getPropertySet(getAdminPrincipal(), action.getWorkflow().getIdAsPrimitive());
      assertEquals("Wrong name:", request.getParameter("name"), propertySet.getString("name"));
      assertEquals("Wrong title:", request.getParameter("title"), propertySet.getString("title"));
      assertEquals("Wrong navigationTitle:", request.getParameter("navigationTitle"), propertySet.getString("navigationTitle"));
      assertEquals("Wrong leadIn:", request.getParameter("leadIn"), propertySet.getString("leadIn"));
      assertEquals("Wrong fullText:", request.getParameter("fullText"), propertySet.getString("fullText"));
    }
    finally
    {
      finishWorkflow();
    }
  }

  public void testInvokeCreateNewsInactive() throws Exception
  {
    testInvokeCreateNews();
    assertResult(ViewMyDesktopToolStartPageAction.INVALID_ACTION, invokeCreateNews());
  }

  public void testInvokeCreateNewsTwice() throws Exception
  {
    startCreateNews();

    try
    {
      assertNone(invokeCreateNews());
      assertResult(ViewMyDesktopToolStartPageAction.INVALID_ACTION, invokeCreateNews());
    }
    finally
    {
      finishWorkflow();
    }
  }

  /**
   * Sets up the action for "Create News" and calls action.doInvoke()
   * @return the result of action.doInvoke()
   * @throws Exception if an error occurs
   */
  private String invokeCreateNews() throws Exception
  {
    request.setParameter("name", getName());
    request.setParameter("title", getName());
    request.setParameter("navigationTitle", getName());
    request.setParameter("leadIn", getName());
    request.setParameter("fullText", getName());

    action.setWorkflowId(action.getWorkflow().getIdAsPrimitive());
    action.setActionId(4);
    return action.doInvoke();
  }

  private void startCreateNews() throws Exception
  {
    startWorkflow("Create News", Action.NONE);
  }

  private void startWorkflow(String name, String expectedResult) throws Exception
  {
    action.setWorkflowName(name);
    assertResult(expectedResult, action.doStartWorkflow());
  }

  private void finishWorkflow() throws Exception
  {
    finishWorkflow(action.getWorkflow().getIdAsPrimitive());
  }

  private void finishWorkflow(long workflowId) throws Exception
  {
    controller.invokeAction(getAdminPrincipal(), workflowId, WorkflowTestCase.FINISH_WORKFLOW, WorkflowController.createWorkflowParameters(request));
  }

  private static void assertContains(List actions, WorkflowActionVO expected)
  {
    boolean containsAction = false;
    for (Iterator i = actions.iterator(); i.hasNext() && !containsAction;)
      if (isSameAction(expected, (WorkflowActionVO)i.next()))
        containsAction = true;

    assertTrue("Action " + expected.getId() + ' ' + expected.getName() + " should be in the list of workflow actions",
            containsAction);
  }

  /**
   * A loose check to see if 2 actions are the same.  Compares id, workflowId, and name.  For now, this is sufficient.
   * @param one an action
   * @param another another action
   * @return true if both actions have the same id, workflowId, and name; otherwise returns false.
   */
  private static boolean isSameAction(WorkflowActionVO one, WorkflowActionVO another)
  {
    return one.getId().equals(another.getId())
        && one.getWorkflowId().equals(another.getWorkflowId())
        && one.getWorkflowId().equals(another.getWorkflowId())
        && one.getName().equals(another.getName());
  }

  private static WorkflowActionVO createCreateNews(Long workflowId)
  {
    return new WorkflowActionVO(new Integer(4), workflowId, "Create news content");
  }

  private static WorkflowActionVO createRegisterUser(Long workflowId)
  {
    return new WorkflowActionVO(new Integer(4), workflowId, "Register Name 1");
  }
}
TOP

Related Classes of org.infoglue.cms.applications.mydesktoptool.actions.ViewMyDesktopToolStartPageActionTest

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.