You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kie.apache.org by dj...@apache.org on 2026/02/10 13:52:53 UTC
(incubator-kie-kogito-runtimes) branch main updated: [incubator-kie-issues#2241] Usertasks stays in created stated when only potential groups are specified (#4189)
This is an automated email from the ASF dual-hosted git repository.
djoseph 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 7b9520c235 [incubator-kie-issues#2241] Usertasks stays in created stated when only potential groups are specified (#4189)
7b9520c235 is described below
commit 7b9520c235768634d1245ba2987236bf1e9bf75b
Author: Deepak Joseph <15...@users.noreply.github.com>
AuthorDate: Tue Feb 10 19:22:49 2026 +0530
[incubator-kie-issues#2241] Usertasks stays in created stated when only potential groups are specified (#4189)
* ws-humantask potential groups activation fix
* update
---
.../impl/lifecycle/WsHumanTaskLifeCycle.java | 2 +-
.../main/resources/manager_multiple_groups.bpmn | 145 +++++++++++++++++++++
.../src/main/resources/manager_single_group.bpmn | 145 +++++++++++++++++++++
.../usertask/jpa/it/WsHumanTaskLifeCycleIT.java | 117 +++++++++++++++++
.../main/resources/manager_multiple_groups.bpmn | 145 +++++++++++++++++++++
.../src/main/resources/manager_single_group.bpmn | 145 +++++++++++++++++++++
.../usertask/jpa/it/WsHumanTaskLifeCycleIT.java | 117 +++++++++++++++++
7 files changed, 815 insertions(+), 1 deletion(-)
diff --git a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/WsHumanTaskLifeCycle.java b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/WsHumanTaskLifeCycle.java
index 795ba2e39a..8159446834 100644
--- a/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/WsHumanTaskLifeCycle.java
+++ b/jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/lifecycle/WsHumanTaskLifeCycle.java
@@ -218,7 +218,7 @@ public class WsHumanTaskLifeCycle implements UserTaskLifeCycle {
@Override
public UserTaskTransitionToken newTransitionToken(String transitionId, UserTaskInstance userTaskInstance, Map<String, Object> data) {
- if (transitionId.equals(ACTIVATE) && userTaskInstance.getPotentialUsers().isEmpty()) {
+ if (transitionId.equals(ACTIVATE) && userTaskInstance.getPotentialUsers().isEmpty() && userTaskInstance.getPotentialGroups().isEmpty()) {
return null;
}
return newTransitionToken(transitionId, userTaskInstance.getStatus(), (String) userTaskInstance.getMetadata().get(PREVIOUS_STATUS), data);
diff --git a/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/main/resources/manager_multiple_groups.bpmn b/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/main/resources/manager_multiple_groups.bpmn
new file mode 100644
index 0000000000..6fe7d1ee23
--- /dev/null
+++ b/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/main/resources/manager_multiple_groups.bpmn
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" id="_jetQUOewED6GJfjaBKPBcA" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www. [...]
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_PriorityInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_CommentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_DescriptionInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_CreatedByInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_ContentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotStartedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotCompletedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotStartedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotCompletedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:collaboration id="_9A771063-4AD6-4190-BFC9-A2C53D50E316" name="Default Collaboration">
+ <bpmn2:participant id="_E6F3770A-7DCC-4464-B5DB-A569B4EC38E5" name="Pool Participant" processRef="manager_multiple_groups"/>
+ </bpmn2:collaboration>
+ <bpmn2:process id="manager_multiple_groups" drools:packageName="com.example" drools:version="1.0" drools:adHoc="false" name="manager_multiple_groups" isExecutable="true" processType="Public">
+ <bpmn2:sequenceFlow id="_F4007996-C153-44A8-8F61-9F8A03D17DC1" sourceRef="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" targetRef="_9EC015CA-BD40-46A2-9D52-A2545A9C6DF5"/>
+ <bpmn2:sequenceFlow id="_17155F10-F4B1-483D-916C-D54BA58D051D" sourceRef="_AE3B22B8-1A1B-4781-997C-F51B0E110898" targetRef="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5"/>
+ <bpmn2:endEvent id="_9EC015CA-BD40-46A2-9D52-A2545A9C6DF5">
+ <bpmn2:incoming>_F4007996-C153-44A8-8F61-9F8A03D17DC1</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:userTask id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" name="Manager Approval">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Manager Approval]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_17155F10-F4B1-483D-916C-D54BA58D051D</bpmn2:incoming>
+ <bpmn2:outgoing>_F4007996-C153-44A8-8F61-9F8A03D17DC1</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX" drools:dtype="Object" itemSubjectRef="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputXItem" name="TaskName"/>
+ <bpmn2:dataInput id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX" drools:dtype="Object" itemSubjectRef="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputXItem" name="Skippable"/>
+ <bpmn2:dataInput id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX" drools:dtype="Object" itemSubjectRef="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputXItem" name="GroupId"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[Task]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[hr,it]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ </bpmn2:userTask>
+ <bpmn2:startEvent id="_AE3B22B8-1A1B-4781-997C-F51B0E110898">
+ <bpmn2:outgoing>_17155F10-F4B1-483D-916C-D54BA58D051D</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="manager_multiple_groups">
+ <bpmndi:BPMNShape id="shape__AE3B22B8-1A1B-4781-997C-F51B0E110898" bpmnElement="_AE3B22B8-1A1B-4781-997C-F51B0E110898">
+ <dc:Bounds height="56" width="56" x="126" y="214"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" bpmnElement="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5">
+ <dc:Bounds height="102" width="154" x="262" y="191"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__9EC015CA-BD40-46A2-9D52-A2545A9C6DF5" bpmnElement="_9EC015CA-BD40-46A2-9D52-A2545A9C6DF5">
+ <dc:Bounds height="56" width="56" x="496" y="214"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge_shape__AE3B22B8-1A1B-4781-997C-F51B0E110898_to_shape__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" bpmnElement="_17155F10-F4B1-483D-916C-D54BA58D051D">
+ <di:waypoint x="154" y="242"/>
+ <di:waypoint x="339" y="242"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_to_shape__9EC015CA-BD40-46A2-9D52-A2545A9C6DF5" bpmnElement="_F4007996-C153-44A8-8F61-9F8A03D17DC1">
+ <di:waypoint x="339" y="242"/>
+ <di:waypoint x="524" y="242"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+ <bpmn2:relationship type="BPSimData">
+ <bpmn2:extensionElements>
+ <bpsim:BPSimData>
+ <bpsim:Scenario id="default" name="Simulationscenario">
+ <bpsim:ScenarioParameters/>
+ <bpsim:ElementParameters elementRef="_AE3B22B8-1A1B-4781-997C-F51B0E110898">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ </bpsim:Scenario>
+ </bpsim:BPSimData>
+ </bpmn2:extensionElements>
+ <bpmn2:source>_jetQUOewED6GJfjaBKPBcA</bpmn2:source>
+ <bpmn2:target>_jetQUOewED6GJfjaBKPBcA</bpmn2:target>
+ </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git a/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/main/resources/manager_single_group.bpmn b/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/main/resources/manager_single_group.bpmn
new file mode 100644
index 0000000000..c5b9f20651
--- /dev/null
+++ b/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/main/resources/manager_single_group.bpmn
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" id="_jdDHoOepED6zQ9TF790BnA" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www. [...]
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_PriorityInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_CommentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_DescriptionInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_CreatedByInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_ContentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotStartedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotCompletedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotStartedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotCompletedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:collaboration id="_4DA19F23-8075-4BA8-80C7-02C314B83C9F" name="Default Collaboration">
+ <bpmn2:participant id="_5B648F4F-2AF7-4161-A30D-223D4F373347" name="Pool Participant" processRef="manager_single_group"/>
+ </bpmn2:collaboration>
+ <bpmn2:process id="manager_single_group" drools:packageName="com.example" drools:version="1.0" drools:adHoc="false" name="manager_single_group" isExecutable="true" processType="Public">
+ <bpmn2:sequenceFlow id="_186181AA-EC9B-4182-9634-696A19ED2463" sourceRef="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80" targetRef="_47D60E08-079F-4B50-BAC4-10CB64E24729"/>
+ <bpmn2:sequenceFlow id="_1B44D237-AC79-4722-921A-F0342538B03B" sourceRef="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6" targetRef="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80"/>
+ <bpmn2:endEvent id="_47D60E08-079F-4B50-BAC4-10CB64E24729">
+ <bpmn2:incoming>_186181AA-EC9B-4182-9634-696A19ED2463</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:userTask id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80" name="Manager Approval">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Manager Approval]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_1B44D237-AC79-4722-921A-F0342538B03B</bpmn2:incoming>
+ <bpmn2:outgoing>_186181AA-EC9B-4182-9634-696A19ED2463</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX" drools:dtype="Object" itemSubjectRef="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputXItem" name="TaskName"/>
+ <bpmn2:dataInput id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX" drools:dtype="Object" itemSubjectRef="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputXItem" name="Skippable"/>
+ <bpmn2:dataInput id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX" drools:dtype="Object" itemSubjectRef="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputXItem" name="GroupId"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[Task]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[hr]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ </bpmn2:userTask>
+ <bpmn2:startEvent id="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6">
+ <bpmn2:outgoing>_1B44D237-AC79-4722-921A-F0342538B03B</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="manager_single_group">
+ <bpmndi:BPMNShape id="shape__FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6" bpmnElement="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6">
+ <dc:Bounds height="56" width="56" x="95" y="194"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__46FE320A-C92F-4BC6-A5C6-FF8E42303A80" bpmnElement="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80">
+ <dc:Bounds height="102" width="154" x="231" y="171"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__47D60E08-079F-4B50-BAC4-10CB64E24729" bpmnElement="_47D60E08-079F-4B50-BAC4-10CB64E24729">
+ <dc:Bounds height="56" width="56" x="465" y="194"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge_shape__FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6_to_shape__46FE320A-C92F-4BC6-A5C6-FF8E42303A80" bpmnElement="_1B44D237-AC79-4722-921A-F0342538B03B">
+ <di:waypoint x="123" y="222"/>
+ <di:waypoint x="308" y="222"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_to_shape__47D60E08-079F-4B50-BAC4-10CB64E24729" bpmnElement="_186181AA-EC9B-4182-9634-696A19ED2463">
+ <di:waypoint x="308" y="222"/>
+ <di:waypoint x="493" y="222"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+ <bpmn2:relationship type="BPSimData">
+ <bpmn2:extensionElements>
+ <bpsim:BPSimData>
+ <bpsim:Scenario id="default" name="Simulationscenario">
+ <bpsim:ScenarioParameters/>
+ <bpsim:ElementParameters elementRef="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ </bpsim:Scenario>
+ </bpsim:BPSimData>
+ </bpmn2:extensionElements>
+ <bpmn2:source>_jdDHoOepED6zQ9TF790BnA</bpmn2:source>
+ <bpmn2:target>_jdDHoOepED6zQ9TF790BnA</bpmn2:target>
+ </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git a/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java b/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java
index d617ab702b..8b2a087221 100644
--- a/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java
+++ b/quarkus/integration-tests/integration-tests-quarkus-wshumantasks/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java
@@ -564,6 +564,64 @@ public class WsHumanTaskLifeCycleIT {
isProcessCompleted(processId, pid);
}
+ @Test
+ public void testSingleGroupUserTaskLifeCycle() {
+ var user = "carl";
+ var group = "hr";
+ var potentialGroups = new String[] { group };
+ var processId = "manager_single_group";
+ var pid = startProcessInstance(processId);
+ var taskId = getTaskId(user, group, pid);
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .get(USER_TASKS_INSTANCE_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Ready"))
+ .body("potentialUsers", equalTo(List.of()))
+ .body("potentialGroups", hasItems(potentialGroups));
+
+ claim(taskId, user, group);
+ start(taskId, user, group);
+ complete(taskId, user, group);
+
+ isProcessCompleted(processId, pid);
+ }
+
+ @Test
+ public void testMultipleGroupUserTaskLifeCycle() {
+ var user = "dave";
+ var group = "it";
+ var potentialGroups = new String[] { "hr", "it" };
+ var processId = "manager_multiple_groups";
+ var pid = startProcessInstance(processId);
+ var taskId = getTaskId(user, group, pid);
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .get(USER_TASKS_INSTANCE_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Ready"))
+ .body("potentialUsers", equalTo(List.of()))
+ .body("potentialGroups", hasItems(potentialGroups));
+
+ claim(taskId, user, group);
+ start(taskId, user, group);
+ complete(taskId, user, group);
+
+ isProcessCompleted(processId, pid);
+ }
+
private void nominate(String taskId, String user, String status, String[] nominatedUsers) {
given()
.contentType(ContentType.JSON)
@@ -747,6 +805,21 @@ public class WsHumanTaskLifeCycleIT {
.body("status.terminate", equalTo(null));
}
+ private void claim(String taskId, String user, String group) {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .body(new TransitionInfo("claim"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Reserved"))
+ .body("status.terminate", equalTo(null));
+ }
+
public String startProcessInstance(String processId) {
return startProcessInstanceWithVariables(processId, Map.of());
}
@@ -796,6 +869,20 @@ public class WsHumanTaskLifeCycleIT {
.getString("find { it.processInfo.processInstanceId == pid }.id");
}
+ private String getTaskId(String user, String group, String pid) {
+ return given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .get(USER_TASKS_ENDPOINT)
+ .then()
+ .statusCode(200)
+ .extract()
+ .jsonPath()
+ .param("pid", pid)
+ .getString("find { it.processInfo.processInstanceId == pid }.id");
+ }
+
private void verifyTask(String processId, String pid, String taskId, String user, String state, String[] potentialUsers) {
given().contentType(ContentType.JSON)
.when()
@@ -830,6 +917,21 @@ public class WsHumanTaskLifeCycleIT {
.body("status.terminate", equalTo("COMPLETED"));
}
+ private void complete(String taskId, String user, String group) {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .body(new TransitionInfo("complete"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Completed"))
+ .body("status.terminate", equalTo("COMPLETED"));
+ }
+
private void start(String taskId, String user) {
given()
.contentType(ContentType.JSON)
@@ -844,6 +946,21 @@ public class WsHumanTaskLifeCycleIT {
.body("status.terminate", equalTo(null));
}
+ private void start(String taskId, String user, String group) {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .body(new TransitionInfo("start"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("InProgress"))
+ .body("status.terminate", equalTo(null));
+ }
+
private void suspendWithDurationOrTimestamp(String taskId, String user, String temporal) {
given()
.contentType(ContentType.JSON)
diff --git a/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/main/resources/manager_multiple_groups.bpmn b/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/main/resources/manager_multiple_groups.bpmn
new file mode 100644
index 0000000000..6fe7d1ee23
--- /dev/null
+++ b/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/main/resources/manager_multiple_groups.bpmn
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" id="_jetQUOewED6GJfjaBKPBcA" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www. [...]
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_PriorityInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_CommentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_DescriptionInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_CreatedByInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_ContentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotStartedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotCompletedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotStartedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_NotCompletedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:collaboration id="_9A771063-4AD6-4190-BFC9-A2C53D50E316" name="Default Collaboration">
+ <bpmn2:participant id="_E6F3770A-7DCC-4464-B5DB-A569B4EC38E5" name="Pool Participant" processRef="manager_multiple_groups"/>
+ </bpmn2:collaboration>
+ <bpmn2:process id="manager_multiple_groups" drools:packageName="com.example" drools:version="1.0" drools:adHoc="false" name="manager_multiple_groups" isExecutable="true" processType="Public">
+ <bpmn2:sequenceFlow id="_F4007996-C153-44A8-8F61-9F8A03D17DC1" sourceRef="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" targetRef="_9EC015CA-BD40-46A2-9D52-A2545A9C6DF5"/>
+ <bpmn2:sequenceFlow id="_17155F10-F4B1-483D-916C-D54BA58D051D" sourceRef="_AE3B22B8-1A1B-4781-997C-F51B0E110898" targetRef="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5"/>
+ <bpmn2:endEvent id="_9EC015CA-BD40-46A2-9D52-A2545A9C6DF5">
+ <bpmn2:incoming>_F4007996-C153-44A8-8F61-9F8A03D17DC1</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:userTask id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" name="Manager Approval">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Manager Approval]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_17155F10-F4B1-483D-916C-D54BA58D051D</bpmn2:incoming>
+ <bpmn2:outgoing>_F4007996-C153-44A8-8F61-9F8A03D17DC1</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX" drools:dtype="Object" itemSubjectRef="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputXItem" name="TaskName"/>
+ <bpmn2:dataInput id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX" drools:dtype="Object" itemSubjectRef="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputXItem" name="Skippable"/>
+ <bpmn2:dataInput id="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX" drools:dtype="Object" itemSubjectRef="__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputXItem" name="GroupId"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[Task]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_TaskNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_SkippableInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[hr,it]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_GroupIdInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ </bpmn2:userTask>
+ <bpmn2:startEvent id="_AE3B22B8-1A1B-4781-997C-F51B0E110898">
+ <bpmn2:outgoing>_17155F10-F4B1-483D-916C-D54BA58D051D</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="manager_multiple_groups">
+ <bpmndi:BPMNShape id="shape__AE3B22B8-1A1B-4781-997C-F51B0E110898" bpmnElement="_AE3B22B8-1A1B-4781-997C-F51B0E110898">
+ <dc:Bounds height="56" width="56" x="126" y="214"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" bpmnElement="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5">
+ <dc:Bounds height="102" width="154" x="262" y="191"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__9EC015CA-BD40-46A2-9D52-A2545A9C6DF5" bpmnElement="_9EC015CA-BD40-46A2-9D52-A2545A9C6DF5">
+ <dc:Bounds height="56" width="56" x="496" y="214"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge_shape__AE3B22B8-1A1B-4781-997C-F51B0E110898_to_shape__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5" bpmnElement="_17155F10-F4B1-483D-916C-D54BA58D051D">
+ <di:waypoint x="154" y="242"/>
+ <di:waypoint x="339" y="242"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5_to_shape__9EC015CA-BD40-46A2-9D52-A2545A9C6DF5" bpmnElement="_F4007996-C153-44A8-8F61-9F8A03D17DC1">
+ <di:waypoint x="339" y="242"/>
+ <di:waypoint x="524" y="242"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+ <bpmn2:relationship type="BPSimData">
+ <bpmn2:extensionElements>
+ <bpsim:BPSimData>
+ <bpsim:Scenario id="default" name="Simulationscenario">
+ <bpsim:ScenarioParameters/>
+ <bpsim:ElementParameters elementRef="_AE3B22B8-1A1B-4781-997C-F51B0E110898">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_F1AA6140-7BF6-481F-A0E1-BE5ABE8535D5">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ </bpsim:Scenario>
+ </bpsim:BPSimData>
+ </bpmn2:extensionElements>
+ <bpmn2:source>_jetQUOewED6GJfjaBKPBcA</bpmn2:source>
+ <bpmn2:target>_jetQUOewED6GJfjaBKPBcA</bpmn2:target>
+ </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git a/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/main/resources/manager_single_group.bpmn b/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/main/resources/manager_single_group.bpmn
new file mode 100644
index 0000000000..c5b9f20651
--- /dev/null
+++ b/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/main/resources/manager_single_group.bpmn
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" id="_jdDHoOepED6zQ9TF790BnA" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www. [...]
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_PriorityInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_CommentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_DescriptionInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_CreatedByInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_ContentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotStartedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotCompletedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotStartedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_NotCompletedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:collaboration id="_4DA19F23-8075-4BA8-80C7-02C314B83C9F" name="Default Collaboration">
+ <bpmn2:participant id="_5B648F4F-2AF7-4161-A30D-223D4F373347" name="Pool Participant" processRef="manager_single_group"/>
+ </bpmn2:collaboration>
+ <bpmn2:process id="manager_single_group" drools:packageName="com.example" drools:version="1.0" drools:adHoc="false" name="manager_single_group" isExecutable="true" processType="Public">
+ <bpmn2:sequenceFlow id="_186181AA-EC9B-4182-9634-696A19ED2463" sourceRef="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80" targetRef="_47D60E08-079F-4B50-BAC4-10CB64E24729"/>
+ <bpmn2:sequenceFlow id="_1B44D237-AC79-4722-921A-F0342538B03B" sourceRef="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6" targetRef="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80"/>
+ <bpmn2:endEvent id="_47D60E08-079F-4B50-BAC4-10CB64E24729">
+ <bpmn2:incoming>_186181AA-EC9B-4182-9634-696A19ED2463</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:userTask id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80" name="Manager Approval">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Manager Approval]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_1B44D237-AC79-4722-921A-F0342538B03B</bpmn2:incoming>
+ <bpmn2:outgoing>_186181AA-EC9B-4182-9634-696A19ED2463</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX" drools:dtype="Object" itemSubjectRef="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputXItem" name="TaskName"/>
+ <bpmn2:dataInput id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX" drools:dtype="Object" itemSubjectRef="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputXItem" name="Skippable"/>
+ <bpmn2:dataInput id="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX" drools:dtype="Object" itemSubjectRef="__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputXItem" name="GroupId"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[Task]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_TaskNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_SkippableInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[hr]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_46FE320A-C92F-4BC6-A5C6-FF8E42303A80_GroupIdInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ </bpmn2:userTask>
+ <bpmn2:startEvent id="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6">
+ <bpmn2:outgoing>_1B44D237-AC79-4722-921A-F0342538B03B</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="manager_single_group">
+ <bpmndi:BPMNShape id="shape__FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6" bpmnElement="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6">
+ <dc:Bounds height="56" width="56" x="95" y="194"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__46FE320A-C92F-4BC6-A5C6-FF8E42303A80" bpmnElement="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80">
+ <dc:Bounds height="102" width="154" x="231" y="171"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__47D60E08-079F-4B50-BAC4-10CB64E24729" bpmnElement="_47D60E08-079F-4B50-BAC4-10CB64E24729">
+ <dc:Bounds height="56" width="56" x="465" y="194"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge_shape__FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6_to_shape__46FE320A-C92F-4BC6-A5C6-FF8E42303A80" bpmnElement="_1B44D237-AC79-4722-921A-F0342538B03B">
+ <di:waypoint x="123" y="222"/>
+ <di:waypoint x="308" y="222"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__46FE320A-C92F-4BC6-A5C6-FF8E42303A80_to_shape__47D60E08-079F-4B50-BAC4-10CB64E24729" bpmnElement="_186181AA-EC9B-4182-9634-696A19ED2463">
+ <di:waypoint x="308" y="222"/>
+ <di:waypoint x="493" y="222"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+ <bpmn2:relationship type="BPSimData">
+ <bpmn2:extensionElements>
+ <bpsim:BPSimData>
+ <bpsim:Scenario id="default" name="Simulationscenario">
+ <bpsim:ScenarioParameters/>
+ <bpsim:ElementParameters elementRef="_FC81F57A-842B-4E9D-A9D8-F1FA1EC969F6">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_46FE320A-C92F-4BC6-A5C6-FF8E42303A80">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ </bpsim:Scenario>
+ </bpsim:BPSimData>
+ </bpmn2:extensionElements>
+ <bpmn2:source>_jdDHoOepED6zQ9TF790BnA</bpmn2:source>
+ <bpmn2:target>_jdDHoOepED6zQ9TF790BnA</bpmn2:target>
+ </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git a/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java b/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java
index 4bc12607bd..53187afdfc 100644
--- a/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java
+++ b/springboot/integration-tests/integration-tests-springboot-wshumantasks-it/src/test/java/org/jbpm/usertask/jpa/it/WsHumanTaskLifeCycleIT.java
@@ -573,6 +573,64 @@ public class WsHumanTaskLifeCycleIT {
isProcessCompleted(processId, pid);
}
+ @Test
+ public void testSingleGroupUserTaskLifeCycle() {
+ var user = "carl";
+ var group = "hr";
+ var potentialGroups = new String[] { group };
+ var processId = "manager_single_group";
+ var pid = startProcessInstance(processId);
+ var taskId = getTaskId(user, group, pid);
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .get(USER_TASKS_INSTANCE_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Ready"))
+ .body("potentialUsers", equalTo(List.of()))
+ .body("potentialGroups", hasItems(potentialGroups));
+
+ claim(taskId, user, group);
+ start(taskId, user, group);
+ complete(taskId, user, group);
+
+ isProcessCompleted(processId, pid);
+ }
+
+ @Test
+ public void testMultipleGroupUserTaskLifeCycle() {
+ var user = "dave";
+ var group = "it";
+ var potentialGroups = new String[] { "hr", "it" };
+ var processId = "manager_multiple_groups";
+ var pid = startProcessInstance(processId);
+ var taskId = getTaskId(user, group, pid);
+
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .get(USER_TASKS_INSTANCE_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Ready"))
+ .body("potentialUsers", equalTo(List.of()))
+ .body("potentialGroups", hasItems(potentialGroups));
+
+ claim(taskId, user, group);
+ start(taskId, user, group);
+ complete(taskId, user, group);
+
+ isProcessCompleted(processId, pid);
+ }
+
private void nominate(String taskId, String user, String status, String[] nominatedUsers) {
given()
.contentType(ContentType.JSON)
@@ -756,6 +814,21 @@ public class WsHumanTaskLifeCycleIT {
.body("status.terminate", equalTo(null));
}
+ private void claim(String taskId, String user, String group) {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .body(new TransitionInfo("claim"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Reserved"))
+ .body("status.terminate", equalTo(null));
+ }
+
public String startProcessInstance(String processId) {
return startProcessInstanceWithVariables(processId, Map.of());
}
@@ -805,6 +878,20 @@ public class WsHumanTaskLifeCycleIT {
.getString("find { it.processInfo.processInstanceId == pid }.id");
}
+ private String getTaskId(String user, String group, String pid) {
+ return given().contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .get(USER_TASKS_ENDPOINT)
+ .then()
+ .statusCode(200)
+ .extract()
+ .jsonPath()
+ .param("pid", pid)
+ .getString("find { it.processInfo.processInstanceId == pid }.id");
+ }
+
private void verifyTask(String processId, String pid, String taskId, String user, String state, String[] potentialUsers) {
given().contentType(ContentType.JSON)
.when()
@@ -839,6 +926,21 @@ public class WsHumanTaskLifeCycleIT {
.body("status.terminate", equalTo("COMPLETED"));
}
+ private void complete(String taskId, String user, String group) {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .body(new TransitionInfo("complete"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("Completed"))
+ .body("status.terminate", equalTo("COMPLETED"));
+ }
+
private void start(String taskId, String user) {
given()
.contentType(ContentType.JSON)
@@ -853,6 +955,21 @@ public class WsHumanTaskLifeCycleIT {
.body("status.terminate", equalTo(null));
}
+ private void start(String taskId, String user, String group) {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .queryParam("user", user)
+ .queryParam("group", group)
+ .body(new TransitionInfo("start"))
+ .post(USER_TASKS_INSTANCE_TRANSITION_ENDPOINT, taskId)
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(taskId))
+ .body("status.name", equalTo("InProgress"))
+ .body("status.terminate", equalTo(null));
+ }
+
private void suspendWithDurationOrTimestamp(String taskId, String user, String temporal) {
given()
.contentType(ContentType.JSON)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@kie.apache.org
For additional commands, e-mail: commits-help@kie.apache.org