Search in sources :

Example 11 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class RemoveUserProblemFactChangeTest method setUp.

@BeforeEach
void setUp() {
    user = new User(USER_ID_1);
    workingSolution = new TaskAssigningSolution("1", new ArrayList<>(), new ArrayList<>());
    user2 = new User(USER_ID_2);
    user3 = new User(USER_ID_3);
    workingSolution.getUserList().add(user2);
    workingSolution.getUserList().add(user3);
    change = new RemoveUserProblemFactChange(user);
}
Also used : User(org.kie.kogito.taskassigning.core.model.User) TestUtil.mockUser(org.kie.kogito.taskassigning.core.model.TestUtil.mockUser) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) ArrayList(java.util.ArrayList) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 12 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class AddTaskExecutableProblemFactChangeTest method addTaskProblemFactChangeRandomSet.

private void addTaskProblemFactChangeRandomSet(String solutionResource) {
    TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
    int taskCount = solution.getTaskAssignmentList().size();
    int randomChanges = taskCount / 2 + random.nextInt(taskCount / 2);
    List<String> taskIds = new ArrayList<>();
    for (int i = 0; i < randomChanges; i++) {
        taskIds.add(Integer.toString(taskCount++));
    }
    addTaskProblemFactChange(solution, taskIds);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) ArrayList(java.util.ArrayList)

Example 13 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class AssignTaskExecutableProblemFactChangeTest method assignTaskProblemFactChange.

private void assignTaskProblemFactChange(TaskAssigningSolution solution, String solutionResource, String testType, List<ProgrammedAssignTaskProblemFactChange> programmedChanges) throws Exception {
    TaskAssigningSolution initialSolution = executeSequentialChanges(solution, programmedChanges);
    if (writeTestFiles()) {
        writeProblemFactChangesTestFiles(initialSolution, solutionResource, "AssignTaskExecutableProblemFactChangeTest.assignTaskProblemFactChangeTest", testType, programmedChanges, ProgrammedAssignTaskProblemFactChange::workingSolutionBeforeChangeAsString, ProgrammedAssignTaskProblemFactChange::solutionAfterChangeAsString);
    }
    // each partial solution must have the change that was applied on it.
    for (ProgrammedAssignTaskProblemFactChange change : programmedChanges) {
        assertAssignTaskProblemFactChangeWasProduced(change.getChange(), change.getSolutionAfterChange());
    }
    // finally the last solution must have the result of all the changes.
    TaskAssigningSolution lastSolution = programmedChanges.get(programmedChanges.size() - 1).getSolutionAfterChange();
    Map<String, AssignTaskProblemFactChange> summarizedChanges = new HashMap<>();
    programmedChanges.forEach(change -> {
        // if task was changed multiple times record only the last change.
        summarizedChanges.put(change.getChange().getTaskAssignment().getId(), change.getChange());
    });
    for (AssignTaskProblemFactChange change : summarizedChanges.values()) {
        assertAssignTaskProblemFactChangeWasProduced(change, lastSolution);
    }
}
Also used : AssignTaskProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange) HashMap(java.util.HashMap) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Example 14 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution 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 15 with TaskAssigningSolution

use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.

the class RemoveTaskExecutableProblemFactChangeTest method removeTaskProblemFactChange.

private void removeTaskProblemFactChange(TaskAssigningSolution solution, List<String> taskIds) {
    List<ProgrammedProblemFactChange<RemoveTaskProblemFactChange>> programmedChanges = taskIds.stream().map(id -> findTaskAssignmentOrCreate(solution, id)).map(taskAssignment -> new ProgrammedProblemFactChange<>(new RemoveTaskProblemFactChange(taskAssignment))).collect(Collectors.toList());
    // each partial solution must have the change that was applied on it.
    executeSequentialChanges(solution, programmedChanges);
    programmedChanges.forEach(change -> assertRemoveTaskProblemFactChangeWasProduced(change.getChange(), change.getSolutionAfterChange()));
    // finally the last solution must have the result of all the changes.
    TaskAssigningSolution lastSolution = programmedChanges.get(programmedChanges.size() - 1).getSolutionAfterChange();
    programmedChanges.forEach(change -> assertRemoveTaskProblemFactChangeWasProduced(change.getChange(), lastSolution));
}
Also used : Arrays(java.util.Arrays) SET_OF_100TASKS_5USERS_SOLUTION(org.kie.kogito.taskassigning.core.TestDataSet.SET_OF_100TASKS_5USERS_SOLUTION) SET_OF_500TASKS_20USERS_SOLUTION(org.kie.kogito.taskassigning.core.TestDataSet.SET_OF_500TASKS_20USERS_SOLUTION) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) TaskAssignment(org.kie.kogito.taskassigning.core.model.TaskAssignment) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) SET_OF_24TASKS_8USERS_SOLUTION(org.kie.kogito.taskassigning.core.TestDataSet.SET_OF_24TASKS_8USERS_SOLUTION) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) Objects(java.util.Objects) Test(org.junit.jupiter.api.Test) Task(org.kie.kogito.taskassigning.core.model.Task) List(java.util.List) SET_OF_50TASKS_5USERS_SOLUTION(org.kie.kogito.taskassigning.core.TestDataSet.SET_OF_50TASKS_5USERS_SOLUTION) TestConstants(org.kie.kogito.taskassigning.core.TestConstants) RemoveTaskProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange) Tag(org.junit.jupiter.api.Tag) RemoveTaskProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Aggregations

TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)65 Test (org.junit.jupiter.api.Test)30 User (org.kie.kogito.taskassigning.core.model.User)24 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)23 ArrayList (java.util.ArrayList)15 AssignTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)12 TaskUtil.fromTaskData (org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData)12 AddTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)11 TestUtil.mockTaskData (org.kie.kogito.taskassigning.service.TestUtil.mockTaskData)11 ProblemFactChange (org.optaplanner.core.api.solver.ProblemFactChange)11 RemoveTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)10 AddUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)9 DisableUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)7 ReleaseTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)7 RemoveUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)7 UserPropertyChangeProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange)7 List (java.util.List)5 BeforeEach (org.junit.jupiter.api.BeforeEach)5 Task (org.kie.kogito.taskassigning.core.model.Task)5 UserDataEvent (org.kie.kogito.taskassigning.service.event.UserDataEvent)5