//Test if the task is succesfully created
BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
List<TaskSummary> tasks = responseHandler.getResults();
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskNameParent", task.getName());
assertEquals(10, task.getPriority());
assertEquals("CommentParent", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
//Create the child task
workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskNameChild1");
workItem.setParameter("Comment", "CommentChild1");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setParameter("ParentId", task.getId());
getHandler().executeWorkItem(workItem, manager);
Thread.sleep(500);
//Create the child task2
workItem = new WorkItemImpl();
workItem.setName("Human Task2");
workItem.setParameter("TaskName", "TaskNameChild2");
workItem.setParameter("Comment", "CommentChild2");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setParameter("ParentId", task.getId());
getHandler().executeWorkItem(workItem, manager);
Thread.sleep(500);
//Start the parent task
System.out.println("Starting task " + task.getId());
BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
getClient().start(task.getId(), "Darth Vader", operationResponseHandler);
operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
System.out.println("Started task " + task.getId());
//Check if the parent task is InProgress
BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
getClient().getTask(task.getId(), getTaskResponseHandler);
Task parentTask = getTaskResponseHandler.getTask();
assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
//Get all the subtask created for the parent task based on the potential owner
responseHandler = new BlockingTaskSummaryResponseHandler();
getClient().getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK", responseHandler);
List<TaskSummary> subTasks = responseHandler.getResults();
assertEquals(2, subTasks.size());
TaskSummary subTaskSummary1 = subTasks.get(0);
TaskSummary subTaskSummary2 = subTasks.get(1);
assertNotNull(subTaskSummary1);
assertNotNull(subTaskSummary2);
//Starting the sub task 1
System.out.println("Starting sub task " + subTaskSummary1.getId());
operationResponseHandler = new BlockingTaskOperationResponseHandler();
getClient().start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
System.out.println("Started sub task " + subTaskSummary1.getId());
//Starting the sub task 2
System.out.println("Starting sub task " + subTaskSummary2.getId());
operationResponseHandler = new BlockingTaskOperationResponseHandler();
getClient().start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
System.out.println("Started sub task " + subTaskSummary2.getId());
//Check if the child task 1 is InProgress
getTaskResponseHandler = new BlockingGetTaskResponseHandler();
getClient().getTask(subTaskSummary1.getId(), getTaskResponseHandler);
Task subTask1 = getTaskResponseHandler.getTask();
assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
//Check if the child task 2 is InProgress
getTaskResponseHandler = new BlockingGetTaskResponseHandler();
getClient().getTask(subTaskSummary2.getId(), getTaskResponseHandler);
Task subTask2 = getTaskResponseHandler.getTask();
assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
// Complete the parent task
System.out.println("Completing parent task " + parentTask.getId());
operationResponseHandler = new BlockingTaskOperationResponseHandler();
getClient().skip(parentTask.getId(), "Darth Vader", operationResponseHandler);
operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
System.out.println("Completed parent task " + parentTask.getId());
//Check if the child task 1 is Completed
getTaskResponseHandler = new BlockingGetTaskResponseHandler();
getClient().getTask(subTaskSummary1.getId(), getTaskResponseHandler);
subTask1 = getTaskResponseHandler.getTask();
assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
//Check if the child task 2 is Completed
getTaskResponseHandler = new BlockingGetTaskResponseHandler();
getClient().getTask(subTaskSummary2.getId(), getTaskResponseHandler);
subTask2 = getTaskResponseHandler.getTask();
assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));