/* 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. */ package org.activiti.upgrade.test; import org.activiti.engine.ActivitiException; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.activiti.upgrade.UpgradeUtil; import org.activiti.upgrade.data.Activiti_5_10_DataGenerator; /** * Suspending and activating process definitions and process instances was added in * Activiti 5.11. This class tests this newly added functionality. * * @author Joram */ public class SuspendAndActivateFunctionalityTest extends UpgradeTestCase { public void testSuspendProcessDefinition() { // Test makes only sense on 5.11 if (UpgradeUtil.getProcessEngineVersion(processEngine) == 11) { ProcessDefinition processDefinition = processEngine.getRepositoryService() .createProcessDefinitionQuery().processDefinitionKey("suspendAndActivate").singleResult(); assertNotNull(processDefinition); assertFalse(processDefinition.isSuspended()); assertEquals(Activiti_5_10_DataGenerator.NR_OF_INSTANCES_FOR_SUSPENSION, processEngine.getRuntimeService() .createProcessInstanceQuery().processDefinitionId(processDefinition.getId()).active().count()); assertEquals(0, processEngine.getRuntimeService().createProcessInstanceQuery() .processDefinitionId(processDefinition.getId()).suspended().count()); // Suspend processEngine.getRepositoryService().suspendProcessDefinitionById(processDefinition.getId(), true, null); try { processEngine.getRuntimeService().startProcessInstanceById(processDefinition.getId()); } catch (ActivitiException e) { assertTrue(e.getMessage().toLowerCase().contains("suspend")); } // Verify process instances assertEquals(0, processEngine.getRuntimeService().createProcessInstanceQuery() .processDefinitionId(processDefinition.getId()).active().count()); assertEquals(Activiti_5_10_DataGenerator.NR_OF_INSTANCES_FOR_SUSPENSION, processEngine.getRuntimeService() .createProcessInstanceQuery(). processDefinitionId(processDefinition.getId()).suspended().count()); // Activate again processEngine.getRepositoryService().activateProcessDefinitionById(processDefinition.getId(), true, null); assertEquals(Activiti_5_10_DataGenerator.NR_OF_INSTANCES_FOR_SUSPENSION, processEngine.getRuntimeService() .createProcessInstanceQuery().processDefinitionId(processDefinition.getId()).active().count()); assertEquals(0, processEngine.getRuntimeService().createProcessInstanceQuery() .processDefinitionId(processDefinition.getId()).suspended().count()); } } public void testSuspendProcessInstance() { // Test makes only sense on 5.11 if (UpgradeUtil.getProcessEngineVersion(processEngine) == 11) { ProcessDefinition processDefinition = processEngine.getRepositoryService() .createProcessDefinitionQuery().processDefinitionKey("suspendAndActivate").singleResult(); assertNotNull(processDefinition); assertFalse(processDefinition.isSuspended()); assertEquals(Activiti_5_10_DataGenerator.NR_OF_INSTANCES_FOR_SUSPENSION, processEngine.getRuntimeService() .createProcessInstanceQuery().processDefinitionId(processDefinition.getId()).active().count()); assertEquals(0, processEngine.getRuntimeService().createProcessInstanceQuery() .processDefinitionId(processDefinition.getId()).suspended().count()); ProcessInstance processInstance = processEngine.getRuntimeService().createProcessInstanceQuery() .processDefinitionId(processDefinition.getId()).list().get(0); assertFalse(processInstance.isSuspended()); // Suspend process instance processEngine.getRuntimeService().suspendProcessInstanceById(processInstance.getId()); assertEquals(Activiti_5_10_DataGenerator.NR_OF_INSTANCES_FOR_SUSPENSION - 1, processEngine.getRuntimeService() .createProcessInstanceQuery().processDefinitionId(processDefinition.getId()).active().count()); assertEquals(1, processEngine.getRuntimeService().createProcessInstanceQuery() .processDefinitionId(processDefinition.getId()).suspended().count()); try { Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); processEngine.getTaskService().complete(task.getId()); } catch (ActivitiException e) { assertTrue(e.getMessage().toLowerCase().contains("suspend")); } // Activate again processEngine.getRuntimeService().activateProcessInstanceById(processInstance.getId()); } } }