public void verifyActiveUserTasks(TaskSummaryList taskSummaryList, TaskSummary taskSummary) { verify(taskSummaryList).getItems(); verify(taskSummary).getName(); verify(taskSummary).getStatus(); verify(taskSummary).getActualOwner(); }
public void verifyActiveUserTasks(TaskSummaryList taskSummaryList, TaskSummary taskSummary) { verify(taskSummaryList).getItems(); verify(taskSummary).getName(); verify(taskSummary).getStatus(); verify(taskSummary).getActualOwner(); }
@Test public void testAddDynamicUserTaskToActiveStage() { String caseId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); List<CaseStage> caseStages = caseClient.getStages(CONTAINER_ID, caseId, false, 0, 50); Assertions.assertThat(caseStages).isNotEmpty(); String activeStageId = caseStages.stream().filter(stage -> STAGE_ACTIVE_STATE.equals(stage.getStatus())) .findFirst() .orElseThrow(() -> new IllegalStateException("No active stage found.")) .getIdentifier(); final String taskName = "ContactCarProducer"; caseClient.addDynamicUserTaskToStage( CONTAINER_ID, caseId, activeStageId, taskName, "Contact car producer", USER_YODA, "NO GROUP", Collections.emptyMap()); List<TaskSummary> activeTasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA,0, 50); Assertions.assertThat(activeTasks).isNotEmpty(); Optional<TaskSummary> addedTask = activeTasks .stream() .filter(task -> taskName.equals(task.getName())) .findFirst(); Assertions.assertThat(addedTask).isNotEmpty(); taskClient.completeAutoProgress(CONTAINER_ID, addedTask.get().getId(), USER_YODA, Collections.emptyMap()); }
@Test public void testSLAonProcessMet() throws Exception { Long pid = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK_WITH_SLA, new HashMap<>()); assertProcessInstance(pid, STATE_ACTIVE, SLA_PENDING); // Yoda should have one task available without SLA List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 0); assertThat(tasks).hasSize(1); TaskSummary task = tasks.get(0); assertThat(task.getName()).isEqualTo("Hello"); List<NodeInstance> activeNodes = processClient.findActiveNodeInstances(CONTAINER_ID, pid, 0, 0); assertThat(activeNodes).hasSize(1); NodeInstance taskNode = activeNodes.get(0); assertNodeInstance(taskNode, "Hello", SLA_NA); // Complete task before SLA violation taskClient.completeAutoProgress(CONTAINER_ID, task.getId(), USER_YODA, null); tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 0); assertThat(tasks).isEmpty(); activeNodes = processClient.findActiveNodeInstances(CONTAINER_ID, pid, 0, 0); assertThat(activeNodes).isEmpty(); taskNode = getNodeInstanceById(queryClient.findCompletedNodeInstances(pid, 0, 0), taskNode.getId()); assertNodeInstance(taskNode, "Hello", SLA_NA); // Process should be completed and SLA should be met assertProcessInstance(pid, STATE_COMPLETED, SLA_MET); }
@Test public void testCreateCaseWithEmptyCaseFileButWithRoleAssignments() { CaseFile caseFile = CaseFile.builder().addUserAssignments(CASE_INSURED_ROLE, USER_YODA) .addUserAssignments(CASE_INS_REP_ROLE, USER_JOHN) .build(); String caseId = caseClient.startCase(CONTAINER_ID, CLAIM_CASE_DEF_ID, caseFile); Assertions.assertThat(caseId).isNotNull(); Assertions.assertThat(caseId).startsWith(CLAIM_CASE_ID_PREFIX); CaseInstance caseInstance = caseClient.getCaseInstance(CONTAINER_ID, caseId); assertCarInsuranceCaseInstance(caseInstance, caseId, USER_YODA); List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); Assertions.assertThat(task).isNotNull(); Assertions.assertThat(task.getName()).isEqualTo(ACCIDENT_TASK_NAME); Assertions.assertThat(task.getActualOwner()).isNull(); Assertions.assertThat(task.getStatus()).isEqualTo("Ready"); }
@Test public void testSLAonUserTaskMet() throws Exception { Long pid = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK_WITH_SLA_ON_TASK, new HashMap<>()); assertProcessInstance(pid, STATE_ACTIVE, SLA_NA); // Yoda should have one task available with SLA List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 0); TaskSummary task = tasks.get(0); assertThat(tasks).hasSize(1); assertThat(task.getName()).isEqualTo("Hello"); List<NodeInstance> activeNodes = processClient.findActiveNodeInstances(CONTAINER_ID, pid, 0, 0); assertThat(activeNodes).hasSize(1); NodeInstance taskNode = activeNodes.get(0); assertNodeInstance(taskNode, "Hello", SLA_PENDING); taskClient.completeAutoProgress(CONTAINER_ID, task.getId(), USER_YODA, null); tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 0); assertThat(tasks).isEmpty(); activeNodes = processClient.findActiveNodeInstances(CONTAINER_ID, pid, 0, 0); assertThat(activeNodes).isEmpty(); taskNode = getNodeInstanceById(queryClient.findCompletedNodeInstances(pid, 0, 0), taskNode.getId()); assertNodeInstance(taskNode, "Hello", SLA_MET); assertProcessInstance(pid, STATE_COMPLETED, SLA_NA); }
@Test public void testUserTaskWithUpdatedContainer() throws Exception { Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); try { List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(1, tasks.size()); assertEquals("First task", tasks.get(0).getName()); assertTrue("Task should be skippable.", tasks.get(0).getSkipable().booleanValue()); // Update container to new version and restart process. processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101)); processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(1, tasks.size()); assertEquals("Updated first task", tasks.get(0).getName()); assertFalse("Task shouldn't be skippable.", tasks.get(0).getSkipable().booleanValue()); } finally { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } }
private void checkTaskNameAndStatus(TaskSummary taskSummary, String name, Status status) { assertNotNull(taskSummary); assertEquals(name, taskSummary.getName()); assertEquals(status.toString(), taskSummary.getStatus()); }
@Test public void testFailUserTask() throws Exception { Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); try { List<TaskSummary> taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); TaskSummary taskSummary = taskList.get(0); assertEquals("First task", taskSummary.getName()); // startTask and completeTask task taskClient.startTask(CONTAINER_ID, taskSummary.getId(), USER_YODA); Map<String, Object> taskOutcome = new HashMap<String, Object>(); taskOutcome.put("string_", "my custom data"); taskOutcome.put("person_", createPersonInstance(USER_MARY)); taskClient.failTask(CONTAINER_ID, taskSummary.getId(), USER_YODA, taskOutcome); taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); taskSummary = taskList.get(0); assertEquals("Second task", taskSummary.getName()); } finally { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } }
private void assertTask(TaskSummary task, String actor, String name, String status) { assertNotNull(task); assertEquals(name, task.getName()); assertEquals(actor, task.getActualOwner()); assertEquals(status, task.getStatus()); }
@Test public void testSkipUserTask() throws Exception { Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); try { List<TaskSummary> taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); TaskSummary taskSummary = taskList.get(0); assertEquals("First task", taskSummary.getName()); assertTrue(taskSummary.getSkipable().booleanValue()); taskClient.skipTask(CONTAINER_ID, taskSummary.getId(), USER_YODA); // find all tasks with Obsolete status - should be only one taskList = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, Arrays.asList("Obsolete"), 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); taskSummary = taskList.get(0); checkTaskNameAndStatus(taskSummary, "First task", Status.Obsolete); // Verify we did skip the task and process moved on taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); taskSummary = taskList.get(0); checkTaskNameAndStatus(taskSummary, "Second task", Status.Reserved); } finally { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } }
@Test public void testNominateUserTask() throws Exception { Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); try { List<TaskSummary> taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); TaskSummary taskSummary = taskList.get(0); assertEquals("First task", taskSummary.getName()); checkTaskStatusAndActualOwner(CONTAINER_ID, taskSummary.getId(), Status.Reserved, USER_YODA); // Nominated task with status different to Created by a user who isn't potential owner (403) changeUser(USER_JOHN); List<String> listPotOwners = new ArrayList<String>(); listPotOwners.add(USER_YODA); listPotOwners.add(USER_JOHN); assertClientException( () -> taskClient.nominateTask(CONTAINER_ID, taskSummary.getId(), USER_JOHN, listPotOwners), 403, "User '[UserImpl:'"+ USER_JOHN +"']' was unable to execute operation 'Nominate' on task id "+ taskSummary.getId() +" due to a no 'current status' match"); } finally { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); changeUser(TestConfig.getUsername()); } }
@Test @Category(Unstable.class) public void testCompleteTaskBeforeEscalation() throws InterruptedException { // Unstable on slow DBs where starting of task is called after escalation timeout. Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK_ESCALATION, params); assertNotNull(processInstanceId); assertTrue(processInstanceId > 0); List<TaskSummary> taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); TaskSummary taskSummary = taskList.get(0); assertEquals("User Task", taskSummary.getName()); Long taskId = taskSummary.getId(); taskClient.startTask(CONTAINER_ID, taskId, USER_YODA); taskClient.completeTask(CONTAINER_ID, taskId, USER_YODA, new HashMap<String, Object>()); ProcessInstance processInstance = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(processInstance); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.getState().intValue()); KieServerAssert.assertNullOrEmpty("Email recieved!", wiser.getMessages()); //wait while, cause email is sent 6s after task start Thread.sleep(8000l); KieServerAssert.assertNullOrEmpty("Email recieved!", wiser.getMessages()); }
assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("dynamic task", task.getName()); assertEquals("simple description", task.getDescription()); assertEquals(Status.Reserved.toString(), task.getStatus());
for (TaskSummary taskSummary : tasks) { UserTaskSummary userTaskSummary = new UserTaskSummary(taskSummary.getId(), taskSummary.getName(), taskSummary.getActualOwner(), taskSummary.getStatus());
@Test public void testGetTriggerTask() throws Exception { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); changeUser(USER_JOHN); List<TaskSummary> caseTasks = caseClient.findCaseTasksAssignedAsPotentialOwner(caseId, USER_JOHN, 0, 10); assertNotNull(caseTasks); assertEquals(0, caseTasks.size()); changeUser(USER_YODA); caseClient.triggerAdHocFragment(CONTAINER_ID, caseId, HELLO_2_TASK, Collections.EMPTY_MAP); changeUser(USER_JOHN); caseTasks = caseClient.findCaseTasksAssignedAsPotentialOwner(caseId, USER_JOHN, 0, 10); assertNotNull(caseTasks); assertEquals(1, caseTasks.size()); TaskSummary task = caseTasks.get(0); assertNotNull(task); assertEquals(HELLO_2_TASK, task.getName()); assertEquals(USER_JOHN, task.getActualOwner()); changeUser(USER_YODA); caseTasks = caseClient.findCaseTasksAssignedAsPotentialOwner(caseId, USER_YODA, 0, 10); assertNotNull(caseTasks); assertEquals(1, caseTasks.size()); task = caseTasks.get(0); assertNotNull(task); assertEquals(HELLO_1_TASK, task.getName()); assertEquals(USER_YODA, task.getActualOwner()); caseClient.destroyCaseInstance(CONTAINER_ID, caseId); }
assertEquals("First task", taskInstance.getName()); KieServerAssert.assertNullOrEmpty(taskInstance.getDescription()); assertEquals("Reserved", taskInstance.getStatus());
private void assertTaskSummary(TaskSummary expected, TaskSummary actual) { assertNotNull(actual); assertEquals(expected.getName(), actual.getName()); assertEquals(expected.getProcessId(), actual.getProcessId()); KieServerAssert.assertNullOrEmpty(actual.getDescription()); assertEquals(expected.getStatus(), actual.getStatus()); assertEquals(expected.getPriority(), actual.getPriority()); assertEquals(expected.getActualOwner(), actual.getActualOwner()); assertEquals(expected.getCreatedBy(), actual.getCreatedBy()); assertEquals(expected.getContainerId(), actual.getContainerId()); assertEquals(expected.getParentId(), actual.getParentId()); assertEquals(expected.getProcessInstanceId(), actual.getProcessInstanceId()); }