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

zehnder pushed a commit to branch 
3116-refactor-staticruntimeresolvabletreeinput-into-smaller-subcomponents
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to 
refs/heads/3116-refactor-staticruntimeresolvabletreeinput-into-smaller-subcomponents
 by this push:
     new 8745fa6e05 refactor(#3116): Add test to show node details
8745fa6e05 is described below

commit 8745fa6e050ef115e67bb58eb7445770d534beca
Author: Philipp Zehnder <[email protected]>
AuthorDate: Mon Aug 12 10:51:48 2024 +0200

    refactor(#3116): Add test to show node details
---
 .../utils/userInput/TreeStaticPropertyUtils.ts     | 26 ++++++++++++++++++++
 .../tests/connect/opcAdapterConfiguration.spec.ts  |  9 +++++++
 ...ic-runtime-resolvable-tree-input.component.html |  5 ++--
 ...ic-runtime-resolvable-tree-input.component.scss | 18 --------------
 ...atic-runtime-resolvable-tree-input.component.ts |  7 +++++-
 .../static-tree-input-browse-nodes.component.html  | 28 +++++++---------------
 .../static-tree-input-browse-nodes.component.ts    | 17 ++++++++++---
 7 files changed, 66 insertions(+), 44 deletions(-)

diff --git a/ui/cypress/support/utils/userInput/TreeStaticPropertyUtils.ts 
b/ui/cypress/support/utils/userInput/TreeStaticPropertyUtils.ts
index 43ea0b451c..118a562542 100644
--- a/ui/cypress/support/utils/userInput/TreeStaticPropertyUtils.ts
+++ b/ui/cypress/support/utils/userInput/TreeStaticPropertyUtils.ts
@@ -55,6 +55,32 @@ export class TreeStaticPropertyUtils {
         );
     }
 
+    /**
+     * Validates the number of node details metadata rows displayed.
+     */
+    public static validateAmountOfShownNodeDetailsMetaDataRows(
+        expectedAmount: number,
+    ) {
+        cy.dataCy('node-details-metadata-row-', {}, true).should(
+            'have.length',
+            expectedAmount,
+        );
+    }
+
+    /**
+     * Select node to be shown in node details
+     */
+    public static showNodeDetails(nodeName: string) {
+        cy.dataCy(`show-node-details-${nodeName}`).click();
+    }
+
+    /**
+     * Unselect the node to be removed from node details view
+     */
+    public static hideNodeDetails(nodeName: string) {
+        cy.dataCy('hide-node-details-' + nodeName).click();
+    }
+
     /**
      * Validates that the @param nodeName is marked as selected in the
      * tree view.
diff --git a/ui/cypress/tests/connect/opcAdapterConfiguration.spec.ts 
b/ui/cypress/tests/connect/opcAdapterConfiguration.spec.ts
index 08af064ffb..57b10bd41a 100644
--- a/ui/cypress/tests/connect/opcAdapterConfiguration.spec.ts
+++ b/ui/cypress/tests/connect/opcAdapterConfiguration.spec.ts
@@ -43,6 +43,15 @@ describe('Test OPC-UA Adapter Pull Mode', () => {
             'AlternatingBoolean',
         );
 
+        // Test if node details view works
+        
TreeStaticPropertyUtils.validateAmountOfShownNodeDetailsMetaDataRows(0);
+        TreeStaticPropertyUtils.showNodeDetails('StepUp');
+        TreeStaticPropertyUtils.validateAmountOfShownNodeDetailsMetaDataRows(
+            10,
+        );
+        TreeStaticPropertyUtils.hideNodeDetails('StepUp');
+        
TreeStaticPropertyUtils.validateAmountOfShownNodeDetailsMetaDataRows(0);
+
         // Test if delete node works
         TreeStaticPropertyUtils.removeSelectedNode(
             'ns=3\\;s=AlternatingBoolean',
diff --git 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.html
 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.html
index 4975e8413c..dfda968073 100644
--- 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.html
+++ 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.html
@@ -32,8 +32,8 @@
         <div fxFlex="30" class="tree-input-section" fxLayout="column">
             <sp-static-tree-input-browse-nodes
                 #staticTreeInputBrowseNodesComponent
-                [selectedNodeMetadata]="selectedNodeMetadata"
                 [staticProperty]="staticProperty"
+                (showNodeDetailsEmitter)="showNodeDetails($event)"
                 
(loadOptionsFromRestApiEmitter)="loadOptionsFromRestApi($event)"
                 (performValidationEmitter)="performValidation()"
             >
@@ -45,8 +45,9 @@
             </div>
             <div
                 class="node-metadata"
-                *ngFor="let metadata of selectedNodeMetadata | keyvalue"
+                *ngFor="let metadata of nodeDetails?.nodeMetadata | keyvalue"
                 fxLayout="row"
+                [attr.data-cy]="'node-details-metadata-row-' + metadata.key"
             >
                 <div fxFlex="30">{{ metadata.key }}</div>
                 <div fxFlex="70">{{ metadata.value }}</div>
diff --git 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.scss
 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.scss
index 93e93f6136..ac5d7522bf 100644
--- 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.scss
+++ 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.scss
@@ -84,21 +84,3 @@
 .node-name {
     font-weight: bold;
 }
-
-.selected-node {
-    padding: 10px;
-    border-bottom: 1px solid var(--color-bg-3);
-}
-
-.selected-node:nth-child(odd) {
-    background: var(--color-bg-1);
-}
-
-.selected-node:nth-child(even) {
-    background: var(--color-bg-2);
-}
-
-.selected-node {
-    padding: 5px;
-    border: 1px solid var(--color-bg-3);
-}
diff --git 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.ts
 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.ts
index 57e5005af7..caf6937331 100644
--- 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.ts
+++ 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-runtime-resolvable-tree-input.component.ts
@@ -37,7 +37,8 @@ export class StaticRuntimeResolvableTreeInputComponent
     extends 
BaseRuntimeResolvableInput<RuntimeResolvableTreeInputStaticProperty>
     implements OnInit
 {
-    selectedNodeMetadata: Record<string, string>;
+    // selectedNodeMetadata: Record<string, string>;
+    nodeDetails: TreeInputNode;
 
     @ViewChild('staticTreeInputBrowseNodesComponent')
     staticTreeInputBrowseNodesComponent: StaticTreeInputBrowseNodesComponent;
@@ -127,6 +128,10 @@ export class StaticRuntimeResolvableTreeInputComponent
         this.performValidation();
     }
 
+    showNodeDetails(node: TreeInputNode) {
+        this.nodeDetails = node;
+    }
+
     resetOptionsAndReload(): void {
         this.staticProperty.nextBaseNodeToResolve = undefined;
         this.staticProperty.selectedNodesInternalNames = [];
diff --git 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.html
 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.html
index 23d7deb1cc..0f3957558e 100644
--- 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.html
+++ 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.html
@@ -41,11 +41,6 @@
 >
     <mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
         <div
-            [ngClass]="
-                selectedNodeId === node.internalNodeName
-                    ? 'selected-node'
-                    : 'node'
-            "
             fxLayoutAlign="start center"
             [attr.data-cy]="'tree-node-' + node.nodeName"
         >
@@ -68,19 +63,16 @@
             <i
                 class="material-icons pr-5 icon-button"
                 *ngIf="selectedNodeId !== node.internalNodeName"
-                (click)="
-                    selectedNodeMetadata = node.nodeMetadata;
-                    selectedNodeId = node.internalNodeName
-                "
+                [attr.data-cy]="'show-node-details-' + node.nodeName"
+                (click)="showNodeDetails(node)"
                 matTooltip="Show details"
                 >visibility</i
             >
             <i
                 class="material-icons pr-5 icon-button"
                 *ngIf="selectedNodeId === node.internalNodeName"
-                (click)="
-                    selectedNodeMetadata = undefined; selectedNodeId = 
undefined
-                "
+                [attr.data-cy]="'hide-node-details-' + node.nodeName"
+                (click)="hideNodeDetails()"
                 matTooltip="Show details"
                 >visibility_off</i
             >
@@ -127,20 +119,16 @@
                 <i
                     class="material-icons pr-5 icon-button"
                     *ngIf="selectedNodeId !== node.internalNodeName"
-                    (click)="
-                        selectedNodeMetadata = node.nodeMetadata;
-                        selectedNodeId = node.internalNodeName
-                    "
+                    [attr.data-cy]="'show-node-details-' + node.nodeName"
+                    (click)="showNodeDetails(node)"
                     matTooltip="Show details"
                     >visibility</i
                 >
                 <i
                     class="material-icons pr-5 icon-button"
                     *ngIf="selectedNodeId === node.internalNodeName"
-                    (click)="
-                        selectedNodeMetadata = undefined;
-                        selectedNodeId = undefined
-                    "
+                    [attr.data-cy]="'hide-node-details-' + node.nodeName"
+                    (click)="hideNodeDetails()"
                     matTooltip="Show details"
                     >visibility_off</i
                 >
diff --git 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.ts
 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.ts
index 93dbf9671b..de04432f80 100644
--- 
a/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.ts
+++ 
b/ui/src/app/core-ui/static-properties/static-runtime-resolvable-tree-input/static-tree-input-browse-nodes/static-tree-input-browse-nodes.component.ts
@@ -40,12 +40,13 @@ import { StaticTreeInputServiceService } from 
'../static-tree-input-service.serv
     ],
 })
 export class StaticTreeInputBrowseNodesComponent implements OnInit {
-    @Input()
-    selectedNodeMetadata: Record<string, string>;
-
     @Input()
     staticProperty: RuntimeResolvableTreeInputStaticProperty;
 
+    @Output()
+    showNodeDetailsEmitter: EventEmitter<TreeInputNode> =
+        new EventEmitter<TreeInputNode>();
+
     @Output()
     performValidationEmitter: EventEmitter<void> = new EventEmitter<void>();
 
@@ -132,6 +133,16 @@ export class StaticTreeInputBrowseNodesComponent 
implements OnInit {
         );
     }
 
+    showNodeDetails(node: TreeInputNode) {
+        this.selectedNodeId = node.internalNodeName;
+        this.showNodeDetailsEmitter.emit(node);
+    }
+
+    hideNodeDetails() {
+        this.selectedNodeId = undefined;
+        this.showNodeDetailsEmitter.emit(undefined);
+    }
+
     hasDataChildren(node: TreeInputNode) {
         return (
             node.children.length > 0 &&

Reply via email to