Package com.founder.fix.fixflow.test.engine.api.runtime

Source Code of com.founder.fix.fixflow.test.engine.api.runtime.RunTimeServiceTest

/**
* Copyright 1996-2013 Founder International Co.,Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @author yangchenhui
*/
package com.founder.fix.fixflow.test.engine.api.runtime;

import java.util.HashMap;
import java.util.Map;

import com.founder.fix.fixflow.core.exception.FixFlowException;
import com.founder.fix.fixflow.core.impl.command.StartProcessInstanceCommand;
import com.founder.fix.fixflow.core.runtime.ProcessInstance;
import com.founder.fix.fixflow.core.runtime.ProcessInstanceQuery;
import com.founder.fix.fixflow.core.runtime.ProcessInstanceType;
import com.founder.fix.fixflow.test.AbstractFixFlowTestCase;
import com.founder.fix.fixflow.test.Deployment;

/**
* 启动流程实例测试
*
*/
public class RunTimeServiceTest extends AbstractFixFlowTestCase {

  public static String processDefinitionId;
  /**
   * 测试手工启动流程
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testNoneStartProcessInstance(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
  }
  /**
   * 测试删除流程实例
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testDeleteProcessInstance(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获得流程实例号
    String processInstanceId = processInstance.getId();
    //删除流程实例
    runtimeService.deleteProcessInstance(processInstanceId, true);
    //删除后再查询此流程实例,则抛出异常,说明流程实例已经被删除
    try{
      processInstance = runtimeService.getProcessInstance(processInstanceId);
      fail();
    }catch(Exception ex){
      //抛出FixFlowException异常
      assertTrue(ex instanceof FixFlowException);
    }
  }
 
  /**
   * 测试获取流程实例
   */
  @SuppressWarnings("unused")
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testGetProcessInstance(){
    try{
      //传一个不存的流程实例ID,则会抛出FixFlowException异常
      ProcessInstance processInstance = runtimeService.getProcessInstance("anbccbdbbddcdd");
      fail();
    }catch(Exception ex){
      //抛出FixFlowException异常
      assertTrue(ex instanceof FixFlowException);
    }
   
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获得流程实例号
    String processInstanceId = processInstance.getId();
    //根据实例号查询到此流程实例
    processInstance=runtimeService.getProcessInstance(processInstanceId);
    //验证是否查询到此流程实例
    assertNotNull(processInstance);
  }
 
  /**
   * 测试创建流程查询实例
   */
  public void testCreateProcessInstanceQuery(){
    //创建查询实例
    ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
    //验证是否创建成功
    assertNotNull(processInstanceQuery);
  }
  /**
   * 测试更新流程关联键,----此方法暂未实现
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testUpdateProcessInstanceBusinessKey(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获得流程实例号
    String processInstanceId = processInstance.getId();
    //将此流程实例的业务关联键更新为"bk_newbk"此方法暂未实现
    runtimeService.updateProcessInstanceBusinessKey(processInstanceId, "bk_newbk");
    processInstance = runtimeService.getProcessInstance(processInstanceId);
    //此方法暂未实现
    //assertEquals(processInstance.getBizKey(), "bk_newbk");
  }
  /**
   * 测试增加流程实例持久化变量
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testSetAndGetProcessInstanceVariable(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获得流程实例号
    String processInstanceId = processInstance.getId();
    //给流程实例添加一个名为“流程变量名称”值为“测试流程变量值”
    runtimeService.setProcessInstanceVariable(processInstanceId, "流程变量名称", "测试流程变量值");
    //获取“流程变量名称”这个持久化变量的值
    String returnValue = (String)runtimeService.getProcessInstanceVariable(processInstanceId, "流程变量名称");
    //验证是否是刚添加的值
    assertEquals("测试流程变量值", returnValue);
  }
 
  /**
   * 测试增加流程实例持久化变量map
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testSetAndGetProcessInstanceVariables(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获得流程实例号
    String processInstanceId = processInstance.getId();
    //新建一个变量的map
    Map<String,Object> paramsMap = new HashMap<String,Object>();
    paramsMap.put("变量1", "变量1的值");
    paramsMap.put("变量2", "变量2的值");
    runtimeService.setProcessInstanceVariables(processInstanceId, paramsMap);
    //获取这个持久化变量的值map
    Map<String,Object> returnMap = (Map<String,Object>)runtimeService.getProcessInstanceVariables(processInstanceId);
    //验证是否是刚添加的值
    assertEquals(2,returnMap.keySet().size());
    assertEquals("变量1的值", returnMap.get("变量1"));
    assertEquals("变量2的值", returnMap.get("变量2"));
  }
 
  /**
   * 测试管理员暂停和恢复流程实例
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testSuspendAndContinueProces(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获取流程实例号
    String processInstanceId = processInstance.getId();
    //暂停流程实例
    runtimeService.suspendProcessInstance(processInstanceId);
   
    //创建流程实例查询
    ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
    //查询刚才暂停的流程实例
    processInstanceQuery.processInstanceId(processInstanceId);
    //获取流程实例
    processInstance = processInstanceQuery.singleResult();
    //验证流程实例已经暂停
    assertTrue(processInstance.isSuspended());
   
    //恢复流程实例
    runtimeService.continueProcessInstance(processInstanceId);
   
    //重置流程实例查询
    processInstanceQuery = runtimeService.createProcessInstanceQuery();
    //查询刚才的流程实例
    processInstanceQuery.processInstanceId(processInstanceId);
    //获取流程实例
    processInstance = processInstanceQuery.singleResult();
    //验证不是暂停状态
    assertFalse(processInstance.isSuspended());
  }
 
  /**
   * 测试管理员暂停和恢复流程实例
   */
  @Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/runtime/StartProcessInstanceTest.bpmn" })
  public void testTerminatProcessInstance(){
    //创建一个启动命令
    StartProcessInstanceCommand startProcessInstanceCommand = new StartProcessInstanceCommand();
    //设置需要启动的流程的KEY
    startProcessInstanceCommand.setProcessDefinitionKey("Process_StartProcessInstanceTest");
    //设置业务关联键
    startProcessInstanceCommand.setBusinessKey("bk_StartProcessInstanceTest");
    //设置流程的启动人
    startProcessInstanceCommand.setStartAuthor("1200119390");
    //启动流程,返回流程实例
    ProcessInstance processInstance = runtimeService.noneStartProcessInstance(startProcessInstanceCommand);
    //验证流程是否启动成功
    assertNotNull(processInstance);
   
    //获取流程实例号
    String processInstanceId = processInstance.getId();
    runtimeService.terminatProcessInstance(processInstanceId);
   
    //创建流程实例查询
    ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
    //查询刚才暂停的流程实例
    processInstanceQuery.processInstanceId(processInstanceId);
    //获取流程实例
    processInstance = processInstanceQuery.singleResult();
    //验证流程实例为终止状态
    assertEquals(ProcessInstanceType.TERMINATION, processInstance.getInstanceType());
  }
}
TOP

Related Classes of com.founder.fix.fixflow.test.engine.api.runtime.RunTimeServiceTest

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.