fix resquestReview for an IN_REVIEW Task
This commit is contained in:
parent
a4697ed60b
commit
f25b6eb550
|
@ -5,11 +5,15 @@ import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
|
|||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestWorkbasket;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.DynamicTest;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestFactory;
|
||||
import org.junit.jupiter.api.TestInstance;
|
||||
import org.junit.jupiter.api.TestInstance.Lifecycle;
|
||||
import org.junit.jupiter.api.function.ThrowingConsumer;
|
||||
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
||||
|
@ -61,6 +65,10 @@ class CompleteTaskWithSpiAccTest {
|
|||
return createDefaultTask().owner(user).state(TaskState.CLAIMED).claimed(Instant.now());
|
||||
}
|
||||
|
||||
private TaskBuilder createTaskInReviewByUser(String user) {
|
||||
return createDefaultTask().owner(user).state(TaskState.IN_REVIEW).claimed(Instant.now());
|
||||
}
|
||||
|
||||
private TaskBuilder createDefaultTask() {
|
||||
return TaskBuilder.newTask()
|
||||
.classificationSummary(defaultClassificationSummary)
|
||||
|
@ -92,13 +100,19 @@ class CompleteTaskWithSpiAccTest {
|
|||
@TaskanaInject TaskService taskService;
|
||||
|
||||
@WithAccessId(user = "user-1-1")
|
||||
@Test
|
||||
void should_RequireReview_When_UserTriesToCompleteTask() throws Exception {
|
||||
Task task = createTaskClaimedByUser("user-1-1").buildAndStore(taskService);
|
||||
|
||||
Task processedTask = taskService.completeTask(task.getId());
|
||||
|
||||
assertThat(processedTask.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
@TestFactory
|
||||
Stream<DynamicTest> should_RequireReview_When_UserTriesToCompleteTask() throws Exception {
|
||||
List<Task> tasks =
|
||||
List.of(
|
||||
createTaskClaimedByUser("user-1-1").buildAndStore(taskService),
|
||||
createTaskInReviewByUser("user-1-1").buildAndStore(taskService));
|
||||
ThrowingConsumer<Task> test =
|
||||
task -> {
|
||||
Task processedTask = taskService.completeTask(task.getId());
|
||||
assertThat(processedTask.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
};
|
||||
return DynamicTest.stream(
|
||||
tasks.iterator(), t -> "Try to complete " + t.getState().name() + " Task", test);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,13 +126,21 @@ class CompleteTaskWithSpiAccTest {
|
|||
@TaskanaInject TaskService taskService;
|
||||
|
||||
@WithAccessId(user = "user-1-1")
|
||||
@Test
|
||||
void should_CompleteTask_When_UserTriesToCompleteTask() throws Exception {
|
||||
Task task = createTaskClaimedByUser("user-1-1").buildAndStore(taskService);
|
||||
@TestFactory
|
||||
Stream<DynamicTest> should_CompleteTask_When_UserTriesToCompleteTask() throws Exception {
|
||||
List<Task> tasks =
|
||||
List.of(
|
||||
createTaskClaimedByUser("user-1-1").buildAndStore(taskService),
|
||||
createTaskInReviewByUser("user-1-1").buildAndStore(taskService));
|
||||
ThrowingConsumer<Task> test =
|
||||
task -> {
|
||||
Task processedTask = taskService.completeTask(task.getId());
|
||||
|
||||
Task processedTask = taskService.completeTask(task.getId());
|
||||
assertThat(processedTask.getState()).isEqualTo(TaskState.COMPLETED);
|
||||
};
|
||||
|
||||
assertThat(processedTask.getState()).isEqualTo(TaskState.COMPLETED);
|
||||
return DynamicTest.stream(
|
||||
tasks.iterator(), t -> "Try to complete " + t.getState().name() + " Task", test);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,13 +154,20 @@ class CompleteTaskWithSpiAccTest {
|
|||
@TaskanaInject TaskService taskService;
|
||||
|
||||
@WithAccessId(user = "user-1-1")
|
||||
@Test
|
||||
void should_RequestReview_When_UserTriesToCompleteTask() throws Exception {
|
||||
Task task = createTaskClaimedByUser("user-1-1").buildAndStore(taskService);
|
||||
@TestFactory
|
||||
Stream<DynamicTest> should_RequestReview_When_UserTriesToCompleteTask() throws Exception {
|
||||
List<Task> tasks =
|
||||
List.of(
|
||||
createTaskClaimedByUser("user-1-1").buildAndStore(taskService),
|
||||
createTaskInReviewByUser("user-1-1").buildAndStore(taskService));
|
||||
ThrowingConsumer<Task> test =
|
||||
task -> {
|
||||
Task processedTask = taskService.completeTask(task.getId());
|
||||
|
||||
Task processedTask = taskService.completeTask(task.getId());
|
||||
|
||||
assertThat(processedTask.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
assertThat(processedTask.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
};
|
||||
return DynamicTest.stream(
|
||||
tasks.iterator(), t -> "Try to complete " + t.getState().name() + " Task", test);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,6 +75,19 @@ class RequestReviewAccTest {
|
|||
assertThat(result.getModified()).isAfterOrEqualTo(now);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1")
|
||||
@Test
|
||||
void should_RequestReview_When_TaskIsInReview() throws Exception {
|
||||
Instant now = Instant.now();
|
||||
Task task = createTaskInReviewByUser("user-1-1").buildAndStore(taskService);
|
||||
|
||||
Task result = taskService.requestReview(task.getId());
|
||||
|
||||
assertThat(result.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
assertThat(result.getOwner()).isNull();
|
||||
assertThat(result.getModified()).isAfterOrEqualTo(now);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1")
|
||||
@Test
|
||||
void should_ForceRequestReview_When_TaskIsClaimedByDifferentUser() throws Exception {
|
||||
|
@ -135,7 +148,8 @@ class RequestReviewAccTest {
|
|||
@WithAccessId(user = "user-1-1")
|
||||
@TestFactory
|
||||
Stream<DynamicTest> should_ThrowException_When_RequestingReviewAndTaskIsNotClaimed() {
|
||||
List<TaskState> invalidStates = Arrays.asList(EnumUtil.allValuesExceptFor(TaskState.CLAIMED));
|
||||
List<TaskState> invalidStates =
|
||||
Arrays.asList(EnumUtil.allValuesExceptFor(TaskState.CLAIMED, TaskState.IN_REVIEW));
|
||||
|
||||
ThrowingConsumer<TaskState> test =
|
||||
state -> {
|
||||
|
@ -143,7 +157,8 @@ class RequestReviewAccTest {
|
|||
ThrowingCallable call = () -> taskService.requestReview(task.getId());
|
||||
|
||||
InvalidTaskStateException e = catchThrowableOfType(call, InvalidTaskStateException.class);
|
||||
assertThat(e.getRequiredTaskStates()).containsExactly(TaskState.CLAIMED);
|
||||
assertThat(e.getRequiredTaskStates())
|
||||
.containsExactlyInAnyOrder(TaskState.CLAIMED, TaskState.IN_REVIEW);
|
||||
assertThat(e.getTaskState()).isEqualTo(state);
|
||||
assertThat(e.getTaskId()).isEqualTo(task.getId());
|
||||
};
|
||||
|
@ -185,7 +200,11 @@ class RequestReviewAccTest {
|
|||
}
|
||||
|
||||
private TaskBuilder createTaskClaimedByUser(String owner) {
|
||||
return createDefaultTask().owner(owner).state(TaskState.CLAIMED);
|
||||
return createDefaultTask().owner(owner).state(TaskState.CLAIMED).claimed(Instant.now());
|
||||
}
|
||||
|
||||
private TaskBuilder createTaskInReviewByUser(String owner) {
|
||||
return createDefaultTask().owner(owner).state(TaskState.IN_REVIEW).claimed(Instant.now());
|
||||
}
|
||||
|
||||
private TaskBuilder createDefaultTask() {
|
||||
|
|
|
@ -6,6 +6,7 @@ import static pro.taskana.common.internal.util.CheckedSupplier.wrap;
|
|||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
|
||||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestWorkbasket;
|
||||
|
||||
import java.time.Instant;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
|
@ -76,7 +77,7 @@ public class RequestReviewWithAfterSpiAccTest {
|
|||
}
|
||||
|
||||
private TaskBuilder createTaskClaimedByUser(String owner) {
|
||||
return createDefaultTask().owner(owner).state(TaskState.CLAIMED);
|
||||
return createDefaultTask().owner(owner).state(TaskState.CLAIMED).claimed(Instant.now());
|
||||
}
|
||||
|
||||
private TaskBuilder createDefaultTask() {
|
||||
|
|
|
@ -7,6 +7,7 @@ import static pro.taskana.common.internal.util.CheckedSupplier.wrap;
|
|||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
|
||||
import static pro.taskana.testapi.DefaultTestEntities.defaultTestWorkbasket;
|
||||
|
||||
import java.time.Instant;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
|
@ -66,7 +67,7 @@ public class RequestReviewWithBeforeSpiAccTest {
|
|||
}
|
||||
|
||||
private TaskBuilder createTaskClaimedByUser(String owner) {
|
||||
return createDefaultTask().owner(owner).state(TaskState.CLAIMED);
|
||||
return createDefaultTask().owner(owner).state(TaskState.CLAIMED).claimed(Instant.now());
|
||||
}
|
||||
|
||||
private TaskBuilder createDefaultTask() {
|
||||
|
|
|
@ -1252,8 +1252,9 @@ public class TaskServiceImpl implements TaskService {
|
|||
throw new InvalidTaskStateException(
|
||||
task.getId(), task.getState(), EnumUtil.allValuesExceptFor(TaskState.END_STATES));
|
||||
}
|
||||
if (!force && task.getState() != TaskState.CLAIMED) {
|
||||
throw new InvalidTaskStateException(task.getId(), task.getState(), TaskState.CLAIMED);
|
||||
if (!force && taskIsNotClaimed(task)) {
|
||||
throw new InvalidTaskStateException(task.getId(), task.getState(), TaskState.CLAIMED,
|
||||
TaskState.IN_REVIEW);
|
||||
}
|
||||
if (!force && !task.getOwner().equals(userId)) {
|
||||
throw new InvalidOwnerException(userId, task.getId());
|
||||
|
|
Loading…
Reference in New Issue