This is an automated email from the ASF dual-hosted git repository.
ljmotta pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new c09c86acc51 kie-issues#2340: BPMN Editor not adding CallActivity
default property values in XML if not explicitly modified in the editor (#3624)
c09c86acc51 is described below
commit c09c86acc51d8b071c3a11a6ec95971fa7ad292e
Author: Luiz João Motta <[email protected]>
AuthorDate: Tue Jun 16 09:26:26 2026 -0300
kie-issues#2340: BPMN Editor not adding CallActivity default property
values in XML if not explicitly modified in the editor (#3624)
---
.../nodes/morphing/useEventNodeMorphingActions.tsx | 18 ++
.../morphing/useSubProcessNodeMorphingActions.tsx | 22 +-
.../nodes/morphing/useTaskNodeMorphingActions.tsx | 59 ++++++
packages/bpmn-editor/src/i18n/BpmnEditorI18n.ts | 1 +
packages/bpmn-editor/src/i18n/locales/en.ts | 1 +
.../bpmn-editor/src/mutations/addConnectedNode.ts | 8 +
.../mutations/addOrGetProcessAndDiagramElements.ts | 2 +
.../bpmn-editor/src/mutations/addStandaloneNode.ts | 35 ++++
.../multiInstance/MultiInstanceProperties.tsx | 2 +-
.../AdHocSubProcessProperties.tsx | 59 ++++--
.../CallActivityProperties.tsx | 62 +++---
.../bpmn-editor/tests-e2e/__fixtures__/editor.ts | 8 +-
.../tests-e2e/__fixtures__/jsonModel.ts | 228 ++++++++++++++++++---
.../propertiesPanel/subProcessPropertiesPanel.ts | 7 +-
.../propertiesPanel/adhoc-subprocess-parallel.png | Bin 81286 -> 83019 bytes
.../adhoc-subprocess-sequential.png | Bin 83290 -> 84894 bytes
.../propertiesPanel/adhoc-subprocess-parallel.png | Bin 78398 -> 79304 bytes
.../adhoc-subprocess-sequential.png | Bin 81228 -> 80807 bytes
.../propertiesPanel/adhoc-subprocess-parallel.png | Bin 87072 -> 89362 bytes
.../adhoc-subprocess-sequential.png | Bin 89080 -> 91081 bytes
packages/bpmn-editor/tests-e2e/addProcess.spec.ts | 65 ++++++
.../flowElements/addBoundaryEvent.spec.ts | 89 +++-----
.../tests-e2e/flowElements/addCallActivity.spec.ts | 65 +++---
.../tests-e2e/flowElements/addCustomTasks.spec.ts | 6 +-
.../tests-e2e/flowElements/addDataObject.spec.ts | 10 +-
.../tests-e2e/flowElements/addEndEvent.spec.ts | 58 ++++--
.../tests-e2e/flowElements/addGateway.spec.ts | 78 +++----
.../tests-e2e/flowElements/addGroup.spec.ts | 20 +-
.../flowElements/addIntermediateCatchEvent.spec.ts | 32 +--
.../flowElements/addIntermediateThrowEvent.spec.ts | 56 +++--
.../tests-e2e/flowElements/addLane.spec.ts | 26 +--
.../tests-e2e/flowElements/addStartEvent.spec.ts | 161 +++++----------
.../tests-e2e/flowElements/addSubProcess.spec.ts | 73 ++++++-
.../tests-e2e/flowElements/addTask.spec.ts | 178 +++++++++++++---
.../flowElements/addTextAnnotation.spec.ts | 13 +-
.../flowElements/boundaryEventCompensation.spec.ts | 49 ++---
.../changeDataObjectProperties.spec.ts | 1 +
.../changeEndEventProperties.spec.ts | 7 +-
.../changeGatewayProperties.spec.ts | 1 +
.../changeIntermediateEventProperties.spec.ts | 9 +-
.../propertiesPanel/changeLaneProperties.spec.ts | 1 +
.../changeSequenceFlowProperties.spec.ts | 1 +
.../changeStartEventProperties.spec.ts | 1 +
.../changeSubProcessProperties.spec.ts | 1 +
.../propertiesPanel/changeTaskProperties.spec.ts | 1 +
45 files changed, 1021 insertions(+), 493 deletions(-)
diff --git
a/packages/bpmn-editor/src/diagram/nodes/morphing/useEventNodeMorphingActions.tsx
b/packages/bpmn-editor/src/diagram/nodes/morphing/useEventNodeMorphingActions.tsx
index 728be4d6b1f..83f5243ff02 100644
---
a/packages/bpmn-editor/src/diagram/nodes/morphing/useEventNodeMorphingActions.tsx
+++
b/packages/bpmn-editor/src/diagram/nodes/morphing/useEventNodeMorphingActions.tsx
@@ -30,6 +30,7 @@ import { BPMN20__tProcess } from
"@kie-tools/bpmn-marshaller/dist/schemas/bpmn-2
import { ElementFilter } from "@kie-tools/xml-parser-ts/dist/elementFilter";
import { NODE_COLORS } from "../NodeSvgs";
import { deleteEdge } from "../../../mutations/deleteEdge";
+import { setBpmn20Drools10MetaData } from
"@kie-tools/bpmn-marshaller/dist/drools-extension-metaData";
export type Event = Normalized<
ElementFilter<
@@ -77,9 +78,22 @@ export function useEventNodeMorphingActions(event: Event) {
if (element["@_id"] === event["@_id"] && element.__$$element ===
event.__$$element) {
if (eventDefinitionElement === undefined) {
element.eventDefinition = undefined;
+ element.extensionElements = undefined;
return true; // Will continue visiting.
}
+ // Remove customScope when morphing away from signalEventDefinition
+ if (eventDefinitionElement !== "signalEventDefinition" &&
element.extensionElements?.["drools:metaData"]) {
+ const updatedExtensionElements =
element.extensionElements["drools:metaData"].filter(
+ (m) => m["@_name"] !== "customScope"
+ );
+ if (updatedExtensionElements === undefined ||
updatedExtensionElements.length === 0) {
+ element.extensionElements = undefined;
+ } else {
+ element.extensionElements["drools:metaData"] =
updatedExtensionElements;
+ }
+ }
+
element.eventDefinition ??= [];
switch (eventDefinitionElement) {
case "compensateEventDefinition":
@@ -127,6 +141,10 @@ export function useEventNodeMorphingActions(event: Event) {
"@_id": generateUuid(),
__$$element: "signalEventDefinition",
};
+ // Add default extensionElements for intermediateThrowEvent
and endEvent
+ if (element.__$$element === "intermediateThrowEvent" ||
element.__$$element === "endEvent") {
+ setBpmn20Drools10MetaData(element, "customScope", "default");
+ }
break;
case "terminateEventDefinition":
element.eventDefinition[0] = {
diff --git
a/packages/bpmn-editor/src/diagram/nodes/morphing/useSubProcessNodeMorphingActions.tsx
b/packages/bpmn-editor/src/diagram/nodes/morphing/useSubProcessNodeMorphingActions.tsx
index 93fd1f65311..81e12ad5873 100644
---
a/packages/bpmn-editor/src/diagram/nodes/morphing/useSubProcessNodeMorphingActions.tsx
+++
b/packages/bpmn-editor/src/diagram/nodes/morphing/useSubProcessNodeMorphingActions.tsx
@@ -30,6 +30,7 @@ import { SubProcessIcon } from "../NodeIcons";
import { generateUuid } from
"@kie-tools/xyflow-react-kie-diagram/dist/uuid/uuid";
import { AdHocSubProcessIconSvg, MultiInstanceParallelIconSvg } from
"../NodeSvgs";
import { keepIntersection } from "./keepIntersection";
+import { setBpmn20Drools10MetaData } from
"@kie-tools/bpmn-marshaller/dist/drools-extension-metaData";
export type SubProcess = Normalized<
ElementFilter<Unpacked<NonNullable<BPMN20__tProcess["flowElement"]>>,
"adHocSubProcess" | "subProcess">
@@ -42,13 +43,27 @@ export function
useSubProcessNodeMorphingActions(subProcess: SubProcess) {
(subProcessElement: SubProcess["__$$element"] | "eventSubProcess" |
"multiInstanceSubProcess") => {
// 1 - Sub process
// 2 - Event sub process
- // 3 - Ad-hoc sub-process
+ // 3 - Multi-instance sub-process
+ // 4 - Ad-hoc sub-process
bpmnEditorStoreApi.setState((s) => {
const { process } = addOrGetProcessAndDiagramElements({
definitions: s.bpmn.model.definitions,
});
visitFlowElementsAndArtifacts(process, ({ array, index, owner, element
}) => {
if (element["@_id"] === subProcess["@_id"] &&
array[index].__$$element === subProcess.__$$element) {
+ // Remove Ad-hoc sub-process-specific properties when morphing
away from adHocSubProcess
+ if (element.__$$element === "adHocSubProcess") {
+ const updatedExtensionElements =
element.extensionElements?.["drools:metaData"]?.filter(
+ (m) => m["@_name"] !== "customAutoStart" && m["@_name"] !==
"customActivationCondition"
+ );
+ if (updatedExtensionElements === undefined ||
updatedExtensionElements.length === 0) {
+ element.extensionElements = undefined;
+ } else {
+ element.extensionElements ??= { "drools:metaData": [] };
+ element.extensionElements["drools:metaData"] =
updatedExtensionElements;
+ }
+ }
+
if (subProcessElement === "eventSubProcess") {
keepIntersection({
fromElement: element.__$$element,
@@ -103,6 +118,11 @@ export function
useSubProcessNodeMorphingActions(subProcess: SubProcess) {
array[index]["@_triggeredByEvent"] = false;
array[index].loopCharacteristics = undefined;
+ if (array[index].__$$element === "adHocSubProcess") {
+ array[index]["@_ordering"] = "Parallel";
+ setBpmn20Drools10MetaData(array[index], "customAutoStart",
"false");
+ }
+
// BPMN 2.0 Spec: When converting from Event Sub-Process to
regular Embedded Sub-Process,
// Start Events must be converted to "None" (strip event
definitions)
const isNowEmbeddedSubProcess =
diff --git
a/packages/bpmn-editor/src/diagram/nodes/morphing/useTaskNodeMorphingActions.tsx
b/packages/bpmn-editor/src/diagram/nodes/morphing/useTaskNodeMorphingActions.tsx
index e0b15c4f252..917b782f883 100644
---
a/packages/bpmn-editor/src/diagram/nodes/morphing/useTaskNodeMorphingActions.tsx
+++
b/packages/bpmn-editor/src/diagram/nodes/morphing/useTaskNodeMorphingActions.tsx
@@ -35,6 +35,7 @@ import { CustomTask } from "../../../BpmnEditor";
import { WritableDraft } from "immer";
import { State } from "../../../store/Store";
import { deleteInterfaceAndOperation } from
"../../../mutations/deleteInterfaceAndOperation";
+import { setBpmn20Drools10MetaData } from
"@kie-tools/bpmn-marshaller/dist/drools-extension-metaData";
function getTaskDataMappings(
process: ReturnType<typeof addOrGetProcessAndDiagramElements>["process"],
@@ -111,6 +112,23 @@ export function useTaskNodeMorphingActions(task: Task) {
array[index]["@_implementation"] = undefined;
}
+ // Remove CallActivity-specific properties when morphing away from
callActivity
+ if (array[index].__$$element === "callActivity") {
+ array[index]["@_drools:independent"] = undefined;
+ array[index]["@_drools:waitForCompletion"] = undefined;
+
+ if (array[index].extensionElements?.["drools:metaData"]) {
+ const filteredMetaData =
array[index].extensionElements["drools:metaData"].filter(
+ (meta) => meta["@_name"] !== "customAbortParent"
+ );
+ if (filteredMetaData.length === 0) {
+ array[index].extensionElements = undefined;
+ } else {
+ array[index].extensionElements["drools:metaData"] =
filteredMetaData;
+ }
+ }
+ }
+
if (array[index].__$$element === "task") {
// cleanup custom task modifiers
array[index]["@_drools:taskName"] = undefined;
@@ -138,6 +156,47 @@ export function useTaskNodeMorphingActions(task: Task) {
});
array[index].__$$element = newTaskElement;
+
+ // Remove properties when morphing to task
+ if (array[index].__$$element === "task") {
+ array[index].extensionElements = undefined;
+ array[index].loopCharacteristics = undefined;
+ array[index].ioSpecification = undefined;
+ array[index].resourceRole = array[index].resourceRole?.filter((e)
=> e.__$$element !== "potentialOwner");
+ }
+
+ if (
+ array[index].__$$element === "businessRuleTask" ||
+ array[index].__$$element === "userTask" ||
+ array[index].__$$element === "serviceTask" ||
+ array[index].__$$element === "callActivity" ||
+ array[index].__$$element === "scriptTask"
+ ) {
+ if (array[index].__$$element === "callActivity") {
+ // Add default properties when morphing to callActivity
+ array[index]["@_drools:independent"] = false;
+ array[index]["@_drools:waitForCompletion"] = true;
+ setBpmn20Drools10MetaData(array[index], "customAbortParent",
"true");
+ } else if (array[index].__$$element === "scriptTask") {
+ // Remove properties when morphing to scriptTask
+ array[index].loopCharacteristics = undefined;
+ array[index].ioSpecification = undefined;
+ array[index].extensionElements ??= { "drools:metaData": [] };
+ array[index].extensionElements["drools:metaData"] =
array[index].extensionElements?.[
+ "drools:metaData"
+ ]?.filter((e) => e["@_name"] !== "customSLADueDate");
+ }
+
+ // Remove userTask specific properties
+ if (array[index].__$$element !== "userTask") {
+ array[index].resourceRole =
array[index].resourceRole?.filter((e) => e.__$$element !== "potentialOwner");
+ }
+
+ // Add default customAsync and customAutoStart if not present
+ setBpmn20Drools10MetaData(array[index], "customAsync", "false");
+ setBpmn20Drools10MetaData(array[index], "customAutoStart",
"false");
+ }
+
return false; // Will stop visiting.
}
});
diff --git a/packages/bpmn-editor/src/i18n/BpmnEditorI18n.ts
b/packages/bpmn-editor/src/i18n/BpmnEditorI18n.ts
index f9587990d41..ee82d89c0ea 100644
--- a/packages/bpmn-editor/src/i18n/BpmnEditorI18n.ts
+++ b/packages/bpmn-editor/src/i18n/BpmnEditorI18n.ts
@@ -142,6 +142,7 @@ interface BpmnEditorDictionary
namePlaceholder: string;
valuePlaceholder: string;
executionMode: string;
+ parallel: string;
sequential: string;
completionCondition: string;
collectionInput: string;
diff --git a/packages/bpmn-editor/src/i18n/locales/en.ts
b/packages/bpmn-editor/src/i18n/locales/en.ts
index 58fc34cc4f7..4b4ae8c07df 100644
--- a/packages/bpmn-editor/src/i18n/locales/en.ts
+++ b/packages/bpmn-editor/src/i18n/locales/en.ts
@@ -147,6 +147,7 @@ export const en: BpmnEditorI18n = {
namePlaceholder: "Name...",
valuePlaceholder: "Value...",
executionMode: "Execution mode",
+ parallel: "Parallel",
sequential: "Sequential",
completionCondition: "Completion condition",
collectionInput: "Collection input",
diff --git a/packages/bpmn-editor/src/mutations/addConnectedNode.ts
b/packages/bpmn-editor/src/mutations/addConnectedNode.ts
index 8a1ddd9ece8..e598665c792 100644
--- a/packages/bpmn-editor/src/mutations/addConnectedNode.ts
+++ b/packages/bpmn-editor/src/mutations/addConnectedNode.ts
@@ -95,6 +95,14 @@ export function addConnectedNode({
__$$element: "signalEventDefinition",
},
],
+ extensionElements: {
+ "drools:metaData": [
+ {
+ "@_name": "customScope",
+ "drools:metaValue": { __$$text: "default" },
+ },
+ ],
+ },
},
[NODE_TYPES.endEvent]: {
"@_id": newBpmnElementId,
diff --git
a/packages/bpmn-editor/src/mutations/addOrGetProcessAndDiagramElements.ts
b/packages/bpmn-editor/src/mutations/addOrGetProcessAndDiagramElements.ts
index 0a06b61a1f0..003bf654849 100644
--- a/packages/bpmn-editor/src/mutations/addOrGetProcessAndDiagramElements.ts
+++ b/packages/bpmn-editor/src/mutations/addOrGetProcessAndDiagramElements.ts
@@ -37,6 +37,8 @@ export function addOrGetProcessAndDiagramElements({
definitions }: { definitions
process = {
__$$element: "process",
"@_id": "", // Empty ID - must be set by user through Empty State
+ "@_isExecutable": true,
+ "@_drools:adHoc": false,
};
definitions.rootElement?.push(process);
}
diff --git a/packages/bpmn-editor/src/mutations/addStandaloneNode.ts
b/packages/bpmn-editor/src/mutations/addStandaloneNode.ts
index ce2c321914e..34dac934de2 100644
--- a/packages/bpmn-editor/src/mutations/addStandaloneNode.ts
+++ b/packages/bpmn-editor/src/mutations/addStandaloneNode.ts
@@ -105,6 +105,24 @@ export function addStandaloneNode({
"@_id": newBpmnElementId,
__$$element: "callActivity",
"@_name": getNewNodeDefaultName({ type:
__readonly_newNode.type, element: __readonly_element }),
+ "@_drools:independent": false,
+ "@_drools:waitForCompletion": true,
+ extensionElements: {
+ "drools:metaData": [
+ {
+ "@_name": "customAbortParent",
+ "drools:metaValue": { __$$text: "true" },
+ },
+ {
+ "@_name": "customAsync",
+ "drools:metaValue": { __$$text: "false" },
+ },
+ {
+ "@_name": "customAutoStart",
+ "drools:metaValue": { __$$text: "false" },
+ },
+ ],
+ },
}
: {
...__readonly_newNode.data?.bpmnElement,
@@ -137,6 +155,14 @@ export function addStandaloneNode({
__$$element: "signalEventDefinition",
},
],
+ extensionElements: {
+ "drools:metaData": [
+ {
+ "@_name": "customScope",
+ "drools:metaValue": { __$$text: "default" },
+ },
+ ],
+ },
},
[NODE_TYPES.endEvent]: {
"@_id": newBpmnElementId,
@@ -185,7 +211,16 @@ export function addStandaloneNode({
: {
"@_id": newBpmnElementId,
"@_name": getNewNodeDefaultName({ type: __readonly_newNode.type,
element: __readonly_element }),
+ "@_triggeredByEvent": false,
__$$element: "subProcess",
+ extensionElements: {
+ "drools:metaData": [
+ {
+ "@_name": "customAsync",
+ "drools:metaValue": { __$$text: "false" },
+ },
+ ],
+ },
}
);
} else if (nature === NodeNature.LANE) {
diff --git
a/packages/bpmn-editor/src/propertiesPanel/multiInstance/MultiInstanceProperties.tsx
b/packages/bpmn-editor/src/propertiesPanel/multiInstance/MultiInstanceProperties.tsx
index e22d20271e2..5334fc320ea 100644
---
a/packages/bpmn-editor/src/propertiesPanel/multiInstance/MultiInstanceProperties.tsx
+++
b/packages/bpmn-editor/src/propertiesPanel/multiInstance/MultiInstanceProperties.tsx
@@ -93,7 +93,7 @@ export function MultiInstanceProperties({ element }: {
element: WithMultiInstanc
<FormGroup label={i18n.propertiesPanel.executionMode}>
<ToggleGroup aria-label="Execution mode">
<ToggleGroupItem
- text="Parallel"
+ text={i18n.propertiesPanel.parallel}
isDisabled={isReadOnly}
isSelected={
element?.loopCharacteristics?.__$$element ===
"multiInstanceLoopCharacteristics"
diff --git
a/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/AdHocSubProcessProperties.tsx
b/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/AdHocSubProcessProperties.tsx
index 6eac63bf8b9..db4ea8fa936 100644
---
a/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/AdHocSubProcessProperties.tsx
+++
b/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/AdHocSubProcessProperties.tsx
@@ -44,6 +44,7 @@ import { SlaDueDateInput } from
"../slaDueDate/SlaDueDateInput";
import { AsyncCheckbox } from "../asyncCheckbox/AsyncCheckbox";
import { generateUuid } from
"@kie-tools/xyflow-react-kie-diagram/dist/uuid/uuid";
import { useBpmnEditorI18n } from "../../i18n";
+import { ToggleGroup, ToggleGroupItem } from
"@patternfly/react-core/dist/js/components/ToggleGroup";
export function AdHocSubProcessProperties({
adHocSubProcess,
@@ -77,28 +78,46 @@ export function AdHocSubProcessProperties({
<Divider inset={{ default: "insetXs" }} />
<FormGroup label={i18n.singleNodeProperties.adhocOrdering}>
- <FormSelect
- id={"ad-hoc-subprocess-ordering-selector" + generateUuid()}
- type={"text"}
- isDisabled={isReadOnly}
- value={adHocSubProcess?.["@_ordering"] ??
i18n.singleNodeProperties.parallel}
- onChange={(e, newOrderingValue) => {
- bpmnEditorStoreApi.setState((s) => {
- const { process } = addOrGetProcessAndDiagramElements({
- definitions: s.bpmn.model.definitions,
+ <ToggleGroup aria-label="Ad-hoc ordering">
+ <ToggleGroupItem
+ text={i18n.propertiesPanel.parallel}
+ isDisabled={isReadOnly}
+ isSelected={
+ adHocSubProcess?.__$$element === "adHocSubProcess"
+ ? adHocSubProcess["@_ordering"] === "Parallel" ||
adHocSubProcess["@_ordering"] === undefined
+ : false
+ }
+ onChange={() => {
+ bpmnEditorStoreApi.setState((s) => {
+ const { process } = addOrGetProcessAndDiagramElements({
definitions: s.bpmn.model.definitions });
+ visitFlowElementsAndArtifacts(process, ({ element: e }) => {
+ if (e["@_id"] === adHocSubProcess["@_id"] && e.__$$element
=== adHocSubProcess.__$$element) {
+ e["@_ordering"] = "Parallel";
+ }
+ });
});
- visitFlowElementsAndArtifacts(process, ({ element: e }) => {
- if (e["@_id"] === adHocSubProcess["@_id"] && e.__$$element
=== adHocSubProcess.__$$element) {
- e["@_ordering"] = newOrderingValue as
BPMN20__tAdHocOrdering;
- }
+ }}
+ />
+ <ToggleGroupItem
+ text={i18n.propertiesPanel.sequential}
+ isDisabled={isReadOnly}
+ isSelected={
+ adHocSubProcess?.__$$element === "adHocSubProcess"
+ ? adHocSubProcess["@_ordering"] === "Sequential"
+ : false
+ }
+ onChange={() => {
+ bpmnEditorStoreApi.setState((s) => {
+ const { process } = addOrGetProcessAndDiagramElements({
definitions: s.bpmn.model.definitions });
+ visitFlowElementsAndArtifacts(process, ({ element: e }) => {
+ if (e["@_id"] === adHocSubProcess["@_id"] && e.__$$element
=== adHocSubProcess.__$$element) {
+ e["@_ordering"] = "Sequential";
+ }
+ });
});
- });
- }}
- >
- {orderingOptions.map((option) => (
- <FormSelectOption key={option.label} label={option.label}
value={option.value} />
- ))}
- </FormSelect>
+ }}
+ />
+ </ToggleGroup>
</FormGroup>
<AdhocAutostartCheckbox element={adHocSubProcess} />
diff --git
a/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/CallActivityProperties.tsx
b/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/CallActivityProperties.tsx
index 7ed24988b60..93454136df4 100644
---
a/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/CallActivityProperties.tsx
+++
b/packages/bpmn-editor/src/propertiesPanel/singleNodeProperties/CallActivityProperties.tsx
@@ -71,7 +71,7 @@ export function CallActivityProperties({
id="kie-bpmn-editor--properties-panel--call-activity--independent"
name="is-independent"
aria-label="Independent"
- isChecked={callActivity["@_drools:independent"] ?? false}
+ isChecked={callActivity["@_drools:independent"] ?? true}
onChange={(e, checked) => {
bpmnEditorStoreApi.setState((s) => {
const { process } = addOrGetProcessAndDiagramElements({
@@ -80,6 +80,11 @@ export function CallActivityProperties({
visitFlowElementsAndArtifacts(process, ({ element }) => {
if (element["@_id"] === callActivity["@_id"] &&
element.__$$element === callActivity.__$$element) {
element["@_drools:independent"] = checked;
+ if (checked === false && element.extensionElements) {
+ setBpmn20Drools10MetaData(element, "customAbortParent",
`${true}`);
+ } else if (checked === true) {
+ setBpmn20Drools10MetaData(element, "customAbortParent",
`${false}`);
+ }
}
});
});
@@ -87,32 +92,37 @@ export function CallActivityProperties({
/>
</FormGroup>
- {!(callActivity["@_drools:independent"] === true) && (
- <FormGroup
-
fieldId="kie-bpmn-editor--properties-panel--call-activity--abort-parent"
- // helperText={"Lorem ipsum dolor sit amet, consectetur adipiscing
elit, sed do eiusmod."} // FIXME: Tiago -> Description
- >
- <Checkbox
- label={i18n.singleNodeProperties.abortParent}
-
id="kie-bpmn-editor--properties-panel--call-activity--abort-parent"
- name="should-abort-parent"
- aria-label="Abort parent"
-
isChecked={(parseBpmn20Drools10MetaData(callActivity).get("customAbortParent")
?? "true") === "true"}
- onChange={(e, checked) => {
- bpmnEditorStoreApi.setState((s) => {
- const { process } = addOrGetProcessAndDiagramElements({
- definitions: s.bpmn.model.definitions,
- });
- visitFlowElementsAndArtifacts(process, ({ element: e }) => {
- if (e["@_id"] === callActivity["@_id"] && e.__$$element
=== callActivity.__$$element) {
- setBpmn20Drools10MetaData(e, "customAbortParent",
`${checked}`);
- }
- });
+ <FormGroup
+
fieldId="kie-bpmn-editor--properties-panel--call-activity--abort-parent"
+ // helperText={"Lorem ipsum dolor sit amet, consectetur adipiscing
elit, sed do eiusmod."} // FIXME: Tiago -> Description
+ >
+ <Checkbox
+ label={i18n.singleNodeProperties.abortParent}
+ id="kie-bpmn-editor--properties-panel--call-activity--abort-parent"
+ name="should-abort-parent"
+ aria-label="Abort parent"
+ isDisabled={
+ callActivity["@_drools:independent"] === true ||
callActivity["@_drools:independent"] === undefined
+ }
+ isChecked={
+
parseBpmn20Drools10MetaData(callActivity).get("customAbortParent") === "true" ||
+ (callActivity["@_drools:independent"] === false &&
+
parseBpmn20Drools10MetaData(callActivity).get("customAbortParent") ===
undefined)
+ }
+ onChange={(e, checked) => {
+ bpmnEditorStoreApi.setState((s) => {
+ const { process } = addOrGetProcessAndDiagramElements({
+ definitions: s.bpmn.model.definitions,
});
- }}
- />
- </FormGroup>
- )}
+ visitFlowElementsAndArtifacts(process, ({ element: e }) => {
+ if (e["@_id"] === callActivity["@_id"] && e.__$$element ===
callActivity.__$$element) {
+ setBpmn20Drools10MetaData(e, "customAbortParent",
`${checked}`);
+ }
+ });
+ });
+ }}
+ />
+ </FormGroup>
<FormGroup
fieldId="kie-bpmn-editor--properties-panel--call-activity--wait-for-completion"
diff --git a/packages/bpmn-editor/tests-e2e/__fixtures__/editor.ts
b/packages/bpmn-editor/tests-e2e/__fixtures__/editor.ts
index f77879b8d16..1dd030c96ce 100644
--- a/packages/bpmn-editor/tests-e2e/__fixtures__/editor.ts
+++ b/packages/bpmn-editor/tests-e2e/__fixtures__/editor.ts
@@ -28,15 +28,9 @@ export class Editor {
public async open() {
await
this.page.goto(`${this.baseURL}/iframe.html?args=&id=misc-empty--empty&viewMode=story`,
{});
- await this.initializeEditor();
}
- public async openWithLocale(locale: string) {
- await
this.page.goto(`${this.baseURL}/iframe.html?args=locale:${locale}&id=misc-empty--empty&viewMode=story`,
{});
- await this.initializeEditor();
- }
-
- private async initializeEditor() {
+ public async setInitialProcessId() {
await
expect(this.page.getByTestId("kie-bpmn-editor--diagram-container")).toBeVisible();
const processIdInput = this.page.getByPlaceholder("e.g., hiring");
diff --git a/packages/bpmn-editor/tests-e2e/__fixtures__/jsonModel.ts
b/packages/bpmn-editor/tests-e2e/__fixtures__/jsonModel.ts
index 46f4d9fd7fe..bd22c748c92 100644
--- a/packages/bpmn-editor/tests-e2e/__fixtures__/jsonModel.ts
+++ b/packages/bpmn-editor/tests-e2e/__fixtures__/jsonModel.ts
@@ -18,52 +18,234 @@
*/
import { Page } from "@playwright/test";
+import { BpmnLatestModel } from "@kie-tools/bpmn-marshaller";
+import { Normalized } from
"@kie-tools/bpmn-editor/dist/normalization/normalize";
+import "@kie-tools/bpmn-marshaller/dist/drools-extension";
+import { BPMN20__tProcess } from
"@kie-tools/bpmn-marshaller/dist/schemas/bpmn-2_0/ts-gen/types";
+export type FlowElements = BPMN20__tProcess["flowElement"];
+export type ArtifactElements = BPMN20__tProcess["artifact"];
export class JsonModel {
constructor(
public page: Page,
public baseURL?: string
) {}
- public async getModel(): Promise<any> {
+ public async getModel(): Promise<Normalized<BpmnLatestModel>> {
const modelElement = this.page.getByTestId("storybook--bpmn-editor-model");
const modelText = await modelElement.textContent();
- return modelText ? JSON.parse(modelText) : undefined;
+ try {
+ if (modelText === null) {
+ throw new Error("BPMN Editor - jsonModel - couldn't get modelText");
+ }
+ return JSON.parse(modelText);
+ } catch (error: any) {
+ // Just throw the error
+ throw new Error(error);
+ }
}
- public async getDefinitions(): Promise<any> {
- const model = await this.getModel();
- return model?.definitions;
+ public async getDefinitions() {
+ return (await this.getModel()).definitions;
}
- public async getProcess(processIndex: number = 0): Promise<any> {
- const definitions = await this.getDefinitions();
- const processes = definitions?.rootElement || definitions?.process;
- return Array.isArray(processes) ? processes[processIndex] : processes;
+ public async getProcess() {
+ return (await this.getDefinitions()).rootElement?.find((e) =>
e.__$$element === "process");
}
- public async getFlowElement(args: { processIndex?: number; elementIndex:
number }): Promise<any> {
- const process = await this.getProcess(args.processIndex ?? 0);
- return process?.flowElement?.[args.elementIndex];
+ // Events
+ public async getEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "event") ?? [];
}
- public async getDiagram(diagramIndex: number = 0): Promise<any> {
- const definitions = await this.getDefinitions();
- return definitions?.["bpmndi:BPMNDiagram"]?.[diagramIndex];
+ public async getStartEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "startEvent") ?? [];
}
- public async getPlane(diagramIndex: number = 0): Promise<any> {
- const diagram = await this.getDiagram(diagramIndex);
- return diagram?.["bpmndi:BPMNPlane"];
+ public async getEndEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "endEvent") ?? [];
}
- public async getShape(args: { diagramIndex?: number; shapeIndex: number }):
Promise<any> {
- const plane = await this.getPlane(args.diagramIndex ?? 0);
- return plane?.["di:DiagramElement"]?.[args.shapeIndex];
+ public async getIntermediateThrowEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "intermediateThrowEvent")
?? [];
}
- public async getBounds(args: { diagramIndex?: number; shapeIndex: number }):
Promise<any> {
+ public async getIntermediateCatchEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "intermediateCatchEvent")
?? [];
+ }
+
+ public async getBoundaryEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "boundaryEvent") ?? [];
+ }
+
+ public async getImplicitThrowEvents(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "implicitThrowEvent") ??
[];
+ }
+
+ // Gateways
+ public async getExclusiveGateways(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "exclusiveGateway") ?? [];
+ }
+
+ public async getInclusiveGateways(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "inclusiveGateway") ?? [];
+ }
+
+ public async getParallelGateways(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "parallelGateway") ?? [];
+ }
+
+ public async getEventBasedGateways(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "eventBasedGateway") ??
[];
+ }
+
+ public async getComplexGateways(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "complexGateway") ?? [];
+ }
+
+ // Tasks
+ public async getTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "task") ?? [];
+ }
+
+ public async getScriptTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "scriptTask") ?? [];
+ }
+
+ public async getUserTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "userTask") ?? [];
+ }
+
+ public async getManualTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "manualTask") ?? [];
+ }
+
+ public async getServiceTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "serviceTask") ?? [];
+ }
+
+ public async getSendTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "sendTask") ?? [];
+ }
+
+ public async getReceiveTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "receiveTask") ?? [];
+ }
+
+ public async getBusinessRuleTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "businessRuleTask") ?? [];
+ }
+
+ // Activities
+ public async getCallActivities(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "callActivity") ?? [];
+ }
+
+ public async getSubProcesses(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "subProcess") ?? [];
+ }
+
+ public async getAdHocSubProcesses(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "adHocSubProcess") ?? [];
+ }
+
+ public async getTransactions(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "transaction") ?? [];
+ }
+
+ // Data
+ public async getDataObjects(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "dataObject") ?? [];
+ }
+
+ public async getDataObjectReferences(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "dataObjectReference") ??
[];
+ }
+
+ public async getDataStoreReferences(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "dataStoreReference") ??
[];
+ }
+
+ // Flows
+ public async getSequenceFlows(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "sequenceFlow") ?? [];
+ }
+
+ // Choreography
+ public async getCallChoreographies(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "callChoreography") ?? [];
+ }
+
+ public async getChoreographyTasks(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "choreographyTask") ?? [];
+ }
+
+ public async getSubChoreographies(flowElements?: FlowElements) {
+ const elements = flowElements ?? (await this.getProcess())?.flowElement;
+ return elements?.filter((e) => e.__$$element === "subChoreography") ?? [];
+ }
+
+ public async getGroups(artifactElements?: ArtifactElements) {
+ const elements = artifactElements ?? (await this.getProcess())?.artifact;
+ return elements?.filter((e) => e.__$$element === "group") ?? [];
+ }
+
+ public async getTextAnnotations(artifactElements?: ArtifactElements) {
+ const elements = artifactElements ?? (await this.getProcess())?.artifact;
+ return elements?.filter((e) => e.__$$element === "textAnnotation") ?? [];
+ }
+
+ public async getLaneSet() {
+ return (await this.getProcess())?.laneSet;
+ }
+
+ public async getDiagram(diagramIndex: number = 0) {
+ return (await this.getDefinitions())["bpmndi:BPMNDiagram"]?.[diagramIndex];
+ }
+
+ public async getPlane(diagramIndex: number = 0) {
+ return (await this.getDiagram(diagramIndex))?.["bpmndi:BPMNPlane"];
+ }
+
+ public async getShape(args: { diagramIndex?: number; shapeIndex: number }) {
+ return (await this.getPlane(args.diagramIndex ??
0))?.["di:DiagramElement"]?.[args.shapeIndex];
+ }
+
+ public async getBounds(args: { diagramIndex?: number; shapeIndex: number }) {
const shape = await this.getShape(args);
- return shape?.["dc:Bounds"];
+ if (shape?.__$$element === "bpmndi:BPMNShape") {
+ return shape?.["dc:Bounds"];
+ }
+ return undefined;
}
}
diff --git
a/packages/bpmn-editor/tests-e2e/__fixtures__/propertiesPanel/subProcessPropertiesPanel.ts
b/packages/bpmn-editor/tests-e2e/__fixtures__/propertiesPanel/subProcessPropertiesPanel.ts
index fc92d9cd3ee..f1a90a6d36b 100644
---
a/packages/bpmn-editor/tests-e2e/__fixtures__/propertiesPanel/subProcessPropertiesPanel.ts
+++
b/packages/bpmn-editor/tests-e2e/__fixtures__/propertiesPanel/subProcessPropertiesPanel.ts
@@ -55,12 +55,7 @@ export class SubProcessPropertiesPanel extends
PropertiesPanelBase {
}
public async setAdHocOrdering(args: { ordering: "Parallel" | "Sequential" })
{
- const orderingSelect = this.panel()
- .getByRole("group")
- .filter({ hasText: "Ad-hoc ordering" })
- .getByRole("combobox")
- .first();
- await orderingSelect.selectOption(args.ordering);
+ this.panel().getByRole("button", { name: args.ordering }).click();
}
public async setAdHocCompletionCondition(args: { condition: string }) {
diff --git
a/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-parallel.png
b/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-parallel.png
index 70c669e5fcb..ca32bbe0381 100644
Binary files
a/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-parallel.png
and
b/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-parallel.png
differ
diff --git
a/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-sequential.png
b/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-sequential.png
index 069be62215d..7ea5a1732ac 100644
Binary files
a/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-sequential.png
and
b/packages/bpmn-editor/tests-e2e/__screenshots__/Google-Chrome/propertiesPanel/adhoc-subprocess-sequential.png
differ
diff --git
a/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-parallel.png
b/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-parallel.png
index a134cb43c5d..ae772b70263 100644
Binary files
a/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-parallel.png
and
b/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-parallel.png
differ
diff --git
a/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-sequential.png
b/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-sequential.png
index a8733df141a..ef514c8d07d 100644
Binary files
a/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-sequential.png
and
b/packages/bpmn-editor/tests-e2e/__screenshots__/chromium/propertiesPanel/adhoc-subprocess-sequential.png
differ
diff --git
a/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-parallel.png
b/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-parallel.png
index 504dec2e51f..d68f89246bf 100644
Binary files
a/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-parallel.png
and
b/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-parallel.png
differ
diff --git
a/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-sequential.png
b/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-sequential.png
index 49aa244fe88..69f8e04319b 100644
Binary files
a/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-sequential.png
and
b/packages/bpmn-editor/tests-e2e/__screenshots__/webkit/propertiesPanel/adhoc-subprocess-sequential.png
differ
diff --git a/packages/bpmn-editor/tests-e2e/addProcess.spec.ts
b/packages/bpmn-editor/tests-e2e/addProcess.spec.ts
new file mode 100644
index 00000000000..15106744a3b
--- /dev/null
+++ b/packages/bpmn-editor/tests-e2e/addProcess.spec.ts
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ */
+
+import { test, expect } from "./__fixtures__/base";
+
+test.beforeEach(async ({ editor }) => {
+ await editor.open();
+});
+
+test.describe("Add Process", () => {
+ test("should set initial process id", async ({ page }) => {
+ await expect(page.getByRole("heading", { name: "Create Your BPMN Process"
})).toBeVisible();
+ await page.getByPlaceholder("e.g., hiring").fill("test");
+ await page.getByRole("button", { name: "Start Modeling" }).click();
+ await expect(page.getByRole("heading", { name: "This BPMN is empty"
})).toBeVisible();
+
+ // Check if pallette is visible
+ await expect(page.getByRole("button", { name: "Process Variables"
})).toBeVisible();
+ await expect(page.getByRole("button", { name: "Correlations"
})).toBeVisible();
+ await expect(page.getByRole("button", { name: "Properties Management"
})).toBeVisible();
+
+ await expect(page.getByTitle("Start Events")).toBeVisible();
+ await expect(page.getByTitle("Intermediate Catch Events")).toBeVisible();
+ await expect(page.getByTitle("Intermediate Throw Events")).toBeVisible();
+ await expect(page.getByTitle("End Events")).toBeVisible();
+ await expect(page.getByTitle("Tasks")).toBeVisible();
+ await expect(page.getByTitle("Call Activity")).toBeVisible();
+ await expect(page.getByTitle("Sub-processes")).toBeVisible();
+ await expect(page.getByTitle("Gateways")).toBeVisible();
+ await expect(page.getByTitle("Lanes")).toBeVisible();
+
+ await expect(page.getByTitle("Data Object")).toBeVisible();
+ await expect(page.getByTitle("Group")).toBeVisible();
+ await expect(page.getByTitle("Text Annotation")).toBeVisible();
+ });
+
+ test("should add process with default properties", async ({ page, jsonModel
}) => {
+ await expect(page.getByRole("heading", { name: "Create Your BPMN Process"
})).toBeVisible();
+ await page.getByPlaceholder("e.g., hiring").fill("test");
+ await page.getByRole("button", { name: "Start Modeling" }).click();
+ await expect(page.getByRole("heading", { name: "This BPMN is empty"
})).toBeVisible();
+
+ const bpmnProcess = await jsonModel.getProcess();
+ expect(bpmnProcess).toBeDefined();
+ expect(bpmnProcess?.["@_id"]).toBeDefined();
+ expect(bpmnProcess?.["@_isExecutable"]).toBe(true);
+ expect(bpmnProcess?.["@_drools:adHoc"]).toBe(false);
+ });
+});
diff --git
a/packages/bpmn-editor/tests-e2e/flowElements/addBoundaryEvent.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addBoundaryEvent.spec.ts
index dab74242e8e..c244a19a66d 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addBoundaryEvent.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addBoundaryEvent.spec.ts
@@ -22,6 +22,7 @@ import { NodeType, DefaultNodeName, TaskNodeType,
NodePosition } from "../__fixt
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add Boundary Event", () => {
@@ -30,7 +31,7 @@ test.describe("Add Boundary Event", () => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
expect(boundaryEvent.__$$element).toBe("boundaryEvent");
expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
});
@@ -39,7 +40,7 @@ test.describe("Add Boundary Event", () => {
await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 550, y: 350 } });
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
expect(boundaryEvent.__$$element).toBe("boundaryEvent");
expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
});
@@ -49,18 +50,16 @@ test.describe("Add Boundary Event", () => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 300, y: 280 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 350, y: 350 } });
-
await
expect(diagram.get()).toHaveScreenshot("attach-multiple-boundary-events-to-task.png");
- const process = await jsonModel.getProcess();
- const boundaryEvents = process.flowElement?.filter(
- (e: { __$$element: string }) => e.__$$element === "boundaryEvent"
- );
+ const boundaryEvents = await jsonModel.getBoundaryEvents();
expect(boundaryEvents?.length).toBe(3);
- boundaryEvents?.forEach((event: { __$$element: string;
"@_attachedToRef"?: string }) => {
- expect(event.__$$element).toBe("boundaryEvent");
- expect(event["@_attachedToRef"]).toBeDefined();
- });
+ expect(boundaryEvents[0]["__$$element"]).toBe("boundaryEvent");
+ expect(boundaryEvents[0]["@_attachedToRef"]).toBeDefined();
+ expect(boundaryEvents[1]["__$$element"]).toBe("boundaryEvent");
+ expect(boundaryEvents[1]["@_attachedToRef"]).toBeDefined();
+ expect(boundaryEvents[2]["__$$element"]).toBe("boundaryEvent");
+ expect(boundaryEvents[2]["@_attachedToRef"]).toBeDefined();
});
});
@@ -73,17 +72,18 @@ test.describe("Add Boundary Event", () => {
}) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await
expect(nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT)).toBeVisible();
const catchEventId = await
nodes.getIdByType(NodeType.INTERMEDIATE_CATCH_EVENT);
await nodes.dragNodeToPosition({ id: catchEventId, toPosition: { x: 500,
y: 100 } });
-
await
expect(diagram.get()).toHaveScreenshot("detach-boundary-event-from-task.png");
- const detachedEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
- expect(detachedEvent.__$$element).toBe("intermediateCatchEvent");
- expect(detachedEvent["@_attachedToRef"]).toBeUndefined();
+ const detachedEvent = (await jsonModel.getBoundaryEvents())[0];
+ expect(detachedEvent?.__$$element).toBe(undefined);
+ expect(detachedEvent?.["@_attachedToRef"]).toBeUndefined();
+
+ const intermediateCatchEvent = (await
jsonModel.getIntermediateCatchEvents())[0];
+
expect(intermediateCatchEvent?.__$$element).toBe("intermediateCatchEvent");
});
});
@@ -91,10 +91,9 @@ test.describe("Add Boundary Event", () => {
test("should create interrupting boundary event by default", async ({
palette, jsonModel, diagram }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await
expect(diagram.get()).toHaveScreenshot("interrupting-boundary-event.png");
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
expect(boundaryEvent.__$$element).toBe("boundaryEvent");
expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
expect(boundaryEvent["@_cancelActivity"]).not.toBe(false);
@@ -109,37 +108,27 @@ test.describe("Add Boundary Event", () => {
}) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await
expect(nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT)).toBeVisible();
- await nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT).click();
+ await nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT).click();
await intermediateEventPropertiesPanel.setCancelActivity({
cancelActivity: false });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 1 });
- })
- .toMatchObject({
- __$$element: "boundaryEvent",
- "@_attachedToRef": expect.stringMatching(/.+/),
- "@_cancelActivity": false,
- });
-
await
expect(diagram.get()).toHaveScreenshot("non-interrupting-boundary-event.png");
+
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
+ expect(boundaryEvent.__$$element).toBe("boundaryEvent");
+ expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
+ expect(boundaryEvent["@_cancelActivity"]).toBe(false);
});
});
test.describe("Activity types", () => {
test("should attach to user task", async ({ palette, nodes, jsonModel,
diagram }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
-
await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.USER });
-
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await
expect(diagram.get()).toHaveScreenshot("attach-boundary-event-to-user-task.png");
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
expect(boundaryEvent.__$$element).toBe("boundaryEvent");
expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
});
@@ -147,10 +136,9 @@ test.describe("Add Boundary Event", () => {
test("should attach to call activity", async ({ palette, jsonModel,
diagram }) => {
await palette.dragNewNode({ type: NodeType.CALL_ACTIVITY,
targetPosition: { x: 300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await
expect(diagram.get()).toHaveScreenshot("attach-boundary-event-to-call-activity.png");
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
expect(boundaryEvent.__$$element).toBe("boundaryEvent");
expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
});
@@ -160,18 +148,16 @@ test.describe("Add Boundary Event", () => {
test("should delete boundary event", async ({ palette, jsonModel, nodes })
=> {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await
expect(nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT)).toBeAttached();
await nodes.deleteByType({ type: NodeType.INTERMEDIATE_CATCH_EVENT });
-
await
expect(nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT)).not.toBeAttached();
- const process = await jsonModel.getProcess();
- expect(
- process.flowElement?.find((e: { __$$element: string }) =>
e.__$$element === "boundaryEvent")
- ).toBeUndefined();
- expect(process.flowElement?.find((e: { __$$element: string }) =>
e.__$$element === "task")).toBeDefined();
+ const boundaryEvents = await jsonModel.getBoundaryEvents();
+ expect(boundaryEvents.length).toBe(0);
+
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
});
test.skip(
@@ -185,26 +171,20 @@ test.describe("Add Boundary Event", () => {
async ({ palette, nodes, jsonModel, diagram }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await nodes.delete({ name: DefaultNodeName.TASK });
+ await
expect(diagram.get()).toHaveScreenshot("delete-task-with-boundary-event.png");
const process = await jsonModel.getProcess();
- expect(process.flowElement?.filter((e: { __$$element: string }) =>
e.__$$element === "task").length).toBe(0);
- expect(
- process.flowElement?.filter((e: { __$$element: string }) =>
e.__$$element === "boundaryEvent").length
- ).toBe(0);
-
- await
expect(diagram.get()).toHaveScreenshot("delete-task-with-boundary-event.png");
+ expect(process?.flowElement?.length).toBe(0);
}
);
test("should move task with boundary event", async ({ palette, jsonModel,
diagram, nodes }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
-
await expect(nodes.getByType(NodeType.TASK)).toBeAttached();
- await nodes.getByType(NodeType.TASK).scrollIntoViewIfNeeded();
+ await nodes.getByType(NodeType.TASK).scrollIntoViewIfNeeded();
const taskId = await nodes.getIdByType(NodeType.TASK);
expect(taskId).not.toBe("");
@@ -213,10 +193,9 @@ test.describe("Add Boundary Event", () => {
fromPosition: NodePosition.LEFT,
toPosition: { x: 400, y: 350 },
});
-
await
expect(diagram.get()).toHaveScreenshot("move-task-with-boundary-event.png");
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1
});
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
expect(boundaryEvent.__$$element).toBe("boundaryEvent");
expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
});
diff --git
a/packages/bpmn-editor/tests-e2e/flowElements/addCallActivity.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addCallActivity.spec.ts
index 15f58ce7eb3..f411085b0a6 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addCallActivity.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addCallActivity.spec.ts
@@ -19,10 +19,11 @@
import { TestAnnotations } from "@kie-tools/playwright-base/annotations";
import { test, expect } from "../__fixtures__/base";
-import { DefaultNodeName, NodeType, TaskNodeType, NodePosition } from
"../__fixtures__/nodes";
+import { DefaultNodeName, NodeType, TaskNodeType, NodePosition, EventNodeType
} from "../__fixtures__/nodes";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Call Activity", () => {
@@ -32,7 +33,7 @@ test.describe("Add node - Call Activity", () => {
await expect(nodes.get({ name: DefaultNodeName.CALL_ACTIVITY
})).toBeAttached();
- const callActivity = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const callActivity = (await jsonModel.getCallActivities())[0];
expect(callActivity.__$$element).toBe("callActivity");
expect(callActivity["@_name"]).toBe(DefaultNodeName.CALL_ACTIVITY);
});
@@ -230,6 +231,7 @@ test.describe("Add node - Call Activity", () => {
test.beforeEach(async ({ editor, page }) => {
await page.setViewportSize({ width: 1920, height: 1080 });
await editor.open();
+ await editor.setInitialProcessId();
});
test("should create a complete process with Call Activity", async ({
jsonModel, palette, nodes, diagram }) => {
@@ -254,53 +256,40 @@ test.describe("Add node - Call Activity", () => {
const startEvent = nodes.getByType(NodeType.START_EVENT);
await expect(startEvent).toBeAttached();
- // Connect Start Event -> Prepare Data
const startEventId = await nodes.getIdByType(NodeType.START_EVENT);
await nodes.createSequenceFlow({
from: startEventId,
to: "Prepare Data",
});
-
- // Connect Prepare Data -> Execute Subprocess
await nodes.createSequenceFlow({
from: "Prepare Data",
to: "Execute Subprocess",
});
-
- // Connect Execute Subprocess -> Process Results
await nodes.createSequenceFlow({
from: "Execute Subprocess",
to: "Process Results",
});
-
- // Connect Process Results -> End Event
const endEventId = await nodes.getIdByType(NodeType.END_EVENT);
await nodes.createSequenceFlow({
from: "Process Results",
to: endEventId,
});
-
- const process = await jsonModel.getProcess();
- const callActivityElement = process.flowElement?.find(
- (el: { __$$element: string; "@_name"?: string }) => el["@_name"] ===
"Execute Subprocess"
- );
- expect(callActivityElement.__$$element).toBe("callActivity");
- expect(callActivityElement["@_name"]).toBe("Execute Subprocess");
-
await
expect(diagram.get()).toHaveScreenshot("complete-process-with-call-activity.png");
+
+ const callActivityElement = (await jsonModel.getCallActivities())[0];
+ expect(callActivityElement?.__$$element).toBe("callActivity");
+ expect(callActivityElement?.["@_name"]).toBe("Execute Subprocess");
});
});
test.describe("Call Activity operations", () => {
test("should delete call activity", async ({ palette, nodes, jsonModel })
=> {
await palette.dragNewNode({ type: NodeType.CALL_ACTIVITY,
targetPosition: { x: 300, y: 300 } });
-
await nodes.delete({ name: DefaultNodeName.CALL_ACTIVITY });
-
await expect(nodes.get({ name: DefaultNodeName.CALL_ACTIVITY
})).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move call activity to new position", async ({ palette,
diagram, nodes }) => {
@@ -325,14 +314,44 @@ test.describe("Add node - Call Activity", () => {
test("should rename call activity", async ({ palette, nodes, jsonModel })
=> {
await palette.dragNewNode({ type: NodeType.CALL_ACTIVITY,
targetPosition: { x: 300, y: 300 } });
-
await nodes.rename({ current: DefaultNodeName.CALL_ACTIVITY, new:
"Invoke Subprocess" });
-
await expect(nodes.get({ name: "Invoke Subprocess" })).toBeAttached();
- const callActivity = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const callActivity = (await jsonModel.getCallActivities())[0];
expect(callActivity.__$$element).toBe("callActivity");
expect(callActivity["@_name"]).toBe("Invoke Subprocess");
});
});
+
+ test.describe("Call Activity default values", () => {
+ test("should have default values", async ({ palette, nodes, jsonModel })
=> {
+ await palette.dragNewNode({ type: NodeType.CALL_ACTIVITY,
targetPosition: { x: 300, y: 300 } });
+
+ const callActivity = (await jsonModel.getCallActivities())[0];
+ expect(callActivity.__$$element).toBe("callActivity");
+ expect(callActivity["@_name"]).toBe(DefaultNodeName.CALL_ACTIVITY);
+ expect(callActivity["@_drools:independent"]).toBe(false);
+ expect(callActivity["@_drools:waitForCompletion"]).toBe(true);
+
expect(callActivity.extensionElements?.["drools:metaData"]?.length).toBe(3);
+
expect(callActivity.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customAbortParent");
+
expect(callActivity.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("true");
+
expect(callActivity.extensionElements?.["drools:metaData"]?.[1]?.["@_name"]).toBe("customAsync");
+
expect(callActivity.extensionElements?.["drools:metaData"]?.[1]?.["drools:metaValue"].__$$text).toBe("false");
+
expect(callActivity.extensionElements?.["drools:metaData"]?.[2]?.["@_name"]).toBe("customAutoStart");
+
expect(callActivity.extensionElements?.["drools:metaData"]?.[2]?.["drools:metaValue"].__$$text).toBe("false");
+ });
+
+ test("morphing away should remove default values", async ({ palette,
nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.CALL_ACTIVITY,
targetPosition: { x: 300, y: 300 } });
+ await nodes.morph({ node: nodes.get({ name:
DefaultNodeName.CALL_ACTIVITY }), to: TaskNodeType.TASK });
+
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
+ expect(task["@_name"]).toBe(DefaultNodeName.CALL_ACTIVITY);
+ // as any is required to check for undefined
+ expect((task as any)["@_drools:independent"]).toBe(undefined);
+ expect((task as any)["@_drools:waitForCompletion"]).toBe(undefined);
+
expect(task.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ });
+ });
});
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addCustomTasks.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addCustomTasks.spec.ts
index e57be2d3865..4afb504aeed 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addCustomTasks.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addCustomTasks.spec.ts
@@ -62,10 +62,9 @@ test.describe("Add Custom Tasks", () => {
targetPosition: { x: 300, y: 300 },
thenRenameTo: "Rest API call Task New",
});
-
await expect(nodes.get({ name: "Rest API call Task New"
})).toBeAttached();
- const task = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const task = (await jsonModel.getTasks())[0];
expect(task.__$$element).toBe("task");
expect(task["@_name"]).toBe("Rest API call Task New");
expect(task["@_drools:taskName"]).toBe("rest-api-call-task");
@@ -98,10 +97,9 @@ test.describe("Add Custom Tasks", () => {
targetPosition: { x: 300, y: 300 },
thenRenameTo: "gRPC API call Task New",
});
-
await expect(nodes.get({ name: "gRPC API call Task New"
})).toBeAttached();
- const task = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const task = (await jsonModel.getTasks())[0];
expect(task.__$$element).toBe("task");
expect(task["@_name"]).toBe("gRPC API call Task New");
expect(task["@_drools:taskName"]).toBe("grpc-api-call-task");
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addDataObject.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addDataObject.spec.ts
index 2adca905013..009ac7d9c74 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addDataObject.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addDataObject.spec.ts
@@ -23,6 +23,7 @@ import { NodeType, DefaultNodeName, NodePosition } from
"../__fixtures__/nodes";
test.describe("Add Data Object", () => {
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test("should add data object from palette", async ({ palette, nodes,
jsonModel }) => {
@@ -30,7 +31,7 @@ test.describe("Add Data Object", () => {
await expect(nodes.get({ name: DefaultNodeName.DATA_OBJECT
})).toBeAttached();
- const dataObject = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const dataObject = (await jsonModel.getDataObjects())[0];
expect(dataObject.__$$element).toBe("dataObject");
expect(dataObject["@_name"]).toBe(DefaultNodeName.DATA_OBJECT);
});
@@ -41,18 +42,17 @@ test.describe("Add Data Object", () => {
await expect(nodes.get({ name: "Customer Data" })).toBeAttached();
- const dataObject = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const dataObject = (await jsonModel.getDataObjects())[0];
expect(dataObject["@_name"]).toBe("Customer Data");
});
test("should delete data object", async ({ palette, nodes, jsonModel }) => {
await palette.dragNewNode({ type: NodeType.DATA_OBJECT, targetPosition: {
x: 300, y: 300 } });
await nodes.delete({ name: DefaultNodeName.DATA_OBJECT });
-
await expect(nodes.get({ name: DefaultNodeName.DATA_OBJECT
})).not.toBeAttached();
- const flowElements = await jsonModel.getProcess();
- expect(flowElements.flowElement?.length || 0).toBe(0);
+ const process = await jsonModel.getProcess();
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move data object to new position", async ({ palette, nodes,
diagram, page }) => {
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addEndEvent.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addEndEvent.spec.ts
index 90e11e13f00..a9b3a22ed03 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addEndEvent.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addEndEvent.spec.ts
@@ -22,18 +22,17 @@ import { EdgeType } from "../__fixtures__/edges";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - End Event", () => {
test.describe("Add from palette", () => {
test("should add End Event node from palette", async ({ palette,
jsonModel, nodes }) => {
await palette.dragNewNode({ type: NodeType.END_EVENT, targetPosition: {
x: 100, y: 100 } });
+ await expect(nodes.getByType(NodeType.END_EVENT)).toBeAttached();
- const endEvent = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const endEvent = (await jsonModel.getEndEvents())[0];
expect(endEvent.__$$element).toBe("endEvent");
-
- const endEventNode = nodes.getByType(NodeType.END_EVENT);
- await expect(endEventNode).toBeAttached();
});
test("should add two End Event nodes from palette in a row", async ({
palette, diagram, nodes }) => {
@@ -65,22 +64,14 @@ test.describe("Add node - End Event", () => {
for (const { morphType, eventDefinition } of morphTestCases) {
test(`should morph None End Event to ${morphType} End Event`, async ({
jsonModel, palette, diagram, nodes }) => {
await palette.dragNewNode({ type: NodeType.END_EVENT, targetPosition:
{ x: 300, y: 300 } });
+ await expect(nodes.getByType(NodeType.END_EVENT)).toBeVisible();
- const endEvent = nodes.getByType(NodeType.END_EVENT);
- await expect(endEvent).toBeVisible();
-
- await nodes.morph({ node: endEvent, to: morphType });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 0 });
- })
- .toMatchObject({
- __$$element: "endEvent",
- eventDefinition: [{ __$$element: eventDefinition }],
- });
-
+ await nodes.morph({ node: nodes.getByType(NodeType.END_EVENT), to:
morphType });
await
expect(diagram.get()).toHaveScreenshot(`morph-end-event-to-${morphType.toLowerCase()}.png`);
+
+ const endEvent = (await jsonModel.getEndEvents())[0];
+ expect(endEvent.__$$element).toBe("endEvent");
+
expect(endEvent.eventDefinition?.[0]?.__$$element).toEqual(eventDefinition);
});
}
});
@@ -144,16 +135,15 @@ test.describe("Add node - End Event", () => {
test.describe("End Event operations", () => {
test("should delete end event", async ({ palette, jsonModel, nodes, page
}) => {
await palette.dragNewNode({ type: NodeType.END_EVENT, targetPosition: {
x: 300, y: 300 } });
-
const endEvent = nodes.getByType(NodeType.END_EVENT);
await expect(endEvent).toBeVisible();
+
await endEvent.click();
await page.keyboard.press("Delete");
-
await expect(endEvent).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move end event to new position", async ({ palette, diagram,
nodes }) => {
@@ -177,4 +167,30 @@ test.describe("Add node - End Event", () => {
expect(boxAfter.y).not.toBe(endEventBox.y);
});
});
+
+ test.describe("Default values", () => {
+ test("should have default values - signal", async ({ palette, nodes,
jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.END_EVENT, targetPosition: {
x: 300, y: 300 } });
+ await nodes.morph({ node: nodes.getByType(NodeType.END_EVENT), to:
EventNodeType.SIGNAL });
+
+ const endEvent = (await jsonModel.getEndEvents())[0];
+ expect(endEvent.__$$element).toBe("endEvent");
+
expect(endEvent.eventDefinition?.[0]?.__$$element).toEqual("signalEventDefinition");
+ expect(endEvent.extensionElements?.["drools:metaData"]?.length).toBe(1);
+
expect(endEvent.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customScope");
+
expect(endEvent.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("default");
+ });
+
+ test("should remove default values after morphing away - signal", async ({
palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.END_EVENT, targetPosition: {
x: 300, y: 300 } });
+ await nodes.morph({ node: nodes.getByType(NodeType.END_EVENT), to:
EventNodeType.SIGNAL });
+ await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.getByType(NodeType.END_EVENT), to:
EventNodeType.NONE });
+
+ const endEvent = (await jsonModel.getEndEvents())[0];
+ expect(endEvent.__$$element).toBe("endEvent");
+ expect(endEvent.eventDefinition).toBe(undefined);
+ expect(endEvent.extensionElements).toBe(undefined);
+ });
+ });
});
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addGateway.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addGateway.spec.ts
index fa87daab1e2..c754f53c403 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addGateway.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addGateway.spec.ts
@@ -21,6 +21,7 @@ import { NodeType, GatewayNodeType, NodePosition,
DefaultNodeName } from "../__f
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Gateway", () => {
@@ -28,7 +29,7 @@ test.describe("Add node - Gateway", () => {
test("should add Gateway node from palette", async ({ palette, jsonModel,
nodes }) => {
await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
100, y: 100 } });
- const gateway = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const gateway = (await jsonModel.getExclusiveGateways())[0];
expect(gateway.__$$element).toBe("exclusiveGateway");
await expect(nodes.getByType(NodeType.GATEWAY)).toBeAttached();
@@ -55,54 +56,57 @@ test.describe("Add node - Gateway", () => {
// Exclusive (default), Parallel, Inclusive, Event-Based, Complex
test.describe("Gateway type morphing", () => {
- const morphTestCases = [
- { morphType: GatewayNodeType.PARALLEL, expectedElement:
"parallelGateway" },
- { morphType: GatewayNodeType.INCLUSIVE, expectedElement:
"inclusiveGateway" },
- { morphType: GatewayNodeType.EVENT_BASED, expectedElement:
"eventBasedGateway" },
- { morphType: GatewayNodeType.COMPLEX, expectedElement: "complexGateway"
},
- ];
+ test(`should morph Exclusive Gateway to Parallel Gateway`, async ({
jsonModel, palette, diagram, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
300, y: 300 } });
+ await expect(nodes.getByType(NodeType.GATEWAY)).toBeVisible();
+ await nodes.morph({ node: nodes.getByType(NodeType.GATEWAY), to:
GatewayNodeType.PARALLEL });
+ await
expect(diagram.get()).toHaveScreenshot(`morph-gateway-to-${GatewayNodeType.PARALLEL.toLowerCase()}.png`);
- for (const { morphType, expectedElement } of morphTestCases) {
- test(`should morph Exclusive Gateway to ${morphType} Gateway`, async ({
jsonModel, palette, diagram, nodes }) => {
- await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: {
x: 300, y: 300 } });
+ const parallelGateway = (await jsonModel.getParallelGateways())[0];
+ expect(parallelGateway?.__$$element).toBe("parallelGateway");
+ });
- const gateway = nodes.getByType(NodeType.GATEWAY);
- await expect(gateway).toBeVisible();
+ test(`should morph Exclusive Gateway to Inclusive Gateway`, async ({
jsonModel, palette, diagram, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
300, y: 300 } });
+ await expect(nodes.getByType(NodeType.GATEWAY)).toBeVisible();
+ await nodes.morph({ node: nodes.getByType(NodeType.GATEWAY), to:
GatewayNodeType.INCLUSIVE });
+ await
expect(diagram.get()).toHaveScreenshot(`morph-gateway-to-${GatewayNodeType.INCLUSIVE.toLowerCase()}.png`);
- await nodes.morph({ node: gateway, to: morphType });
+ const inclusiveGateway = (await jsonModel.getInclusiveGateways())[0];
+ expect(inclusiveGateway?.__$$element).toBe("inclusiveGateway");
+ });
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 0 });
- })
- .toMatchObject({ __$$element: expectedElement });
+ test(`should morph Exclusive Gateway to Event Based Gateway`, async ({
jsonModel, palette, diagram, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
300, y: 300 } });
+ await expect(nodes.getByType(NodeType.GATEWAY)).toBeVisible();
+ await nodes.morph({ node: nodes.getByType(NodeType.GATEWAY), to:
GatewayNodeType.EVENT_BASED });
+ await
expect(diagram.get()).toHaveScreenshot(`morph-gateway-to-${GatewayNodeType.EVENT_BASED.toLowerCase()}.png`);
- await
expect(diagram.get()).toHaveScreenshot(`morph-gateway-to-${morphType.toLowerCase()}.png`);
- });
- }
+ const eventBasedGateway = (await jsonModel.getEventBasedGateways())[0];
+ expect(eventBasedGateway?.__$$element).toBe("eventBasedGateway");
+ });
- test("should morph Parallel Gateway back to Exclusive Gateway", async ({
jsonModel, palette, diagram, nodes }) => {
+ test(`should morph Exclusive Gateway to Complex Gateway`, async ({
jsonModel, palette, diagram, nodes }) => {
await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
300, y: 300 } });
+ await expect(nodes.getByType(NodeType.GATEWAY)).toBeVisible();
+ await nodes.morph({ node: nodes.getByType(NodeType.GATEWAY), to:
GatewayNodeType.COMPLEX });
+ await
expect(diagram.get()).toHaveScreenshot(`morph-gateway-to-${GatewayNodeType.COMPLEX.toLowerCase()}.png`);
+ const complexGateway = (await jsonModel.getComplexGateways())[0];
+ expect(complexGateway?.__$$element).toBe("complexGateway");
+ });
+
+ test("should morph Parallel Gateway back to Exclusive Gateway", async ({
jsonModel, palette, diagram, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
300, y: 300 } });
const gateway = nodes.getByType(NodeType.GATEWAY);
await expect(gateway).toBeVisible();
-
await nodes.morph({ node: gateway, to: GatewayNodeType.PARALLEL });
-
- const parallelGateway = await jsonModel.getFlowElement({ elementIndex: 0
});
- expect(parallelGateway.__$$element).toBe("parallelGateway");
-
await nodes.hideNodeHandles();
-
await nodes.morph({ node: gateway, to: GatewayNodeType.EXCLUSIVE });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 0 });
- })
- .toMatchObject({ __$$element: "exclusiveGateway" });
-
await
expect(diagram.get()).toHaveScreenshot("morph-gateway-parallel-to-exclusive.png");
+
+ const exclusiveGateway = (await jsonModel.getExclusiveGateways())[0];
+ expect(exclusiveGateway.__$$element).toBe("exclusiveGateway");
});
});
@@ -243,16 +247,14 @@ test.describe("Add node - Gateway", () => {
test.describe("Gateway operations", () => {
test("should delete gateway", async ({ palette, jsonModel, page, nodes })
=> {
await palette.dragNewNode({ type: NodeType.GATEWAY, targetPosition: { x:
300, y: 300 } });
-
const gateway = nodes.getByType(NodeType.GATEWAY);
await expect(gateway).toBeVisible();
await gateway.click();
await page.keyboard.press("Delete");
-
await expect(gateway).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move gateway to new position", async ({ palette, diagram,
nodes }) => {
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addGroup.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addGroup.spec.ts
index 1dc4c5235cb..4c0bf04af83 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addGroup.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addGroup.spec.ts
@@ -22,17 +22,17 @@ import { NodeType, NodePosition } from
"../__fixtures__/nodes";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Group", () => {
test.describe("Add from palette", () => {
test("should add Group node from palette", async ({ palette, nodes,
jsonModel }) => {
await palette.dragNewNode({ type: NodeType.GROUP, targetPosition: { x:
100, y: 100 } });
-
await expect(nodes.getByType(NodeType.GROUP)).toBeAttached();
- const process = await jsonModel.getProcess();
- expect(process.artifact?.length).toBeGreaterThan(0);
+ const groups = await jsonModel.getGroups();
+ expect(groups.length).toBe(1);
});
test("should add two Group nodes from palette in a row", async ({ palette,
diagram, nodes, jsonModel }) => {
@@ -46,38 +46,32 @@ test.describe("Add node - Group", () => {
});
await diagram.resetFocus();
-
await expect(nodes.getByType(NodeType.GROUP).first()).toBeAttached();
await expect(nodes.getByType(NodeType.GROUP).nth(1)).toBeAttached();
- const process = await jsonModel.getProcess();
- expect(process.artifact?.length).toBe(2);
+ const groups = await jsonModel.getGroups();
+ expect(groups.length).toBe(2);
});
});
test.describe("Group operations", () => {
test("should delete group", async ({ palette, jsonModel, nodes }) => {
await palette.dragNewNode({ type: NodeType.GROUP, targetPosition: { x:
300, y: 300 } });
-
const groupId = await nodes.getIdByType(NodeType.GROUP);
await nodes.delete({ name: groupId });
-
await expect(nodes.getByType(NodeType.GROUP)).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.artifact?.length || 0).toBe(0);
+ expect(process?.artifact?.length).toBe(0);
});
- test("should move group to new position", async ({ palette, diagram, nodes
}) => {
+ test("should move group to new position", async ({ palette, nodes }) => {
await palette.dragNewNode({ type: NodeType.GROUP, targetPosition: { x:
300, y: 300 } });
-
await expect(nodes.getByType(NodeType.GROUP)).toBeAttached();
await nodes.getByType(NodeType.GROUP).scrollIntoViewIfNeeded();
-
const groupId = await nodes.getIdByType(NodeType.GROUP);
const groupBox = await nodes.getNodeBounds({ id: groupId });
-
await nodes.dragNodeToPosition({
id: groupId,
fromPosition: NodePosition.LEFT,
diff --git
a/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateCatchEvent.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateCatchEvent.spec.ts
index bf9844c975e..e1c167f46b5 100644
---
a/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateCatchEvent.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateCatchEvent.spec.ts
@@ -22,18 +22,17 @@ import { NodeType, EventNodeType, DefaultNodeName } from
"../__fixtures__/nodes"
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Intermediate Catch Event", () => {
test.describe("Add from palette", () => {
test("should add Intermediate Catch Event node from palette", async ({
palette, jsonModel, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 100, y: 100 } });
+ await
expect(nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT)).toBeAttached();
- const catchEvent = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const catchEvent = (await jsonModel.getIntermediateCatchEvents())[0];
expect(catchEvent.__$$element).toBe("intermediateCatchEvent");
-
- const catchEventNode =
nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT);
- await expect(catchEventNode).toBeAttached();
});
test("should add two Intermediate Catch Event nodes from palette in a
row", async ({ palette, diagram, nodes }) => {
@@ -72,24 +71,16 @@ test.describe("Add node - Intermediate Catch Event", () => {
for (const { morphType, eventDefinition } of morphTestCases) {
test(`should morph Intermediate Catch Event to ${morphType}`, async ({
jsonModel, palette, diagram, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 300, y: 300 } });
+ await
expect(nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT)).toBeVisible();
- const catchEvent = nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT);
- await expect(catchEvent).toBeVisible();
-
- await nodes.morph({ node: catchEvent, to: morphType });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 0 });
- })
- .toMatchObject({
- __$$element: "intermediateCatchEvent",
- eventDefinition: [{ __$$element: eventDefinition }],
- });
-
+ await nodes.morph({ node:
nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT), to: morphType });
await expect(diagram.get()).toHaveScreenshot(
`morph-intermediate-catch-event-to-${morphType.toLowerCase()}.png`
);
+
+ const morphedEvent = (await jsonModel.getIntermediateCatchEvents())[0];
+ expect(morphedEvent.__$$element).toBe("intermediateCatchEvent");
+
expect(morphedEvent.eventDefinition?.[0].__$$element).toBe(eventDefinition);
});
}
});
@@ -198,16 +189,15 @@ test.describe("Add node - Intermediate Catch Event", ()
=> {
test.describe("Intermediate Catch Event operations", () => {
test("should delete intermediate catch event", async ({ palette,
jsonModel, page, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 300, y: 300 } });
-
const catchEvent = nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT);
await expect(catchEvent).toBeVisible();
+
await catchEvent.click();
await page.keyboard.press("Delete");
-
await expect(catchEvent).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move intermediate catch event to new position", async ({
palette, diagram, nodes }) => {
diff --git
a/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateThrowEvent.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateThrowEvent.spec.ts
index cae6f4df71f..7da3414a492 100644
---
a/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateThrowEvent.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/flowElements/addIntermediateThrowEvent.spec.ts
@@ -21,17 +21,17 @@ import { NodeType, EventNodeType, NodePosition,
DefaultNodeName } from "../__fix
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Intermediate Throw Event", () => {
test.describe("Add from palette", () => {
test("should add Intermediate Throw Event node from palette", async ({
palette, jsonModel, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_THROW_EVENT,
targetPosition: { x: 100, y: 100 } });
+ await
expect(nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT)).toBeAttached();
- const throwEvent = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const throwEvent = (await jsonModel.getIntermediateThrowEvents())[0];
expect(throwEvent.__$$element).toBe("intermediateThrowEvent");
-
- await
expect(nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT)).toBeAttached();
});
test("should add two Intermediate Throw Event nodes from palette in a
row", async ({ palette, diagram, nodes }) => {
@@ -67,24 +67,16 @@ test.describe("Add node - Intermediate Throw Event", () => {
for (const { morphType, eventDefinition } of morphTestCases) {
test(`should morph Intermediate Throw Event to ${morphType}`, async ({
jsonModel, palette, diagram, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_THROW_EVENT,
targetPosition: { x: 300, y: 300 } });
+ await
expect(nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT)).toBeVisible();
- const throwEvent = nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT);
- await expect(throwEvent).toBeVisible();
-
- await nodes.morph({ node: throwEvent, to: morphType });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 0 });
- })
- .toMatchObject({
- __$$element: "intermediateThrowEvent",
- eventDefinition: [{ __$$element: eventDefinition }],
- });
-
+ await nodes.morph({ node:
nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT), to: morphType });
await expect(diagram.get()).toHaveScreenshot(
`morph-intermediate-throw-event-to-${morphType.toLowerCase()}.png`
);
+
+ const morphedEvent = (await jsonModel.getIntermediateThrowEvents())[0];
+ expect(morphedEvent.__$$element).toBe("intermediateThrowEvent");
+
expect(morphedEvent.eventDefinition?.[0].__$$element).toBe(eventDefinition);
});
}
});
@@ -193,16 +185,15 @@ test.describe("Add node - Intermediate Throw Event", ()
=> {
test.describe("Intermediate Throw Event operations", () => {
test("should delete intermediate throw event", async ({ palette,
jsonModel, page, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_THROW_EVENT,
targetPosition: { x: 300, y: 300 } });
-
const throwEvent = nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT);
await expect(throwEvent).toBeVisible();
+
await throwEvent.click();
await page.keyboard.press("Delete");
-
await expect(throwEvent).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move intermediate throw event to new position", async ({
palette, diagram, nodes }) => {
@@ -226,4 +217,29 @@ test.describe("Add node - Intermediate Throw Event", () =>
{
expect(boxAfter.y).not.toBe(throwEventBox.y);
});
});
+
+ test.describe("Default values", () => {
+ test("should have default values - signal", async ({ palette, nodes,
jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.INTERMEDIATE_THROW_EVENT,
targetPosition: { x: 300, y: 300 } });
+
+ const signalThrowEvent = (await
jsonModel.getIntermediateThrowEvents())[0];
+ expect(signalThrowEvent.__$$element).toBe("intermediateThrowEvent");
+
expect(signalThrowEvent.eventDefinition?.[0].__$$element).toBe("signalEventDefinition");
+
expect(signalThrowEvent.extensionElements?.["drools:metaData"]?.length).toBe(1);
+
expect(signalThrowEvent.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customScope");
+
expect(signalThrowEvent.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe(
+ "default"
+ );
+ });
+
+ test("should remove default values after morphing away - signal", async ({
palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.INTERMEDIATE_THROW_EVENT,
targetPosition: { x: 300, y: 300 } });
+ await nodes.morph({ node:
nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT), to: EventNodeType.MESSAGE
});
+
+ const messageThrowEvent = (await
jsonModel.getIntermediateThrowEvents())[0];
+ expect(messageThrowEvent.__$$element).toBe("intermediateThrowEvent");
+
expect(messageThrowEvent.eventDefinition?.[0].__$$element).toBe("messageEventDefinition");
+
expect(messageThrowEvent.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ });
+ });
});
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addLane.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addLane.spec.ts
index 46c395c0676..7ea5b411338 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addLane.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addLane.spec.ts
@@ -23,40 +23,34 @@ import { NodeType, DefaultNodeName, NodePosition } from
"../__fixtures__/nodes";
test.describe("Add Lane", () => {
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test("should add lane from palette", async ({ palette, nodes, jsonModel })
=> {
await palette.dragNewNode({ type: NodeType.LANE, targetPosition: { x: 300,
y: 300 } });
-
await expect(nodes.get({ name: DefaultNodeName.LANE })).toBeAttached();
- const process = await jsonModel.getProcess();
- const laneSet = Array.isArray(process.laneSet) ? process.laneSet[0] :
process.laneSet;
- expect(laneSet?.lane?.length).toBeGreaterThan(0);
+ const laneSet = await jsonModel.getLaneSet();
+ expect(laneSet?.[0]?.lane?.length).toBe(1);
});
test.describe("Lane operations", () => {
test("should delete lane", async ({ palette, nodes, jsonModel }) => {
await palette.dragNewNode({ type: NodeType.LANE, targetPosition: { x:
300, y: 300 } });
await nodes.delete({ name: DefaultNodeName.LANE });
-
await expect(nodes.get({ name: DefaultNodeName.LANE
})).not.toBeAttached();
- const process = await jsonModel.getProcess();
- const laneSet = Array.isArray(process.laneSet) ? process.laneSet[0] :
process.laneSet;
- expect(laneSet?.lane?.length || 0).toBe(0);
+ const laneSet = await jsonModel.getLaneSet();
+ expect(laneSet?.[0]?.lane?.length).toBe(0);
});
test("should move lane to new position", async ({ palette, nodes, diagram,
page }) => {
await palette.dragNewNode({ type: NodeType.LANE, targetPosition: { x:
300, y: 300 } });
-
const lane = nodes.get({ name: DefaultNodeName.LANE });
await expect(lane).toBeAttached();
await lane.scrollIntoViewIfNeeded();
-
const laneBox = await nodes.getNodeBounds({ name: DefaultNodeName.LANE
});
-
await nodes.dragNodeToPosition({
name: DefaultNodeName.LANE,
fromPosition: NodePosition.LEFT,
@@ -68,18 +62,14 @@ test.describe("Add Lane", () => {
expect(boxAfter.y).not.toBe(laneBox.y);
});
- test("should rename lane", async ({ palette, nodes, jsonModel, page }) => {
+ test("should rename lane", async ({ palette, nodes, jsonModel }) => {
await palette.dragNewNode({ type: NodeType.LANE, targetPosition: { x:
300, y: 300 } });
-
await nodes.select({ name: DefaultNodeName.LANE, position:
NodePosition.LEFT });
-
await nodes.rename({ current: DefaultNodeName.LANE, new: "Customer
Service Lane" });
-
await expect(nodes.get({ name: "Customer Service Lane"
})).toBeAttached();
- const process = await jsonModel.getProcess();
- const lane = process.laneSet?.[0]?.lane?.[0];
- expect(lane?.["@_name"]).toBe("Customer Service Lane");
+ const laneSet = await jsonModel.getLaneSet();
+ expect(laneSet?.[0]?.lane?.[0]?.["@_name"]).toBe("Customer Service
Lane");
});
});
});
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addStartEvent.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addStartEvent.spec.ts
index 8bf10c8a5fc..ac00bcacb95 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addStartEvent.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addStartEvent.spec.ts
@@ -19,59 +19,21 @@
import { test, expect } from "../__fixtures__/base";
import { DefaultNodeName, NodeType, SubProcessNodeType, EventNodeType,
NodePosition } from "../__fixtures__/nodes";
-import type { Palette } from "../__fixtures__/palette";
-import type { Nodes } from "../__fixtures__/nodes";
-import type { Page } from "@playwright/test";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
-async function setupEventSubProcess(palette: Palette, nodes: Nodes, _page:
Page) {
- await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition: { x:
100, y: 200 } });
-
- await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
-
- await nodes.morph({ node: nodes.get({ name: DefaultNodeName.SUB_PROCESS }),
to: SubProcessNodeType.EVENT });
-
- const center = await nodes.getNodeCenterPosition({ name:
DefaultNodeName.SUB_PROCESS });
-
- await palette.dragNewNode({
- type: NodeType.START_EVENT,
- targetPosition: { x: center.x - 50, y: center.y + 50 },
- });
-
- await expect(nodes.getByType(NodeType.START_EVENT)).toBeVisible();
-
- return nodes.getByType(NodeType.START_EVENT);
-}
-
-async function setupRegularSubProcess(palette: Palette, nodes: Nodes, _page:
Page) {
- await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition: { x:
100, y: 200 } });
-
- await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
-
- const center = await nodes.getNodeCenterPosition({ name:
DefaultNodeName.SUB_PROCESS });
-
- await palette.dragNewNode({
- type: NodeType.START_EVENT,
- targetPosition: { x: center.x - 50, y: center.y + 50 },
- });
-
- await expect(nodes.getByType(NodeType.START_EVENT)).toBeVisible();
-
- return nodes.getByType(NodeType.START_EVENT);
-}
-
test.describe("Add node - Start Event", () => {
test.describe("Add from palette", () => {
test("should add Start Event node from palette", async ({ palette,
jsonModel, nodes }) => {
await palette.dragNewNode({ type: NodeType.START_EVENT, targetPosition:
{ x: 100, y: 100 } });
-
- const startEvent = await jsonModel.getFlowElement({ elementIndex: 0 });
- expect(startEvent.__$$element).toBe("startEvent");
-
await expect(nodes.getByType(NodeType.START_EVENT)).toBeAttached();
+
+ const startEvents = await jsonModel.getStartEvents();
+ expect(startEvents.length).toBe(1);
+ expect(startEvents[0].__$$element).toBe("startEvent");
});
test("should add two Start Event nodes from palette in a row", async ({
palette, diagram, nodes }) => {
@@ -110,22 +72,15 @@ test.describe("Add node - Start Event", () => {
nodes,
}) => {
await palette.dragNewNode({ type: NodeType.START_EVENT,
targetPosition: { x: 300, y: 300 } });
+ await expect(nodes.getByType(NodeType.START_EVENT)).toBeVisible();
- const startEvent = nodes.getByType(NodeType.START_EVENT);
- await expect(startEvent).toBeVisible();
-
- await nodes.morph({ node: startEvent, to: morphType });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 0 });
- })
- .toMatchObject({
- __$$element: "startEvent",
- eventDefinition: [{ __$$element: eventDefinition }],
- });
-
+ await nodes.morph({ node: nodes.getByType(NodeType.START_EVENT), to:
morphType });
await
expect(diagram.get()).toHaveScreenshot(`morph-start-event-to-${morphType.toLowerCase()}.png`);
+
+ const startEvents = await jsonModel.getStartEvents();
+ expect(startEvents.length).toBe(1);
+ expect(startEvents[0].__$$element).toBe("startEvent");
+ expect(startEvents[0].eventDefinition).toMatchObject([{ __$$element:
eventDefinition }]);
});
}
@@ -156,6 +111,19 @@ test.describe("Add node - Start Event", () => {
});
test.describe("Event sub-process start event morphing", () => {
+ test.beforeEach(async ({ palette, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 200 } });
+ await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
+
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.SUB_PROCESS
}), to: SubProcessNodeType.EVENT });
+ const center = await nodes.getNodeCenterPosition({ name:
DefaultNodeName.SUB_PROCESS });
+ await palette.dragNewNode({
+ type: NodeType.START_EVENT,
+ targetPosition: { x: center.x - 50, y: center.y + 50 },
+ });
+ await expect(nodes.getByType(NodeType.START_EVENT)).toBeVisible();
+ });
+
const eventSubProcessMorphCases = [
{ morphType: EventNodeType.MESSAGE, eventDefinition:
"messageEventDefinition" },
{ morphType: EventNodeType.TIMER, eventDefinition:
"timerEventDefinition" },
@@ -169,63 +137,54 @@ test.describe("Add node - Start Event", () => {
for (const { morphType, eventDefinition } of eventSubProcessMorphCases) {
test(`should morph None Start Event to ${morphType} Start Event in Event
Sub-Process`, async ({
jsonModel,
- palette,
diagram,
- page,
nodes,
}) => {
- const startEvent = await setupEventSubProcess(palette, nodes, page);
-
- await nodes.morph({ node: startEvent, to: morphType });
-
- await expect
- .poll(async () => {
- const subProcessElement = await jsonModel.getFlowElement({
elementIndex: 0 });
- return subProcessElement.flowElement?.find(
- (el: { __$$element: string }) => el.__$$element === "startEvent"
- );
- })
- .toMatchObject({
- __$$element: "startEvent",
- eventDefinition: [{ __$$element: eventDefinition }],
- });
-
+ await nodes.morph({ node: nodes.getByType(NodeType.START_EVENT), to:
morphType });
await expect(diagram.get()).toHaveScreenshot(
`morph-event-subprocess-start-event-to-${morphType.toLowerCase()}.png`
);
+
+ const subProcesses = await jsonModel.getSubProcesses();
+ expect(subProcesses.length).toBe(1);
+ const subProcessStartEvent = (await
jsonModel.getStartEvents(subProcesses[0].flowElement))[0];
+ expect(subProcessStartEvent?.__$$element).toBe("startEvent");
+ expect(subProcessStartEvent?.eventDefinition).toMatchObject([{
__$$element: eventDefinition }]);
});
}
});
test.describe("Regular embedded sub-process start events", () => {
- test("should add None Start Event inside regular Sub-Process and verify
JSON", async ({
- jsonModel,
- palette,
- diagram,
- page,
- nodes,
- }) => {
- await setupRegularSubProcess(palette, nodes, page);
+ test.beforeEach(async ({ palette, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 200 } });
+ await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
- await expect
- .poll(async () => {
- const subProcessElement = await jsonModel.getFlowElement({
elementIndex: 0 });
- return subProcessElement.flowElement?.find((el: { __$$element:
string }) => el.__$$element === "startEvent");
- })
- .toMatchObject({ __$$element: "startEvent" });
+ const center = await nodes.getNodeCenterPosition({ name:
DefaultNodeName.SUB_PROCESS });
+ await palette.dragNewNode({
+ type: NodeType.START_EVENT,
+ targetPosition: { x: center.x - 50, y: center.y + 50 },
+ });
+ await expect(nodes.getByType(NodeType.START_EVENT)).toBeVisible();
+ });
+
+ test("should add None Start Event inside regular Sub-Process and verify
JSON", async ({ jsonModel, diagram }) => {
await
expect(diagram.get()).toHaveScreenshot("regular-subprocess-start-event-none.png");
+
+ const subProcesses = await jsonModel.getSubProcesses();
+ expect(subProcesses.length).toBe(1);
+ const subProcessStartEvent = subProcesses[0].flowElement?.find(
+ (el: { __$$element: string }) => el.__$$element === "startEvent"
+ );
+ expect(subProcessStartEvent?.__$$element).toBe("startEvent");
});
test("should NOT show morphing options for Start Event inside regular
Sub-Process", async ({
- palette,
diagram,
page,
nodes,
}) => {
- const startEvent = await setupRegularSubProcess(palette, nodes, page);
-
- await nodes.openMorphingPanel({ nodeLocator: startEvent });
+ await nodes.openMorphingPanel({ nodeLocator:
nodes.getByType(NodeType.START_EVENT) });
await expect(page.getByTitle("Message")).toHaveClass(/disabled/);
await expect(page.getByTitle("Timer")).toHaveClass(/disabled/);
@@ -272,25 +231,17 @@ test.describe("Add node - Start Event", () => {
await expect(nodes.getByType(NodeType.GATEWAY)).toBeAttached();
});
- test("should create sequence flow from Start Event to Sub-process", async
({
- diagram,
- palette,
- page,
- edges,
- nodes,
- }) => {
+ test("should create sequence flow from Start Event to Sub-process", async
({ palette, edges, nodes }) => {
await palette.dragNewNode({ type: NodeType.START_EVENT, targetPosition:
{ x: 100, y: 100 } });
await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 350, y: 100 } });
-
const startEvent = nodes.getByType(NodeType.START_EVENT);
await expect(startEvent).toBeVisible();
+
const startEventId = await nodes.getIdByType(NodeType.START_EVENT);
expect(startEventId).not.toBe("");
-
await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
await nodes.createSequenceFlow({ from: startEventId, to:
DefaultNodeName.SUB_PROCESS });
-
await expect(await edges.get({ from: startEventId, to:
DefaultNodeName.SUB_PROCESS })).toBeAttached();
});
});
@@ -298,16 +249,14 @@ test.describe("Add node - Start Event", () => {
test.describe("Start Event operations", () => {
test("should delete start event", async ({ palette, jsonModel, nodes }) =>
{
await palette.dragNewNode({ type: NodeType.START_EVENT, targetPosition:
{ x: 300, y: 300 } });
-
const startEvent = nodes.getByType(NodeType.START_EVENT);
await expect(startEvent).toBeAttached();
await nodes.deleteByType({ type: NodeType.START_EVENT });
-
await expect(startEvent).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move start event to new position", async ({ palette, diagram,
nodes }) => {
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addSubProcess.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addSubProcess.spec.ts
index 7945aa91046..042df402a84 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addSubProcess.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addSubProcess.spec.ts
@@ -23,6 +23,7 @@ import { DefaultNodeName, NodeType, SubProcessNodeType,
NodePosition } from "../
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Sub-process", () => {
@@ -32,7 +33,7 @@ test.describe("Add node - Sub-process", () => {
await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
- const subProcess = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const subProcess = (await jsonModel.getSubProcesses())[0];
expect(subProcess.__$$element).toBe("subProcess");
});
@@ -224,7 +225,7 @@ test.describe("Add node - Sub-process", () => {
await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move sub-process to new position", async ({ palette, diagram,
nodes }) => {
@@ -253,9 +254,73 @@ test.describe("Add node - Sub-process", () => {
await expect(nodes.get({ name: "Order Processing" })).toBeAttached();
- const subProcess = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const subProcess = (await jsonModel.getSubProcesses())[0];
+ expect(subProcess?.__$$element).toBe("subProcess");
+ expect(subProcess?.["@_name"]).toBe("Order Processing");
+ });
+ });
+
+ test.describe("Sub-process default properties", () => {
+ test(`should check sub-process default properties`, async ({ palette,
nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 300 } });
+ await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
+
+ const subProcess = (await jsonModel.getSubProcesses())[0];
+ expect(subProcess.__$$element).toBe("subProcess");
+ expect(subProcess["@_name"]).toBe(DefaultNodeName.SUB_PROCESS);
+ expect(subProcess["@_triggeredByEvent"]).toBe(false);
+
expect(subProcess.extensionElements?.["drools:metaData"]?.length).toBe(1);
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]["@_name"]).toBe("customAsync");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+ });
+
+ test(`should check event sub-process default properties`, async ({
palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 300 } });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.SUB_PROCESS
}), to: SubProcessNodeType.EVENT });
+ await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
+
+ const subProcess = (await jsonModel.getSubProcesses())[0];
expect(subProcess.__$$element).toBe("subProcess");
- expect(subProcess["@_name"]).toBe("Order Processing");
+ expect(subProcess["@_name"]).toBe(DefaultNodeName.SUB_PROCESS);
+ expect(subProcess["@_triggeredByEvent"]).toBe(true);
+
expect(subProcess.extensionElements?.["drools:metaData"]?.length).toBe(1);
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]["@_name"]).toBe("customAsync");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+ });
+
+ test(`should check multi instance sub-process default properties`, async
({ palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 300 } });
+ await nodes.morph({
+ node: nodes.get({ name: DefaultNodeName.SUB_PROCESS }),
+ to: SubProcessNodeType.MULTI_INSTANCE,
+ });
+ await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
+
+ const subProcess = (await jsonModel.getSubProcesses())[0];
+ expect(subProcess.__$$element).toBe("subProcess");
+ expect(subProcess["@_name"]).toBe(DefaultNodeName.SUB_PROCESS);
+ expect(subProcess["@_triggeredByEvent"]).toBe(false);
+
expect(subProcess.loopCharacteristics?.["__$$element"]).toBe("multiInstanceLoopCharacteristics");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.length).toBe(1);
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]["@_name"]).toBe("customAsync");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+ });
+
+ test(`should check ad-hoc sub-process default properties`, async ({
palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition:
{ x: 100, y: 300 } });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.SUB_PROCESS
}), to: SubProcessNodeType.AD_HOC });
+ await expect(nodes.get({ name: DefaultNodeName.SUB_PROCESS
})).toBeAttached();
+
+ const subProcess = (await jsonModel.getAdHocSubProcesses())[0];
+ expect(subProcess.__$$element).toBe("adHocSubProcess");
+ expect(subProcess["@_name"]).toBe(DefaultNodeName.SUB_PROCESS);
+ expect(subProcess["@_triggeredByEvent"]).toBe(false);
+ expect(subProcess["@_ordering"]).toBe("Parallel");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.length).toBe(2);
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]["@_name"]).toBe("customAsync");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[1]["@_name"]).toBe("customAutoStart");
+
expect(subProcess.extensionElements?.["drools:metaData"]?.[1]?.["drools:metaValue"].__$$text).toBe("false");
});
});
});
diff --git a/packages/bpmn-editor/tests-e2e/flowElements/addTask.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addTask.spec.ts
index d88dc70a237..7a4a0d4ea0b 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addTask.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addTask.spec.ts
@@ -23,16 +23,16 @@ import { DefaultNodeName, NodeType, NodePosition,
TaskNodeType } from "../__fixt
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Task", () => {
test.describe("Add from palette", () => {
test("should add Task node from palette", async ({ palette, nodes,
jsonModel }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
100, y: 100 } });
-
await expect(nodes.get({ name: DefaultNodeName.TASK })).toBeAttached();
- const task = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const task = (await jsonModel.getTasks())[0];
expect(task.__$$element).toBe("task");
});
@@ -64,56 +64,174 @@ test.describe("Add node - Task", () => {
for (const { morphType, expectedElement, screenshot } of singleMorphCases)
{
test(`should morph Task to ${morphType}`, async ({ jsonModel, palette,
nodes, diagram, page }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
-
await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
-
- const task = await nodes.get({ name: DefaultNodeName.TASK });
- await nodes.morph({ node: task, to: morphType });
-
- const result = await jsonModel.getFlowElement({ elementIndex: 0 });
- expect(result.__$$element).toBe(expectedElement);
- expect(result["@_name"]).toBe(DefaultNodeName.TASK);
-
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }),
to: morphType });
await expect(diagram.get()).toHaveScreenshot(screenshot);
+
+ const process = await jsonModel.getProcess();
+ const result = process?.flowElement?.[0];
+ expect(result?.__$$element).toBe(expectedElement);
+ expect(result?.["@_name"]).toBe(DefaultNodeName.TASK);
});
}
test("should morph User Task to Service Task", async ({ jsonModel,
palette, nodes }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.USER });
+ await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.SERVICE });
+
+ const serviceTask = (await jsonModel.getServiceTasks())[0];
+ expect(serviceTask.__$$element).toBe("serviceTask");
+ expect(serviceTask["@_name"]).toBe(DefaultNodeName.TASK);
+ });
+ test("should morph Script Task back to generic Task", async ({ jsonModel,
palette, nodes }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.SCRIPT });
+ await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.TASK });
- const task = await nodes.get({ name: DefaultNodeName.TASK });
- await nodes.morph({ node: task, to: TaskNodeType.USER });
+ const genericTask = (await jsonModel.getTasks())[0];
+ expect(genericTask.__$$element).toBe("task");
+ expect(genericTask["@_name"]).toBe(DefaultNodeName.TASK);
+ });
- expect((await jsonModel.getFlowElement({ elementIndex: 0
})).__$$element).toBe("userTask");
+ test("should have default values - task", async ({ palette, nodes,
jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
- await nodes.hideNodeHandles();
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
+ expect(task["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(task.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ expect(task.ioSpecification).toBe(undefined);
+ });
- await nodes.morph({ node: task, to: TaskNodeType.SERVICE });
+ test("should have default values - userTask", async ({ palette, nodes,
jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.USER });
+
+ const userTask = (await jsonModel.getUserTasks())[0];
+ expect(userTask.__$$element).toBe("userTask");
+ expect(userTask["@_name"]).toBe(DefaultNodeName.TASK);
+ expect(userTask.extensionElements?.["drools:metaData"]?.length).toBe(2);
+
expect(userTask.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customAsync");
+
expect(userTask.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+
expect(userTask.extensionElements?.["drools:metaData"]?.[1]?.["@_name"]).toBe("customAutoStart");
+
expect(userTask.extensionElements?.["drools:metaData"]?.[1]?.["drools:metaValue"].__$$text).toBe("false");
+ expect(userTask.ioSpecification).toBeDefined();
+ });
- const taskElement = await jsonModel.getFlowElement({ elementIndex: 0 });
- expect(taskElement.__$$element).toBe("serviceTask");
- expect(taskElement["@_name"]).toBe(DefaultNodeName.TASK);
+ test("should have default values - serviceTask", async ({ palette, nodes,
jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.SERVICE });
+
+ const serviceTask = (await jsonModel.getServiceTasks())[0];
+ expect(serviceTask.__$$element).toBe("serviceTask");
+ expect(serviceTask["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(serviceTask.extensionElements?.["drools:metaData"]?.length).toBe(2);
+
expect(serviceTask.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customAsync");
+
expect(serviceTask.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+
expect(serviceTask.extensionElements?.["drools:metaData"]?.[1]?.["@_name"]).toBe("customAutoStart");
+
expect(serviceTask.extensionElements?.["drools:metaData"]?.[1]?.["drools:metaValue"].__$$text).toBe("false");
+ expect(serviceTask.ioSpecification).toBeDefined();
});
- test("should morph Script Task back to generic Task", async ({ jsonModel,
palette, nodes }) => {
+ test("should have default values - scriptTask", async ({ palette, nodes,
jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.SCRIPT });
+
+ const scriptTask = (await jsonModel.getScriptTasks())[0];
+ expect(scriptTask.__$$element).toBe("scriptTask");
+ expect(scriptTask["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(scriptTask.extensionElements?.["drools:metaData"]?.length).toBe(2);
+
expect(scriptTask.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customAsync");
+
expect(scriptTask.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+
expect(scriptTask.extensionElements?.["drools:metaData"]?.[1]?.["@_name"]).toBe("customAutoStart");
+
expect(scriptTask.extensionElements?.["drools:metaData"]?.[1]?.["drools:metaValue"].__$$text).toBe("false");
+ expect(scriptTask.ioSpecification).toBe(undefined);
+ });
+
+ test("should have default values - businessRuleTask", async ({ palette,
nodes, jsonModel }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.BUSINESS_RULE });
+
+ const businessRuleTask = (await jsonModel.getBusinessRuleTasks())[0];
+ expect(businessRuleTask.__$$element).toBe("businessRuleTask");
+ expect(businessRuleTask["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(businessRuleTask.extensionElements?.["drools:metaData"]?.length).toBe(2);
+
expect(businessRuleTask.extensionElements?.["drools:metaData"]?.[0]?.["@_name"]).toBe("customAsync");
+
expect(businessRuleTask.extensionElements?.["drools:metaData"]?.[0]?.["drools:metaValue"].__$$text).toBe("false");
+
expect(businessRuleTask.extensionElements?.["drools:metaData"]?.[1]?.["@_name"]).toBe("customAutoStart");
+
expect(businessRuleTask.extensionElements?.["drools:metaData"]?.[1]?.["drools:metaValue"].__$$text).toBe("false");
+ expect(businessRuleTask.ioSpecification).toBeDefined();
+ });
+ test("should remove default values after morphing away - userTask", async
({ palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.USER });
+ await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.TASK });
- const task = await nodes.get({ name: DefaultNodeName.TASK });
- await nodes.morph({ node: task, to: TaskNodeType.SCRIPT });
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
+ expect(task["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(task.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ expect(task.ioSpecification).toBe(undefined);
+ });
- expect((await jsonModel.getFlowElement({ elementIndex: 0
})).__$$element).toBe("scriptTask");
+ test("should remove default values after morphing away - serviceTask",
async ({ palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.SERVICE });
+ await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.TASK });
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
+ expect(task["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(task.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ expect(task.ioSpecification).toBe(undefined);
+ });
+
+ test("should remove default values after morphing away - scriptTask",
async ({ palette, nodes, jsonModel }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.SCRIPT });
await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.TASK });
- await nodes.morph({ node: task, to: TaskNodeType.TASK });
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
+ expect(task["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(task.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ expect(task.ioSpecification).toBe(undefined);
+ });
- const taskElement = await jsonModel.getFlowElement({ elementIndex: 0 });
- expect(taskElement.__$$element).toBe("task");
- expect(taskElement["@_name"]).toBe(DefaultNodeName.TASK);
+ test("should remove default values after morphing away -
businessRuleTask", async ({
+ palette,
+ nodes,
+ jsonModel,
+ }) => {
+ await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
+ await nodes.select({ name: DefaultNodeName.TASK, position:
NodePosition.CENTER });
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.BUSINESS_RULE });
+ await nodes.hideNodeHandles();
+ await nodes.morph({ node: nodes.get({ name: DefaultNodeName.TASK }), to:
TaskNodeType.TASK });
+
+ const task = (await jsonModel.getTasks())[0];
+ expect(task.__$$element).toBe("task");
+ expect(task["@_name"]).toBe(DefaultNodeName.TASK);
+
expect(task.extensionElements?.["drools:metaData"]?.length).toBe(undefined);
+ expect(task.ioSpecification).toBe(undefined);
});
});
@@ -214,11 +332,10 @@ test.describe("Add node - Task", () => {
test("should delete task", async ({ palette, nodes, jsonModel }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await nodes.delete({ name: DefaultNodeName.TASK });
-
await expect(nodes.get({ name: DefaultNodeName.TASK
})).not.toBeAttached();
const process = await jsonModel.getProcess();
- expect(process.flowElement?.length).toBe(0);
+ expect(process?.flowElement?.length).toBe(0);
});
test("should move task to new position", async ({ palette, diagram, nodes
}) => {
@@ -244,10 +361,9 @@ test.describe("Add node - Task", () => {
test("should rename task", async ({ palette, nodes, jsonModel }) => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x:
300, y: 300 } });
await nodes.rename({ current: DefaultNodeName.TASK, new: "Process Order"
});
-
await expect(nodes.get({ name: "Process Order" })).toBeAttached();
- const task = await jsonModel.getFlowElement({ elementIndex: 0 });
+ const task = (await jsonModel.getTasks())[0];
expect(task.__$$element).toBe("task");
expect(task["@_name"]).toBe("Process Order");
});
diff --git
a/packages/bpmn-editor/tests-e2e/flowElements/addTextAnnotation.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/addTextAnnotation.spec.ts
index 59ce797bbd0..3fc79568b23 100644
--- a/packages/bpmn-editor/tests-e2e/flowElements/addTextAnnotation.spec.ts
+++ b/packages/bpmn-editor/tests-e2e/flowElements/addTextAnnotation.spec.ts
@@ -22,6 +22,7 @@ import { NodeType, NodePosition } from
"../__fixtures__/nodes";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Add node - Text Annotation", () => {
@@ -31,8 +32,8 @@ test.describe("Add node - Text Annotation", () => {
await expect(nodes.getByType(NodeType.TEXT_ANNOTATION)).toBeAttached();
- const process = await jsonModel.getProcess();
- expect(process.artifact?.length).toBeGreaterThan(0);
+ const textAnnotations = await jsonModel.getTextAnnotations();
+ expect(textAnnotations.length).toBe(1);
});
test("should add two Text Annotation nodes from palette in a row", async ({
@@ -55,8 +56,8 @@ test.describe("Add node - Text Annotation", () => {
await
expect(nodes.getByType(NodeType.TEXT_ANNOTATION).first()).toBeAttached();
await
expect(nodes.getByType(NodeType.TEXT_ANNOTATION).nth(1)).toBeAttached();
- const process = await jsonModel.getProcess();
- expect(process.artifact?.length).toBe(2);
+ const textAnnotations = await jsonModel.getTextAnnotations();
+ expect(textAnnotations.length).toBe(2);
});
});
@@ -66,8 +67,8 @@ test.describe("Add node - Text Annotation", () => {
await nodes.deleteByType({ type: NodeType.TEXT_ANNOTATION });
- const process = await jsonModel.getProcess();
- expect(process.artifact?.length || 0).toBe(0);
+ const textAnnotations = await jsonModel.getTextAnnotations();
+ expect(textAnnotations.length).toBe(0);
});
test("should move text annotation to new position", async ({ palette,
diagram, nodes }) => {
diff --git
a/packages/bpmn-editor/tests-e2e/flowElements/boundaryEventCompensation.spec.ts
b/packages/bpmn-editor/tests-e2e/flowElements/boundaryEventCompensation.spec.ts
index 85e85cc226a..a39799489a4 100644
---
a/packages/bpmn-editor/tests-e2e/flowElements/boundaryEventCompensation.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/flowElements/boundaryEventCompensation.spec.ts
@@ -22,6 +22,7 @@ import { NodeType } from "../__fixtures__/nodes";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Compensation Boundary Events", () => {
@@ -34,28 +35,17 @@ test.describe("Compensation Boundary Events", () => {
await palette.dragNewNode({ type: NodeType.TASK, targetPosition: { x: 300,
y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 450, y: 300 } });
- const boundaryEvent = await jsonModel.getFlowElement({ elementIndex: 1 });
- expect(boundaryEvent.__$$element).toBe("boundaryEvent");
- expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
-
await nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT).click();
-
await intermediateEventPropertiesPanel.setCompensationDefinition({});
await intermediateEventPropertiesPanel.setCancelActivity({ cancelActivity:
false });
-
- await expect
- .poll(async () => {
- return await jsonModel.getFlowElement({ elementIndex: 1 });
- })
- .toMatchObject({
- __$$element: "boundaryEvent",
- "@_attachedToRef": expect.stringMatching(/.+/),
- "@_cancelActivity": false,
- eventDefinition: [{ __$$element: "compensateEventDefinition" }],
- });
-
const cancelActivity = await
intermediateEventPropertiesPanel.getCancelActivity();
expect(cancelActivity).toBe(false);
+
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
+ expect(boundaryEvent.__$$element).toBe("boundaryEvent");
+ expect(boundaryEvent["@_attachedToRef"]).toBeDefined();
+ expect(boundaryEvent["@_cancelActivity"]).toBeFalsy();
+
expect(boundaryEvent.eventDefinition?.[0].__$$element).toBe("compensateEventDefinition");
});
test("should allow compensation boundary event on subprocess", async ({
@@ -66,29 +56,16 @@ test.describe("Compensation Boundary Events", () => {
}) => {
await palette.dragNewNode({ type: NodeType.SUB_PROCESS, targetPosition: {
x: 100, y: 300 } });
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_CATCH_EVENT,
targetPosition: { x: 550, y: 350 } });
-
- const process = await jsonModel.getProcess();
- const boundaryEvent = process.flowElement?.find((e: { __$$element: string
}) => e.__$$element === "boundaryEvent");
- const subProcessElement = process.flowElement?.find((e: { __$$element:
string }) => e.__$$element === "subProcess");
-
- expect(boundaryEvent).toBeDefined();
- expect(boundaryEvent["@_attachedToRef"]).toBe(subProcessElement["@_id"]);
-
await nodes.getByType(NodeType.INTERMEDIATE_CATCH_EVENT).click();
await intermediateEventPropertiesPanel.setCompensationDefinition({});
await intermediateEventPropertiesPanel.setCancelActivity({ cancelActivity:
false });
- await expect
- .poll(async () => {
- const updatedProcess = await jsonModel.getProcess();
- return updatedProcess.flowElement?.find((e: { __$$element: string })
=> e.__$$element === "boundaryEvent");
- })
- .toMatchObject({
- __$$element: "boundaryEvent",
- "@_attachedToRef": subProcessElement["@_id"],
- "@_cancelActivity": false,
- eventDefinition: [{ __$$element: "compensateEventDefinition" }],
- });
+ const boundaryEvent = (await jsonModel.getBoundaryEvents())[0];
+ const subProcess = (await jsonModel.getSubProcesses())[0];
+ expect(boundaryEvent.__$$element).toBe("boundaryEvent");
+ expect(boundaryEvent["@_attachedToRef"]).toBe(subProcess["@_id"]);
+ expect(boundaryEvent["@_cancelActivity"]).toBeFalsy();
+
expect(boundaryEvent.eventDefinition?.[0].__$$element).toBe("compensateEventDefinition");
});
});
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeDataObjectProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeDataObjectProperties.spec.ts
index bd25ec72a67..4c646572ba3 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeDataObjectProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeDataObjectProperties.spec.ts
@@ -23,6 +23,7 @@ import { DefaultNodeName, NodeType } from
"../__fixtures__/nodes";
test.beforeEach(async ({ editor, page }) => {
await page.setViewportSize({ width: 1920, height: 1080 });
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Change Properties - Data Object", () => {
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeEndEventProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeEndEventProperties.spec.ts
index 5239ebca377..d3f1140f88a 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeEndEventProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeEndEventProperties.spec.ts
@@ -22,6 +22,7 @@ import { NodeType } from "../__fixtures__/nodes";
test.beforeEach(async ({ editor, page }) => {
await editor.open();
+ await editor.setInitialProcessId();
await page.setViewportSize({ width: 1920, height: 1080 });
});
@@ -102,8 +103,8 @@ test.describe("Change Properties - End Event", () => {
endEventLocator: nodes.getByType(NodeType.END_EVENT).first(),
});
- const flowElement = await jsonModel.getFlowElement({ elementIndex: 0 });
- expect(flowElement.__$$element).toBe("endEvent");
-
expect(flowElement.eventDefinition[0].__$$element).toBe("compensateEventDefinition");
+ const endEvent = (await jsonModel.getEndEvents())[0];
+ expect(endEvent.__$$element).toBe("endEvent");
+
expect(endEvent.eventDefinition?.[0].__$$element).toBe("compensateEventDefinition");
});
});
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeGatewayProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeGatewayProperties.spec.ts
index b8eea35aac6..19de40eed54 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeGatewayProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeGatewayProperties.spec.ts
@@ -23,6 +23,7 @@ import { NodeType, GatewayNodeType } from
"../__fixtures__/nodes";
test.beforeEach(async ({ editor, page }) => {
await page.setViewportSize({ width: 1920, height: 1080 });
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Change Properties - Exclusive Gateway", () => {
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeIntermediateEventProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeIntermediateEventProperties.spec.ts
index 06927ab1cf2..06ec649fc7e 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeIntermediateEventProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeIntermediateEventProperties.spec.ts
@@ -23,6 +23,7 @@ import { NodeType, EventNodeType } from
"../__fixtures__/nodes";
test.beforeEach(async ({ editor, page }) => {
await page.setViewportSize({ width: 1920, height: 1080 });
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Change Properties - Intermediate Catch Event", () => {
@@ -101,9 +102,7 @@ test.describe("Change Properties - Intermediate Catch
Event", () => {
test.describe("Change Properties - Intermediate Throw Event", () => {
test.beforeEach(async ({ palette, nodes }) => {
await palette.dragNewNode({ type: NodeType.INTERMEDIATE_THROW_EVENT,
targetPosition: { x: 100, y: 100 } });
-
await
expect(nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT)).toBeVisible();
-
await nodes.getByType(NodeType.INTERMEDIATE_THROW_EVENT).click();
});
@@ -157,8 +156,8 @@ test.describe("Change Properties - Intermediate Throw
Event", () => {
test("should configure Compensation definition", async ({
intermediateEventPropertiesPanel, jsonModel }) => {
await intermediateEventPropertiesPanel.setCompensationDefinition({});
- const flowElement = await jsonModel.getFlowElement({ elementIndex: 0 });
- expect(flowElement.__$$element).toBe("intermediateThrowEvent");
-
expect(flowElement.eventDefinition[0].__$$element).toBe("compensateEventDefinition");
+ const intermediateCatchEvent = (await
jsonModel.getIntermediateThrowEvents())[0];
+ expect(intermediateCatchEvent.__$$element).toBe("intermediateThrowEvent");
+
expect(intermediateCatchEvent.eventDefinition?.[0].__$$element).toBe("compensateEventDefinition");
});
});
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeLaneProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeLaneProperties.spec.ts
index f063d6edec7..ac5bac6862f 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeLaneProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeLaneProperties.spec.ts
@@ -22,6 +22,7 @@ import { NodeType } from "../__fixtures__/nodes";
test.beforeEach(async ({ editor, page }) => {
await editor.open();
+ await editor.setInitialProcessId();
await page.setViewportSize({ width: 1920, height: 1080 });
});
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSequenceFlowProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSequenceFlowProperties.spec.ts
index 862b0bf44a5..dae61b744d3 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSequenceFlowProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSequenceFlowProperties.spec.ts
@@ -22,6 +22,7 @@ import { NodeType } from "../__fixtures__/nodes";
test.beforeEach(async ({ editor }) => {
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Change Properties - Sequence Flow", () => {
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeStartEventProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeStartEventProperties.spec.ts
index a178cfb3504..6b1748903df 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeStartEventProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeStartEventProperties.spec.ts
@@ -22,6 +22,7 @@ import { DefaultNodeName, NodeType, SubProcessNodeType } from
"../__fixtures__/n
test.beforeEach(async ({ editor, page }) => {
await editor.open();
+ await editor.setInitialProcessId();
await page.setViewportSize({ width: 1920, height: 1080 });
});
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSubProcessProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSubProcessProperties.spec.ts
index b2166fc00ee..02d0d724b6b 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSubProcessProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeSubProcessProperties.spec.ts
@@ -23,6 +23,7 @@ import { DefaultNodeName, NodeType, SubProcessNodeType } from
"../__fixtures__/n
test.beforeEach(async ({ editor, page }) => {
await page.setViewportSize({ width: 1920, height: 1080 });
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Change Properties - Sub-Process", () => {
diff --git
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeTaskProperties.spec.ts
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeTaskProperties.spec.ts
index da00d57eecd..08349312947 100644
---
a/packages/bpmn-editor/tests-e2e/propertiesPanel/changeTaskProperties.spec.ts
+++
b/packages/bpmn-editor/tests-e2e/propertiesPanel/changeTaskProperties.spec.ts
@@ -23,6 +23,7 @@ import { DefaultNodeName, NodeType, TaskNodeType } from
"../__fixtures__/nodes";
test.beforeEach(async ({ editor, page }) => {
await page.setViewportSize({ width: 1920, height: 1080 });
await editor.open();
+ await editor.setInitialProcessId();
});
test.describe("Change Properties - Task Node", () => {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]