Package org.activiti.engine.test.api.event

Source Code of org.activiti.engine.test.api.event.VariableEventsTest

/* 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.engine.test.api.event;

import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.ActivitiVariableEvent;
import org.activiti.engine.impl.history.HistoryLevel;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;

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

/**
* Test case for all {@link ActivitiEvent}s related to variables.
*
* @author Frederik Heremans
*/
public class VariableEventsTest extends PluggableActivitiTestCase {

  private TestVariableEventListener listener;

  /**
   * Test create, update and delete variables on a process-instance, using the
   * API.
   */
  @Deployment(resources = { "org/activiti/engine/test/api/runtime/oneTaskProcess.bpmn20.xml" })
  public void testProcessInstanceVariableEvents() throws Exception {
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
    assertNotNull(processInstance);

    // Check create event
    runtimeService.setVariable(processInstance.getId(), "testVariable", "The value");
    assertEquals(1, listener.getEventsReceived().size());
    ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
    assertEquals("The value", event.getVariableValue());
    listener.clearEventsReceived();

    // Update variable
    runtimeService.setVariable(processInstance.getId(), "testVariable", "Updated value");
    assertEquals(1, listener.getEventsReceived().size());
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_UPDATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
    assertEquals("Updated value", event.getVariableValue());
    listener.clearEventsReceived();

    // Delete variable
    runtimeService.removeVariable(processInstance.getId(), "testVariable");
    assertEquals(1, listener.getEventsReceived().size());
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_DELETED, event.getType());
        // process definition Id can't be recognized in  DB flush
        assertEquals(null, event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
        // deleted variable value is always null
    assertEquals(null, event.getVariableValue());
    listener.clearEventsReceived();

    // Create, update and delete multiple variables
    Map<String, Object> vars = new HashMap<String, Object>();
    vars.put("test", 123);
    vars.put("test2", 456);
    runtimeService.setVariables(processInstance.getId(), vars);
    runtimeService.setVariables(processInstance.getId(), vars);
    runtimeService.removeVariables(processInstance.getId(), vars.keySet());

    assertEquals(6, listener.getEventsReceived().size());
    assertEquals(ActivitiEventType.VARIABLE_CREATED, listener.getEventsReceived().get(0).getType());
    assertEquals(ActivitiEventType.VARIABLE_CREATED, listener.getEventsReceived().get(1).getType());
    assertEquals(ActivitiEventType.VARIABLE_UPDATED, listener.getEventsReceived().get(2).getType());
    assertEquals(ActivitiEventType.VARIABLE_UPDATED, listener.getEventsReceived().get(3).getType());
    assertEquals(ActivitiEventType.VARIABLE_DELETED, listener.getEventsReceived().get(4).getType());
    assertEquals(ActivitiEventType.VARIABLE_DELETED, listener.getEventsReceived().get(5).getType());
    listener.clearEventsReceived();

    // Delete inexistent variable should not dispatch event
    runtimeService.removeVariable(processInstance.getId(), "unexistingVariable");
    assertTrue(listener.getEventsReceived().isEmpty());
  }

    @Deployment(resources = {"org/activiti/engine/test/api/runtime/oneTaskProcess.bpmn20.xml"})
    public void testStartEndProcessInstanceVariableEvents() throws Exception {
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("var1", "value1");
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", variables);

        assertEquals(1, listener.getEventsReceived().size());
        assertEquals(ActivitiEventType.VARIABLE_CREATED, listener.getEventsReceived().get(0).getType());

        Task task = taskService.createTaskQuery().processInstanceId( processInstance.getId()).singleResult();
        taskService.complete(task.getId());

        assertEquals(2, listener.getEventsReceived().size());
        assertEquals(ActivitiEventType.VARIABLE_DELETED, listener.getEventsReceived().get(1).getType());
    }
    /**
     * Test create event of variables when process is started with variables passed in.
     */
  @Deployment(resources = { "org/activiti/engine/test/api/runtime/oneTaskProcess.bpmn20.xml" })
  public void testProcessInstanceVariableEventsOnStart() throws Exception {
   
    HashMap<String, Object> vars = new HashMap<String, Object>();
    vars.put("testVariable", "The value");
   
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars);
    assertNotNull(processInstance);

