use of org.kie.kogito.taskassigning.core.model.User in project kogito-apps by kiegroup.
the class AssignTaskExecutableProblemFactChangeTest method assertAssignTaskProblemFactChangeWasProduced.
/**
* Given an AssignTaskProblemFactChange and a solution that was produced as the result of applying the change,
* asserts that the assignment defined by the change is not violated (exists in) by the solution.
* The assignment defined in the change must also be pinned in the produced solution as well as any other
* previous assignment for the given user.
*
* @param change The change that was executed for producing the solution.
* @param solution The produced solution.
*/
private void assertAssignTaskProblemFactChangeWasProduced(AssignTaskProblemFactChange change, TaskAssigningSolution solution) throws Exception {
User internalUser = solution.getUserList().stream().filter(user -> Objects.equals(user.getId(), change.getUser().getId())).findFirst().orElseThrow(() -> new Exception("User: " + change.getUser() + " was not found in solution."));
TaskAssignment internalTaskAssignment = solution.getTaskAssignmentList().stream().filter(taskAssignment -> Objects.equals(taskAssignment.getId(), change.getTaskAssignment().getId())).findFirst().orElseThrow(() -> new Exception("TaskAssignment: " + change + " was not found in solution."));
assertThat(internalTaskAssignment.getUser()).isEqualTo(internalUser);
assertThat(internalTaskAssignment.isPinned()).isTrue();
// all the previous tasks must be pinned by construction and be assigned to the user
ChainElement previousElement = internalTaskAssignment.getPreviousElement();
while (previousElement != null) {
if (previousElement.isTaskAssignment()) {
TaskAssignment previousTaskAssignment = (TaskAssignment) previousElement;
assertThat(previousTaskAssignment.isPinned()).isTrue();
assertThat(previousTaskAssignment.getUser()).isEqualTo(internalUser);
previousElement = previousTaskAssignment.getPreviousElement();
} else {
assertThat(previousElement).isEqualTo(internalUser);
previousElement = null;
}
}
// all the next tasks must to the user.
TaskAssignment nextTaskAssignment = internalTaskAssignment.getNextElement();
while (nextTaskAssignment != null) {
assertThat(nextTaskAssignment.getUser()).isEqualTo(internalUser);
nextTaskAssignment = nextTaskAssignment.getNextElement();
}
}
use of org.kie.kogito.taskassigning.core.model.User in project kogito-apps by kiegroup.
the class AssignTaskExecutableProblemFactChangeTest method assignTaskProblemFactChangeFixedChangeSet.
private void assignTaskProblemFactChangeFixedChangeSet(String solutionResource) throws Exception {
TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
solution.getUserList().add(PLANNING_USER);
// prepare the list of changes to program
List<ProgrammedAssignTaskProblemFactChange> programmedChanges = new ArrayList<>();
// assign Task_0 to User_0
TaskAssignment taskAssignment = solution.getTaskAssignmentList().get(0);
User user = solution.getUserList().get(0);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_10 to User_0
taskAssignment = solution.getTaskAssignmentList().get(10);
user = solution.getUserList().get(0);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_15 to User_2
taskAssignment = solution.getTaskAssignmentList().get(15);
user = solution.getUserList().get(2);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_13 to User_3
taskAssignment = solution.getTaskAssignmentList().get(13);
user = solution.getUserList().get(3);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_13 to User_4
taskAssignment = solution.getTaskAssignmentList().get(13);
user = solution.getUserList().get(4);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_13 to User_5
taskAssignment = solution.getTaskAssignmentList().get(13);
user = solution.getUserList().get(5);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_15 to User_5
taskAssignment = solution.getTaskAssignmentList().get(15);
user = solution.getUserList().get(5);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_16 to User_5
taskAssignment = solution.getTaskAssignmentList().get(16);
user = solution.getUserList().get(5);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign Task_17 to User_5
taskAssignment = solution.getTaskAssignmentList().get(17);
user = solution.getUserList().get(5);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// repeat assign Task_17 to User_5
taskAssignment = solution.getTaskAssignmentList().get(17);
user = solution.getUserList().get(5);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// repeat assign Task_15 to User_5
taskAssignment = solution.getTaskAssignmentList().get(15);
user = solution.getUserList().get(5);
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
String nextTaskId = NEW_TASK + 1;
// assign a brand new task "NewTask_x and assign to User_0
user = solution.getUserList().get(0);
taskAssignment = new TaskAssignment(Task.newBuilder().id(nextTaskId).name(nextTaskId).build());
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign a brand new task "NewTask_x and assign to User_2
nextTaskId = NEW_TASK + 2;
user = solution.getUserList().get(2);
taskAssignment = new TaskAssignment(Task.newBuilder().id(nextTaskId).name(nextTaskId).build());
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
// assign a brand new task "NewTask_x and assign to User_5
nextTaskId = NEW_TASK + 3;
user = solution.getUserList().get(5);
taskAssignment = new TaskAssignment(Task.newBuilder().id(nextTaskId).name(nextTaskId).build());
programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(taskAssignment, user));
assignTaskProblemFactChange(solution, solutionResource, FIXED_TEST, programmedChanges);
}
use of org.kie.kogito.taskassigning.core.model.User in project kogito-apps by kiegroup.
the class SolutionBuilderTest method assertThatTaskIsAssignedToUser.
private void assertThatTaskIsAssignedToUser(TaskAssigningSolution solution, String taskId, String userId) {
TaskAssignment taskAssignment = solution.getTaskAssignmentList().stream().filter(ta -> taskId.equals(ta.getId())).findFirst().orElse(null);
assertThat(taskAssignment).withFailMessage("Task %s is not present in solution.", taskId).isNotNull();
User user = solution.getUserList().stream().filter(u -> userId.equals(u.getId())).findFirst().orElse(null);
assertThat(user).withFailMessage("User %s is not present in solution.", userId).isNotNull();
assertThat(taskAssignment.getUser()).withFailMessage("Task %s must be assigned to user %s but is assigned to nobody.", taskId, userId).isNotNull();
assertThat(taskAssignment.getUser().getId()).withFailMessage("Task %s must be assigned to user %s.", taskId, userId).isEqualTo(userId);
}
use of org.kie.kogito.taskassigning.core.model.User in project kogito-apps by kiegroup.
the class SolutionBuilderTest method assertThatUserNoTasks.
private void assertThatUserNoTasks(TaskAssigningSolution solution, String userId) {
User user = solution.getUserList().stream().filter(u -> userId.equals(u.getId())).findFirst().orElse(null);
assertThat(user).withFailMessage("User %s is not present in solution.", userId).isNotNull();
assertThat(user.getNextElement()).withFailMessage("User %s must not have task assignments", userId).isNull();
}
use of org.kie.kogito.taskassigning.core.model.User in project kogito-apps by kiegroup.
the class SolutionChangesBuilderTest method addReservedTaskChangeForSameUserButNotPinned.
@Test
void addReservedTaskChangeForSameUserButNotPinned() {
TaskAssignment user1Assignment = new TaskAssignment(mockTask(TASK_1_ID));
User user1 = TestUtil.mockUser(USER_1, Collections.singletonList(user1Assignment));
user1Assignment.setPinned(false);
TaskAssigningSolution solution = mockSolution(Collections.singletonList(user1), Collections.singletonList(user1Assignment));
TaskData taskData = mockTaskData(TASK_1_ID, RESERVED.value(), USER_1, TASK_1_LAST_UPDATE);
addReservedTaskChangeForAnotherUser(solution, taskData, user1);
assertThatTaskProcessorsWhereNotApplied();
assertThatUserProcessorsWereNotApplied();
}
Aggregations