diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnCancelClaimAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCancelClaimAccTest.java similarity index 83% rename from history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnCancelClaimAccTest.java rename to history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCancelClaimAccTest.java index 69071fe5b..5392edef4 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnCancelClaimAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCancelClaimAccTest.java @@ -6,7 +6,6 @@ import acceptance.AbstractAccTest; import acceptance.security.JaasExtension; import acceptance.security.WithAccessId; import java.util.List; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -19,17 +18,10 @@ import pro.taskana.task.api.TaskState; import pro.taskana.task.api.models.Task; @ExtendWith(JaasExtension.class) -class CreateHistoryEventOnCancelClaimAccTest extends AbstractAccTest { +class CreateHistoryEventOnTaskCancelClaimAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @WithAccessId(user = "admin") @Test diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCancellationAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCancellationAccTest.java new file mode 100644 index 000000000..acabfac20 --- /dev/null +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCancellationAccTest.java @@ -0,0 +1,45 @@ +package acceptance.events; + +import static org.assertj.core.api.Assertions.assertThat; + +import acceptance.AbstractAccTest; +import acceptance.security.JaasExtension; +import acceptance.security.WithAccessId; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import pro.taskana.simplehistory.impl.HistoryEventImpl; +import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl; +import pro.taskana.task.api.TaskService; +import pro.taskana.task.api.TaskState; +import pro.taskana.task.api.models.Task; + +@ExtendWith(JaasExtension.class) +class CreateHistoryEventOnTaskCancellationAccTest extends AbstractAccTest { + + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); + + @Test + @WithAccessId(user = "admin") + void should_CreateCancelledHistoryEvent_When_TaskIsCancelled() throws Exception { + + final String taskId = "TKI:000000000000000000000000000000000001"; + + List listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list(); + + assertThat(listEvents).isEmpty(); + + assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.CLAIMED); + + Task task = taskService.cancelTask(taskId); + assertThat(task.getState()).isEqualTo(TaskState.CANCELLED); + + listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list(); + + assertThat(listEvents).hasSize(1); + assertThat(historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType()) + .isEqualTo("TASK_CANCELLED"); + } +} diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnClaimAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskClaimAccTest.java similarity index 83% rename from history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnClaimAccTest.java rename to history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskClaimAccTest.java index 917efae3b..e23e308b2 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnClaimAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskClaimAccTest.java @@ -6,7 +6,6 @@ import acceptance.AbstractAccTest; import acceptance.security.JaasExtension; import acceptance.security.WithAccessId; import java.util.List; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -19,17 +18,10 @@ import pro.taskana.task.api.TaskState; import pro.taskana.task.api.models.Task; @ExtendWith(JaasExtension.class) -class CreateHistoryEventOnClaimAccTest extends AbstractAccTest { +class CreateHistoryEventOnTaskClaimAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @WithAccessId(user = "admin") @Test diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnCompletionAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCompletionAccTest.java similarity index 83% rename from history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnCompletionAccTest.java rename to history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCompletionAccTest.java index 13e7cadfa..7df4c39c3 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnCompletionAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCompletionAccTest.java @@ -6,7 +6,6 @@ import acceptance.AbstractAccTest; import acceptance.security.JaasExtension; import acceptance.security.WithAccessId; import java.util.List; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -19,17 +18,10 @@ import pro.taskana.task.api.TaskState; import pro.taskana.task.api.models.Task; @ExtendWith(JaasExtension.class) -class CreateHistoryEventOnCompletionAccTest extends AbstractAccTest { +class CreateHistoryEventOnTaskCompletionAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @WithAccessId(user = "admin") @Test diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCreationAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCreationAccTest.java index 725ae108d..36f8824c6 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCreationAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskCreationAccTest.java @@ -6,7 +6,6 @@ import acceptance.AbstractAccTest; import acceptance.security.JaasExtension; import acceptance.security.WithAccessId; import java.util.List; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -21,15 +20,8 @@ import pro.taskana.task.internal.models.TaskImpl; @ExtendWith(JaasExtension.class) class CreateHistoryEventOnTaskCreationAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @Test @WithAccessId(user = "admin") diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskTerminationAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskTerminationAccTest.java new file mode 100644 index 000000000..72f3ff7ca --- /dev/null +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskTerminationAccTest.java @@ -0,0 +1,45 @@ +package acceptance.events; + +import static org.assertj.core.api.Assertions.assertThat; + +import acceptance.AbstractAccTest; +import acceptance.security.JaasExtension; +import acceptance.security.WithAccessId; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import pro.taskana.simplehistory.impl.HistoryEventImpl; +import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl; +import pro.taskana.task.api.TaskService; +import pro.taskana.task.api.TaskState; +import pro.taskana.task.api.models.Task; + +@ExtendWith(JaasExtension.class) +class CreateHistoryEventOnTaskTerminationAccTest extends AbstractAccTest { + + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); + + @Test + @WithAccessId(user = "admin") + void should_CreateTerminatedHistoryEvent_When_TaskIsTerminated() throws Exception { + + final String taskId = "TKI:000000000000000000000000000000000001"; + + List listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list(); + + assertThat(listEvents).isEmpty(); + + assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.CLAIMED); + + Task task = taskService.terminateTask(taskId); + assertThat(task.getState()).isEqualTo(TaskState.TERMINATED); + + listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list(); + + assertThat(listEvents).hasSize(1); + assertThat(historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType()) + .isEqualTo("TASK_TERMINATED"); + } +} diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTransferAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskTransferAccTest.java similarity index 82% rename from history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTransferAccTest.java rename to history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskTransferAccTest.java index d022e5596..7863c783f 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTransferAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskTransferAccTest.java @@ -6,7 +6,6 @@ import acceptance.AbstractAccTest; import acceptance.security.JaasExtension; import acceptance.security.WithAccessId; import java.util.List; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,17 +16,10 @@ import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper; import pro.taskana.task.api.TaskService; @ExtendWith(JaasExtension.class) -class CreateHistoryEventOnTransferAccTest extends AbstractAccTest { +class CreateHistoryEventOnTaskTransferAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @WithAccessId(user = "admin") @Test diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskUpdateAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskUpdateAccTest.java index 752d0cdf3..8573d97ce 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskUpdateAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/CreateHistoryEventOnTaskUpdateAccTest.java @@ -6,7 +6,6 @@ import acceptance.AbstractAccTest; import acceptance.security.JaasExtension; import acceptance.security.WithAccessId; import java.util.List; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -20,15 +19,8 @@ import pro.taskana.task.api.models.Task; @ExtendWith(JaasExtension.class) class CreateHistoryEventOnTaskUpdateAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @Test @WithAccessId(user = "admin") diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/DeleteHistoryEventsOnTaskDeletionAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/DeleteHistoryEventsOnTaskDeletionAccTest.java index 6cf1f0566..4b57443c3 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/events/DeleteHistoryEventsOnTaskDeletionAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/events/DeleteHistoryEventsOnTaskDeletionAccTest.java @@ -9,7 +9,6 @@ import acceptance.security.WithAccessId; import java.util.Arrays; import java.util.List; import org.assertj.core.api.ThrowableAssert.ThrowingCallable; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -23,15 +22,8 @@ import pro.taskana.task.api.exceptions.TaskNotFoundException; @ExtendWith(JaasExtension.class) class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest { - private TaskService taskService; - private SimpleHistoryServiceImpl historyService; - - @BeforeEach - public void setUp() { - - taskService = taskanaEngine.getTaskService(); - historyService = getHistoryService(); - } + private final TaskService taskService = taskanaEngine.getTaskService(); + private final SimpleHistoryServiceImpl historyService = getHistoryService(); @Test @WithAccessId(user = "admin") diff --git a/lib/taskana-core/src/main/java/pro/taskana/spi/history/api/events/task/CancelledEvent.java b/lib/taskana-core/src/main/java/pro/taskana/spi/history/api/events/task/CancelledEvent.java new file mode 100644 index 000000000..bddc3192c --- /dev/null +++ b/lib/taskana-core/src/main/java/pro/taskana/spi/history/api/events/task/CancelledEvent.java @@ -0,0 +1,13 @@ +package pro.taskana.spi.history.api.events.task; + +import pro.taskana.task.api.models.Task; + +/** Event fired if a task is cancelled. */ +public class CancelledEvent extends TaskEvent { + + public CancelledEvent(String id, Task task, String userId) { + super(id, task, userId, null); + eventType = "TASK_CANCELLED"; + created = task.getModified(); + } +} diff --git a/lib/taskana-core/src/main/java/pro/taskana/spi/history/api/events/task/TerminatedEvent.java b/lib/taskana-core/src/main/java/pro/taskana/spi/history/api/events/task/TerminatedEvent.java new file mode 100644 index 000000000..e8d47de86 --- /dev/null +++ b/lib/taskana-core/src/main/java/pro/taskana/spi/history/api/events/task/TerminatedEvent.java @@ -0,0 +1,13 @@ +package pro.taskana.spi.history.api.events.task; + +import pro.taskana.task.api.models.Task; + +/** Event fired if a task is terminated. */ +public class TerminatedEvent extends TaskEvent { + + public TerminatedEvent(String id, Task task, String userId) { + super(id, task, userId, null); + eventType = "TASK_TERMINATED"; + created = task.getModified(); + } +} diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java index 597682eae..8d765accc 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java @@ -39,10 +39,12 @@ import pro.taskana.common.internal.util.CheckedFunction; import pro.taskana.common.internal.util.IdGenerator; import pro.taskana.common.internal.util.Pair; import pro.taskana.common.internal.util.Triplet; +import pro.taskana.spi.history.api.events.task.CancelledEvent; import pro.taskana.spi.history.api.events.task.ClaimCancelledEvent; import pro.taskana.spi.history.api.events.task.ClaimedEvent; import pro.taskana.spi.history.api.events.task.CompletedEvent; import pro.taskana.spi.history.api.events.task.CreatedEvent; +import pro.taskana.spi.history.api.events.task.TerminatedEvent; import pro.taskana.spi.history.api.events.task.UpdatedEvent; import pro.taskana.spi.history.internal.HistoryEventManager; import pro.taskana.task.api.CallbackState; @@ -796,13 +798,26 @@ public class TaskServiceImpl implements TaskService { public Task cancelTask(String taskId) throws TaskNotFoundException, InvalidStateException, NotAuthorizedException { LOGGER.debug("entry to cancelTask(task = {})", taskId); + + Task cancelledTask; + try { taskanaEngine.openConnection(); - return terminateCancelCommonActions(taskId, TaskState.CANCELLED); + cancelledTask = terminateCancelCommonActions(taskId, TaskState.CANCELLED); + + if (HistoryEventManager.isHistoryEnabled()) { + historyEventManager.createEvent( + new CancelledEvent( + IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT), + cancelledTask, + CurrentUserContext.getUserid())); + } } finally { taskanaEngine.returnConnection(); LOGGER.debug("exit from cancelTask()"); } + + return cancelledTask; } @Override @@ -812,13 +827,25 @@ public class TaskServiceImpl implements TaskService { taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.ADMIN, TaskanaRole.TASK_ADMIN); + Task terminatedTask; + try { taskanaEngine.openConnection(); - return terminateCancelCommonActions(taskId, TaskState.TERMINATED); + terminatedTask = terminateCancelCommonActions(taskId, TaskState.TERMINATED); + + if (HistoryEventManager.isHistoryEnabled()) { + historyEventManager.createEvent( + new TerminatedEvent( + IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT), + terminatedTask, + CurrentUserContext.getUserid())); + } + } finally { taskanaEngine.returnConnection(); LOGGER.debug("exit from terminateTask()"); } + return terminatedTask; } public List findTasksIdsAffectedByClassificationChange(String classificationId) {