    // Check create event
    assertEquals(1, listener.getEventsReceived().size());
    ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
    assertEquals("The value", event.getVariableValue());
    listener.clearEventsReceived();
  }

  /**
   * Test create, update and delete variables locally on a child-execution of
   * the process instance.
   */
  @Deployment
  public void testProcessInstanceVariableEventsOnChildExecution() throws Exception {
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("variableProcess");
    assertNotNull(processInstance);

    Execution child = runtimeService.createExecutionQuery().parentId(processInstance.getId()).singleResult();
    assertNotNull(child);

    runtimeService.setVariableLocal(child.getId(), "test", 1234567);

    assertEquals(1, listener.getEventsReceived().size());
    ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());

    // Execution and process-id should differ
    assertEquals(child.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
  }

  /**
   * Test variable events when done within a process (eg. execution-listener)
   */
  @Deployment
  public void ActivitiEventType() throws Exception {
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("variableProcess");
    assertNotNull(processInstance);

    assertEquals(3, listener.getEventsReceived().size());
   
    // Check create event
    ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("variable", event.getVariableName());
    assertEquals(123, event.getVariableValue());
   
    // Check udpate event
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(1);
    assertEquals(ActivitiEventType.VARIABLE_UPDATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("variable", event.getVariableName());
    assertEquals(456, event.getVariableValue());
   
    // Check delete event
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(2);
    assertEquals(ActivitiEventType.VARIABLE_DELETED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertNull(event.getTaskId());
    assertEquals("variable", event.getVariableName());
    assertEquals(456, event.getVariableValue());
  }
 
  /**
   * Test create, update and delete of task-local variables.
   */
  @Deployment(resources = { "org/activiti/engine/test/api/runtime/oneTaskProcess.bpmn20.xml" })
  public void testTaskVariableEvents() throws Exception {
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
    assertNotNull(processInstance);
   
    Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
        .singleResult();
    assertNotNull(task);
   
    taskService.setVariableLocal(task.getId(), "testVariable", "The value");
    taskService.setVariableLocal(task.getId(), "testVariable", "Updated value");
    taskService.removeVariableLocal(task.getId(), "testVariable");

    // Check create event
    assertEquals(3, listener.getEventsReceived().size());
    ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertEquals(task.getId(), event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
    assertEquals("The value", event.getVariableValue());
   
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(1);
    assertEquals(ActivitiEventType.VARIABLE_UPDATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertEquals(task.getId(), event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
    assertEquals("Updated value", event.getVariableValue());
   
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(2);
    assertEquals(ActivitiEventType.VARIABLE_DELETED, event.getType());
    assertEquals(null, event.getProcessDefinitionId()); // process definition Id is set to null
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertEquals(task.getId(), event.getTaskId());
    assertEquals("testVariable", event.getVariableName());
    // deleted values are always null
    assertEquals(null, event.getVariableValue());
    listener.clearEventsReceived();
  }
 
  /**
   * Test variable events when done within a process (eg. execution-listener)
   */
  @Deployment
  public void testTaskVariableEventsWithinProcess() throws Exception {
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("variableProcess");
    assertNotNull(processInstance);
   
    Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
        .singleResult();
    assertNotNull(task);

    assertEquals(3, listener.getEventsReceived().size());
   
    // Check create event
    ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
    assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertEquals(task.getId(), event.getTaskId());
    assertEquals("variable", event.getVariableName());
    assertEquals(123, event.getVariableValue());
   
    // Check udpate event
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(1);
    assertEquals(ActivitiEventType.VARIABLE_UPDATED, event.getType());
    assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertEquals(task.getId(), event.getTaskId());
    assertEquals("variable", event.getVariableName());
    assertEquals(456, event.getVariableValue());
   
    // Check delete event
    event = (ActivitiVariableEvent) listener.getEventsReceived().get(2);
    assertEquals(ActivitiEventType.VARIABLE_DELETED, event.getType());
    // process definition Id can't be recognized in  DB flush
    assertEquals(null, event.getProcessDefinitionId());
    assertEquals(processInstance.getId(), event.getExecutionId());
    assertEquals(processInstance.getId(), event.getProcessInstanceId());
    assertEquals(task.getId(), event.getTaskId());
    assertEquals("variable", event.getVariableName());
    // deleted variable value is always null
    assertEquals(null, event.getVariableValue());
  }

  /**
   * Test to check create, update an delete behavior for variables on a task not related to a process.
   */
  public void testTaskVariableStandalone() throws Exception {
    Task newTask = taskService.newTask();
    try {
      taskService.saveTask(newTask);
     
      taskService.setVariable(newTask.getId(), "testVariable", 123);
      taskService.setVariable(newTask.getId(), "testVariable", 456);
      taskService.removeVariable(newTask.getId(), "testVariable");
     
      assertEquals(3, listener.getEventsReceived().size());
      ActivitiVariableEvent event = (ActivitiVariableEvent) listener.getEventsReceived().get(0);
      assertEquals(ActivitiEventType.VARIABLE_CREATED, event.getType());
      assertNull(event.getProcessDefinitionId());
      assertNull(event.getExecutionId());
      assertNull(event.getProcessInstanceId());
      assertEquals(newTask.getId(), event.getTaskId());
      assertEquals("testVariable", event.getVariableName());
      assertEquals(123, event.getVariableValue());
     
      event = (ActivitiVariableEvent) listener.getEventsReceived().get(1);
      assertEquals(ActivitiEventType.VARIABLE_UPDATED, event.getType());
      assertNull(event.getProcessDefinitionId());
      assertNull(event.getExecutionId());
      assertNull(event.getProcessInstanceId());
      assertEquals(newTask.getId(), event.getTaskId());
      assertEquals("testVariable", event.getVariableName());
      assertEquals(456, event.getVariableValue());
     
      event = (ActivitiVariableEvent) listener.getEventsReceived().get(2);
      assertEquals(ActivitiEventType.VARIABLE_DELETED, event.getType());
      assertNull(event.getProcessDefinitionId());
      assertNull(event.getExecutionId());
      assertNull(event.getProcessInstanceId());
      assertEquals(newTask.getId(), event.getTaskId());
      assertEquals("testVariable", event.getVariableName());
      // deleted variable value is always null
      assertEquals(null, event.getVariableValue());
    } finally {
     
      // Cleanup task and history to ensure a clean DB after test success/failure
      if(newTask.getId() != null) {
        taskService.deleteTask(newTask.getId());
        if(processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {
          historyService.deleteHistoricTaskInstance(newTask.getId());
        }
      }
    }
   
  }

  @Override
  protected void initializeServices() {
    super.initializeServices();

    listener = new TestVariableEventListener();
    processEngineConfiguration.getEventDispatcher().addEventListener(listener);
  }

  @Override
  protected void tearDown() throws Exception {
    super.tearDown();

    if (listener != null) {
      listener.clearEventsReceived();
      processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
    }
  }
}
TOP

Related Classes of org.activiti.engine.test.api.event.VariableEventsTest

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.