This is an automated email from the ASF dual-hosted git repository.

yamer 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 62fbc0b7296 kie-issues#1158: On the Boxed Expression Component, 
changing the ExpressionVariableCell text content will fail to commit if the 
focus is changed to another cell (#2611)
62fbc0b7296 is described below

commit 62fbc0b7296b2b115a178a004427579c2917749a
Author: Jozef Marko <[email protected]>
AuthorDate: Mon Oct 7 10:49:01 2024 +0200

    kie-issues#1158: On the Boxed Expression Component, changing the 
ExpressionVariableCell text content will fail to commit if the focus is changed 
to another cell (#2611)
---
 .../FunctionExpression/FunctionExpression.tsx      |   5 +-
 .../FunctionExpression/FunctionKindSelector.tsx    |   6 +-
 .../src/selection/BeeTableSelectionContext.tsx     |   4 +
 ...ision-table-commit-annotation-by-cell-click.png | Bin 0 -> 12402 bytes
 .../boxed-every-commit-variable-by-cell-click.png  | Bin 0 -> 13813 bytes
 ...ed-invocation-commit-function-by-cell-click.png | Bin 0 -> 13488 bytes
 .../boxed-some-commit-variable-by-cell-click.png   | Bin 0 -> 13593 bytes
 ...ision-table-commit-annotation-by-cell-click.png | Bin 0 -> 12402 bytes
 .../boxed-every-commit-variable-by-cell-click.png  | Bin 0 -> 13813 bytes
 ...ed-invocation-commit-function-by-cell-click.png | Bin 0 -> 13488 bytes
 .../boxed-some-commit-variable-by-cell-click.png   | Bin 0 -> 13593 bytes
 ...ision-table-commit-annotation-by-cell-click.png | Bin 0 -> 12137 bytes
 .../decisionTable/decision-table-routing.png       | Bin 22356 -> 24834 bytes
 .../boxed-every-commit-variable-by-cell-click.png  | Bin 0 -> 13092 bytes
 ...ed-invocation-commit-function-by-cell-click.png | Bin 0 -> 12867 bytes
 .../boxed-some-commit-variable-by-cell-click.png   | Bin 0 -> 13033 bytes
 .../tests-e2e/api/annotationCell.ts                |  57 ++++++++++++
 .../api/expressions/contextExpressionElement.ts    |   3 +-
 .../expressions/decisionTableExpressionElement.ts  |   3 +-
 .../api/expressions/functionExpressionElement.ts   |  43 +++++++++
 .../api/expressions/invocationExpressionElement.ts |   3 +-
 ...unctionExpressionElement.ts => functionType.ts} |  40 ++++++---
 .../nameAndDataTypeWithStandalonePopoverCell.ts    |  74 +++++++++++++++
 .../boxedExpressions/context/populate.spec.ts      |  79 ++++++++--------
 .../decisionTable/decisionTableExpression.spec.ts  |  18 ++++
 .../decisionTable/populate.spec.ts                 |  71 +++++++--------
 .../boxedExpressions/every/everyExpression.spec.ts |  14 +++
 .../filter/filterExpression.spec.ts                |  35 ++------
 .../boxedExpressions/filter/populate.spec.ts       |  11 ++-
 .../function/functionExpression.spec.ts            |  57 +++++-------
 .../boxedExpressions/function/parameters.spec.ts   |  84 ++++-------------
 .../boxedExpressions/function/populate.spec.ts     |  99 ++++++++++-----------
 .../invocation/invocationExpression.spec.ts        |  24 ++++-
 .../boxedExpressions/invocation/populate.spec.ts   |  67 ++++++--------
 .../boxedExpressions/list/populate.spec.ts         |  18 ++--
 .../boxedExpressions/literal/populate.spec.ts      |   8 +-
 .../boxedExpressions/relation/populate.spec.ts     |  46 ++++------
 .../boxedExpressions/some/someExpression.spec.ts   |  14 +++
 38 files changed, 511 insertions(+), 372 deletions(-)

diff --git 
a/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
 
b/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
index a7d5fa29bf2..0ed16bae669 100644
--- 
a/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
+++ 
b/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
@@ -156,7 +156,10 @@ export function 
useFunctionExpressionParametersColumnHeader(
 
   const expressionParametersContent = useMemo(
     () => (
-      <div className={`parameters-list ${_.isEmpty(formalParameters) ? 
"empty-parameters" : ""}`}>
+      <div
+        data-testid="kie-tools--bee--parameters-list"
+        className={`parameters-list ${_.isEmpty(formalParameters) ? 
"empty-parameters" : ""}`}
+      >
         <p className="pf-u-text-truncate">
           {_.isEmpty(formalParameters) ? (
             i18n.editParameters
diff --git 
a/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionKindSelector.tsx
 
b/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionKindSelector.tsx
index 9d60253a627..a6df997e684 100644
--- 
a/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionKindSelector.tsx
+++ 
b/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionKindSelector.tsx
@@ -74,7 +74,11 @@ export const FunctionKindSelector: 
React.FunctionComponent<FunctionKindSelectorP
   }, []);
 
   const displaySelectedFunctionKind = useMemo(
-    () => <div 
className="selected-function-kind">{_.first(selectedFunctionKind)}</div>,
+    () => (
+      <div className="selected-function-kind" 
data-testid="kie-tools--bee--selected-function-kind">
+        {_.first(selectedFunctionKind)}
+      </div>
+    ),
     [selectedFunctionKind]
   );
 
diff --git 
a/packages/boxed-expression-component/src/selection/BeeTableSelectionContext.tsx
 
b/packages/boxed-expression-component/src/selection/BeeTableSelectionContext.tsx
index 40c5c20afb6..56744e90f23 100644
--- 
a/packages/boxed-expression-component/src/selection/BeeTableSelectionContext.tsx
+++ 
b/packages/boxed-expression-component/src/selection/BeeTableSelectionContext.tsx
@@ -1019,6 +1019,10 @@ export function useBeeTableSelectableCell(
 
   const onMouseDown = useCallback(
     (e: React.MouseEvent) => {
+      if (document.activeElement instanceof HTMLInputElement) {
+        // See https://github.com/apache/incubator-kie-issues/issues/1158
+        (document.activeElement as any)?.blur?.();
+      }
       e.stopPropagation();
 
       if (
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
new file mode 100644
index 00000000000..55fbf6b8d2b
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
new file mode 100644
index 00000000000..1fb7974759a
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
new file mode 100644
index 00000000000..fc3d654f7d1
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
new file mode 100644
index 00000000000..63a012c7aea
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/Google-Chrome/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
new file mode 100644
index 00000000000..55fbf6b8d2b
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
new file mode 100644
index 00000000000..1fb7974759a
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
new file mode 100644
index 00000000000..fc3d654f7d1
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
new file mode 100644
index 00000000000..63a012c7aea
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/chromium/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
new file mode 100644
index 00000000000..0bb2f75e93b
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/boxed-decision-table-commit-annotation-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/decision-table-routing.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/decision-table-routing.png
index 4e1f42129da..df828b88626 100644
Binary files 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/decision-table-routing.png
 and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/decisionTable/decision-table-routing.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
new file mode 100644
index 00000000000..b088277953b
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/every/boxed-every-commit-variable-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
new file mode 100644
index 00000000000..9d73f50749a
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/invocation/boxed-invocation-commit-function-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
new file mode 100644
index 00000000000..e080db5a145
Binary files /dev/null and 
b/packages/boxed-expression-component/tests-e2e/__screenshots__/webkit/boxedExpressions/some/boxed-some-commit-variable-by-cell-click.png
 differ
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/annotationCell.ts 
b/packages/boxed-expression-component/tests-e2e/api/annotationCell.ts
new file mode 100644
index 00000000000..42b64c57370
--- /dev/null
+++ b/packages/boxed-expression-component/tests-e2e/api/annotationCell.ts
@@ -0,0 +1,57 @@
+/*
+ * 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 { Locator } from "@playwright/test";
+import { ContextMenu } from "./expressionContainer";
+
+export class AnnotationCell {
+  constructor(private locator: Locator) {}
+
+  public async open() {
+    await this.locator.nth(0).click();
+  }
+
+  public async getPopoverMenu() {
+    return 
this.locator.page().getByTestId("kie-tools--bee--expression-popover-menu");
+  }
+
+  public async setName(params: { name: string; close: boolean }) {
+    await this.locator.click();
+    await this.locator.getByRole("textbox").fill(params.name);
+    if (params.close) {
+      await this.locator.getByRole("textbox").press("Enter");
+    }
+  }
+
+  public async getName() {
+    return await 
this.locator.getByTestId("kie-tools--bee--expression-info-name").nth(0).innerText();
+  }
+  public async select() {
+    // Uses the 1,1 to avoid problems by clicking on the element corner
+    await this.content.click({ position: { x: 1, y: 1 } });
+  }
+
+  get content() {
+    return this.locator.nth(0);
+  }
+
+  get contextMenu() {
+    return new ContextMenu(this.locator);
+  }
+}
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/expressions/contextExpressionElement.ts
 
b/packages/boxed-expression-component/tests-e2e/api/expressions/contextExpressionElement.ts
index b6539eab88b..7e7b05f7e0a 100644
--- 
a/packages/boxed-expression-component/tests-e2e/api/expressions/contextExpressionElement.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/api/expressions/contextExpressionElement.ts
@@ -21,6 +21,7 @@ import { Locator } from "@playwright/test";
 import { Monaco } from "../../__fixtures__/monaco";
 import { ChildExpression } from "../expressionContainer";
 import { NameAndDataTypeCell } from "../nameAndDataTypeCell";
+import { NameAndDataTypeWithStandalonePopoverCell as VariableDescriptionCell } 
from "../nameAndDataTypeWithStandalonePopoverCell";
 
 export class ContextExpressionElement {
   constructor(
@@ -102,7 +103,7 @@ export class ContextExpressionEntry {
   }
 
   get variable() {
-    return new NameAndDataTypeCell(this.locator.getByRole("cell").nth(0));
+    return new VariableDescriptionCell(this.locator.getByRole("cell").nth(0));
   }
 
   public async getPopoverMenu() {
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/expressions/decisionTableExpressionElement.ts
 
b/packages/boxed-expression-component/tests-e2e/api/expressions/decisionTableExpressionElement.ts
index 2ce6a761d49..84f6438e1de 100644
--- 
a/packages/boxed-expression-component/tests-e2e/api/expressions/decisionTableExpressionElement.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/api/expressions/decisionTableExpressionElement.ts
@@ -21,6 +21,7 @@ import { Locator } from "@playwright/test";
 import { Monaco } from "../../__fixtures__/monaco";
 import { ExpressionCell } from "../expressionContainer";
 import { NameAndDataTypeCell } from "../nameAndDataTypeCell";
+import { AnnotationCell } from "../annotationCell";
 
 export class DecisionTableExpressionElement {
   constructor(
@@ -284,7 +285,7 @@ export class DecisionTableExpressionElement {
   }
 
   public annotationHeaderAt(index: number) {
-    return new 
NameAndDataTypeCell(this.locator.getByTestId("kie-tools--bee--table-header-annotation").nth(index));
+    return new 
AnnotationCell(this.locator.getByTestId("kie-tools--bee--table-header-annotation").nth(index));
   }
 
   get expressionHeaderCell() {
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
 
b/packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
index c5e6fe64004..9ee626c964d 100644
--- 
a/packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
@@ -20,6 +20,7 @@
 import { Locator } from "@playwright/test";
 import { Monaco } from "../../__fixtures__/monaco";
 import { ChildExpression } from "../expressionContainer";
+import { FunctionTypeCell } from "../functionType";
 
 export class FunctionExpressionElement {
   constructor(
@@ -32,7 +33,49 @@ export class FunctionExpressionElement {
     await this.locator.getByRole("cell", { name: "1" 
}).nth(0).locator("svg").click();
   }
 
+  public async addParameter(args: { name?: string; dataType?: string; 
closeAs?: "Escape" | "Click" }) {
+    // open parameters popover
+    await this.parameters.click();
+    await this.locator.page().getByRole("button", { name: "Add parameter" 
}).click();
+    if (args.name) {
+      await this.locator.page().getByPlaceholder("Parameter 
Name").last().fill(args.name);
+
+      // WORKAROUND_DUE_TO 
"https://github.com/apache/incubator-kie-issues/issues/540";,
+      await this.locator.page().keyboard.press("Tab");
+    }
+    if (args.dataType) {
+      await this.locator.page().getByLabel("<Undefined>").last().click();
+      await this.locator.page().getByRole("option", { name: args.dataType 
}).click();
+    }
+
+    // close parameters popover
+    if (args.closeAs === "Escape") {
+      await this.locator.page().keyboard.press("Escape");
+    } else {
+      await this.parameters.click();
+    }
+  }
+
+  public async deleteParameter(args: { nth: number }) {
+    // open parameters popover
+    await this.parameters.click();
+
+    // delete parameter
+    await this.locator.page().getByRole("button", { name: "", exact: true 
}).nth(args.nth).click();
+
+    // close parameters popover
+    await this.parameters.click();
+  }
+
   public entry(index: number) {
     return new 
ChildExpression(this.locator.getByTestId(`kie-tools--bee--expression-row-${index}`).nth(0),
 this.monaco);
   }
+
+  get functionType() {
+    return new 
FunctionTypeCell(this.locator.getByTestId("kie-tools--bee--selected-function-kind"));
+  }
+
+  get parameters() {
+    return this.locator.getByTestId("kie-tools--bee--parameters-list");
+  }
 }
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/expressions/invocationExpressionElement.ts
 
b/packages/boxed-expression-component/tests-e2e/api/expressions/invocationExpressionElement.ts
index 4e52faeca56..3ecf8c99679 100644
--- 
a/packages/boxed-expression-component/tests-e2e/api/expressions/invocationExpressionElement.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/api/expressions/invocationExpressionElement.ts
@@ -21,6 +21,7 @@ import { Locator } from "@playwright/test";
 import { Monaco } from "../../__fixtures__/monaco";
 import { ChildExpression } from "../expressionContainer";
 import { NameAndDataTypeCell } from "../nameAndDataTypeCell";
+import { NameAndDataTypeWithStandalonePopoverCell as ParameterDescriptionCell 
} from "../nameAndDataTypeWithStandalonePopoverCell";
 
 export class InvocationExpressionElement {
   constructor(
@@ -102,7 +103,7 @@ class InvocationParameter {
   }
 
   get descriptionCell() {
-    return new 
NameAndDataTypeCell(this.locator.getByTestId(`kie-tools--bee--expression-column-1`).nth(0));
+    return new 
ParameterDescriptionCell(this.locator.getByTestId(`kie-tools--bee--expression-column-1`).nth(0));
   }
 
   get elementCell() {
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
 b/packages/boxed-expression-component/tests-e2e/api/functionType.ts
similarity index 52%
copy from 
packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
copy to packages/boxed-expression-component/tests-e2e/api/functionType.ts
index c5e6fe64004..cc290fd16e7 100644
--- 
a/packages/boxed-expression-component/tests-e2e/api/expressions/functionExpressionElement.ts
+++ b/packages/boxed-expression-component/tests-e2e/api/functionType.ts
@@ -18,21 +18,33 @@
  */
 
 import { Locator } from "@playwright/test";
-import { Monaco } from "../../__fixtures__/monaco";
-import { ChildExpression } from "../expressionContainer";
-
-export class FunctionExpressionElement {
-  constructor(
-    private locator: Locator,
-    private monaco: Monaco
-  ) {}
-
-  public async addEntry() {
-    await this.locator.getByRole("cell", { name: "1" }).nth(0).hover();
-    await this.locator.getByRole("cell", { name: "1" 
}).nth(0).locator("svg").click();
+import { ContextMenu } from "./expressionContainer";
+
+export class FunctionTypeCell {
+  constructor(private locator: Locator) {}
+
+  public async open() {
+    await this.locator.nth(0).click();
+  }
+
+  public async getPopoverMenu() {
+    return 
this.locator.page().getByTestId("kie-tools--bee--expression-popover-menu");
+  }
+
+  public async setType(args: { type: "FEEL" | "Java" | "PMML" }) {
+    await 
this.locator.page().getByTestId("kie-tools--bee--expression-popover-menu").getByText(args.type).click();
+  }
+
+  public async select() {
+    // Uses the 1,1 to avoid problems by clicking on the element corner
+    await this.content.click({ position: { x: 1, y: 1 } });
+  }
+
+  get content() {
+    return this.locator.nth(0);
   }
 
-  public entry(index: number) {
-    return new 
ChildExpression(this.locator.getByTestId(`kie-tools--bee--expression-row-${index}`).nth(0),
 this.monaco);
+  get contextMenu() {
+    return new ContextMenu(this.locator);
   }
 }
diff --git 
a/packages/boxed-expression-component/tests-e2e/api/nameAndDataTypeWithStandalonePopoverCell.ts
 
b/packages/boxed-expression-component/tests-e2e/api/nameAndDataTypeWithStandalonePopoverCell.ts
new file mode 100644
index 00000000000..6ecbc2d12fe
--- /dev/null
+++ 
b/packages/boxed-expression-component/tests-e2e/api/nameAndDataTypeWithStandalonePopoverCell.ts
@@ -0,0 +1,74 @@
+/*
+ * 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 { Locator } from "@playwright/test";
+import { ContextMenu } from "./expressionContainer";
+
+export class NameAndDataTypeWithStandalonePopoverCell {
+  constructor(private locator: Locator) {}
+
+  public async open() {
+    await this.locator.nth(0).click();
+  }
+
+  public async getPopoverMenu() {
+    return 
this.locator.page().getByTestId("kie-tools--bee--expression-popover-menu");
+  }
+
+  public async setName({ name, commit = false }: { name: string; commit?: 
boolean }) {
+    await (await this.getPopoverMenu()).getByRole("textbox").fill(name);
+    if (commit) {
+      await (await this.getPopoverMenu()).getByRole("textbox").press("Enter");
+    }
+  }
+
+  public async setDataType({ dataType, commit = false }: { dataType: string; 
commit?: boolean }) {
+    const popoverMenu = await this.getPopoverMenu();
+    await 
popoverMenu.getByTestId("kie-tools--bee--edit-expression-data-type").click();
+    await popoverMenu.getByPlaceholder("Choose...").nth(0).fill(dataType);
+    await 
popoverMenu.getByRole("group").nth(0).getByRole("option").nth(0).click();
+    if (commit) {
+      await popoverMenu.page().keyboard.press("Enter");
+    }
+  }
+
+  public async getName() {
+    return await (await 
this.getPopoverMenu()).getByTestId("kie-tools--bee--expression-info-name").nth(0).innerText();
+  }
+
+  public async getDataType() {
+    return await (await this.getPopoverMenu())
+      .getByTestId("kie-tools--bee--expression-info-data-type")
+      .nth(0)
+      .innerText();
+  }
+
+  public async select() {
+    // Uses the 1,1 to avoid problems by clicking on the element corner
+    await this.content.click({ position: { x: 1, y: 1 } });
+  }
+
+  get content() {
+    return this.locator.nth(0);
+  }
+
+  get contextMenu() {
+    return new ContextMenu(this.locator);
+  }
+}
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/context/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/context/populate.spec.ts
index 57c1359304d..42c7ce77b89 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/context/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/context/populate.spec.ts
@@ -21,51 +21,54 @@ import { expect, test } from "../../__fixtures__/base";
 import { TestAnnotations } from "@kie-tools/playwright-base/annotations";
 
 test.describe("Populate Boxed Context", () => {
-  test("should correctly create pre-bureau risk category boxed context", async 
({
-    page,
-    stories,
-    bee,
-    resizing,
-    monaco,
-  }) => {
+  test("should correctly create pre-bureau risk category boxed context", async 
({ page, stories, bee, resizing }) => {
     await stories.openBoxedContext();
 
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Pre-bureau risk 
category calculation");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asContext().expressionHeaderCell.open();
+    await bee.expression
+      .asContext()
+      .expressionHeaderCell.setName({ name: "Pre-bureau risk category 
calculation", close: false });
+    await bee.expression.asContext().expressionHeaderCell.setDataType({ 
dataType: "number", close: true });
 
     await 
bee.expression.asContext().entry(0).selectExpressionMenu.selectLiteral();
-    await page.getByRole("cell", { name: "ContextEntry-1 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Existing Customer");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
-    await monaco.fill({ monacoParentLocator: page, content: "Applicant 
data.ExistingCustomer" });
+    await bee.expression.asContext().entry(0).variable.open();
+    await bee.expression.asContext().entry(0).variable.setName({ name: 
"Existing Customer" });
+    await bee.expression.asContext().entry(0).variable.setDataType({ dataType: 
"boolean", commit: true });
+    await 
bee.expression.asContext().entry(0).expression.asLiteral().fill("Applicant 
data.ExistingCustomer");
 
     await 
bee.expression.asContext().result.selectExpressionMenu.selectDecisionTable();
-    await page.getByRole("columnheader", { name: "input-1 (<Undefined>)" 
}).hover({ position: { x: 0, y: 0 } });
-    await page.getByRole("columnheader", { name: "input-1 (<Undefined>)" 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true }).hover();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addInputAtEnd();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
+    await 
bee.expression.asContext().result.expression.asDecisionTable().addRowAtTop();
 
-    await page.getByRole("columnheader", { name: "input-2 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Existing customer");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
-    await page.getByRole("columnheader", { name: "input-1 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Application risk 
score");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await 
bee.expression.asContext().result.expression.asDecisionTable().inputHeaderAt(0).open();
+    await bee.expression
+      .asContext()
+      .result.expression.asDecisionTable()
+      .inputHeaderAt(0)
+      .setName({ name: "Existing customer", close: false });
+    await bee.expression
+      .asContext()
+      .result.expression.asDecisionTable()
+      .inputHeaderAt(0)
+      .setDataType({ dataType: "boolean", close: true });
+
+    await 
bee.expression.asContext().result.expression.asDecisionTable().inputHeaderAt(1).open();
+    await bee.expression
+      .asContext()
+      .result.expression.asDecisionTable()
+      .inputHeaderAt(1)
+      .setName({ name: "Application risk score", close: false });
+    await bee.expression
+      .asContext()
+      .result.expression.asDecisionTable()
+      .inputHeaderAt(1)
+      .setDataType({ dataType: "number", close: true });
 
     await bee.expression.asDecisionTable().fill({
       startAtCell: 1,
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/decisionTableExpression.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/decisionTableExpression.spec.ts
index 5fde3fce110..8d2b4bded27 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/decisionTableExpression.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/decisionTableExpression.spec.ts
@@ -17,6 +17,7 @@
  * under the License.
  */
 
+import { TestAnnotations } from "@kie-tools/playwright-base/annotations";
 import { expect, test } from "../../__fixtures__/base";
 
 test.describe("Create Decision table", () => {
@@ -112,4 +113,21 @@ test.describe("Create Decision table", () => {
       }
     });
   });
+
+  test("should commit annotation by cell click", async ({ bee }) => {
+    test.info().annotations.push({
+      type: TestAnnotations.REGRESSION,
+      description: 
"https://github.com/apache/incubator-kie-issues/issues/1158";,
+    });
+
+    await bee.expression
+      .asDecisionTable()
+      .annotationHeaderAt(0)
+      .setName({ name: "Changed Annotation Name", close: false });
+
+    // commit a change by a click to another cell
+    await bee.expression.asDecisionTable().cellAt({ row: 1, column: 1 
}).content.click();
+
+    await 
expect(bee.getContainer()).toHaveScreenshot("boxed-decision-table-commit-annotation-by-cell-click.png");
+  });
 });
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/populate.spec.ts
index b437c9a8816..966d6bf8c35 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/decisionTable/populate.spec.ts
@@ -24,47 +24,39 @@ test.describe("Populate Decision table", () => {
   test("should correctly create a routing decision table", async ({ stories, 
page, bee, resizing }) => {
     await stories.openDecisionTable();
 
-    await page.getByRole("columnheader", { name: "input-1 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Post-bureau risk 
category");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asDecisionTable().inputHeaderAt(0).open();
+    await bee.expression
+      .asDecisionTable()
+      .inputHeaderAt(0)
+      .setName({ name: "Post-bureau risk category", close: false });
+    await bee.expression.asDecisionTable().inputHeaderAt(0).setDataType({ 
dataType: "string", close: true });
     await resizing.reset(page.getByRole("columnheader", { name: "Post-bureau 
risk category (string)" }));
-    await page
-      .getByRole("columnheader", { name: "Post-bureau risk category (string)" 
})
-      .hover({ position: { x: 0, y: 0 } });
-    await page.getByRole("row", { name: "Post-bureau risk category (string)" 
}).locator("svg").click();
+    await bee.expression.asDecisionTable().addInputAtStart();
 
-    await page.getByRole("columnheader", { name: "input-2 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Post-bureau 
affordability");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asDecisionTable().inputHeaderAt(0).open();
+    await bee.expression
+      .asDecisionTable()
+      .inputHeaderAt(0)
+      .setName({ name: "Post-bureau affordability", close: false });
+    await bee.expression.asDecisionTable().inputHeaderAt(0).setDataType({ 
dataType: "boolean", close: true });
     await resizing.reset(page.getByRole("columnheader", { name: "Post-bureau 
affordability (boolean)" }));
-    await page
-      .getByRole("columnheader", { name: "Post-bureau affordability (boolean)" 
})
-      .hover({ position: { x: 0, y: 0 } });
-    await page.getByRole("row", { name: "Post-bureau affordability (boolean)" 
}).locator("svg").click();
+    await bee.expression.asDecisionTable().addInputAtStart();
 
-    await page.getByRole("columnheader", { name: "input-3 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Credit Score");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
-    await page.getByRole("columnheader", { name: "Credit Score (number)" 
}).hover({ position: { x: 0, y: 0 } });
-    await page.getByRole("row", { name: "Credit Score (number)" 
}).locator("svg").click();
+    await bee.expression.asDecisionTable().inputHeaderAt(0).open();
+    await bee.expression.asDecisionTable().inputHeaderAt(0).setName({ name: 
"Credit Score", close: false });
+    await bee.expression.asDecisionTable().inputHeaderAt(0).setDataType({ 
dataType: "number", close: true });
+    await resizing.reset(page.getByRole("columnheader", { name: "Credit Score 
(number)" }));
+    await bee.expression.asDecisionTable().addInputAtStart();
 
-    await page.getByRole("columnheader", { name: "input-4 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Bankrupt");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asDecisionTable().inputHeaderAt(0).open();
+    await bee.expression.asDecisionTable().inputHeaderAt(0).setName({ name: 
"Bankrupt", close: false });
+    await bee.expression.asDecisionTable().inputHeaderAt(0).setDataType({ 
dataType: "boolean", close: true });
+    await resizing.reset(page.getByRole("columnheader", { name: "Bankrupt 
(boolean)" }));
 
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Routing");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asDecisionTable().outputHeaderAt(0).open();
+    await bee.expression.asDecisionTable().outputHeaderAt(0).setName({ name: 
"Routing", close: false });
+    await bee.expression.asDecisionTable().outputHeaderAt(0).setDataType({ 
dataType: "string", close: true });
+    await resizing.reset(page.getByRole("columnheader", { name: "Routing 
(string)" }));
 
     test.info().annotations.push({
       type: TestAnnotations.WORKAROUND_DUE_TO,
@@ -81,11 +73,10 @@ test.describe("Populate Decision table", () => {
     await page.getByRole("columnheader", { name: "Bankrupt (boolean)" 
}).hover({ position: { x: 0, y: 0 } });
     await page.getByRole("columnheader", { name: "Routing (string)" }).hover({ 
position: { x: 0, y: 0 } });
 
-    await page.getByRole("cell", { name: "1" }).hover();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
+    await bee.expression.asDecisionTable().addRowAtBottomOfIndex(1);
+    await bee.expression.asDecisionTable().addRowAtBottomOfIndex(2);
+    await bee.expression.asDecisionTable().addRowAtBottomOfIndex(3);
+    await bee.expression.asDecisionTable().addRowAtBottomOfIndex(4);
 
     await bee.expression.asDecisionTable().fill({
       startAtCell: 0,
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/every/everyExpression.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/every/everyExpression.spec.ts
index bf02d48d7cb..7ee73a8b847 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/every/everyExpression.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/every/everyExpression.spec.ts
@@ -45,4 +45,18 @@ test.describe("Create Boxed Every", () => {
     expect((await 
jsonModel.getEveryExpression()).in["@_id"]).not.toBeUndefined();
     expect((await 
jsonModel.getEveryExpression()).satisfies["@_id"]).not.toBeUndefined();
   });
+
+  test("should commit variable by cell click", async ({ bee }) => {
+    test.info().annotations.push({
+      type: TestAnnotations.REGRESSION,
+      description: 
"https://github.com/apache/incubator-kie-issues/issues/1158";,
+    });
+
+    await bee.expression.asEvery().variable.fill("Changed Variable Name");
+
+    // commit a change by a click to another cell
+    await bee.expression.asEvery().in.elementCell.click();
+
+    await 
expect(bee.getContainer()).toHaveScreenshot("boxed-every-commit-variable-by-cell-click.png");
+  });
 });
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/filterExpression.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/filterExpression.spec.ts
index 0490d1ef39a..2c0ce70f4d4 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/filterExpression.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/filterExpression.spec.ts
@@ -21,23 +21,20 @@ import { expect, test } from "../../__fixtures__/base";
 import { TestAnnotations } from "@kie-tools/playwright-base/annotations";
 
 test.describe("Create Boxed Filter", () => {
-  test("should rename a filter", async ({ page, stories }) => {
+  test("should rename a filter", async ({ bee, page, stories }) => {
     await stories.openBoxedFilter("base");
 
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Filter Expression 
Name");
-    await page.keyboard.press("Enter");
+    await bee.expression.asFilter().expressionHeaderCell.open();
+    await bee.expression.asFilter().expressionHeaderCell.setName({ name: 
"Filter Expression Name", close: true });
 
     await expect(page.getByRole("columnheader", { name: "Filter Expression 
Name (<Undefined>)" })).toBeVisible();
   });
 
-  test("should change a filter data type", async ({ page, stories }) => {
+  test("should change a filter data type", async ({ bee, page, stories }) => {
     await stories.openBoxedFilter("base");
 
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asFilter().expressionHeaderCell.open();
+    await bee.expression.asFilter().expressionHeaderCell.setDataType({ 
dataType: "boolean", close: true });
 
     await expect(page.getByRole("columnheader", { name: "Expression Name 
(boolean)" })).toBeVisible();
   });
@@ -117,8 +114,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Context Expression", async ({
       bee,
-      page,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -133,8 +128,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Decision Table", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -149,8 +142,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - List", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -165,8 +156,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Invocation", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -181,8 +170,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Function", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -197,8 +184,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Conditional", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -213,8 +198,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - For", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -229,8 +212,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Every", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -245,8 +226,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Some", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
@@ -261,8 +240,6 @@ test.describe("Create Boxed Filter", () => {
 
     test("should correctly fill the 'in' cell when the 'match' cell is larger 
than the 'in' cell - Filter", async ({
       bee,
-      jsonModel,
-      stories,
     }) => {
       test.info().annotations.push({
         type: TestAnnotations.REGRESSION,
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/populate.spec.ts
index b957939644f..32a5cc7b79c 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/filter/populate.spec.ts
@@ -20,13 +20,12 @@
 import { test, expect } from "../../__fixtures__/base";
 
 test.describe("Populate Boxed Filter", () => {
-  test("should correctly create a Rebooked Flights filter", async ({ stories, 
page, bee }) => {
+  test("should correctly create a Rebooked Flights filter", async ({ stories, 
bee }) => {
     await stories.openBoxedFilter("base");
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Rebooked Flights");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "Any" }).click();
-    await page.keyboard.press("Enter");
+
+    await bee.expression.asFilter().expressionHeaderCell.open();
+    await bee.expression.asFilter().expressionHeaderCell.setName({ name: 
"Rebooked Flights", close: false });
+    await bee.expression.asFilter().expressionHeaderCell.setDataType({ 
dataType: "Any", close: true });
 
     // Prepare empty Filter 'in' and 'match' cells
     await bee.expression.asFilter().in.selectExpressionMenu.selectLiteral();
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/functionExpression.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/functionExpression.spec.ts
index ae799d2ee72..14ec119105e 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/functionExpression.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/functionExpression.spec.ts
@@ -26,8 +26,8 @@ test.describe("Create Boxed Function", () => {
 
   test("should render FEEL function expression correctly", async ({ bee, page 
}) => {
     await expect(page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" })).toBeAttached();
-    await expect(page.getByRole("columnheader", { name: "F", exact: true 
})).toBeAttached();
-    await expect(page.getByRole("columnheader", { name: "Edit parameters" 
})).toBeAttached();
+    await expect(await 
bee.expression.asFunction().functionType.content.textContent()).toEqual("F");
+    await expect(await 
bee.expression.asFunction().parameters.textContent()).toEqual("Edit 
parameters");
     await expect(page.getByText("Select expression")).toHaveCount(1);
     await expect(page.getByRole("columnheader")).toHaveCount(3);
     await expect(page.getByRole("cell")).toHaveCount(2);
@@ -35,13 +35,13 @@ test.describe("Create Boxed Function", () => {
   });
 
   test("should render Java function expression correctly", async ({ bee, page 
}) => {
-    await page.getByRole("columnheader", { name: "F", exact: true }).click();
-    await page.getByRole("menuitem", { name: "Java" }).click();
+    await bee.expression.asFunction().functionType.open();
+    await bee.expression.asFunction().functionType.setType({ type: "Java" });
     await 
expect(bee.getContainer()).toHaveScreenshot("boxed-java-function.png");
 
-    await expect(page.getByRole("columnheader", { name: "J", exact: true 
})).toBeAttached();
+    await expect(await 
bee.expression.asFunction().functionType.content.textContent()).toEqual("J");
     // the "onmouseenter" events triggers if the mouse was outside of the 
element before it appears on screen.
-    await page.getByRole("columnheader", { name: "J", exact: true }).hover();
+    await bee.expression.asFunction().functionType.content.hover();
     await page.getByText("Class name(string)").hover();
     await expect(page.getByRole("cell", { name: "Class name (string)" 
}).locator("svg")).toBeAttached();
     await page.getByText("Method signature(string)").hover();
@@ -53,8 +53,8 @@ test.describe("Create Boxed Function", () => {
   });
 
   test("should render PMML function expression correctly", async ({ bee, page 
}) => {
-    await page.getByRole("columnheader", { name: "F", exact: true }).click();
-    await page.getByRole("menuitem", { name: "PMML" }).click();
+    await bee.expression.asFunction().functionType.open();
+    await bee.expression.asFunction().functionType.setType({ type: "PMML" });
     await 
expect(bee.getContainer()).toHaveScreenshot("boxed-pmml-function.png");
 
     await expect(page.getByRole("columnheader", { name: "P", exact: true 
})).toBeAttached();
@@ -88,8 +88,8 @@ test.describe("Create Boxed Function", () => {
   });
 
   test.describe("Change function type", () => {
-    test.beforeEach(async ({ page }) => {
-      await page.getByRole("columnheader", { name: "F", exact: true }).click();
+    test.beforeEach(async ({ bee }) => {
+      await bee.expression.asFunction().functionType.open();
     });
 
     const functioTypes = [
@@ -99,37 +99,24 @@ test.describe("Create Boxed Function", () => {
     ];
 
     for (const [functionName, abbreviation] of functioTypes) {
-      test(`should change function type to ${functionName}`, async ({ page }) 
=> {
+      test(`should change function type to ${functionName}`, async ({ bee, 
page }) => {
         await page.getByRole("menuitem", { name: functionName }).hover();
         await expect(page.getByLabel(`${functionName}-help`)).toBeAttached();
-        await page.getByRole("menuitem", { name: functionName }).click();
+        await bee.expression.asFunction().functionType.setType({ type: 
functionName as "FEEL" | "Java" | "PMML" });
         await expect(page.getByRole("columnheader", { name: abbreviation, 
exact: true })).toBeAttached();
       });
     }
   });
 
-  test("should edit function parameters", async ({ page }) => {
-    await page.getByRole("columnheader", { name: "Edit parameters" }).click();
-    await expect(page.getByRole("button", { name: "Add parameter" 
})).toBeAttached();
-
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await expect(page.getByRole("button", { name: "Add parameter" 
})).toBeAttached();
-    await expect(page.getByRole("columnheader", { name: "(p-1: (<Undefined>))" 
})).toBeAttached();
-
-    await page.getByRole("textbox").click();
-    await page.getByRole("textbox").press("Control+a");
-    await page.getByRole("textbox").fill("test");
-    await page.getByRole("textbox").press("Tab");
-
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await expect(page.getByRole("columnheader", { name: "(test: (boolean))" 
})).toBeAttached();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await expect(page.getByRole("columnheader", { name: "(test: (boolean), 
p-2: (<Undefined>))" })).toBeAttached();
-    await page.getByLabel("", { exact: true 
}).getByRole("button").nth(2).click();
-    await expect(page.getByRole("columnheader", { name: "(p-2: (<Undefined>))" 
})).toBeAttached();
-
-    await page.getByLabel("", { exact: true 
}).getByRole("button").nth(2).click();
-    await expect(page.getByRole("columnheader", { name: "Edit parameters" 
})).toBeAttached();
+  test("should edit function parameters", async ({ bee }) => {
+    await bee.expression.asFunction().addParameter({ name: "test", dataType: 
"boolean" });
+    await bee.expression.asFunction().addParameter({});
+
+    expect(await 
bee.expression.asFunction().parameters.textContent()).toEqual("(test: 
(boolean), p-2: (<Undefined>))");
+
+    await bee.expression.asFunction().deleteParameter({ nth: 1 });
+    await bee.expression.asFunction().deleteParameter({ nth: 0 });
+
+    expect(await 
bee.expression.asFunction().parameters.textContent()).toEqual("Edit 
parameters");
   });
 });
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/parameters.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/parameters.spec.ts
index a28077082cc..ab1689f476e 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/parameters.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/parameters.spec.ts
@@ -18,87 +18,37 @@
  */
 
 import { test, expect } from "../../__fixtures__/base";
-import { TestAnnotations } from "@kie-tools/playwright-base/annotations";
 
 test.describe("Boxed Function parameters", () => {
-  test("should add a function parameter and change its name and type", async 
({ stories, page }) => {
+  test("should add a function parameter and change its name and type", async 
({ bee, stories }) => {
     await stories.openBoxedFunction();
 
-    await page.getByRole("columnheader", { name: "Edit parameters" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter Name").fill("name");
+    await bee.expression.asFunction().addParameter({ name: "name", dataType: 
"string", closeAs: "Escape" });
 
-    test.info().annotations.push({
-      type: TestAnnotations.WORKAROUND_DUE_TO,
-      description: "https://github.com/apache/incubator-kie-issues/issues/540";,
-    });
-    await page.keyboard.press("Tab");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.keyboard.press("Escape");
-
-    await expect(page.getByRole("columnheader", { name: "(name: (string))" 
})).toBeAttached();
+    expect(await 
bee.expression.asFunction().parameters.textContent()).toEqual("(name: 
(string))");
   });
 
-  test("should multiple function parameter and change its name and type", 
async ({ stories, page }) => {
+  test("should multiple function parameter and change its name and type", 
async ({ bee, stories }) => {
     await stories.openBoxedFunction();
 
-    await page.getByRole("columnheader", { name: "Edit parameters" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    test.info().annotations.push({
-      type: TestAnnotations.WORKAROUND_DUE_TO,
-      description: "https://github.com/apache/incubator-kie-issues/issues/540";,
-    });
-    // WORKAROUD: TAB EVENT
-    await page.getByPlaceholder("Parameter Name").nth(0).fill("name");
-    await page.keyboard.press("Tab");
-    await page.getByPlaceholder("Parameter Name").nth(1).fill("age");
-    await page.keyboard.press("Tab");
-    await page.getByPlaceholder("Parameter Name").nth(2).fill("maried");
-    await page.keyboard.press("Tab");
-
-    await page.getByRole("button", { name: "options menu" }).nth(0).click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.getByRole("button", { name: "options menu" }).nth(1).click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.getByRole("button", { name: "options menu" }).nth(2).click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Escape");
+    await bee.expression.asFunction().addParameter({ name: "name", dataType: 
"string" });
+    await bee.expression.asFunction().addParameter({ name: "age", dataType: 
"number" });
+    await bee.expression.asFunction().addParameter({ name: "maried", dataType: 
"boolean" });
 
-    await expect(
-      page.getByRole("columnheader", { name: "(name: (string), age: (number), 
maried: (boolean))" })
-    ).toBeAttached();
+    expect(await bee.expression.asFunction().parameters.textContent()).toEqual(
+      "(name: (string), age: (number), maried: (boolean))"
+    );
   });
 
-  test("should add function parameters and delete them", async ({ stories, 
page }) => {
+  test("should add function parameters and delete them", async ({ bee, stories 
}) => {
     await stories.openBoxedFunction();
 
-    await page.getByRole("columnheader", { name: "Edit parameters" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter Name").nth(0).fill("name");
-    test.info().annotations.push({
-      type: TestAnnotations.WORKAROUND_DUE_TO,
-      description: "https://github.com/apache/incubator-kie-issues/issues/540";,
-    });
-    // WORKAROUD: TAB EVENT
-    await page.keyboard.press("Tab");
-    await page.getByPlaceholder("Parameter Name").nth(1).fill("age");
-    await page.keyboard.press("Tab");
-    await page.getByPlaceholder("Parameter Name").nth(2).fill("maried");
-    await page.keyboard.press("Tab");
-    await page.getByRole("button", { name: "options menu" }).nth(0).click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.getByRole("button", { name: "options menu" }).nth(1).click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.getByRole("button", { name: "options menu" }).nth(2).click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.getByRole("button", { name: "", exact: true }).nth(0).click();
-    await page.keyboard.press("Escape");
+    await bee.expression.asFunction().addParameter({ name: "name", dataType: 
"string" });
+    await bee.expression.asFunction().addParameter({ name: "age", dataType: 
"number" });
+    await bee.expression.asFunction().addParameter({ name: "maried", dataType: 
"boolean" });
+
+    await bee.expression.asFunction().deleteParameter({ nth: 0 });
 
-    await expect(page.getByRole("columnheader", { name: "(age: (number), 
maried: (boolean))" })).toBeAttached();
+    expect(await 
bee.expression.asFunction().parameters.textContent()).toEqual("(age: (number), 
maried: (boolean))");
   });
 });
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/populate.spec.ts
index 07649f2f730..ed995046508 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/function/populate.spec.ts
@@ -30,58 +30,41 @@ test.describe("Populate Boxed Function", () => {
     await page.getByRole("option", { name: "boolean" }).click();
     await page.keyboard.press("Enter");
 
-    await page.getByText("Edit parameters").click();
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter name").nth(0).click();
-    await page.getByPlaceholder("Parameter name").nth(0).fill("Monthly 
Income");
-    await page.keyboard.press("Tab");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter name").nth(1).click();
-    await page.getByPlaceholder("Parameter name").nth(1).fill("Monthly 
Repayments");
-    await page.keyboard.press("Tab");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter name").nth(2).click();
-    await page.getByPlaceholder("Parameter name").nth(2).fill("Monthly 
Expenses");
-    await page.keyboard.press("Tab");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter name").nth(3).click();
-    await page.getByPlaceholder("Parameter name").nth(3).fill("Risk Category");
-    await page.keyboard.press("Tab");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "string" }).click();
-
-    await page.getByRole("button", { name: "Add parameter" }).click();
-    await page.getByPlaceholder("Parameter name").nth(4).click();
-    await page.getByPlaceholder("Parameter name").nth(4).fill("Required 
Monthly Income");
-    await page.keyboard.press("Tab");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Escape");
+    await bee.expression.asFunction().addParameter({ name: "Monthly Income", 
dataType: "number" });
+    await bee.expression.asFunction().addParameter({ name: "Monthly 
Repayments", dataType: "number" });
+    await bee.expression.asFunction().addParameter({ name: "Monthly Expenses", 
dataType: "number" });
+    await bee.expression.asFunction().addParameter({ name: "Risk Category", 
dataType: "string" });
+    await bee.expression.asFunction().addParameter({ name: "Required Monthly 
Income", dataType: "number" });
 
     await 
bee.expression.asFunction().entry(0).selectExpressionMenu.selectContext();
-    await page.getByRole("cell", { name: "ContextEntry-1 (<Undefined>)", 
exact: true }).hover();
-    await page.getByRole("cell", { name: "ContextEntry-1 (<Undefined>)", 
exact: true }).locator("svg").click();
-
-    await page.getByRole("cell", { name: "ContextEntry-1 (<Undefined>)", 
exact: true }).click();
-    await page.getByPlaceholder("Expression Name").fill("Disposable income");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await 
bee.expression.asFunction().entry(0).expression.asContext().addEntryBelowOfEntryAtIndex(0);
+    await 
bee.expression.asFunction().entry(0).expression.asContext().entry(0).variable.open();
+    await bee.expression
+      .asFunction()
+      .entry(0)
+      .expression.asContext()
+      .entry(0)
+      .variable.setName({ name: "Disposable income" });
+    await bee.expression
+      .asFunction()
+      .entry(0)
+      .expression.asContext()
+      .entry(0)
+      .variable.setDataType({ dataType: "number", commit: true });
 
-    await page.getByRole("cell", { name: "ContextEntry-2 (<Undefined>)", 
exact: true }).click();
-    await page.getByPlaceholder("Expression Name").fill("Credit contingency 
factor");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await 
bee.expression.asFunction().entry(0).expression.asContext().entry(1).variable.open();
+    await bee.expression
+      .asFunction()
+      .entry(0)
+      .expression.asContext()
+      .entry(1)
+      .variable.setName({ name: "Credit contingency factor" });
+    await bee.expression
+      .asFunction()
+      .entry(0)
+      .expression.asContext()
+      .entry(1)
+      .variable.setDataType({ dataType: "number", commit: true });
 
     await resizing.reset(page.getByRole("cell", { name: "Credit contingency 
factor (number)", exact: true }));
 
@@ -99,9 +82,21 @@ test.describe("Populate Boxed Function", () => {
       content: "Monthly Income - (Monthly Repayments + Monthly Expenses)",
     });
 
-    await page.getByRole("cell", { name: "1", exact: true }).nth(1).hover();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "1", exact: true 
}).locator("svg").click();
+    await bee.expression
+      .asFunction()
+      .entry(0)
+      .expression.asContext()
+      .entry(1)
+      .expression.asDecisionTable()
+      .addRowAtBottomOfIndex(1);
+
+    await bee.expression
+      .asFunction()
+      .entry(0)
+      .expression.asContext()
+      .entry(1)
+      .expression.asDecisionTable()
+      .addRowAtBottomOfIndex(1);
 
     await page.getByRole("columnheader", { name: "input-1 (<Undefined>)" 
}).click();
     await page.getByPlaceholder("Expression Name").fill("Risk category");
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/invocationExpression.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/invocationExpression.spec.ts
index 4f4f29acc14..9e257dcb175 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/invocationExpression.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/invocationExpression.spec.ts
@@ -17,17 +17,37 @@
  * under the License.
  */
 
+import { TestAnnotations } from "@kie-tools/playwright-base/annotations";
 import { test, expect } from "../../__fixtures__/base";
 
 test.describe("Create Boxed Invocation", () => {
   test("should render expression correctly", async ({ bee, stories, page }) => 
{
     await stories.openBoxedInvocation();
-    await expect(page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" })).toBeAttached();
-    await expect(page.getByRole("columnheader", { name: "FUNCTION" 
})).toBeAttached();
+    expect(await 
bee.expression.asInvocation().expressionHeaderCell.getName()).toEqual("Expression
 Name");
+    expect(await 
bee.expression.asInvocation().expressionHeaderCell.getDataType()).toEqual("(<Undefined>)");
+    await 
expect(bee.expression.asInvocation().invokedFunctionNameCell).toBeAttached();
     await expect(page.getByRole("cell", { name: "p-1" })).toBeAttached();
     await expect(page.getByText("Select expression")).toHaveCount(1);
     await expect(page.getByRole("columnheader")).toHaveCount(2);
     await expect(page.getByRole("cell")).toHaveCount(2);
     await expect(bee.getContainer()).toHaveScreenshot("boxed-invocation.png");
   });
+
+  test("should commit invoked function by cell click", async ({ bee, stories, 
page }) => {
+    test.info().annotations.push({
+      type: TestAnnotations.REGRESSION,
+      description: 
"https://github.com/apache/incubator-kie-issues/issues/1158";,
+    });
+
+    await stories.openBoxedInvocation();
+
+    // click to start editing and type new value
+    await bee.expression.asInvocation().invokedFunctionNameCell.click();
+    await page.keyboard.type("Changed Invoked Function Name");
+
+    // commit a change by a click to another cell
+    await bee.expression.asInvocation().parameter(0).descriptionCell.select();
+
+    await 
expect(bee.getContainer()).toHaveScreenshot("boxed-invocation-commit-function-by-cell-click.png");
+  });
 });
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/populate.spec.ts
index 8c93bbab6a8..e46496e3018 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/invocation/populate.spec.ts
@@ -29,56 +29,43 @@ test.describe("Populate Boxed Invocation", () => {
   }) => {
     await stories.openBoxedInvocation();
 
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Installment 
calculation");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asInvocation().expressionHeaderCell.open();
+    await bee.expression.asInvocation().expressionHeaderCell.setName({ name: 
"Installment calculation", close: false });
+    await bee.expression.asInvocation().expressionHeaderCell.setDataType({ 
dataType: "number", close: true });
 
-    await page.getByRole("cell", { name: "p-1 (<Undefined>)" }).hover();
-    await page.getByRole("cell", { name: "p-1 (<Undefined>)" 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "p-1 (<Undefined>)" 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "p-1 (<Undefined>)" 
}).locator("svg").click();
-    await page.getByRole("cell", { name: "p-1 (<Undefined>)" 
}).locator("svg").click();
+    await bee.expression.asInvocation().addParameterBelowOfEntryAtIndex(0);
+    await bee.expression.asInvocation().addParameterBelowOfEntryAtIndex(0);
+    await bee.expression.asInvocation().addParameterBelowOfEntryAtIndex(0);
+    await bee.expression.asInvocation().addParameterBelowOfEntryAtIndex(0);
 
     await 
bee.expression.asInvocation().parameter(0).selectExpressionMenu.selectLiteral();
-    await page.getByRole("cell", { name: "p-1 (<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Monthly income");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asInvocation().parameter(0).descriptionCell.open();
+    await bee.expression.asInvocation().parameter(0).descriptionCell.setName({ 
name: "Monthly income" });
+    await 
bee.expression.asInvocation().parameter(0).descriptionCell.setDataType({ 
dataType: "number", commit: true });
 
-    await 
bee.expression.asInvocation().parameter(4).selectExpressionMenu.selectLiteral();
-    await page.getByRole("cell", { name: "p-5 (<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Monthly repayments");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
-
-    await 
bee.expression.asInvocation().parameter(3).selectExpressionMenu.selectLiteral();
-    await page.getByRole("cell", { name: "p-4 (<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Monthly expenses");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await 
bee.expression.asInvocation().parameter(1).selectExpressionMenu.selectLiteral();
+    await bee.expression.asInvocation().parameter(1).descriptionCell.open();
+    await bee.expression.asInvocation().parameter(1).descriptionCell.setName({ 
name: "Monthly repayments" });
+    await 
bee.expression.asInvocation().parameter(1).descriptionCell.setDataType({ 
dataType: "number", commit: true });
 
     await 
bee.expression.asInvocation().parameter(2).selectExpressionMenu.selectLiteral();
-    await page.getByRole("cell", { name: "p-3 (<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Risk category");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asInvocation().parameter(2).descriptionCell.open();
+    await bee.expression.asInvocation().parameter(2).descriptionCell.setName({ 
name: "Monthly expenses" });
+    await 
bee.expression.asInvocation().parameter(2).descriptionCell.setDataType({ 
dataType: "number", commit: true });
 
-    await 
bee.expression.asInvocation().parameter(1).selectExpressionMenu.selectLiteral();
-    await page.getByRole("cell", { name: "p-2 (<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Required monthly 
installment");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await 
bee.expression.asInvocation().parameter(3).selectExpressionMenu.selectLiteral();
+    await bee.expression.asInvocation().parameter(3).descriptionCell.open();
+    await bee.expression.asInvocation().parameter(3).descriptionCell.setName({ 
name: "Risk category" });
+    await 
bee.expression.asInvocation().parameter(3).descriptionCell.setDataType({ 
dataType: "number", commit: true });
+
+    await 
bee.expression.asInvocation().parameter(4).selectExpressionMenu.selectLiteral();
+    await bee.expression.asInvocation().parameter(4).descriptionCell.open();
+    await bee.expression.asInvocation().parameter(4).descriptionCell.setName({ 
name: "Required monthly installment" });
+    await 
bee.expression.asInvocation().parameter(4).descriptionCell.setDataType({ 
dataType: "number", commit: true });
 
     await resizing.reset(page.getByRole("cell", { name: "Required monthly 
installment" }));
 
-    await page.getByRole("columnheader", { name: "FUNCTION NAME" }).click();
+    await bee.expression.asInvocation().invokedFunctionNameCell.click();
     await page.keyboard.type(`Affordability calculation`);
     await page.keyboard.press("Enter");
 
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/list/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/list/populate.spec.ts
index 152f463d285..7760a26c68d 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/list/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/list/populate.spec.ts
@@ -22,11 +22,11 @@ import { test, expect } from "../../__fixtures__/base";
 test.describe("Populate Boxed List", () => {
   test("should correctly create an age group boxed list", async ({ stories, 
bee, page, monaco }) => {
     await stories.openBoxedList();
-    await page.getByRole("cell", { name: "1" }).hover();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
+
+    await bee.expression.asList().addEntryAtTop();
+    await bee.expression.asList().addEntryAtTop();
+    await bee.expression.asList().addEntryAtTop();
+    await bee.expression.asList().addEntryAtTop();
 
     await bee.expression.asList().row(0).selectExpressionMenu.selectLiteral();
     await bee.expression.asList().row(1).selectExpressionMenu.selectLiteral();
@@ -34,11 +34,9 @@ test.describe("Populate Boxed List", () => {
     await bee.expression.asList().row(3).selectExpressionMenu.selectLiteral();
     await bee.expression.asList().row(4).selectExpressionMenu.selectLiteral();
 
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Age groups");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asList().expressionHeaderCell.open();
+    await bee.expression.asList().expressionHeaderCell.setName({ name: "Age 
groups", close: false });
+    await bee.expression.asList().expressionHeaderCell.setDataType({ dataType: 
"number", close: true });
 
     await monaco.fill({ monacoParentLocator: page, nth: 0, content: "<18" });
     await monaco.fill({ monacoParentLocator: page, nth: 1, content: "[18..30)" 
});
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/literal/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/literal/populate.spec.ts
index 740028b74b2..442cb97221d 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/literal/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/literal/populate.spec.ts
@@ -22,11 +22,9 @@ import { test, expect } from "../../__fixtures__/base";
 test.describe("Populate Boxed Literal", () => {
   test("should correctly create a can drive boxed literal", async ({ stories, 
page, bee, resizing, monaco }) => {
     await stories.openBoxedLiteral();
-    await page.getByRole("columnheader", { name: "Expression Name 
(<Undefined>)" }).click();
-    await page.getByPlaceholder("Expression Name").fill("Can drive?");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asLiteral().expressionHeaderCell.open();
+    await bee.expression.asLiteral().expressionHeaderCell.setName({ name: "Can 
drive?", close: false });
+    await bee.expression.asLiteral().expressionHeaderCell.setDataType({ 
dataType: "boolean", close: true });
 
     await monaco.fill({ monacoParentLocator: page, nth: 0, content: "Age >= 18 
then true else false" });
     await resizing.resizeCell(
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/relation/populate.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/relation/populate.spec.ts
index 423a42b6cfd..b0966f0543a 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/relation/populate.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/relation/populate.spec.ts
@@ -24,40 +24,29 @@ test.describe("Populate Relation", () => {
   test("should correctly create a people relation", async ({ stories, page, 
bee, resizing }) => {
     await stories.openRelation();
 
-    await page.getByRole("columnheader", { name: "column-1 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Name");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asRelation().columnHeaderAtIndex(1).open();
+    await bee.expression.asRelation().columnHeaderAtIndex(1).setName({ name: 
"Name", close: false });
+    await bee.expression.asRelation().columnHeaderAtIndex(1).setDataType({ 
dataType: "string", close: true });
     await resizing.resizeCell(
       page.getByRole("columnheader", { name: "Name (string)" }),
       { x: 0, y: 0 },
       { x: 40, y: 0 }
     );
-    await page.getByRole("columnheader", { name: "Name (string)" }).hover();
-    await page.getByRole("row", { name: "Name (string)" 
}).locator("svg").click();
+    await bee.expression.asRelation().addColumnAtRightOfIndex(1);
 
-    await page.getByRole("columnheader", { name: "column-2 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Age");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "number" }).click();
-    await page.keyboard.press("Enter");
-    await page.getByRole("columnheader", { name: "Age (number)" }).hover();
-    await page.getByRole("row", { name: "Age (number)" 
}).locator("svg").click();
+    await bee.expression.asRelation().columnHeaderAtIndex(2).open();
+    await bee.expression.asRelation().columnHeaderAtIndex(2).setName({ name: 
"Age", close: false });
+    await bee.expression.asRelation().columnHeaderAtIndex(2).setDataType({ 
dataType: "number", close: true });
+    await bee.expression.asRelation().addColumnAtRightOfIndex(2);
 
-    await page.getByRole("columnheader", { name: "column-3 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Country");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "string" }).click();
-    await page.keyboard.press("Enter");
-    await page.getByRole("columnheader", { name: "Country (string)" }).hover();
-    await page.getByRole("row", { name: "Country (string)" 
}).locator("svg").click();
+    await bee.expression.asRelation().columnHeaderAtIndex(3).open();
+    await bee.expression.asRelation().columnHeaderAtIndex(3).setName({ name: 
"Country", close: false });
+    await bee.expression.asRelation().columnHeaderAtIndex(3).setDataType({ 
dataType: "string", close: true });
+    await bee.expression.asRelation().addColumnAtRightOfIndex(3);
 
-    await page.getByRole("columnheader", { name: "column-4 (<Undefined>)" 
}).click();
-    await page.getByPlaceholder("Expression Name").fill("Married");
-    await page.getByLabel("<Undefined>").click();
-    await page.getByRole("option", { name: "boolean" }).click();
-    await page.keyboard.press("Enter");
+    await bee.expression.asRelation().columnHeaderAtIndex(4).open();
+    await bee.expression.asRelation().columnHeaderAtIndex(4).setName({ name: 
"Married", close: false });
+    await bee.expression.asRelation().columnHeaderAtIndex(4).setDataType({ 
dataType: "boolean", close: true });
 
     test.info().annotations.push({
       type: TestAnnotations.WORKAROUND_DUE_TO,
@@ -73,9 +62,8 @@ test.describe("Populate Relation", () => {
     await page.getByPlaceholder("Expression Name").fill("People");
     await page.keyboard.press("Enter");
 
-    await page.getByRole("cell", { name: "1" }).hover();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
-    await page.getByRole("cell", { name: "1" }).locator("svg").click();
+    await bee.expression.asRelation().addRowAtBellowOfRowAtIndex(1);
+    await bee.expression.asRelation().addRowAtBellowOfRowAtIndex(1);
 
     await bee.expression.asRelation().fill({
       startAtCell: 0,
diff --git 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/some/someExpression.spec.ts
 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/some/someExpression.spec.ts
index 2cd2cc1202b..a1ab18d1482 100644
--- 
a/packages/boxed-expression-component/tests-e2e/boxedExpressions/some/someExpression.spec.ts
+++ 
b/packages/boxed-expression-component/tests-e2e/boxedExpressions/some/someExpression.spec.ts
@@ -45,4 +45,18 @@ test.describe("Create Boxed Some", () => {
     expect((await 
jsonModel.getSomeExpression()).in["@_id"]).not.toBeUndefined();
     expect((await 
jsonModel.getSomeExpression()).satisfies["@_id"]).not.toBeUndefined();
   });
+
+  test("should commit variable by cell click", async ({ bee }) => {
+    test.info().annotations.push({
+      type: TestAnnotations.REGRESSION,
+      description: 
"https://github.com/apache/incubator-kie-issues/issues/1158";,
+    });
+
+    await bee.expression.asSome().variable.fill("Changed Variable Name");
+
+    // commit a change by a click to another cell
+    await bee.expression.asSome().in.elementCell.click();
+
+    await 
expect(bee.getContainer()).toHaveScreenshot("boxed-some-commit-variable-by-cell-click.png");
+  });
 });


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to