package org.activiti.engine.test.api.history;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricData;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.history.HistoricVariableUpdate;
import org.activiti.engine.history.ProcessInstanceHistoryLog;
import org.activiti.engine.impl.history.HistoryLevel;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;
/**
* @author Joram Barrez
*/
public class ProcessInstanceLogQueryTest extends PluggableActivitiTestCase {
protected String processInstanceId;
@Override
protected void setUp() throws Exception {
super.setUp();
// Deploy test process
deployTwoTasksTestProcess();
// Start process instance
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("var1", "Hello");
vars.put("var2", 123);
this.processInstanceId = runtimeService.startProcessInstanceByKey("twoTasksProcess", vars).getId();
// Add some comments
taskService.addComment(null, processInstanceId, "Hello World");
taskService.addComment(null, processInstanceId, "Hello World2");
taskService.addComment(null, processInstanceId, "Hello World3");
// Change some variables
runtimeService.setVariable(processInstanceId, "var1", "new Value");
// Finish tasks
for (Task task : taskService.createTaskQuery().list()) {
taskService.complete(task.getId());
}
}
@Override
protected void tearDown() throws Exception {
for (Comment comment : taskService.getProcessInstanceComments(processInstanceId)) {
taskService.deleteComment(comment.getId());
}
super.tearDown();
}
public void testBaseProperties() {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId).singleResult();
assertNotNull(log.getId());
assertNotNull(log.getProcessDefinitionId());
assertNotNull(log.getStartActivityId());
assertNotNull(log.getDurationInMillis());
assertNotNull(log.getEndTime());
assertNotNull(log.getStartTime());
}
public void testIncludeTasks() {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeTasks()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(2, events.size());
for (HistoricData event : events) {
assertTrue(event instanceof HistoricTaskInstance);
}
}
public void testIncludeComments() {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeComments()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(3, events.size());
for (HistoricData event : events) {
assertTrue(event instanceof Comment);
}
}
public void testIncludeTasksandComments() {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeTasks()
.includeComments()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(5, events.size());
for (int i=0; i<5; i++) {
HistoricData event = events.get(i);
if (i<2) { // tasks are created before comments
assertTrue(event instanceof HistoricTaskInstance);
} else {
assertTrue(event instanceof Comment);
}
}
}
public void testIncludeActivities() {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeActivities()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(5, events.size());
for (HistoricData event : events) {
assertTrue(event instanceof HistoricActivityInstance);
}
}
public void testIncludeVariables() {
if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.FULL)) {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeVariables()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(2, events.size());
for (HistoricData event : events) {
assertTrue(event instanceof HistoricVariableInstance);
}
}
}
public void testIncludeVariableUpdates() {
if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.FULL)) {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeVariableUpdates()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(3, events.size());
for (HistoricData event : events) {
assertTrue(event instanceof HistoricVariableUpdate);
}
}
}
public void testEverything() {
if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.FULL)) {
ProcessInstanceHistoryLog log = historyService.createProcessInstanceHistoryLogQuery(processInstanceId)
.includeTasks()
.includeActivities()
.includeComments()
.includeVariables()
.includeVariableUpdates()
.singleResult();
List<HistoricData> events = log.getHistoricData();
assertEquals(15, events.size());
}
}
}