/* 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.task;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.impl.util.ClockUtil;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.DelegationState;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.activiti.engine.test.Deployment;
/**
* @author Joram Barrez
* @author Frederik Heremans
* @author Falko Menge
*/
public class TaskQueryTest extends PluggableActivitiTestCase {
private List<String> taskIds;
public void setUp() throws Exception {
identityService.saveUser(identityService.newUser("kermit"));
identityService.saveUser(identityService.newUser("gonzo"));
identityService.saveUser(identityService.newUser("fozzie"));
identityService.saveGroup(identityService.newGroup("management"));
identityService.saveGroup(identityService.newGroup("accountancy"));
identityService.createMembership("kermit", "management");
identityService.createMembership("kermit", "accountancy");
identityService.createMembership("fozzie", "management");
taskIds = generateTestTasks();
}
public void tearDown() throws Exception {
identityService.deleteGroup("accountancy");
identityService.deleteGroup("management");
identityService.deleteUser("fozzie");
identityService.deleteUser("gonzo");
identityService.deleteUser("kermit");
taskService.deleteTasks(taskIds, true);
}
public void tesBasicTaskPropertiesNotNull() {
Task task = taskService.createTaskQuery().taskId(taskIds.get(0)).singleResult();
assertNotNull(task.getDescription());
assertNotNull(task.getId());
assertNotNull(task.getName());
assertNotNull(task.getCreateTime());
}
public void testQueryNoCriteria() {
TaskQuery query = taskService.createTaskQuery();
assertEquals(12, query.count());
assertEquals(12, query.list().size());
try {
query.singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByTaskId() {
TaskQuery query = taskService.createTaskQuery().taskId(taskIds.get(0));
assertNotNull(query.singleResult());
assertEquals(1, query.list().size());
assertEquals(1, query.count());
}
public void testQueryByInvalidTaskId() {
TaskQuery query = taskService.createTaskQuery().taskId("invalid");
assertNull(query.singleResult());
assertEquals(0, query.list().size());
assertEquals(0, query.count());
try {
taskService.createTaskQuery().taskId(null);
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByName() {
TaskQuery query = taskService.createTaskQuery().taskName("testTask");
assertEquals(6, query.list().size());
assertEquals(6, query.count());
try {
query.singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByInvalidName() {
TaskQuery query = taskService.createTaskQuery().taskName("invalid");
assertNull(query.singleResult());
assertEquals(0, query.list().size());
assertEquals(0, query.count());
try {
taskService.createTaskQuery().taskName(null).singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByNameLike() {
TaskQuery query = taskService.createTaskQuery().taskNameLike("gonzo%");
assertNotNull(query.singleResult());
assertEquals(1, query.list().size());
assertEquals(1, query.count());
}
public void testQueryByInvalidNameLike() {
TaskQuery query = taskService.createTaskQuery().taskName("1");
assertNull(query.singleResult());
assertEquals(0, query.list().size());
assertEquals(0, query.count());
try {
taskService.createTaskQuery().taskName(null).singleResult();
fail();
} catch (ActivitiException e) { }
}
public void testQueryByDescription() {
TaskQuery query = taskService.createTaskQuery().taskDescription("testTask description");
assertEquals(6, query.list().size());
assertEquals(6, query.count());
try {
query.singleResult();
fail();
} catch (ActivitiException e) {}
}
public void testQueryByInvalidDescription() {
TaskQuery query = taskService.createTaskQuery().taskDescription("invalid");
assertNull(query.singleResult());
assertEquals(0, query.list().size());
assertEquals(0, query.count());
try {
taskService.createTaskQuery().taskDescription(null).list();
fail();
} catch (ActivitiException e) {
}
}
public void testQueryByDescriptionLike() {
TaskQuery query = taskService.createTaskQuery().taskDescriptionLike("%gonzo%");
assertNotNull(query.singleResult());
assertEquals(1, query.list().size());
assertEquals(1, query.count());
}
public void testQueryByInvalidDescriptionLike() {
TaskQuery query = taskService.createTaskQuery().taskDescriptionLike("invalid");
assertNull(query.singleResult());
assertEquals(0, query.list().size());
assertEquals(0, query.count());
try {
taskService.createTaskQuery().taskDescriptionLike(null).list();
fail();
} catch (ActivitiException e) {
}
}
public void testQueryByPriority() {
TaskQuery query = taskService.createTaskQuery().taskPriority(10);
assertEquals(2, query.list().size());
assertEquals(2, query.count());
try {
query.singleResult();
fail();
} catch (ActivitiException e) {}
query = taskService.createTaskQuery().taskPriority(100);
assertNull(query.singleResult());
assertEquals(0, query.list().size());
assertEquals(0, query.count());
query = taskService.createTaskQuery().taskMinPriority(50);
assertEquals(3, query.list().size());
query = taskService.createTaskQuery().taskMinPriority(10);
assertEquals(5, query.list().size());
query = taskService.createTaskQuery().taskMaxPriority(10);
assertEquals(9, query.list().size());
query = taskService.createTaskQuery().taskMaxPriority(3);
assertEquals(6, query.list().size());
}
public void testQueryByInvalidPriority() {
try {
taskService.createTaskQuery().taskPriority(null);
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByAssignee() {
TaskQuery query = taskService.createTaskQuery().taskAssignee("gonzo");
assertEquals(1, query.count());
assertEquals(1, query.list().size());
assertNotNull(query.singleResult());
query = taskService.createTaskQuery().taskAssignee("kermit");
assertEquals(0, query.count());
assertEquals(0, query.list().size());
assertNull(query.singleResult());
}
public void testQueryByNullAssignee() {
try {
taskService.createTaskQuery().taskAssignee(null).list();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByUnassigned() {
TaskQuery query = taskService.createTaskQuery().taskUnassigned();
assertEquals(11, query.count());
assertEquals(11, query.list().size());
}
public void testQueryByCandidateUser() {
TaskQuery query = taskService.createTaskQuery().taskCandidateUser("kermit");
assertEquals(11, query.count());
assertEquals(11, query.list().size());
try {
query.singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
query = taskService.createTaskQuery().taskCandidateUser("fozzie");
assertEquals(3, query.count());
assertEquals(3, query.list().size());
try {
query.singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByNullCandidateUser() {
try {
taskService.createTaskQuery().taskCandidateUser(null).list();
fail();
} catch(ActivitiException e) {}
}
public void testQueryByCandidateGroup() {
TaskQuery query = taskService.createTaskQuery().taskCandidateGroup("management");
assertEquals(3, query.count());
assertEquals(3, query.list().size());
try {
query.singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
query = taskService.createTaskQuery().taskCandidateGroup("sales");
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
public void testQueryByNullCandidateGroup() {
try {
taskService.createTaskQuery().taskCandidateGroup(null).list();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByCandidateGroupIn() {
List<String> groups = Arrays.asList("management", "accountancy");
TaskQuery query = taskService.createTaskQuery().taskCandidateGroupIn(groups);
assertEquals(5, query.count());
assertEquals(5, query.list().size());
try {
query.singleResult();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
// Unexisting groups or groups that don't have candidate tasks shouldn't influence other results
groups = Arrays.asList("management", "accountancy", "sales", "unexising");
query = taskService.createTaskQuery().taskCandidateGroupIn(groups);
assertEquals(5, query.count());
assertEquals(5, query.list().size());
}
public void testQueryByNullCandidateGroupIn() {
try {
taskService.createTaskQuery().taskCandidateGroupIn(null).list();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
try {
taskService.createTaskQuery().taskCandidateGroupIn(new ArrayList<String>()).list();
fail("expected exception");
} catch (ActivitiException e) {
// OK
}
}
public void testQueryByDelegationState() {
TaskQuery query = taskService.createTaskQuery().taskDelegationState(null);
assertEquals(12, query.count());
assertEquals(12, query.list().size());
query = taskService.createTaskQuery().taskDelegationState(DelegationState.PENDING);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
query = taskService.createTaskQuery().taskDelegationState(DelegationState.RESOLVED);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
String taskId= taskService.createTaskQuery().taskAssignee("gonzo").singleResult().getId();
taskService.delegateTask(taskId, "kermit");
query = taskService.createTaskQuery().taskDelegationState(null);
assertEquals(11, query.count());
assertEquals(11, query.list().size());
query = taskService.createTaskQuery().taskDelegationState(DelegationState.PENDING);
assertEquals(1, query.count());
assertEquals(1, query.list().size());
query = taskService.createTaskQuery().taskDelegationState(DelegationState.RESOLVED);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
taskService.resolveTask(taskId);
query = taskService.createTaskQuery().taskDelegationState(null);
assertEquals(11, query.count());
assertEquals(11, query.list().size());
query = taskService.createTaskQuery().taskDelegationState(DelegationState.PENDING);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
query = taskService.createTaskQuery().taskDelegationState(DelegationState.RESOLVED);
assertEquals(1, query.count());
assertEquals(1, query.list().size());
}
public void testQueryCreatedOn() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Exact matching of createTime, should result in 6 tasks
Date createTime = sdf.parse("01/01/2001 01:01:01.000");
TaskQuery query = taskService.createTaskQuery().taskCreatedOn(createTime);
assertEquals(6, query.count());
assertEquals(6, query.list().size());
}
public void testQueryCreatedBefore() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Should result in 7 tasks
Date before = sdf.parse("03/02/2002 02:02:02.000");
TaskQuery query = taskService.createTaskQuery().taskCreatedBefore(before);
assertEquals(7, query.count());
assertEquals(7, query.list().size());
before = sdf.parse("01/01/2001 01:01:01.000");
query = taskService.createTaskQuery().taskCreatedBefore(before);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
public void testQueryCreatedAfter() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Should result in 3 tasks
Date after = sdf.parse("03/03/2003 03:03:03.000");
TaskQuery query = taskService.createTaskQuery().taskCreatedAfter(after);
assertEquals(3, query.count());
assertEquals(3, query.list().size());
after = sdf.parse("05/05/2005 05:05:05.000");
query = taskService.createTaskQuery().taskCreatedAfter(after);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
@Deployment(resources="org/activiti/engine/test/api/task/taskDefinitionProcess.bpmn20.xml")
public void testTaskDefinitionKey() throws Exception {
// Start process instance, 2 tasks will be available
runtimeService.startProcessInstanceByKey("taskDefinitionKeyProcess");
// 1 task should exist with key "taskKey1"
List<Task> tasks = taskService.createTaskQuery().taskDefinitionKey("taskKey1").list();
assertNotNull(tasks);
assertEquals(1, tasks.size());
assertEquals("taskKey1", tasks.get(0).getTaskDefinitionKey());
// No task should be found with unexisting key
Long count = taskService.createTaskQuery().taskDefinitionKey("unexistingKey").count();
assertEquals(0L, count.longValue());
}
@Deployment(resources="org/activiti/engine/test/api/task/taskDefinitionProcess.bpmn20.xml")
public void testTaskDefinitionKeyLike() throws Exception {
// Start process instance, 2 tasks will be available
runtimeService.startProcessInstanceByKey("taskDefinitionKeyProcess");
// Ends with matching, TaskKey1 and TaskKey123 match
List<Task> tasks = taskService.createTaskQuery().taskDefinitionKeyLike("taskKey1%").orderByTaskName().asc().list();
assertNotNull(tasks);
assertEquals(2, tasks.size());
assertEquals("taskKey1", tasks.get(0).getTaskDefinitionKey());
assertEquals("taskKey123", tasks.get(1).getTaskDefinitionKey());
// Starts with matching, TaskKey123 matches
tasks = taskService.createTaskQuery().taskDefinitionKeyLike("%123").orderByTaskName().asc().list();
assertNotNull(tasks);
assertEquals(1, tasks.size());
assertEquals("taskKey123", tasks.get(0).getTaskDefinitionKey());
// Contains matching, TaskKey123 matches
tasks = taskService.createTaskQuery().taskDefinitionKeyLike("%Key12%").orderByTaskName().asc().list();
assertNotNull(tasks);
assertEquals(1, tasks.size());
assertEquals("taskKey123", tasks.get(0).getTaskDefinitionKey());
// No task should be found with unexisting key
Long count = taskService.createTaskQuery().taskDefinitionKeyLike("%unexistingKey%").count();
assertEquals(0L, count.longValue());
}
@Deployment
public void testTaskVariableValueEquals() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// No task should be found for an unexisting var
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("unexistingVar", "value").count());
// Create a map with a variable for all default types
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("longVar", 928374L);
variables.put("shortVar", (short) 123);
variables.put("integerVar", 1234);
variables.put("stringVar", "stringValue");
variables.put("booleanVar", true);
Date date = Calendar.getInstance().getTime();
variables.put("dateVar", date);
variables.put("nullVar", null);
taskService.setVariablesLocal(task.getId(), variables);
// Test query matches
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("longVar", 928374L).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("shortVar", (short) 123).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("integerVar", 1234).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("stringVar", "stringValue").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("booleanVar", true).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("dateVar", date).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("nullVar", null).count());
// Test query for other values on existing variables
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("longVar", 999L).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("shortVar", (short) 999).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("integerVar", 999).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("stringVar", "999").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("booleanVar", false).count());
Calendar otherDate = Calendar.getInstance();
otherDate.add(Calendar.YEAR, 1);
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("dateVar", otherDate.getTime()).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("nullVar", "999").count());
// Test query for not equals
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEquals("longVar", 999L).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEquals("shortVar", (short) 999).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEquals("integerVar", 999).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEquals("stringVar", "999").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEquals("booleanVar", false).count());
// Test value-only variable equals
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals(928374L).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals((short) 123).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals(1234).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals("stringValue").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals(true).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals(date).count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEquals(null).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals(999999L).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals((short) 999).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals(9999).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("unexistingstringvalue").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals(false).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals(otherDate.getTime()).count());
}
@Deployment
public void testProcessVariableValueEquals() throws Exception {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("longVar", 928374L);
variables.put("shortVar", (short) 123);
variables.put("integerVar", 1234);
variables.put("stringVar", "stringValue");
variables.put("booleanVar", true);
Date date = Calendar.getInstance().getTime();
variables.put("dateVar", date);
variables.put("nullVar", null);
// Start process-instance with all types of variables
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", variables);
// Test query matches
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("longVar", 928374L).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("shortVar", (short) 123).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("integerVar", 1234).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("stringVar", "stringValue").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("booleanVar", true).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("dateVar", date).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("nullVar", null).count());
// Test query for other values on existing variables
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("longVar", 999L).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("shortVar", (short) 999).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("integerVar", 999).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("stringVar", "999").count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("booleanVar", false).count());
Calendar otherDate = Calendar.getInstance();
otherDate.add(Calendar.YEAR, 1);
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("dateVar", otherDate.getTime()).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("nullVar", "999").count());
// Test querying for task variables don't match the process-variables
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("longVar", 928374L).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("shortVar", (short) 123).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("integerVar", 1234).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("stringVar", "stringValue").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("booleanVar", true).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("dateVar", date).count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEquals("nullVar", null).count());
// Test querying for task variables not equals
assertEquals(1, taskService.createTaskQuery().processVariableValueNotEquals("longVar", 999L).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueNotEquals("shortVar", (short) 999).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueNotEquals("integerVar", 999).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueNotEquals("stringVar", "999").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueNotEquals("booleanVar", false).count());
// and query for the existing variable with NOT shoudl result in nothing found:
assertEquals(0, taskService.createTaskQuery().processVariableValueNotEquals("longVar", 928374L).count());
// Test value-only variable equals
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals(928374L).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals((short) 123).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals(1234).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals("stringValue").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals(true).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals(date).count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEquals(null).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals(999999L).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals((short) 999).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals(9999).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals("unexistingstringvalue").count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals(false).count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEquals(otherDate.getTime()).count());
// Test combination of task-variable and process-variable
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.setVariableLocal(task.getId(), "taskVar", "theValue");
taskService.setVariableLocal(task.getId(), "longVar", 928374L);
assertEquals(1, taskService.createTaskQuery()
.processVariableValueEquals("longVar", 928374L)
.taskVariableValueEquals("taskVar", "theValue")
.count());
assertEquals(1, taskService.createTaskQuery()
.processVariableValueEquals("longVar", 928374L)
.taskVariableValueEquals("longVar", 928374L)
.count());
assertEquals(1, taskService.createTaskQuery()
.processVariableValueEquals(928374L)
.taskVariableValueEquals("theValue")
.count());
assertEquals(1, taskService.createTaskQuery()
.processVariableValueEquals(928374L)
.taskVariableValueEquals(928374L)
.count());
}
@Deployment(resources="org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml")
public void testVariableValueEqualsIgnoreCase() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(task);
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("mixed", "AzerTY");
variables.put("upper", "AZERTY");
variables.put("lower", "azerty");
taskService.setVariablesLocal(task.getId(), variables);
assertEquals(1, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("mixed", "azerTY").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("mixed", "azerty").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("mixed", "uiop").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("upper", "azerTY").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("upper", "azerty").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("upper", "uiop").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("lower", "azerTY").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("lower", "azerty").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueEqualsIgnoreCase("lower", "uiop").count());
// Test not-equals
assertEquals(0, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("mixed", "azerTY").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("mixed", "azerty").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("mixed", "uiop").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("upper", "azerTY").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("upper", "azerty").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("upper", "uiop").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("lower", "azerTY").count());
assertEquals(0, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("lower", "azerty").count());
assertEquals(1, taskService.createTaskQuery().taskVariableValueNotEqualsIgnoreCase("lower", "uiop").count());
}
@Deployment(resources="org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml")
public void testProcessVariableValueEqualsIgnoreCase() throws Exception {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("mixed", "AzerTY");
variables.put("upper", "AZERTY");
variables.put("lower", "azerty");
runtimeService.startProcessInstanceByKey("oneTaskProcess", variables);
assertEquals(1, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("mixed", "azerTY").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("mixed", "azerty").count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("mixed", "uiop").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("upper", "azerTY").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("upper", "azerty").count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("upper", "uiop").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("lower", "azerTY").count());
assertEquals(1, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("lower", "azerty").count());
assertEquals(0, taskService.createTaskQuery().processVariableValueEqualsIgnoreCase("lower", "uiop").count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testProcessDefinitionId() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
List<Task> tasks = taskService.createTaskQuery().processDefinitionId(processInstance.getProcessDefinitionId()).list();
assertEquals(1, tasks.size());
assertEquals(processInstance.getId(), tasks.get(0).getProcessInstanceId());
assertEquals(0, taskService.createTaskQuery().processDefinitionId("unexisting").count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testProcessDefinitionKey() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
List<Task> tasks = taskService.createTaskQuery().processDefinitionKey("oneTaskProcess").list();
assertEquals(1, tasks.size());
assertEquals(processInstance.getId(), tasks.get(0).getProcessInstanceId());
assertEquals(0, taskService.createTaskQuery().processDefinitionKey("unexisting").count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testProcessDefinitionName() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
List<Task> tasks = taskService.createTaskQuery().processDefinitionName("The One Task Process").list();
assertEquals(1, tasks.size());
assertEquals(processInstance.getId(), tasks.get(0).getProcessInstanceId());
assertEquals(0, taskService.createTaskQuery().processDefinitionName("unexisting").count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testProcessInstanceBusinessKey() throws Exception {
runtimeService.startProcessInstanceByKey("oneTaskProcess", "BUSINESS-KEY-1");
assertEquals(1, taskService.createTaskQuery().processDefinitionName("The One Task Process").processInstanceBusinessKey("BUSINESS-KEY-1").list().size());
assertEquals(1, taskService.createTaskQuery().processInstanceBusinessKey("BUSINESS-KEY-1").list().size());
assertEquals(0, taskService.createTaskQuery().processInstanceBusinessKey("NON-EXISTING").count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testTaskDueDate() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// Set due-date on task
Date dueDate = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").parse("01/02/2003 01:12:13");
task.setDueDate(dueDate);
taskService.saveTask(task);
assertEquals(1, taskService.createTaskQuery().dueDate(dueDate).count());
Calendar otherDate = Calendar.getInstance();
otherDate.add(Calendar.YEAR, 1);
assertEquals(0, taskService.createTaskQuery().dueDate(otherDate.getTime()).count());
Calendar priorDate = Calendar.getInstance();
priorDate.setTime(dueDate);
priorDate.roll(Calendar.YEAR, -1);
assertEquals(1, taskService.createTaskQuery().dueAfter(priorDate.getTime())
.count());
assertEquals(1, taskService.createTaskQuery()
.dueBefore(otherDate.getTime()).count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testTaskDueBefore() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// Set due-date on task
Calendar dueDateCal = Calendar.getInstance();
task.setDueDate(dueDateCal.getTime());
taskService.saveTask(task);
Calendar oneHourAgo = Calendar.getInstance();
oneHourAgo.setTime(dueDateCal.getTime());
oneHourAgo.add(Calendar.HOUR, -1);
Calendar oneHourLater = Calendar.getInstance();
oneHourLater.setTime(dueDateCal.getTime());
oneHourLater.add(Calendar.HOUR, 1);
assertEquals(1, taskService.createTaskQuery().dueBefore(oneHourLater.getTime()).count());
assertEquals(0, taskService.createTaskQuery().dueBefore(oneHourAgo.getTime()).count());
// Update due-date to null, shouldn't show up anymore in query that matched before
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setDueDate(null);
taskService.saveTask(task);
assertEquals(0, taskService.createTaskQuery().dueBefore(oneHourLater.getTime()).count());
assertEquals(0, taskService.createTaskQuery().dueBefore(oneHourAgo.getTime()).count());
}
@Deployment(resources={"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"})
public void testTaskDueAfter() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// Set due-date on task
Calendar dueDateCal = Calendar.getInstance();
task.setDueDate(dueDateCal.getTime());
taskService.saveTask(task);
Calendar oneHourAgo = Calendar.getInstance();
oneHourAgo.setTime(dueDateCal.getTime());
oneHourAgo.add(Calendar.HOUR, -1);
Calendar oneHourLater = Calendar.getInstance();
oneHourLater.setTime(dueDateCal.getTime());
oneHourLater.add(Calendar.HOUR, 1);
assertEquals(1, taskService.createTaskQuery().dueAfter(oneHourAgo.getTime()).count());
assertEquals(0, taskService.createTaskQuery().dueAfter(oneHourLater.getTime()).count());
// Update due-date to null, shouldn't show up anymore in query that matched before
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setDueDate(null);
taskService.saveTask(task);
assertEquals(0, taskService.createTaskQuery().dueAfter(oneHourLater.getTime()).count());
assertEquals(0, taskService.createTaskQuery().dueAfter(oneHourAgo.getTime()).count());
}
public void testQueryPaging() {
TaskQuery query = taskService.createTaskQuery().taskCandidateUser("kermit");
assertEquals(11, query.listPage(0, Integer.MAX_VALUE).size());
// Verifying the un-paged results
assertEquals(11, query.count());
assertEquals(11, query.list().size());
// Verifying paged results
assertEquals(2, query.listPage(0, 2).size());
assertEquals(2, query.listPage(2, 2).size());
assertEquals(3, query.listPage(4, 3).size());
assertEquals(1, query.listPage(10, 3).size());
assertEquals(1, query.listPage(10, 1).size());
// Verifying odd usages
assertEquals(0, query.listPage(-1, -1).size());
assertEquals(0, query.listPage(11, 2).size()); // 10 is the last index with a result
assertEquals(11, query.listPage(0, 15).size()); // there are only 11 tasks
}
public void testQuerySorting() {
assertEquals(12, taskService.createTaskQuery().orderByTaskId().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskName().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskPriority().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskAssignee().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskDescription().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByProcessInstanceId().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByExecutionId().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskCreateTime().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByDueDate().asc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskId().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskName().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskPriority().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskAssignee().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskDescription().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByProcessInstanceId().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByExecutionId().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByTaskCreateTime().desc().list().size());
assertEquals(12, taskService.createTaskQuery().orderByDueDate().desc().list().size());
assertEquals(6, taskService.createTaskQuery().orderByTaskId().taskName("testTask").asc().list().size());
assertEquals(6, taskService.createTaskQuery().orderByTaskId().taskName("testTask").desc().list().size());
}
public void testNativeQuery() {
assertEquals("ACT_RU_TASK", managementService.getTableName(Task.class));
assertEquals("ACT_RU_TASK", managementService.getTableName(TaskEntity.class));
assertEquals(12, taskService.createNativeTaskQuery().sql("SELECT * FROM " + managementService.getTableName(Task.class)).list().size());
assertEquals(12, taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class)).count());
assertEquals(144, taskService.createNativeTaskQuery().sql("SELECT count(*) FROM ACT_RU_TASK T1, ACT_RU_TASK T2").count());
// join task and variable instances
assertEquals(1, taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T1, "+managementService.getTableName(VariableInstanceEntity.class)+" V1 WHERE V1.TASK_ID_ = T1.ID_").count());
List<Task> tasks = taskService.createNativeTaskQuery().sql("SELECT * FROM " + managementService.getTableName(Task.class) + " T1, "+managementService.getTableName(VariableInstanceEntity.class)+" V1 WHERE V1.TASK_ID_ = T1.ID_").list();
assertEquals(1, tasks.size());
assertEquals("gonzoTask", tasks.get(0).getName());
// select with distinct
assertEquals(12, taskService.createNativeTaskQuery().sql("SELECT DISTINCT T1.* FROM ACT_RU_TASK T1").list().size());
assertEquals(1, taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = 'gonzoTask'").count());
assertEquals(1, taskService.createNativeTaskQuery().sql("SELECT * FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = 'gonzoTask'").list().size());
// use parameters
assertEquals(1, taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = #{taskName}").parameter("taskName", "gonzoTask").count());
}
/**
* Generates some test tasks. - 6 tasks where kermit is a candidate - 1 tasks
* where gonzo is assignee - 2 tasks assigned to management group - 2 tasks
* assigned to accountancy group - 1 task assigned to both the management and
* accountancy group
*/
private List<String> generateTestTasks() throws Exception {
List<String> ids = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// 6 tasks for kermit
ClockUtil.setCurrentTime(sdf.parse("01/01/2001 01:01:01.000"));
for (int i = 0; i < 6; i++) {
Task task = taskService.newTask();
task.setName("testTask");
task.setDescription("testTask description");
task.setPriority(3);
taskService.saveTask(task);
ids.add(task.getId());
taskService.addCandidateUser(task.getId(), "kermit");
}
ClockUtil.setCurrentTime(sdf.parse("02/02/2002 02:02:02.000"));
// 1 task for gonzo
Task task = taskService.newTask();
task.setName("gonzoTask");
task.setDescription("gonzo description");
task.setPriority(4);
taskService.saveTask(task);
taskService.setAssignee(task.getId(), "gonzo");
taskService.setVariable(task.getId(), "testVar", "someVariable");
ids.add(task.getId());
ClockUtil.setCurrentTime(sdf.parse("03/03/2003 03:03:03.000"));
// 2 tasks for management group
for (int i = 0; i < 2; i++) {
task = taskService.newTask();
task.setName("managementTask");
task.setPriority(10);
taskService.saveTask(task);
taskService.addCandidateGroup(task.getId(), "management");
ids.add(task.getId());
}
ClockUtil.setCurrentTime(sdf.parse("04/04/2004 04:04:04.000"));
// 2 tasks for accountancy group
for (int i = 0; i < 2; i++) {
task = taskService.newTask();
task.setName("accountancyTask");
task.setName("accountancy description");
taskService.saveTask(task);
taskService.addCandidateGroup(task.getId(), "accountancy");
ids.add(task.getId());
}
ClockUtil.setCurrentTime(sdf.parse("05/05/2005 05:05:05.000"));
// 1 task assigned to management and accountancy group
task = taskService.newTask();
task.setName("managementAndAccountancyTask");
taskService.saveTask(task);
taskService.addCandidateGroup(task.getId(), "management");
taskService.addCandidateGroup(task.getId(), "accountancy");
ids.add(task.getId());
return ids;
}
}