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]

Reply via email to