Search in sources :

Example 41 with TaskAssigningSolution

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

the class TaskAssigningServiceTest method onWaitForImprovedSolutionTimerFiredProduceTheEvent.

@Test
void onWaitForImprovedSolutionTimerFiredProduceTheEvent() throws Exception {
    prepareStart();
    doReturn(WAIT_FOR_IMPROVED_SOLUTION_DURATION).when(config).getWaitForImprovedSolutionDuration();
    doReturn(TIMER_ID).when(vertx).setTimer(eq(WAIT_FOR_IMPROVED_SOLUTION_DURATION.toMillis()), any(Handler.class));
    TaskAssigningSolution initialSolution = buildSolutionWithScore(INITIAL_SCORE);
    taskAssigningService.onBestSolutionChange(mockEvent(initialSolution));
    verify(managedExecutor, never()).runAsync(any());
    verify(vertx).setTimer(anyLong(), timerHandlerCaptor.capture());
    timerHandlerCaptor.getValue().handle(TIMER_ID);
    verify(timerBasedEvent).fire(timerBasedEventCaptor.capture());
    assertThat(timerBasedEventCaptor.getValue()).isNotNull();
    assertThat(timerBasedEventCaptor.getValue().getTimerId()).isEqualTo(TIMER_ID);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Handler(io.vertx.core.Handler) Test(org.junit.jupiter.api.Test)

Example 42 with TaskAssigningSolution

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

the class TaskAssigningServiceTest method onSolutionUpdatedOnBackgroundWithNoScoreImprovement.

@Test
void onSolutionUpdatedOnBackgroundWithNoScoreImprovement() throws Exception {
    TaskAssigningSolution newBestSolution = buildSolutionWithScore(INITIAL_SCORE);
    prepareOnSolutionUpdatedOnBackground(INITIAL_SCORE, newBestSolution);
    verify(taskAssigningService, never()).executeSolutionChange(newBestSolution);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Test(org.junit.jupiter.api.Test)

Example 43 with TaskAssigningSolution

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

the class TaskAssigningServiceTest method onImproveSolutionOnBackgroundTimerFiredProduceTheEvent.

@Test
@SuppressWarnings("unchecked")
void onImproveSolutionOnBackgroundTimerFiredProduceTheEvent() throws Exception {
    prepareStart();
    TaskAssigningSolution initialSolution = buildSolutionWithScore(INITIAL_SCORE);
    context.setTaskPublished(TASK_1_ID, true);
    context.setTaskPublished(TASK_2_ID, true);
    context.setTaskPublished(TASK_3_ID, true);
    context.setTaskPublished(TASK_4_ID, true);
    doReturn(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION).when(config).getImproveSolutionOnBackgroundDuration();
    doReturn(TIMER_ID).when(vertx).setTimer(eq(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION.toMillis()), any(Handler.class));
    taskAssigningService.onBestSolutionChange(mockEvent(initialSolution));
    verify(managedExecutor).runAsync(managedExecutorCaptor.capture());
    managedExecutorCaptor.getValue().run();
    verify(vertx).setTimer(eq(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION.toMillis()), timerHandlerCaptor.capture());
    timerHandlerCaptor.getValue().handle(TIMER_ID);
    verify(timerBasedEvent).fire(timerBasedEventCaptor.capture());
    assertThat(timerBasedEventCaptor.getValue()).isNotNull();
    assertThat(timerBasedEventCaptor.getValue().getTimerId()).isEqualTo(TIMER_ID);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Handler(io.vertx.core.Handler) Test(org.junit.jupiter.api.Test)

Example 44 with TaskAssigningSolution

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

the class TaskAssigningServiceTest method mockEvent.

@SuppressWarnings("unchecked")
private static BestSolutionChangedEvent<TaskAssigningSolution> mockEvent(TaskAssigningSolution solution, boolean allChangesProcessed, boolean solutionInitialized) {
    BestSolutionChangedEvent<TaskAssigningSolution> event = mock(BestSolutionChangedEvent.class);
    doReturn(allChangesProcessed).when(event).isEveryProblemFactChangeProcessed();
    BendableLongScore score = BendableLongScore.zero(1, 1).withInitScore(solutionInitialized ? 1 : -1);
    TaskAssigningSolution spySolution = spy(solution);
    doReturn(score).when(spySolution).getScore();
    doReturn(spySolution).when(event).getNewBestSolution();
    return event;
}
Also used : BendableLongScore(org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore) TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)

Example 45 with TaskAssigningSolution

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

the class TaskAssigningServiceTest method onSolutionChangeWithNoPlanningItems.

@Test
void onSolutionChangeWithNoPlanningItems() throws Exception {
    prepareStart();
    TaskAssigningSolution solution = buildSolution();
    context.setTaskPublished(TASK_1_ID, true);
    context.setTaskPublished(TASK_2_ID, true);
    context.setTaskPublished(TASK_3_ID, true);
    context.setTaskPublished(TASK_4_ID, true);
    taskAssigningService.onBestSolutionChange(mockEvent(solution, true, true));
    verify(managedExecutor).runAsync(managedExecutorCaptor.capture());
    managedExecutorCaptor.getValue().run();
    verify(planningExecutor, never()).start(any(), any());
    verify(serviceEventConsumer).resume();
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Test(org.junit.jupiter.api.Test)

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