Package com.agiletec.plugins.jpcontentworkflow.apsadmin.workflow

Source Code of com.agiletec.plugins.jpcontentworkflow.apsadmin.workflow.TestWorkflowStepAction

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpcontentworkflow.apsadmin.workflow;

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

import com.agiletec.plugins.jpcontentworkflow.apsadmin.ApsAdminPluginBaseTestCase;
import com.agiletec.plugins.jpcontentworkflow.util.WorkflowTestHelper;

import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.services.baseconfig.ConfigInterface;
import com.agiletec.plugins.jacms.aps.system.services.content.model.SmallContentType;
import com.agiletec.plugins.jpcontentworkflow.aps.system.JpcontentworkflowSystemConstants;
import com.agiletec.plugins.jpcontentworkflow.aps.system.services.workflow.ContentWorkflowManager;
import com.agiletec.plugins.jpcontentworkflow.aps.system.services.workflow.IContentWorkflowManager;
import com.agiletec.plugins.jpcontentworkflow.aps.system.services.workflow.model.Step;
import com.opensymphony.xwork2.Action;

/**
* @author E.Santoboni
*/
public class TestWorkflowStepAction extends ApsAdminPluginBaseTestCase {
 
  @Override
  protected void setUp() throws Exception {
    super.setUp();
    this.init();
    this._helper.setWorkflowConfig();
  }
 
  @Override
  protected void tearDown() throws Exception {
    this._helper.resetWorkflowConfig();
    super.tearDown();
  }
 
  public void testEditSteps() throws Throwable {
    String typeCode = "ART";
    String result = this.executeEditSteps("admin", typeCode);
    assertEquals(Action.SUCCESS, result);
    WorkflowStepAction action = (WorkflowStepAction) this.getAction();
    SmallContentType contentType = action.getContentType();
    assertEquals(typeCode, contentType.getCode());
    assertEquals(typeCode, action.getTypeCode());
    assertEquals(3, action.getSteps().size());
  }
 
  public void testMoveStep() throws Throwable {
    String typeCode = "ART";
    WorkflowStepAction action = (WorkflowStepAction) this.executeSuccessfulEditSteps(typeCode);
   
    String result = this.executeMoveStep("admin", typeCode, IWorkflowStepAction.MOVEMENT_DOWN_CODE, "0", action.getSteps());
    assertEquals(Action.SUCCESS, result);
    action = (WorkflowStepAction) this.getAction();
    SmallContentType contentType = action.getContentType();
    assertEquals(typeCode, contentType.getCode());
    assertEquals(typeCode, action.getTypeCode());
    List<Step> steps = action.getSteps();
    assertEquals(3, steps.size());
    assertEquals("step2", steps.get(0).getCode());
    assertEquals("step1", steps.get(1).getCode());
    assertEquals("step3", steps.get(2).getCode());
   
    result = this.executeMoveStep("admin", typeCode, IWorkflowStepAction.MOVEMENT_UP_CODE, "1", steps);
    assertEquals(Action.SUCCESS, result);
    action = (WorkflowStepAction) this.getAction();
    steps = action.getSteps();
    assertEquals(3, steps.size());
    assertEquals("step1", steps.get(0).getCode());
    assertEquals("step2", steps.get(1).getCode());
    assertEquals("step3", steps.get(2).getCode());
   
    result = this.executeMoveStep("admin", typeCode, IWorkflowStepAction.MOVEMENT_UP_CODE, "0", steps);
    assertEquals(Action.SUCCESS, result);
    action = (WorkflowStepAction) this.getAction();
    steps = action.getSteps();
    assertEquals(3, steps.size());
    assertEquals("step1", steps.get(0).getCode());
    assertEquals("step2", steps.get(1).getCode());
    assertEquals("step3", steps.get(2).getCode());
   
    result = this.executeMoveStep("admin", typeCode, IWorkflowStepAction.MOVEMENT_DOWN_CODE, "2", steps);
    assertEquals(Action.SUCCESS, result);
    action = (WorkflowStepAction) this.getAction();
    steps = action.getSteps();
    assertEquals(3, steps.size());
    assertEquals("step1", steps.get(0).getCode());
    assertEquals("step2", steps.get(1).getCode());
    assertEquals("step3", steps.get(2).getCode());
  }
 
