fix resquestReview for an IN_REVIEW Task

This commit is contained in:
Elena Mokeeva 2023-02-01 10:15:52 +01:00 committed by Elena Mokeeva
parent a4697ed60b
commit f25b6eb550
5 changed files with 77 additions and 26 deletions

View File

@ -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);
}
}
}

View File

@ -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() {

View File

@ -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() {

View File

@ -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() {

View File

@ -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());