This is an automated email from the ASF dual-hosted git repository.
pefernan pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 9f243fbca5 [incubator-kie-issues-2032] Clear actual owner after
reassign (#3983)
9f243fbca5 is described below
commit 9f243fbca50dc58707c192b8f6b95fbf5f5d44c7
Author: Deepak Joseph <[email protected]>
AuthorDate: Fri Jul 18 14:10:45 2025 +0530
[incubator-kie-issues-2032] Clear actual owner after reassign (#3983)
* Clear actual owner after reassign
* changes
* added tests
* fixed format
---
.../impl/lifecycle/DefaultUserTaskLifeCycle.java | 1 +
.../jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java | 107 +++++++++++++++++++++
.../jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java | 107 +++++++++++++++++++++
3 files changed, 215 insertions(+)
diff --git
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/DefaultUserTaskLifeCycle.java
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/DefaultUserTaskLifeCycle.java
index b237ca7850..26bbfcd1b8 100644
---
a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/DefaultUserTaskLifeCycle.java
+++
b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/DefaultUserTaskLifeCycle.java
@@ -146,6 +146,7 @@ public class DefaultUserTaskLifeCycle implements
UserTaskLifeCycle {
if (user != null) {
return Optional.of(newTransitionToken(CLAIM, ACTIVE,
Map.of(PARAMETER_USER, user)));
}
+ userTaskInstance.setActualOwner(null);
userTaskInstance.startNotStartedDeadlines();
userTaskInstance.startNotStartedReassignments();
return Optional.empty();
diff --git
a/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
b/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
index 7ad7745a39..da185c3541 100644
---
a/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
+++
b/quarkus/integration-tests/integration-tests-quarkus-usertasks/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
@@ -283,4 +283,111 @@ public class UserTaskLifeCycleIT extends BaseUserTaskIT {
.hasFieldOrPropertyWithValue("source", expectedSource)
.hasFieldOrPropertyWithValue("target", expectedTarget);
}
+
+ @Test
+ public void testUserTaskReassignment() {
+ var traveller = new Traveller("John", "Doe", "[email protected]",
"American", new Address("main street", "Boston", "10005", "US"));
+ var pid = startProcessInstance(traveller);
+
+ String taskId = given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "manager")
+ .queryParam("group", "department-managers")
+ .get(USER_TASKS_ENDPOINT)
+ .then()
+ .statusCode(200)
+ .body("$.size()", is(1))
+ .extract()
+ .path("[0].id");
+
+ // Complete First Line Approval
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "manager")
+ .queryParam("group", "department-managers")
+ .body(new TransitionInfo("complete", Map.of("approved", true)))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Completed"))
+ .body("status.terminate", equalTo("COMPLETED"))
+ .body("outputs.approved", equalTo(true));
+
+ taskId = given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "john")
+ .queryParam("group", "managers")
+ .get(USER_TASKS_ENDPOINT)
+ .then()
+ .statusCode(200)
+ .body("$.size()", is(1))
+ .body("[0].id", not(taskId))
+ .extract()
+ .path("[0].id");
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "john")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("claim"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Reserved"))
+ .body("actualOwner", equalTo("john"));
+
+ // Reassign Second Line Approval
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "john")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("reassign"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Ready"))
+ .body("actualOwner", equalTo(null));
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "jdoe")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("claim"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Reserved"))
+ .body("actualOwner", equalTo("jdoe"));
+
+ // Complete Second Line Approval
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "jdoe")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("complete", Map.of("approved", true)))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Completed"))
+ .body("status.terminate", equalTo("COMPLETED"))
+ .body("outputs.approved", equalTo(true))
+ .body("actualOwner", equalTo("jdoe"));
+
+ given()
+ .accept(ContentType.JSON)
+ .when()
+ .get("/{processId}/{id}", PROCESS_ID, pid)
+ .then()
+ .statusCode(404);
+ }
}
diff --git
a/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
b/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
index 2b9621626c..2a4bb8430e 100644
---
a/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
+++
b/springboot/integration-tests/integration-tests-springboot-usertasks-it/src/test/java/org/jbpm/userTask/jpa/it/UserTaskLifeCycleIT.java
@@ -287,4 +287,111 @@ public class UserTaskLifeCycleIT extends BaseUserTaskIT {
.hasFieldOrPropertyWithValue("source", expectedSource)
.hasFieldOrPropertyWithValue("target", expectedTarget);
}
+
+ @Test
+ public void testUserTaskReassignment() {
+ var traveller = new Traveller("John", "Doe", "[email protected]",
"American", new Address("main street", "Boston", "10005", "US"));
+ var pid = startProcessInstance(traveller);
+
+ String taskId = given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "manager")
+ .queryParam("group", "department-managers")
+ .get(USER_TASKS_ENDPOINT)
+ .then()
+ .statusCode(200)
+ .body("$.size()", is(1))
+ .extract()
+ .path("[0].id");
+
+ // Complete First Line Approval
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "manager")
+ .queryParam("group", "department-managers")
+ .body(new TransitionInfo("complete", Map.of("approved", true)))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Completed"))
+ .body("status.terminate", equalTo("COMPLETED"))
+ .body("outputs.approved", equalTo(true));
+
+ taskId = given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "john")
+ .queryParam("group", "managers")
+ .get(USER_TASKS_ENDPOINT)
+ .then()
+ .statusCode(200)
+ .body("$.size()", is(1))
+ .body("[0].id", not(taskId))
+ .extract()
+ .path("[0].id");
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "john")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("claim"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Reserved"))
+ .body("actualOwner", equalTo("john"));
+
+ // Reassign Second Line Approval
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "john")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("reassign"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Ready"))
+ .body("actualOwner", equalTo(null));
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "jdoe")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("claim"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Reserved"))
+ .body("actualOwner", equalTo("jdoe"));
+
+ // Complete Second Line Approval
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", "jdoe")
+ .queryParam("group", "managers")
+ .body(new TransitionInfo("complete", Map.of("approved", true)))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Completed"))
+ .body("status.terminate", equalTo("COMPLETED"))
+ .body("outputs.approved", equalTo(true))
+ .body("actualOwner", equalTo("jdoe"));
+
+ given()
+ .accept(ContentType.JSON)
+ .when()
+ .get("/{processId}/{id}", PROCESS_ID, pid)
+ .then()
+ .statusCode(404);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]