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

zehnder pushed a commit to branch 3944-improve-permission-handling
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to 
refs/heads/3944-improve-permission-handling by this push:
     new d89ff4b887 refactor(#3944): Add permission tests for pipelines
d89ff4b887 is described below

commit d89ff4b887133a46f6b92af27c31a1abf61dc485
Author: Philipp Zehnder <[email protected]>
AuthorDate: Thu Nov 20 11:58:24 2025 +0100

    refactor(#3944): Add permission tests for pipelines
---
 ui/cypress/support/utils/pipeline/PipelineUtils.ts |   2 +-
 ui/cypress/support/utils/user/PermissionUtils.ts   |   8 +
 ...t.spec.ts => testAddAssetOnResourceCreation.ts} |   2 +-
 .../userManagement/testUserRoleConnect.spec.ts     |   5 +-
 .../userManagement/testUserRolePipeline.spec.ts    | 166 +++++++++++++++------
 .../object-permission-dialog.component.html        |   4 +
 6 files changed, 134 insertions(+), 53 deletions(-)

diff --git a/ui/cypress/support/utils/pipeline/PipelineUtils.ts 
b/ui/cypress/support/utils/pipeline/PipelineUtils.ts
index b57656d4d4..7d90bde728 100644
--- a/ui/cypress/support/utils/pipeline/PipelineUtils.ts
+++ b/ui/cypress/support/utils/pipeline/PipelineUtils.ts
@@ -227,7 +227,7 @@ export class PipelineUtils {
             // The wait is needed because the default value is the 
no-table-entries element.
             // It must be waited till the data is loaded. Once a better 
solution is found, this can be removed.
             cy.wait(1000);
-            cy.dataCy('no-table-entries').should('be.visible');
+            cy.dataCy('no-table-entries').should('have.length', 2);
         } else {
             PipelineBtns.statusPipeline().should('have.length', amount);
         }
diff --git a/ui/cypress/support/utils/user/PermissionUtils.ts 
b/ui/cypress/support/utils/user/PermissionUtils.ts
index 56e07517b4..4365eed24f 100644
--- a/ui/cypress/support/utils/user/PermissionUtils.ts
+++ b/ui/cypress/support/utils/user/PermissionUtils.ts
@@ -47,6 +47,14 @@ export class PermissionUtils {
         PermissionUtils.save();
     }
 
+    public static authorizeGroup(resourceName: string, groupName: string) {
+        PermissionUtils.openManagePermissions(resourceName);
+        cy.dataCy('authorized-group').type(groupName);
+        cy.get(`[data-cy="group-option-${groupName}"]`).click();
+
+        PermissionUtils.save();
+    }
+
     public static save() {
         cy.dataCy('sp-manage-permissions-save').click();
     }
diff --git a/ui/cypress/tests/userManagement/testUserRoleAsset.spec.ts 
b/ui/cypress/tests/userManagement/testAddAssetOnResourceCreation.ts
similarity index 98%
rename from ui/cypress/tests/userManagement/testUserRoleAsset.spec.ts
rename to ui/cypress/tests/userManagement/testAddAssetOnResourceCreation.ts
index ece8fba06d..a27908b732 100644
--- a/ui/cypress/tests/userManagement/testUserRoleAsset.spec.ts
+++ b/ui/cypress/tests/userManagement/testAddAssetOnResourceCreation.ts
@@ -27,7 +27,7 @@ import { DataExplorerUtils } from 
'../../support/utils/dataExplorer/DataExplorer
 import { DataExplorerBtns } from 
'../../support/utils/dataExplorer/DataExplorerBtns';
 import { ConnectBtns } from '../../support/utils/connect/ConnectBtns';
 
-describe('Test User Roles for Pipelines', () => {
+describe('Test that resources can be added to assets on creation', () => {
     let newUser;
     beforeEach('Setup Test', () => {
         cy.initStreamPipesTest();
diff --git a/ui/cypress/tests/userManagement/testUserRoleConnect.spec.ts 
b/ui/cypress/tests/userManagement/testUserRoleConnect.spec.ts
index dd0d008f49..c3b5d585b3 100644
--- a/ui/cypress/tests/userManagement/testUserRoleConnect.spec.ts
+++ b/ui/cypress/tests/userManagement/testUserRoleConnect.spec.ts
@@ -127,12 +127,13 @@ describe('Test User Roles for Connect', () => {
             UserRole.ROLE_CONNECT_ADMIN,
         );
         UserUtils.addGroupToUser('connect_admin_group', user2.name);
-        // Add group to user2
 
         // set up
         UserUtils.switchUser(user1);
         ConnectUtils.addMachineDataSimulator(adapterName);
 
+        PermissionUtils.authorizeGroup(adapterName, 'connect_admin_group');
+
         // check admin
         UserUtils.switchUser(UserUtils.adminUser);
         validateAdapterIsVisible();
@@ -140,7 +141,7 @@ describe('Test User Roles for Connect', () => {
 
         // check other users
         UserUtils.switchUser(user2);
-        ConnectUtils.checkAmountOfAdapters(0);
+        ConnectUtils.checkAmountOfAdapters(1);
     });
 
     function validateAdapterIsVisible() {
diff --git a/ui/cypress/tests/userManagement/testUserRolePipeline.spec.ts 
b/ui/cypress/tests/userManagement/testUserRolePipeline.spec.ts
index 67024c4ee4..be104523d0 100644
--- a/ui/cypress/tests/userManagement/testUserRolePipeline.spec.ts
+++ b/ui/cypress/tests/userManagement/testUserRolePipeline.spec.ts
@@ -22,87 +22,155 @@ import { ConnectUtils } from 
'../../support/utils/connect/ConnectUtils';
 import { PipelineUtils } from '../../support/utils/pipeline/PipelineUtils';
 import { PermissionUtils } from '../../support/utils/user/PermissionUtils';
 import { PipelineBtns } from '../../support/utils/pipeline/PipelineBtns';
-import { NavigationUtils } from 
'../../support/utils/navigation/NavigationUtils';
+import { User } from '../../support/model/User';
 
 describe('Test User Roles for Pipelines', () => {
+    const pipelineName = 'Persist simulator';
+    let pipelineUser1: User;
+    let pipelineAdmin1: User;
+    let pipelineAdmin2: User;
+
     beforeEach('Setup Test', () => {
         cy.initStreamPipesTest();
-        // Create a machine data simulator with a sample pipeline for the tests
-        ConnectUtils.addMachineDataSimulator('simulator', true);
-    });
 
-    it('Pipeline admin should not see pipelines of other users', () => {
-        const newUser = UserUtils.createUser(
-            'user',
+        pipelineUser1 = UserUtils.createUser(
+            'pipelineUser1',
+            UserRole.ROLE_PIPELINE_USER,
+        );
+
+        pipelineAdmin1 = UserUtils.createUser(
+            'pipelineAdmin1',
+            UserRole.ROLE_CONNECT_ADMIN,
+            UserRole.ROLE_PIPELINE_ADMIN,
+        );
+
+        pipelineAdmin2 = UserUtils.createUser(
+            'pipelineAdmin2',
             UserRole.ROLE_PIPELINE_ADMIN,
         );
+    });
 
-        // Login as user and check if pipeline is visible to user
-        UserUtils.switchUser(newUser);
+    it('Pipeline is not shared with other users', () => {
+        UserUtils.switchUser(pipelineAdmin1);
+        ConnectUtils.addMachineDataSimulator('simulator', true);
 
-        NavigationUtils.validateActiveModules([
-            NavigationUtils.PIPELINES,
-            NavigationUtils.CONFIGURATION,
-        ]);
+        assertPipelineIsVisibleAndEditableCanChangePermissions(
+            UserUtils.adminUser,
+        );
 
-        PipelineUtils.goToPipelines();
-        PipelineUtils.checkAmountOfPipelinesPipeline(0);
+        assertPipelineIsNotVisible(pipelineUser1);
+
+        UserUtils.switchUser(pipelineUser1);
+
+        assertPipelineIsNotVisible(pipelineAdmin2);
     });
 
-    it('Pipeline admin should see public pipelines of other users', () => {
-        const newUser = UserUtils.createUser(
-            'user',
-            UserRole.ROLE_PIPELINE_ADMIN,
-        );
+    it('Make pipeline public', () => {
+        UserUtils.switchUser(pipelineAdmin1);
+        ConnectUtils.addMachineDataSimulator('simulator', true);
 
-        // Add new authorized user to pipeline
         PipelineUtils.goToPipelines();
-        PermissionUtils.markElementAsPublic('Persist simulator');
+        PermissionUtils.markElementAsPublic(pipelineName);
 
-        // Login as user and check if pipeline is visible to user
-        UserUtils.switchUser(newUser);
+        assertPipelineIsVisibleAndEditableCanChangePermissions(
+            UserUtils.adminUser,
+        );
 
-        PipelineUtils.goToPipelines();
-        PipelineUtils.checkAmountOfPipelinesPipeline(1);
-    });
+        assertPipelineIsVisibleButNotEditable(pipelineUser1);
 
-    it(' Pipeline admin should see shared pipelines of other users', () => {
-        const newUser = UserUtils.createUser(
-            'user',
-            UserRole.ROLE_PIPELINE_ADMIN,
+        assertPipelineIsVisibleAndEditableCannotChangePermissions(
+            pipelineAdmin2,
         );
+    });
+
+    it('Share pipeline with other user and change ownership', () => {
+        UserUtils.switchUser(pipelineAdmin1);
+        ConnectUtils.addMachineDataSimulator('simulator', true);
 
-        // Add new authorized user to pipeline
         PipelineUtils.goToPipelines();
-        PermissionUtils.markElementAsPublic('Persist simulator');
-        PermissionUtils.authorizeUser('Persist simulator', newUser.email);
+        PermissionUtils.authorizeUser(pipelineName, pipelineAdmin2.email);
 
-        // Login as user and check if pipeline is visible to user
-        UserUtils.switchUser(newUser);
+        assertPipelineIsVisibleAndEditableCanChangePermissions(
+            UserUtils.adminUser,
+        );
+
+        assertPipelineIsVisibleAndEditableCannotChangePermissions(
+            pipelineAdmin2,
+        );
+
+        assertPipelineIsNotVisible(pipelineUser1);
 
+        UserUtils.switchUser(pipelineAdmin1);
         PipelineUtils.goToPipelines();
-        PipelineUtils.checkAmountOfPipelinesPipeline(1);
+        PermissionUtils.changeOwnership(pipelineName, pipelineAdmin2.email);
+
+        assertPipelineIsNotVisible(pipelineAdmin1);
+
+        assertPipelineIsVisibleAndEditableCanChangePermissions(
+            UserUtils.adminUser,
+        );
+
+        assertPipelineIsVisibleAndEditableCanChangePermissions(pipelineAdmin2);
+
+        assertPipelineIsNotVisible(pipelineUser1);
     });
 
-    it(' Pipeline user should see shared pipelines of other users but not be 
able to edit them', () => {
-        const newUser = UserUtils.createUser(
-            'user',
-            UserRole.ROLE_PIPELINE_USER,
+    it('Pipeline is shared with group for user 2', () => {
+        UserUtils.createGroup(
+            'pipeline_admin_group',
+            UserRole.ROLE_PIPELINE_ADMIN,
         );
+        UserUtils.addGroupToUser('pipeline_admin_group', pipelineAdmin2.name);
+
+        // set up
+        UserUtils.switchUser(pipelineAdmin1);
+        ConnectUtils.addMachineDataSimulator('simulator', true);
 
-        // Add new authorized user to pipeline
         PipelineUtils.goToPipelines();
-        // PermissionUtils.markElementAsPublic();
-        PermissionUtils.authorizeUser('Persist simulator', newUser.email);
+        PermissionUtils.authorizeGroup(pipelineName, 'pipeline_admin_group');
 
-        // Login as user and check if pipeline is visible to user
-        UserUtils.switchUser(newUser);
+        assertPipelineIsVisibleAndEditableCanChangePermissions(
+            UserUtils.adminUser,
+        );
+
+        assertPipelineIsNotVisible(pipelineUser1);
 
+        assertPipelineIsVisibleAndEditableCannotChangePermissions(
+            pipelineAdmin2,
+        );
+    });
+
+    function assertPipelineIsVisibleAndEditableCanChangePermissions(
+        user: User,
+    ) {
+        UserUtils.switchUser(user);
+        PipelineUtils.goToPipelines();
+        PipelineUtils.checkAmountOfPipelinesPipeline(1);
+        PipelineBtns.stopPipeline().should('not.be.disabled');
+        PermissionUtils.validateUserCanChangePermissions(pipelineName);
+    }
+
+    function assertPipelineIsVisibleAndEditableCannotChangePermissions(
+        user: User,
+    ) {
+        UserUtils.switchUser(user);
         PipelineUtils.goToPipelines();
         PipelineUtils.checkAmountOfPipelinesPipeline(1);
+        PipelineBtns.stopPipeline().should('not.be.disabled');
+        PermissionUtils.validateUserCanNotChangePermissions(pipelineName);
+    }
 
-        // A pipeline user should not be able to stop the pipeline or delete it
-        PipelineBtns.deletePipeline().should('not.exist');
+    function assertPipelineIsVisibleButNotEditable(user: User) {
+        UserUtils.switchUser(user);
+        PipelineUtils.goToPipelines();
+        PipelineUtils.checkAmountOfPipelinesPipeline(1);
         PipelineBtns.stopPipeline().should('be.disabled');
-    });
+        PermissionUtils.validateUserCanNotChangePermissions(pipelineName);
+    }
+
+    function assertPipelineIsNotVisible(user: User) {
+        UserUtils.switchUser(user);
+        PipelineUtils.goToPipelines();
+        PipelineUtils.checkAmountOfPipelinesPipeline(0);
+    }
 });
diff --git 
a/ui/projects/streampipes/shared-ui/src/lib/dialog/object-permission-dialog/object-permission-dialog.component.html
 
b/ui/projects/streampipes/shared-ui/src/lib/dialog/object-permission-dialog/object-permission-dialog.component.html
index 15353f20ed..069e4044a4 100644
--- 
a/ui/projects/streampipes/shared-ui/src/lib/dialog/object-permission-dialog/object-permission-dialog.component.html
+++ 
b/ui/projects/streampipes/shared-ui/src/lib/dialog/object-permission-dialog/object-permission-dialog.component.html
@@ -152,6 +152,7 @@
                                     <input
                                         matInput
                                         [placeholder]="'Add' | translate"
+                                        data-cy="authorized-group"
                                         #groupInput
                                         [formControl]="groupCtrl"
                                         [matAutocomplete]="groupAuto"
@@ -169,6 +170,9 @@
                                     (optionSelected)="groupSelected($event)"
                                 >
                                     <mat-option
+                                        [attr.data-cy]="
+                                            'group-option-' + group.groupName
+                                        "
                                         *ngFor="
                                             let group of filteredGroups$ | 
async
                                         "

Reply via email to