use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class SolutionChangesBuilderTest method addRemoveTaskInTerminalStatus.
void addRemoveTaskInTerminalStatus(TaskState terminalState) {
TaskAssignment user1Assignment = new TaskAssignment(mockTask(TASK_1_ID));
User user1 = TestUtil.mockUser(USER_1, Collections.singletonList(user1Assignment));
TaskAssigningSolution solution = mockSolution(Collections.singletonList(user1), Collections.singletonList(user1Assignment));
TaskData taskData = mockTaskData(TASK_1_ID, terminalState.value(), TASK_1_LAST_UPDATE);
List<ProblemFactChange<TaskAssigningSolution>> result = SolutionChangesBuilder.create().withContext(context).withUserServiceConnector(userServiceConnector).withProcessors(processorRegistry).fromTasksData(mockTaskDataList(taskData)).forSolution(solution).build();
assertChangeIsTheChangeSetId(result, 0);
assertChange(result, 1, new RemoveTaskProblemFactChange(new TaskAssignment(fromTaskData(taskData))));
assertThatTaskProcessorsWhereNotApplied();
assertThatUserProcessorsWereNotApplied();
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class SolutionChangesBuilderTest method addRemoveUserChange.
@Test
void addRemoveUserChange() {
User user = mockUser(USER_1);
user.setEnabled(false);
TaskAssigningSolution solution = mockSolution(Collections.singletonList(user), Collections.emptyList());
List<ProblemFactChange<TaskAssigningSolution>> result = SolutionChangesBuilder.create().withContext(context).withUserServiceConnector(userServiceConnector).withProcessors(processorRegistry).fromTasksData(Collections.emptyList()).forSolution(solution).build();
RemoveUserProblemFactChange expected = new RemoveUserProblemFactChange(user);
assertChangeIsTheChangeSetId(result, 0);
assertChange(result, 1, expected);
assertThatUserProcessorsWereNotApplied();
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class SolutionChangesBuilderTest method addNewReservedTaskChangeWithActualOwnerInSolution.
@Test
void addNewReservedTaskChangeWithActualOwnerInSolution() {
TaskData taskData = mockTaskData(TASK_1_ID, TaskState.RESERVED.value(), USER_1, TASK_1_LAST_UPDATE);
TaskAssigningSolution solution = mockSolution(Collections.singletonList(mockUser(USER_1)), Collections.emptyList());
addNewReservedTaskChangeWithActualOwner(solution, taskData);
assertThatUserProcessorsWereNotApplied();
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class SolutionChangesBuilderTest method addUpdateUserChange.
private void addUpdateUserChange(User user, org.kie.kogito.taskassigning.user.service.User updatedExternalUser) {
TaskAssigningSolution solution = mockSolution(Collections.singletonList(user), Collections.emptyList());
UserDataEvent event = new UserDataEvent(Collections.singletonList(updatedExternalUser), ZonedDateTime.now());
List<ProblemFactChange<TaskAssigningSolution>> result = SolutionChangesBuilder.create().withContext(context).withUserServiceConnector(userServiceConnector).withProcessors(processorRegistry).fromTasksData(Collections.emptyList()).fromUserDataEvent(event).forSolution(solution).build();
Set<Group> expectedGroups = updatedExternalUser.getGroups().stream().map(externalGroup -> new Group(externalGroup.getId())).collect(Collectors.toSet());
UserPropertyChangeProblemFactChange expected = new UserPropertyChangeProblemFactChange(user, true, updatedExternalUser.getAttributes(), expectedGroups);
assertChangeIsTheChangeSetId(result, 0);
assertChange(result, 1, expected);
assertThatUserProcessorsWereApplied(updatedExternalUser);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class SolutionBuilder method build.
public TaskAssigningSolution build() {
final List<TaskAssignment> taskAssignments = new ArrayList<>();
final Map<String, List<IndexedElement<TaskAssignment>>> assignmentsByUserId = new HashMap<>();
final Map<String, User> usersById = filterDuplicates(externalUsers).filter(externalUser -> !IS_PLANNING_USER.test(externalUser.getId())).map(externalUser -> fromExternalUser(externalUser, processorRegistry)).collect(Collectors.toMap(User::getId, Function.identity()));
usersById.put(PLANNING_USER.getId(), PLANNING_USER);
taskDataList.forEach(taskData -> {
Task task = fromTaskData(taskData);
processorRegistry.applyAttributesProcessor(task, task.getAttributes());
TaskAssignment taskAssignment = new TaskAssignment(task);
String state = task.getState();
taskAssignments.add(taskAssignment);
if (RESERVED.value().equals(state)) {
addTaskAssignmentToUser(assignmentsByUserId, taskAssignment, taskData.getActualOwner(), -1, true);
}
});
assignmentsByUserId.forEach((key, assignedTasks) -> {
User user = usersById.get(key);
if (user == null) {
// create the user by convention.
user = new User(key);
usersById.put(key, user);
}
final List<TaskAssignment> userTasks = assignedTasks.stream().map(IndexedElement::getElement).collect(Collectors.toList());
addAssignmentsToUser(user, userTasks);
});
// Add the DUMMY_TASKs to avoid running into scenarios where the solution remains with no tasks or only one task
// for selection. (https://issues.redhat.com/browse/PLANNER-1738)
taskAssignments.add(DUMMY_TASK_ASSIGNMENT);
taskAssignments.add(DUMMY_TASK_ASSIGNMENT_PLANNER_1738);
final List<User> users = new ArrayList<>(usersById.values());
return new TaskAssigningSolution("-1", users, taskAssignments);
}
Aggregations