mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
ALF-8140 Created unit test in AbstractWorkflowServiceIntegrationTest to test the number of results returned by queryTasks() can be limited. Implemented this functionality for ActivitiWorkflowEngine.queryTasks().
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28357 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -73,6 +73,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
protected final static String USER3 = "WFUser3" + GUID.generate();
|
||||
protected final static String GROUP = "WFGroup" + GUID.generate();
|
||||
protected final static String SUB_GROUP = "WFSubGroup" + GUID.generate();
|
||||
protected final static QName customStringProp = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "customStringProp");
|
||||
|
||||
protected WorkflowService workflowService;
|
||||
protected AuthenticationComponent authenticationComponent;
|
||||
@@ -576,26 +577,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
WorkflowDefinition workflowDef = deployDefinition(getAdhocDefinitionPath());
|
||||
assertNotNull(workflowDef);
|
||||
|
||||
// Create params
|
||||
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||
Serializable wfPackage = workflowService.createPackage(null);
|
||||
params.put(WorkflowModel.ASSOC_PACKAGE, wfPackage);
|
||||
Date dueDate = new Date();
|
||||
params.put(WorkflowModel.PROP_WORKFLOW_DUE_DATE, dueDate);
|
||||
params.put(WorkflowModel.PROP_WORKFLOW_PRIORITY, 1);
|
||||
params.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, "Test workflow description");
|
||||
QName customStringProp = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "customStringProp");
|
||||
params.put(customStringProp, "stringValue");
|
||||
|
||||
// Assign to USER2
|
||||
NodeRef assignee = personManager.get(USER2);
|
||||
params.put(WorkflowModel.ASSOC_ASSIGNEE, assignee);
|
||||
|
||||
// Start a workflow instance
|
||||
WorkflowPath path = workflowService.startWorkflow(workflowDef.getId(), params);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.isActive());
|
||||
String workflowInstanceId = path.getInstance().getId();
|
||||
String workflowInstanceId = startAdhocWorkflow(workflowDef, USER2);
|
||||
|
||||
// End start task to progress workflow
|
||||
WorkflowTask startTask = workflowService.getStartTask(workflowInstanceId);
|
||||
@@ -605,30 +587,54 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
WorkflowTask theTask = getNextTaskForWorkflow(workflowInstanceId);
|
||||
|
||||
// Set some custom properties on the task
|
||||
params = new HashMap<QName, Serializable>();
|
||||
HashMap<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||
params.put(customStringProp, "stringValue");
|
||||
workflowService.updateTask(theTask.getId(), params, null, null);
|
||||
|
||||
// Test all query features for running tasks
|
||||
testTaskQueryInProgress(workflowInstanceId, theTask);
|
||||
checkTaskQueryInProgress(workflowInstanceId, theTask);
|
||||
|
||||
// Test all query features for the start-task
|
||||
testTaskQueryStartTaskCompleted(workflowInstanceId, startTask);
|
||||
checkTaskQueryStartTaskCompleted(workflowInstanceId, startTask);
|
||||
|
||||
// Finish the task adhoc-task
|
||||
workflowService.endTask(theTask.getId(), null);
|
||||
|
||||
// Test all query features for completed tasks
|
||||
testTaskQueryTaskCompleted(workflowInstanceId, theTask, startTask);
|
||||
checkTaskQueryTaskCompleted(workflowInstanceId, theTask, startTask);
|
||||
|
||||
// Finally end the workflow and check the querying isActive == false
|
||||
WorkflowTask lastTask = getNextTaskForWorkflow(workflowInstanceId);
|
||||
workflowService.endTask(lastTask.getId(), null);
|
||||
|
||||
testQueryTasksInactiveWorkflow(workflowInstanceId);
|
||||
checkQueryTasksInactiveWorkflow(workflowInstanceId);
|
||||
}
|
||||
|
||||
protected void testQueryTasksInactiveWorkflow(String workflowInstanceId) {
|
||||
public void testQueryTaskLimit() throws Exception
|
||||
{
|
||||
WorkflowDefinition workflowDef = deployDefinition(getAdhocDefinitionPath());
|
||||
|
||||
// execute 5 instances of the adhoc workflow
|
||||
for (int x = 0; x < 5; x++)
|
||||
{
|
||||
executeAdhocWorkflow(workflowDef);
|
||||
}
|
||||
|
||||
// ensure there more than 5 tasks returned.
|
||||
WorkflowTaskQuery query = new WorkflowTaskQuery();
|
||||
query.setActive(false);
|
||||
query.setActorId(USER3);
|
||||
query.setTaskState(WorkflowTaskState.COMPLETED);
|
||||
List<WorkflowTask> tasks = workflowService.queryTasks(query);
|
||||
assertTrue(tasks.size()>5);
|
||||
|
||||
// limit the results and ensure we get the correct number of results back
|
||||
query.setLimit(5);
|
||||
tasks = workflowService.queryTasks(query);
|
||||
assertEquals(5, tasks.size());
|
||||
}
|
||||
|
||||
protected void checkQueryTasksInactiveWorkflow(String workflowInstanceId) {
|
||||
WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(WorkflowTaskState.COMPLETED);
|
||||
taskQuery.setActive(false);
|
||||
|
||||
@@ -641,7 +647,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
checkNoTasksFoundUsingQuery(taskQuery);
|
||||
}
|
||||
|
||||
protected void testTaskQueryTaskCompleted(String workflowInstanceId,
|
||||
protected void checkTaskQueryTaskCompleted(String workflowInstanceId,
|
||||
WorkflowTask theTask, WorkflowTask startTask)
|
||||
{
|
||||
List<String> expectedTasks = Arrays.asList(theTask.getId(), startTask.getId());
|
||||
@@ -661,7 +667,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
checkTaskPropsQuery(expectedTasks, WorkflowTaskState.COMPLETED, null);
|
||||
}
|
||||
|
||||
protected void testTaskQueryInProgress(String workflowInstanceId, WorkflowTask expectedTask)
|
||||
protected void checkTaskQueryInProgress(String workflowInstanceId, WorkflowTask expectedTask)
|
||||
{
|
||||
List<String> expectedTasks = Arrays.asList(expectedTask.getId());
|
||||
|
||||
@@ -676,7 +682,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
checkProcessPropsQuery(expectedTasks, WorkflowTaskState.IN_PROGRESS);
|
||||
}
|
||||
|
||||
protected void testTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask) {
|
||||
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask) {
|
||||
List<String> expectedTasks = Arrays.asList(startTask.getId());
|
||||
|
||||
checkProcessIdQuery(workflowInstanceId, expectedTasks, WorkflowTaskState.COMPLETED);
|
||||
@@ -928,7 +934,6 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
String optionalProcessId)
|
||||
{
|
||||
WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(state);
|
||||
QName customStringProp = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "customStringProp");
|
||||
Map<QName, Object> taskProps = new HashMap<QName, Object>();
|
||||
|
||||
taskProps.put(customStringProp, "stringValue");
|
||||
@@ -1070,6 +1075,52 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
|
||||
assertEquals(expDef.getVersion(), actualDef.getVersion());
|
||||
}
|
||||
|
||||
private void executeAdhocWorkflow(WorkflowDefinition workflowDef)
|
||||
{
|
||||
personManager.setUser(USER3);
|
||||
String workflowId = startAdhocWorkflow(workflowDef, USER3);
|
||||
|
||||
// End start task to progress workflow
|
||||
WorkflowTask startTask = workflowService.getStartTask(workflowId);
|
||||
String startTaskId = startTask.getId();
|
||||
workflowService.endTask(startTaskId, null);
|
||||
|
||||
// finish the adhoc task
|
||||
WorkflowTask adhocTask = getNextTaskForWorkflow(workflowId);
|
||||
workflowService.endTask(adhocTask.getId(), null);
|
||||
|
||||
// finish the workflow
|
||||
WorkflowTask lastTask = getNextTaskForWorkflow(workflowId);
|
||||
workflowService.endTask(lastTask.getId(), null);
|
||||
|
||||
// ensure the workflow has completed
|
||||
assertFalse(workflowService.getWorkflowById(workflowId).isActive());
|
||||
}
|
||||
|
||||
private String startAdhocWorkflow(WorkflowDefinition workflowDef, String assigneeId)
|
||||
{
|
||||
// Create params
|
||||
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||
Serializable wfPackage = workflowService.createPackage(null);
|
||||
params.put(WorkflowModel.ASSOC_PACKAGE, wfPackage);
|
||||
Date dueDate = new Date();
|
||||
params.put(WorkflowModel.PROP_WORKFLOW_DUE_DATE, dueDate);
|
||||
params.put(WorkflowModel.PROP_WORKFLOW_PRIORITY, 1);
|
||||
params.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, "Test workflow description");
|
||||
|
||||
params.put(customStringProp, "stringValue");
|
||||
|
||||
// Assign to USER2
|
||||
NodeRef assignee = personManager.get(assigneeId);
|
||||
params.put(WorkflowModel.ASSOC_ASSIGNEE, assignee);
|
||||
|
||||
// Start a workflow instance
|
||||
WorkflowPath path = workflowService.startWorkflow(workflowDef.getId(), params);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.isActive());
|
||||
return path.getInstance().getId();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
protected void onSetUpInTransaction() throws Exception
|
||||
|
@@ -111,7 +111,6 @@ import org.xml.sax.InputSource;
|
||||
* @since 3.4.e
|
||||
* @author Nick Smith
|
||||
* @author Frederik Heremans
|
||||
*
|
||||
*/
|
||||
public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
{
|
||||
@@ -1425,13 +1424,15 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
{
|
||||
// Add task name
|
||||
TaskQuery taskQuery = taskService.createTaskQuery();
|
||||
if(query.getTaskName() != null) {
|
||||
if (query.getTaskName() != null)
|
||||
{
|
||||
// Task 'key' is stored as variable on task
|
||||
String formKey = query.getTaskName().toPrefixString(namespaceService);
|
||||
taskQuery.taskVariableValueEquals(ActivitiConstants.PROP_TASK_FORM_KEY, formKey);
|
||||
}
|
||||
|
||||
if(query.getProcessId() != null) {
|
||||
if (query.getProcessId() != null)
|
||||
{
|
||||
String processInstanceId = createLocalId(query.getProcessId());
|
||||
taskQuery.processInstanceId(processInstanceId);
|
||||
}
|
||||
@@ -1442,12 +1443,13 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
taskQuery.processDefinitionKey(processName);
|
||||
}
|
||||
|
||||
|
||||
if(query.getActorId() != null) {
|
||||
if (query.getActorId() != null)
|
||||
{
|
||||
taskQuery.taskAssignee(query.getActorId());
|
||||
}
|
||||
|
||||
if(query.getTaskId() != null) {
|
||||
if (query.getTaskId() != null)
|
||||
{
|
||||
String taskId = createLocalId(query.getTaskId());
|
||||
taskQuery.taskId(taskId);
|
||||
}
|
||||
@@ -1469,8 +1471,17 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
orderQuery(taskQuery, orderBy);
|
||||
}
|
||||
|
||||
List<WorkflowTask> currentTasks = typeConverter.convert(taskQuery.list());
|
||||
return currentTasks;
|
||||
List<Task> results;
|
||||
int limit = query.getLimit();
|
||||
if (limit > 0)
|
||||
{
|
||||
results = taskQuery.listPage(0, limit);
|
||||
}
|
||||
else
|
||||
{
|
||||
results = taskQuery.list();
|
||||
}
|
||||
return typeConverter.convert(results);
|
||||
}
|
||||
return new ArrayList<WorkflowTask>();
|
||||
}
|
||||
@@ -1611,11 +1622,10 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
|
||||
private List<WorkflowTask> queryHistoricTasks(WorkflowTaskQuery query)
|
||||
{
|
||||
HistoricTaskInstanceQuery historicQuery = historyService
|
||||
.createHistoricTaskInstanceQuery()
|
||||
.finished();
|
||||
HistoricTaskInstanceQuery historicQuery = historyService.createHistoricTaskInstanceQuery().finished();
|
||||
|
||||
if(query.getTaskId() != null) {
|
||||
if (query.getTaskId() != null)
|
||||
{
|
||||
String taskId = createLocalId(query.getTaskId());
|
||||
historicQuery.taskId(taskId);
|
||||
}
|
||||
@@ -1654,7 +1664,8 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
|
||||
if (query.isActive() != null)
|
||||
{
|
||||
if(query.isActive()) {
|
||||
if (query.isActive())
|
||||
{
|
||||
historicQuery.processUnfinished();
|
||||
}
|
||||
else
|
||||
@@ -1669,20 +1680,29 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
||||
orderQuery(historicQuery, query.getOrderBy());
|
||||
}
|
||||
|
||||
List<WorkflowTask> workflowTasks = new ArrayList<WorkflowTask>();
|
||||
List<HistoricTaskInstance> historicTasks = historicQuery.list();
|
||||
List<HistoricTaskInstance> results;
|
||||
int limit = query.getLimit();
|
||||
if (limit > 0)
|
||||
{
|
||||
results = historicQuery.listPage(0, limit);
|
||||
}
|
||||
else
|
||||
{
|
||||
results = historicQuery.list();
|
||||
}
|
||||
|
||||
for(HistoricTaskInstance historicTask : historicTasks)
|
||||
List<WorkflowTask> workflowTasks = new ArrayList<WorkflowTask>();
|
||||
for (HistoricTaskInstance historicTask : results)
|
||||
{
|
||||
WorkflowTask wfTask = typeConverter.convert(historicTask);
|
||||
if (wfTask != null)
|
||||
{
|
||||
// Converter returns null if the task belongs to deleted/cancelled WF
|
||||
// Converter returns null if the task belongs to
|
||||
// deleted/cancelled WF
|
||||
workflowTasks.add(wfTask);
|
||||
}
|
||||
}
|
||||
return workflowTasks;
|
||||
|
||||
}
|
||||
|
||||
private void addTaskPropertiesToQuery(Map<QName, Object> taskCustomProps,
|
||||
|
@@ -82,7 +82,8 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
|
||||
assertEquals("Approve", outcome);
|
||||
}
|
||||
|
||||
protected void testTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)
|
||||
@Override
|
||||
protected void checkTaskQueryStartTaskCompleted(String workflowInstanceId, WorkflowTask startTask)
|
||||
{
|
||||
// In activiti, start-tasks only show up when the workflowInstanceId or taskId is passed
|
||||
List<String> expectedTasks = Arrays.asList(startTask.getId());
|
||||
@@ -98,7 +99,8 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
|
||||
checkTaskPropsQuery(expectedTasks, WorkflowTaskState.COMPLETED, workflowInstanceId);
|
||||
}
|
||||
|
||||
protected void testTaskQueryTaskCompleted(String workflowInstanceId,
|
||||
@Override
|
||||
protected void checkTaskQueryTaskCompleted(String workflowInstanceId,
|
||||
WorkflowTask theTask, WorkflowTask startTask)
|
||||
{
|
||||
List<String> bothTasks = Arrays.asList(theTask.getId(), startTask.getId());
|
||||
@@ -124,7 +126,8 @@ public class ActivitiWorkflowServiceIntegrationTest extends AbstractWorkflowServ
|
||||
checkProcessPropsQuery(withoutStartTask, WorkflowTaskState.COMPLETED);
|
||||
}
|
||||
|
||||
protected void testQueryTasksInactiveWorkflow(String workflowInstanceId) {
|
||||
@Override
|
||||
protected void checkQueryTasksInactiveWorkflow(String workflowInstanceId) {
|
||||
WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(WorkflowTaskState.COMPLETED);
|
||||
taskQuery.setActive(false);
|
||||
|
||||
|
@@ -176,6 +176,7 @@ public class WorkflowTaskQuery
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters ont he {@link WorkflowInstance} Id.
|
||||
* @param processId
|
||||
*/
|
||||
public void setProcessId(String processId)
|
||||
@@ -192,6 +193,7 @@ public class WorkflowTaskQuery
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters on the {@link WorkflowDefinition} name.
|
||||
* @param processName
|
||||
*/
|
||||
public void setProcessName(QName processName)
|
||||
|
Reference in New Issue
Block a user