  public void testRemoveStep() throws Throwable {
    String typeCode = "ART";
    WorkflowStepAction updateAction = (WorkflowStepAction) this.executeSuccessfulEditSteps(typeCode);
    assertEquals(3, updateAction.getSteps().size());
   
    String result = this.executeRemoveStep("admin", typeCode, "step1", updateAction.getSteps());
    assertEquals(Action.SUCCESS, result);
    WorkflowStepAction action = (WorkflowStepAction) this.getAction();
    SmallContentType contentType = action.getContentType();
    assertEquals(typeCode, contentType.getCode());
    assertEquals(typeCode, action.getTypeCode());
    List<Step> steps = action.getSteps();
    assertEquals(2, steps.size());
    assertEquals("step2", steps.get(0).getCode());
    assertEquals("Step 2", steps.get(0).getDescr());
    assertEquals(null, steps.get(0).getRole());
    assertEquals("step3", steps.get(1).getCode());
    assertEquals("Step 3", steps.get(1).getDescr());
    assertEquals("supervisor", steps.get(1).getRole());
  }
 
  public void testAddStep() throws Throwable {
    String typeCode = "ART";
    WorkflowStepAction action = (WorkflowStepAction) this.executeSuccessfulEditSteps(typeCode);
    assertEquals(3, action.getSteps().size());
   
    String result = this.executeAddStep("admin", typeCode, "step4", "Step 4", "supervisor", action.getSteps());
    assertEquals(Action.SUCCESS, result);
    action = (WorkflowStepAction) this.getAction();
    List<Step> steps = action.getSteps();
    assertEquals(4, steps.size());
    assertEquals("step1", steps.get(0).getCode());
    assertEquals("step2", steps.get(1).getCode());
    assertEquals("step3", steps.get(2).getCode());
    Step step = steps.get(3);
    assertEquals("step4", step.getCode());
    assertEquals("step4", step.getCode());
    assertEquals("Step 4", step.getDescr());
    assertEquals("supervisor", step.getRole());
  }
 
  public void testSave() throws Throwable {
    String typeCode = "ART";
    List<Step> originarySteps = this._workflowManager.getSteps(typeCode);
    List<Step> steps = this.prepareSteps(5);
   
    String result = this.executeSave("admin", typeCode, steps);
    assertEquals(Action.SUCCESS, result);
    List<Step> savedSteps = this._workflowManager.getSteps(typeCode);
    this.compareSteps(steps, savedSteps);
   
    result = this.executeSave("admin", typeCode, originarySteps);
    assertEquals(Action.SUCCESS, result);
    savedSteps = this._workflowManager.getSteps(typeCode);
    this.compareSteps(originarySteps, savedSteps);
  }
 
  protected String executeEditSteps(String currentUserName, String typeCode) throws Throwable {
    this.setUserOnSession(currentUserName);
    this.initAction("/do/jpcontentworkflow/Workflow", "editSteps");
    if (typeCode!=null) {
      this.addParameter("typeCode", typeCode);
    }
    String result = this.executeAction();
    return result;
  }
 
  protected Action executeSuccessfulEditSteps(String typeCode) throws Throwable {
    String result = this.executeEditSteps("admin", typeCode);
    assertEquals(Action.SUCCESS, result);
    WorkflowStepAction action = (WorkflowStepAction) this.getAction();
    return action;
  }
 
  protected String executeMoveStep(String currentUserName, String typeCode, String movement, String elementIndex, List<Step> steps) throws Throwable {
    this.setUserOnSession(currentUserName);
    this.initAction("/do/jpcontentworkflow/Workflow", "moveStep");
    if (typeCode!=null) {
      this.addParameter("typeCode", typeCode);
    }
    if (movement!=null) {
      this.addParameter("movement", movement);
    }
    if (elementIndex!=null) {
      this.addParameter("elementIndex", elementIndex);
    }
    this.addSteps(steps);
    String result = this.executeAction();
    return result;
  }
 
