diff --git a/frontend/src/__tests__/cypress/cypress/pages/permissions.ts b/frontend/src/__tests__/cypress/cypress/pages/permissions.ts index 9f3bf07437..da5672f623 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/permissions.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/permissions.ts @@ -63,6 +63,25 @@ class PermissionTable extends Contextual { .click(); } + addGroupName(name: string) { + const userNameCell = permissions.getGroupTable().find().find('[data-label="Username"]'); + userNameCell.findByRole('button', { name: 'Typeahead menu toggle' }).should('exist').click(); + userNameCell.children().first().type(`${name}`); + //have to do this at top level `cy` because it goes to top of dom + cy.findByRole('option', { name: `Select "${name}"` }).click(); + } + + selectAdminOption() { + permissions + .getGroupTable() + .find() + .find('[data-label="Permission"]') + .children() + .first() + .findSelectOption('Admin Edit the project and manage user access') + .click(); + } + findSaveNewButton() { return this.find().findByTestId(['save-new-button']); } diff --git a/frontend/src/__tests__/cypress/cypress/tests/e2e/dataScienceProjects/testProjectAdminPermissions.cy.ts b/frontend/src/__tests__/cypress/cypress/tests/e2e/dataScienceProjects/testProjectAdminPermissions.cy.ts index 0afc5c18f2..5846b653b7 100644 --- a/frontend/src/__tests__/cypress/cypress/tests/e2e/dataScienceProjects/testProjectAdminPermissions.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/tests/e2e/dataScienceProjects/testProjectAdminPermissions.cy.ts @@ -3,13 +3,14 @@ import { projectDetails, projectListPage } from '~/__tests__/cypress/cypress/pag import { permissions } from '~/__tests__/cypress/cypress/pages/permissions'; import { HTPASSWD_CLUSTER_ADMIN_USER, + LDAP_CONTRIBUTOR_GROUP, LDAP_CONTRIBUTOR_USER, } from '~/__tests__/cypress/cypress/utils/e2eUsers'; import { loadDSPFixture } from '~/__tests__/cypress/cypress/utils/dataLoader'; import { createCleanProject } from '~/__tests__/cypress/cypress/utils/projectChecker'; import { deleteOpenShiftProject } from '~/__tests__/cypress/cypress/utils/oc_commands/project'; -describe('Verify that users can provide admin project permissions to non-admin users', () => { +describe('Verify that users can provide admin project permissions to non-admin users/groups', () => { let testData: DataScienceProjectData; let projectName: string; @@ -39,7 +40,9 @@ describe('Verify that users can provide admin project permissions to non-admin u it( 'Verify that user can be added as an Admin for a Project', - { tags: ['@Smoke', '@SmokeSet1', '@ODS-2194', '@ODS-2201', '@Dashboard'] }, + { + tags: ['@Smoke', '@SmokeSet1', '@ODS-2194', '@ODS-2201', '@ODS-2208', '@Dashboard'], + }, () => { // Authentication and navigation cy.step('Log into the application'); @@ -71,9 +74,41 @@ describe('Verify that users can provide admin project permissions to non-admin u cy.contains(LDAP_CONTRIBUTOR_USER.USERNAME).should('exist'); }, ); + it( + 'Verify user can assign access permissions to user group', + { + tags: ['@Smoke', '@SmokeSet1', '@ODS-2194', '@ODS-2201', '@ODS-2208', '@Dashboard'], + }, + () => { + // Authentication and navigation + cy.step('Log into the application'); + cy.visitWithLogin('/', HTPASSWD_CLUSTER_ADMIN_USER); + + // Project navigation, add group and provide admin permissions + cy.step( + `Navigate to the Project list tab and search for ${testData.projectPermissionResourceName}`, + ); + projectListPage.navigate(); + projectListPage.filterProjectByName(testData.projectPermissionResourceName); + projectListPage.findProjectLink(testData.projectPermissionResourceName).click(); + projectDetails.findSectionTab('permissions').click(); + + cy.step('Assign admin group Project Permissions'); + permissions.findAddGroupButton().click(); + permissions.getGroupTable().addGroupName(LDAP_CONTRIBUTOR_GROUP.USERNAME); + permissions.getGroupTable().selectAdminOption(); + cy.step( + `Save the group and validate that ${LDAP_CONTRIBUTOR_GROUP.USERNAME} has been saved with admin permissions`, + ); + permissions.getGroupTable().findSaveNewButton().should('exist').and('be.visible').click(); + cy.contains(LDAP_CONTRIBUTOR_GROUP.USERNAME).should('exist'); + }, + ); it( 'Verify that user can access the created project with Admin rights', - { tags: ['@Smoke', '@SmokeSet1', '@ODS-2194', '@ODS-2201', '@Dashboard'] }, + { + tags: ['@Smoke', '@SmokeSet1', '@ODS-2194', '@ODS-2201', '@ODS-2208', '@Dashboard'], + }, () => { // Authentication and navigation cy.step(`Log into the application with ${LDAP_CONTRIBUTOR_USER.USERNAME}`); diff --git a/frontend/src/__tests__/cypress/cypress/utils/e2eUsers.ts b/frontend/src/__tests__/cypress/cypress/utils/e2eUsers.ts index bbeee3235a..2e113be827 100644 --- a/frontend/src/__tests__/cypress/cypress/utils/e2eUsers.ts +++ b/frontend/src/__tests__/cypress/cypress/utils/e2eUsers.ts @@ -1,6 +1,7 @@ import type { UserAuthConfig } from '~/__tests__/cypress/cypress/types'; export const LDAP_CONTRIBUTOR_USER: UserAuthConfig = Cypress.env('LDAP_CONTRIBUTOR_USER'); +export const LDAP_CONTRIBUTOR_GROUP: UserAuthConfig = Cypress.env('LDAP_CONTRIBUTOR_GROUP'); export const HTPASSWD_CLUSTER_ADMIN_USER: UserAuthConfig = Cypress.env( 'HTPASSWD_CLUSTER_ADMIN_USER', ); diff --git a/frontend/src/__tests__/cypress/cypress/utils/testConfig.ts b/frontend/src/__tests__/cypress/cypress/utils/testConfig.ts index 0836951089..7e8b5f80cc 100644 --- a/frontend/src/__tests__/cypress/cypress/utils/testConfig.ts +++ b/frontend/src/__tests__/cypress/cypress/utils/testConfig.ts @@ -33,6 +33,12 @@ const LDAP_CONTRIBUTOR_USER: UserAuthConfig = testConfig?.TEST_USER_3 ?? { PASSWORD: env.TEST_USER_3_PASSWORD || '', }; +const LDAP_CONTRIBUTOR_GROUP: UserAuthConfig = testConfig?.TEST_USER_3 ?? { + AUTH_TYPE: env.TEST_USER_3_AUTH_TYPE || '', + USERNAME: `${env.TEST_USER_3_USERNAME ?? ''}-group`, + PASSWORD: env.TEST_USER_3_PASSWORD || '', +}; + const HTPASSWD_CLUSTER_ADMIN_USER: UserAuthConfig = testConfig?.OCP_ADMIN_USER ?? { AUTH_TYPE: env.ADMIN_USER_AUTH_TYPE || '', USERNAME: env.ADMIN_USER_USERNAME || '', @@ -73,6 +79,7 @@ const PIP_TRUSTED_HOST = testConfig?.PIP_TRUSTED_HOST; // spread the cypressEnv variables into the cypress config export const cypressEnv = { LDAP_CONTRIBUTOR_USER, + LDAP_CONTRIBUTOR_GROUP, HTPASSWD_CLUSTER_ADMIN_USER, AWS_PIPELINES, TEST_NAMESPACE, diff --git a/frontend/src/concepts/roleBinding/RoleBindingPermissionsNameInput.tsx b/frontend/src/concepts/roleBinding/RoleBindingPermissionsNameInput.tsx index 7972ac5539..b72b70ac7f 100644 --- a/frontend/src/concepts/roleBinding/RoleBindingPermissionsNameInput.tsx +++ b/frontend/src/concepts/roleBinding/RoleBindingPermissionsNameInput.tsx @@ -57,6 +57,7 @@ const RoleBindingPermissionsNameInput: React.FC