TSK-1967: make owner of Task updatable when Task is 'READY_FOR_REVIEW'
This commit is contained in:
parent
b9b49f47a1
commit
dc9e2e1d5f
|
|
@ -43,6 +43,7 @@ INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000100', 'ETI:0000000
|
|||
INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000101', 'ETI:000000000000000000000000000000000101', RELATIVE_DATE(-1) , RELATIVE_DATE(-1) , null , RELATIVE_DATE(0) , null , RELATIVE_DATE(-1) , RELATIVE_DATE(2) , 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , -1 , 'CLAIMED' , 'EXTERN' , 'L1050' , 'CLI:100000000000000000000000000000000003', 'WBI:100000000000000000000000000000000007' , 'USER-1-2' , 'DOMAIN_A', 'PI_0000000000101' , 'DOC_0000000000000000101' , 'user-1-2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , 'NONE' , null , null , null , null , null , 'el' , null , null , null , null , null , null , null , null , 'abc' , null , null , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 );
|
||||
INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000102', 'ETI:000000000000000000000000000000000102', RELATIVE_DATE(-2) , RELATIVE_DATE(-1) , null , RELATIVE_DATE(0) , null , RELATIVE_DATE(-2) , RELATIVE_DATE(2) , 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , -1 , 'CLAIMED' , 'EXTERN' , 'L1050' , 'CLI:100000000000000000000000000000000003', 'WBI:100000000000000000000000000000000007' , 'USER-1-2' , 'DOMAIN_A', 'PI_0000000000102' , 'DOC_0000000000000000102' , 'user-1-2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , 'NONE' , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 );
|
||||
INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000103', 'ETI:000000000000000000000000000000000103', RELATIVE_DATE(-2) , RELATIVE_DATE(-1) , null , RELATIVE_DATE(0) , null , RELATIVE_DATE(-1) , RELATIVE_DATE(3) , 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , -1 , 'CLAIMED' , 'EXTERN' , 'L1050' , 'CLI:100000000000000000000000000000000003', 'WBI:100000000000000000000000000000000007' , 'USER-1-2' , 'DOMAIN_A', 'PI_0000000000103' , 'DOC_0000000000000000103' , 'user-1-2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , 'NONE' , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 );
|
||||
INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000104', 'ETI:000000000000000000000000000000000104', RELATIVE_DATE(-2) , RELATIVE_DATE(-1) , null , RELATIVE_DATE(0) , null , RELATIVE_DATE(-1) , RELATIVE_DATE(3) , 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , -1 , 'READY_FOR_REVIEW', 'EXTERN' , 'L1050' , 'CLI:100000000000000000000000000000000003', 'WBI:100000000000000000000000000000000007' , 'USER-1-2' , 'DOMAIN_A', 'PI_0000000000103' , 'DOC_0000000000000000103' , null , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , 'NONE' , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 );
|
||||
-- Tasks for DeleteTaskAccTest
|
||||
INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000036', 'ETI:000000000000000000000000000000000036', RELATIVE_DATE(0) , RELATIVE_DATE(0) , RELATIVE_DATE(0) , RELATIVE_DATE(0) , null , RELATIVE_DATE(0) , RELATIVE_DATE(0) , 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , -1 , 'COMPLETED' , 'EXTERN' , 'L1050' , 'CLI:100000000000000000000000000000000003', 'WBI:100000000000000000000000000000000007' , 'USER-1-2' , 'DOMAIN_A', 'PI_0000000000036' , 'DOC_0000000000000000036' , 'user-1-2' , '00' , 'PASystem' , '00' , 'SDNR' , '00011122' , true , false , null , 'NONE' , null , null , null , null , null , 'ew' , null , null , null , null , null , null , null , null , 'abc' , null , null , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 );
|
||||
INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000037', 'ETI:000000000000000000000000000000000037', RELATIVE_DATE(0) , RELATIVE_DATE(0) , RELATIVE_DATE(0) , RELATIVE_DATE(0) , null , RELATIVE_DATE(0) , RELATIVE_DATE(0) , 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , -1 , 'COMPLETED' , 'EXTERN' , 'L1050' , 'CLI:100000000000000000000000000000000003', 'WBI:100000000000000000000000000000000007' , 'USER-1-2' , 'DOMAIN_A', 'PI_0000000000037' , 'DOC_0000000000000000037' , 'user-1-2' , '00' , 'PASystem' , '00' , 'SDNR' , '00011122' , true , false , null , 'NONE' , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 );
|
||||
|
|
|
|||
|
|
@ -804,7 +804,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
getMinimalTaskSummaries(taskIds);
|
||||
bulkLog.addAllErrors(existingAndAuthorizedTasks.getRight());
|
||||
Pair<List<String>, BulkLog> taskIdsToUpdate =
|
||||
filterOutTasksWhichAreNotReady(existingAndAuthorizedTasks.getLeft());
|
||||
filterOutTasksWhichAreInInvalidState(existingAndAuthorizedTasks.getLeft());
|
||||
bulkLog.addAllErrors(taskIdsToUpdate.getRight());
|
||||
|
||||
if (!taskIdsToUpdate.getLeft().isEmpty()) {
|
||||
|
|
@ -1032,17 +1032,20 @@ public class TaskServiceImpl implements TaskService {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private Pair<List<String>, BulkLog> filterOutTasksWhichAreNotReady(
|
||||
private Pair<List<String>, BulkLog> filterOutTasksWhichAreInInvalidState(
|
||||
Collection<MinimalTaskSummary> minimalTaskSummaries) {
|
||||
List<String> filteredTasks = new ArrayList<>(minimalTaskSummaries.size());
|
||||
BulkLog bulkLog = new BulkLog();
|
||||
|
||||
for (MinimalTaskSummary taskSummary : minimalTaskSummaries) {
|
||||
if (taskSummary.getTaskState() != TaskState.READY) {
|
||||
if (!taskSummary.getTaskState().in(TaskState.READY, TaskState.READY_FOR_REVIEW)) {
|
||||
bulkLog.addError(
|
||||
taskSummary.getTaskId(),
|
||||
new InvalidTaskStateException(
|
||||
taskSummary.getTaskId(), taskSummary.getTaskState(), TaskState.READY));
|
||||
taskSummary.getTaskId(),
|
||||
taskSummary.getTaskState(),
|
||||
TaskState.READY,
|
||||
TaskState.READY_FOR_REVIEW));
|
||||
} else {
|
||||
filteredTasks.add(taskSummary.getTaskId());
|
||||
}
|
||||
|
|
@ -2013,11 +2016,11 @@ public class TaskServiceImpl implements TaskService {
|
|||
newTaskImpl1.setBusinessProcessId(oldTaskImpl.getBusinessProcessId());
|
||||
}
|
||||
|
||||
// owner can only be changed if task is in state ready
|
||||
// owner can only be changed if task is either in state ready or ready_for_review
|
||||
boolean isOwnerChanged = !Objects.equals(newTaskImpl1.getOwner(), oldTaskImpl.getOwner());
|
||||
if (isOwnerChanged && oldTaskImpl.getState() != TaskState.READY) {
|
||||
if (isOwnerChanged && !oldTaskImpl.getState().in(TaskState.READY, TaskState.READY_FOR_REVIEW)) {
|
||||
throw new InvalidTaskStateException(
|
||||
oldTaskImpl.getId(), oldTaskImpl.getState(), TaskState.READY);
|
||||
oldTaskImpl.getId(), oldTaskImpl.getState(), TaskState.READY, TaskState.READY_FOR_REVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,14 +33,14 @@ class SetOwnerAccTest extends AbstractAccTest {
|
|||
|
||||
@WithAccessId(user = "user-1-2")
|
||||
@Test
|
||||
void testSetOwnerAndSubsequentClaimSucceeds() throws Exception {
|
||||
void testSetOwnerOfReadyTaskAndSubsequentClaimSucceeds() throws Exception {
|
||||
|
||||
TaskService taskService = taskanaEngine.getTaskService();
|
||||
String taskReadyId = "TKI:000000000000000000000000000000000025";
|
||||
Task taskReady = taskService.getTask(taskReadyId);
|
||||
assertThat(taskReady.getState()).isEqualTo(TaskState.READY);
|
||||
assertThat(taskReady.getOwner()).isNull();
|
||||
String anyUserName = "TestUser27";
|
||||
assertThat(taskReady.getOwner()).isNotEqualTo(anyUserName);
|
||||
Task modifiedTaskReady = setOwner(taskReadyId, anyUserName);
|
||||
|
||||
assertThat(modifiedTaskReady.getState()).isEqualTo(TaskState.READY);
|
||||
|
|
@ -50,6 +50,25 @@ class SetOwnerAccTest extends AbstractAccTest {
|
|||
assertThat(taskClaimed.getOwner()).isEqualTo("user-1-2");
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-2")
|
||||
@Test
|
||||
void testSetOwnerOfReadyForReviewTaskAndSubsequentClaimSucceeds() throws Exception {
|
||||
|
||||
TaskService taskService = taskanaEngine.getTaskService();
|
||||
String taskReadyForReviewId = "TKI:100000000000000000000000000000000025";
|
||||
Task taskReady = taskService.getTask(taskReadyForReviewId);
|
||||
assertThat(taskReady.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
String anyUserName = "TestUser28";
|
||||
assertThat(taskReady.getOwner()).isNotEqualTo(anyUserName);
|
||||
Task modifiedTaskReady = setOwner(taskReadyForReviewId, anyUserName);
|
||||
|
||||
assertThat(modifiedTaskReady.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
assertThat(modifiedTaskReady.getOwner()).isEqualTo(anyUserName);
|
||||
Task taskClaimed = taskService.claim(taskReadyForReviewId);
|
||||
assertThat(taskClaimed.getState()).isEqualTo(TaskState.IN_REVIEW);
|
||||
assertThat(taskClaimed.getOwner()).isEqualTo("user-1-2");
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-2")
|
||||
@Test
|
||||
void testSetOwnerViaUpdateTaskNotAuthorized() {
|
||||
|
|
@ -95,6 +114,18 @@ class SetOwnerAccTest extends AbstractAccTest {
|
|||
.isInstanceOf(MismatchedWorkbasketPermissionException.class);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-2")
|
||||
@Test
|
||||
void testSetOwnerOfReadyAndReadyForReviewTasks() {
|
||||
|
||||
List<String> taskIds =
|
||||
List.of(
|
||||
"TKI:000000000000000000000000000000000033", "TKI:500000000000000000000000000000000028");
|
||||
BulkOperationResults<String, TaskanaException> results =
|
||||
taskanaEngine.getTaskService().setOwnerOfTasks("someUser", taskIds);
|
||||
assertThat(results.containsErrors()).isFalse();
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-b-2")
|
||||
@Test
|
||||
void testSetOwnerOfTasksWithDuplicatesSucceeds() {
|
||||
|
|
@ -177,10 +208,10 @@ class SetOwnerAccTest extends AbstractAccTest {
|
|||
c -> c.getClass() == MismatchedWorkbasketPermissionException.class,
|
||||
"MismatchedWorkbasketPermissionException");
|
||||
assertThat(results.getErrorMap())
|
||||
.hasSize(97)
|
||||
.hasSize(95)
|
||||
.extractingFromEntries(Entry::getValue)
|
||||
.hasOnlyElementsOfTypes(InvalidTaskStateException.class, NotAuthorizedException.class)
|
||||
.areExactly(37, invalidTaskStateException)
|
||||
.areExactly(35, invalidTaskStateException)
|
||||
.areExactly(60, mismatchedWorkbasketPermissionException);
|
||||
}
|
||||
|
||||
|
|
@ -196,7 +227,7 @@ class SetOwnerAccTest extends AbstractAccTest {
|
|||
assertThat(allTaskSummaries).hasSize(99);
|
||||
assertThat(results.containsErrors()).isTrue();
|
||||
assertThat(results.getErrorMap())
|
||||
.hasSize(51)
|
||||
.hasSize(49)
|
||||
.extractingFromEntries(Entry::getValue)
|
||||
.hasOnlyElementsOfType(InvalidStateException.class);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,34 @@ class TaskControllerIntTest {
|
|||
sampleDataGenerator.generateSampleData();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_UpdateTaskOwnerOfReadyForReviewTask() {
|
||||
final String url = restHelper.toUrl("/api/v1/tasks/TKI:000000000000000000000000000000000104");
|
||||
HttpEntity<Object> auth = new HttpEntity<>(RestHelper.generateHeadersForUser("user-1-2"));
|
||||
|
||||
// retrieve task from Rest Api
|
||||
ResponseEntity<TaskRepresentationModel> responseGet =
|
||||
TEMPLATE.exchange(url, HttpMethod.GET, auth, TASK_MODEL_TYPE);
|
||||
|
||||
assertThat(responseGet.getBody()).isNotNull();
|
||||
TaskRepresentationModel theTaskRepresentationModel = responseGet.getBody();
|
||||
assertThat(theTaskRepresentationModel.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
assertThat(theTaskRepresentationModel.getOwner()).isNull();
|
||||
|
||||
// set Owner and update Task
|
||||
theTaskRepresentationModel.setOwner("dummyUser");
|
||||
HttpEntity<TaskRepresentationModel> auth2 =
|
||||
new HttpEntity<>(theTaskRepresentationModel, RestHelper.generateHeadersForUser("user-1-2"));
|
||||
|
||||
ResponseEntity<TaskRepresentationModel> responseUpdate =
|
||||
TEMPLATE.exchange(url, HttpMethod.PUT, auth2, TASK_MODEL_TYPE);
|
||||
|
||||
assertThat(responseUpdate.getBody()).isNotNull();
|
||||
TaskRepresentationModel theUpdatedTaskRepresentationModel = responseUpdate.getBody();
|
||||
assertThat(theUpdatedTaskRepresentationModel.getState()).isEqualTo(TaskState.READY_FOR_REVIEW);
|
||||
assertThat(theUpdatedTaskRepresentationModel.getOwner()).isEqualTo("dummyUser");
|
||||
}
|
||||
|
||||
private TaskRepresentationModel getTaskResourceSample() {
|
||||
ClassificationSummaryRepresentationModel classificationResource =
|
||||
new ClassificationSummaryRepresentationModel();
|
||||
|
|
@ -130,7 +158,7 @@ class TaskControllerIntTest {
|
|||
|
||||
assertThat(response.getBody()).isNotNull();
|
||||
assertThat((response.getBody()).getLink(IanaLinkRelations.SELF)).isNotNull();
|
||||
assertThat(response.getBody().getContent()).hasSize(60);
|
||||
assertThat(response.getBody().getContent()).hasSize(61);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -830,7 +858,7 @@ class TaskControllerIntTest {
|
|||
|
||||
assertThat(response.getBody()).isNotNull();
|
||||
assertThat((response.getBody()).getLink(IanaLinkRelations.SELF)).isNotNull();
|
||||
assertThat(response.getBody().getContent()).hasSize(21);
|
||||
assertThat(response.getBody().getContent()).hasSize(22);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -874,7 +902,7 @@ class TaskControllerIntTest {
|
|||
|
||||
assertThat(response.getBody()).isNotNull();
|
||||
assertThat((response.getBody()).getLink(IanaLinkRelations.SELF)).isNotNull();
|
||||
assertThat(response.getBody().getContent()).hasSize(91);
|
||||
assertThat(response.getBody().getContent()).hasSize(92);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -950,7 +978,7 @@ class TaskControllerIntTest {
|
|||
TEMPLATE.exchange(url, HttpMethod.GET, auth, TASK_SUMMARY_PAGE_MODEL_TYPE);
|
||||
|
||||
assertThat(response.getBody()).isNotNull();
|
||||
assertThat((response.getBody()).getContent()).hasSize(60);
|
||||
assertThat((response.getBody()).getContent()).hasSize(61);
|
||||
|
||||
String url2 =
|
||||
restHelper.toUrl(RestEndpoints.URL_TASKS)
|
||||
|
|
@ -960,9 +988,9 @@ class TaskControllerIntTest {
|
|||
assertThat(response.getBody()).isNotNull();
|
||||
assertThat((response.getBody()).getContent()).hasSize(5);
|
||||
assertThat(response.getBody().getRequiredLink(IanaLinkRelations.LAST).getHref())
|
||||
.contains("page=12");
|
||||
.contains("page=13");
|
||||
assertThat(response.getBody().getContent().iterator().next().getTaskId())
|
||||
.isEqualTo("TKI:000000000000000000000000000000000073");
|
||||
.isEqualTo("TKI:000000000000000000000000000000000072");
|
||||
assertThat(response.getBody().getLink(IanaLinkRelations.SELF)).isNotNull();
|
||||
assertThat(response.getBody().getRequiredLink(IanaLinkRelations.SELF).getHref())
|
||||
.endsWith("/api/v1/tasks?sort-by=DUE&order=DESCENDING&page-size=5&page=5");
|
||||
|
|
@ -1025,7 +1053,7 @@ class TaskControllerIntTest {
|
|||
|
||||
assertThat(response.getBody()).isNotNull();
|
||||
assertThat((response.getBody()).getLink(IanaLinkRelations.SELF)).isNotNull();
|
||||
assertThat(response.getBody().getContent()).hasSize(84);
|
||||
assertThat(response.getBody().getContent()).hasSize(85);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in New Issue