Search in sources :

Example 21 with User

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();
    }
}
Also used : ChainElement(org.kie.kogito.taskassigning.core.model.ChainElement) User(org.kie.kogito.taskassigning.core.model.User) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 22 with User

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);
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) ArrayList(java.util.ArrayList) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 23 with User

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);
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TestUtil.mockExternalUser(org.kie.kogito.taskassigning.service.TestUtil.mockExternalUser) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment)

Example 24 with User

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();
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TestUtil.mockExternalUser(org.kie.kogito.taskassigning.service.TestUtil.mockExternalUser)

Example 25 with User

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();
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment) TaskUtil.fromTaskData(org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData) TestUtil.mockTaskData(org.kie.kogito.taskassigning.service.TestUtil.mockTaskData) Test(org.junit.jupiter.api.Test)

Aggregations

User (org.kie.kogito.taskassigning.core.model.User)70 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)41 Test (org.junit.jupiter.api.Test)32 TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)25 TestUtil.mockUser (org.kie.kogito.taskassigning.core.model.TestUtil.mockUser)14 Task (org.kie.kogito.taskassigning.core.model.Task)12 ArrayList (java.util.ArrayList)11 TestUtil.mockTaskAssignment (org.kie.kogito.taskassigning.core.model.TestUtil.mockTaskAssignment)11 AssignTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)11 TaskUtil.fromTaskData (org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData)10 Group (org.kie.kogito.taskassigning.core.model.Group)9 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)8 AddTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)8 ReleaseTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)8 RemoveTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)8 ProblemFactChange (org.optaplanner.core.api.solver.ProblemFactChange)8 HashMap (java.util.HashMap)7 AddUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)7 DisableUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)7 RemoveUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)7