  protected String executeRemoveStep(String currentUserName, String typeCode, String stepCode, List<Step> steps) throws Throwable {
    this.setUserOnSession(currentUserName);
    this.initAction("/do/jpcontentworkflow/Workflow", "removeStep");
    if (typeCode!=null) {
      this.addParameter("typeCode", typeCode);
    }
    if (stepCode!=null) {
      this.addParameter("stepCode", stepCode);
    }
    this.addSteps(steps);
    String result = this.executeAction();
    return result;
  }
 
  protected String executeAddStep(String currentUserName, String typeCode, String stepCode,
      String stepDescr, String stepRole, List<Step> steps) throws Throwable {
    this.setUserOnSession(currentUserName);
    this.initAction("/do/jpcontentworkflow/Workflow", "addStep");
    if (typeCode!=null) {
      this.addParameter("typeCode", typeCode);
    }
    if (stepCode!=null) {
      this.addParameter("stepCode", stepCode);
    }
    if (stepDescr!=null) {
      this.addParameter("stepDescr", stepDescr);
    }
    if (stepRole!=null) {
      this.addParameter("stepRole", stepRole);
    }
    this.addSteps(steps);
    String result = this.executeAction();
    return result;
  }
 
  protected String executeSave(String currentUserName, String typeCode, List<Step> steps) throws Throwable {
    this.setUserOnSession(currentUserName);
    this.initAction("/do/jpcontentworkflow/Workflow", "saveSteps");
    if (typeCode!=null) {
      this.addParameter("typeCode", typeCode);
    }
    this.addSteps(steps);
    String result = this.executeAction();
    return result;
  }
 
  protected void addSteps(List<Step> steps) {
    if (steps!=null) {
      Iterator<Step> stepsIter = steps.iterator();
      while (stepsIter.hasNext()) {
        Step step = stepsIter.next();
        String code = step.getCode();
        if (step.getDescr()!=null) {
          this.addParameter(code+"_SEP_descr", step.getDescr());
        }
        if (step.getRole()!=null) {
          this.addParameter(code+"_SEP_role", step.getRole());
        }
      }
      String codes = this.concatCodes(steps);
      this.addParameter("stepCodes", codes);
    }
  }
 
  protected String concatCodes(List<Step> steps) {
    String codes = "";
    if (steps!=null) {
      Iterator<Step> stepsIter = steps.iterator();
      while (stepsIter.hasNext()) {
        Step step = stepsIter.next();
        codes += step.getCode();
        if (stepsIter.hasNext()) {
          codes += ",";
        }
      }
    }
    return codes;
  }
 
  protected List<Step> prepareSteps(int size) {
    List<Step> steps = new ArrayList<Step>(size);
    for (int i=0; i<size; i++) {
      Step step = new Step();
      step.setCode("step" + i);
      step.setDescr("Step " + i);
      step.setRole("supervisor");
      steps.add(step);
    }
    return steps;
  }
 
  protected void compareSteps(List<Step> steps1, List<Step> steps2) {
    assertEquals(steps1.size(), steps2.size());
    Iterator<Step> steps1Iter = steps1.iterator();
    Iterator<Step> steps2Iter = steps2.iterator();
    while (steps1Iter.hasNext()) {
      Step step1 = steps1Iter.next();
      Step step2 = steps2Iter.next();
      assertEquals(step1.getCode(), step2.getCode());
      assertEquals(step1.getDescr(), step2.getDescr());
      assertEquals(step1.getRole(), step2.getRole());
    }
  }
 
  private void init() {
    ContentWorkflowManager workflowManager = (ContentWorkflowManager) this.getService(JpcontentworkflowSystemConstants.CONTENT_WORKFLOW_MANAGER);
    this._workflowManager = workflowManager;
    ConfigInterface configManager = (ConfigInterface) this.getService(SystemConstants.BASE_CONFIG_MANAGER);
    this._helper = new WorkflowTestHelper(workflowManager, configManager);
  }
 
  private IContentWorkflowManager _workflowManager;
  private WorkflowTestHelper _helper;
 
}
TOP

Related Classes of com.agiletec.plugins.jpcontentworkflow.apsadmin.workflow.TestWorkflowStepAction

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.