mirror of
https://github.com/strapi/strapi.git
synced 2025-11-10 23:29:33 +00:00
test(e2e): rbac roles (#23075)
This commit is contained in:
parent
b94e3d1209
commit
c57731c6e9
@ -0,0 +1,60 @@
|
|||||||
|
import { test, expect, type Page } from '@playwright/test';
|
||||||
|
|
||||||
|
import { sharedSetup } from '../../../../utils/setup';
|
||||||
|
import { navToHeader, clickAndWait } from '../../../../utils/shared';
|
||||||
|
|
||||||
|
// Constants for the created role
|
||||||
|
const TARGET_USER = { firstName: 'Editor', lastName: 'Testing' };
|
||||||
|
const ROLES = { new: 'Author', old: 'Editor' };
|
||||||
|
|
||||||
|
test.describe('RBAC - Assign Role to Users', () => {
|
||||||
|
// Runs before each test
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// Perform shared setup to reset the database, log in, and prepare the environment
|
||||||
|
await sharedSetup('rbac-assign-roles-to-user', page, {
|
||||||
|
login: true,
|
||||||
|
resetFiles: true,
|
||||||
|
importData: 'with-admin.tar',
|
||||||
|
skipTour: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to the Users management page
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Users']], 'Users');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test for verifying Super Admin can create a new role
|
||||||
|
test('Super Admin can assign a role to any user', async ({ page }) => {
|
||||||
|
const userFullName = `${TARGET_USER.firstName} ${TARGET_USER.lastName}`;
|
||||||
|
|
||||||
|
// Step 1: find the "Editor" user
|
||||||
|
const editorRowLocator = page.getByRole('row', { name: userFullName });
|
||||||
|
|
||||||
|
// Step 2: go to the user view, wait for the page to load
|
||||||
|
await clickAndWait(page, editorRowLocator.getByRole('link', { name: `Edit ${userFullName}` }));
|
||||||
|
|
||||||
|
// Step 3: update the user's roles
|
||||||
|
// Open the role selection list
|
||||||
|
await page.getByLabel("User's roles*").locator('svg').last().click();
|
||||||
|
// Remove the Editor role
|
||||||
|
await page.getByRole('listbox').getByLabel(ROLES.old).locator('button').uncheck();
|
||||||
|
// Add the Author role
|
||||||
|
await page.getByRole('listbox').getByLabel(ROLES.new).locator('button').check();
|
||||||
|
|
||||||
|
// Exit the roles' selection list context
|
||||||
|
await page.keyboard.press('Escape');
|
||||||
|
|
||||||
|
// Step 3: save the modifications
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Save' }));
|
||||||
|
|
||||||
|
// Step 4: navigate back to the Users management page
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Users']], 'Users');
|
||||||
|
|
||||||
|
// Step 5: make sure the user has the correct role and that the old one has been removed
|
||||||
|
await expect(
|
||||||
|
page.getByRole('row', { name: `${userFullName} editor@testing.com ${ROLES.old}` })
|
||||||
|
).not.toBeVisible();
|
||||||
|
await expect(
|
||||||
|
page.getByRole('row', { name: `${userFullName} editor@testing.com ${ROLES.new}` })
|
||||||
|
).toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
56
tests/e2e/tests/settings/rbac/actions/create-role.spec.ts
Normal file
56
tests/e2e/tests/settings/rbac/actions/create-role.spec.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import { test, expect, type Page } from '@playwright/test';
|
||||||
|
|
||||||
|
import { sharedSetup } from '../../../../utils/setup';
|
||||||
|
import { navToHeader, clickAndWait } from '../../../../utils/shared';
|
||||||
|
|
||||||
|
// Constants for the created role
|
||||||
|
const NEW_ROLE = { name: 'Publisher', description: 'Role with publishing capabilities' };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigate to the Roles management settings via the menu
|
||||||
|
*/
|
||||||
|
const goToAdminRolesPage = async (page: Page) => {
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Roles']], 'Roles');
|
||||||
|
};
|
||||||
|
|
||||||
|
test.describe('RBAC - Create Roles', () => {
|
||||||
|
// Runs before each test
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// Perform shared setup to reset the database, log in, and prepare the environment
|
||||||
|
await sharedSetup('rbac-roles', page, {
|
||||||
|
login: true,
|
||||||
|
resetFiles: true,
|
||||||
|
importData: 'with-admin.tar',
|
||||||
|
skipTour: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to the Roles management page
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test for verifying Super Admin can create a new role
|
||||||
|
test('Super Admin can create a new role', async ({ page }) => {
|
||||||
|
// Step 1: click "Create new role"
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Add new role' }).first());
|
||||||
|
|
||||||
|
// Step 2: fill in the role name and description
|
||||||
|
await page.getByRole('textbox', { name: 'Name' }).fill(NEW_ROLE.name);
|
||||||
|
await page.getByRole('textbox', { name: 'Description' }).fill(NEW_ROLE.description);
|
||||||
|
|
||||||
|
// Step 3: assign the public "publish" permission for articles
|
||||||
|
await page.getByRole('tab', { name: 'Collection Types' }).click(); // Select permissions tab
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Publish article' }).check();
|
||||||
|
|
||||||
|
// Step 4: save the newly created role
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Save' }));
|
||||||
|
|
||||||
|
// Step 5: verify the newly created role in the list
|
||||||
|
await goToAdminRolesPage(page); // Go back to the Roles management page
|
||||||
|
|
||||||
|
const roleLocator = page.getByRole('row', { name: NEW_ROLE.name });
|
||||||
|
|
||||||
|
await expect(roleLocator).toBeVisible();
|
||||||
|
await expect(roleLocator.getByRole('gridcell', { name: NEW_ROLE.name })).toBeVisible();
|
||||||
|
await expect(roleLocator.getByRole('gridcell', { name: NEW_ROLE.description })).toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
38
tests/e2e/tests/settings/rbac/actions/delete-role.spec.ts
Normal file
38
tests/e2e/tests/settings/rbac/actions/delete-role.spec.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import { test, expect } from '@playwright/test';
|
||||||
|
|
||||||
|
import { sharedSetup } from '../../../../utils/setup';
|
||||||
|
import { navToHeader, clickAndWait } from '../../../../utils/shared';
|
||||||
|
|
||||||
|
test.describe('RBAC - Delete Roles', () => {
|
||||||
|
// Runs before each test
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// Perform shared setup to reset the database, log in, and prepare the environment
|
||||||
|
await sharedSetup('rbac-roles', page, {
|
||||||
|
login: true,
|
||||||
|
resetFiles: true,
|
||||||
|
importData: 'with-admin.tar',
|
||||||
|
skipTour: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to the Roles management page
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Roles']], 'Roles');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test for verifying Super Admin can delete an existing role
|
||||||
|
test('Super Admin can delete an existing role', async ({ page }) => {
|
||||||
|
// Step 1: locate the "Author" role row
|
||||||
|
const authorRowLocator = page.getByRole('row', { name: 'Author' });
|
||||||
|
|
||||||
|
// Step 2: delete the role
|
||||||
|
await authorRowLocator.getByRole('button', { name: 'Delete' }).click();
|
||||||
|
|
||||||
|
// Step 3: confirm deletion in the alert dialog
|
||||||
|
await clickAndWait(
|
||||||
|
page,
|
||||||
|
page.getByRole('alertdialog').getByRole('button', { name: 'Confirm' })
|
||||||
|
);
|
||||||
|
|
||||||
|
// Step 4: verify the role no longer appears in the list
|
||||||
|
await expect(page.getByRole('row', { name: 'Author', exact: true })).not.toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
67
tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts
Normal file
67
tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import { test, expect, type Page } from '@playwright/test';
|
||||||
|
|
||||||
|
import { sharedSetup } from '../../../../utils/setup';
|
||||||
|
import { navToHeader, clickAndWait } from '../../../../utils/shared';
|
||||||
|
|
||||||
|
// Constants for the edited role
|
||||||
|
const EDITED_ROLE = { name: 'Contractor', description: 'Role with contractor capabilities' };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigate to the Roles management settings via the menu
|
||||||
|
*/
|
||||||
|
const goToAdminRolesPage = async (page: Page) => {
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Roles']], 'Roles');
|
||||||
|
};
|
||||||
|
|
||||||
|
test.describe('RBAC - Edit Roles', () => {
|
||||||
|
// Runs before each test
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// Perform shared setup to reset the database, log in, and prepare the environment
|
||||||
|
await sharedSetup('rbac-edit-roles', page, {
|
||||||
|
login: true,
|
||||||
|
resetFiles: true,
|
||||||
|
importData: 'with-admin.tar',
|
||||||
|
skipTour: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to the Roles management page
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test for verifying Super Admin can edit an existing role
|
||||||
|
test('Super Admin can edit an existing role', async ({ page }) => {
|
||||||
|
// Step 1: click the "Editor" role row
|
||||||
|
const editorRowLocator = page.getByRole('row', { name: 'Editor' });
|
||||||
|
await clickAndWait(page, editorRowLocator);
|
||||||
|
|
||||||
|
// Step 2: fill in the new role name and description
|
||||||
|
await page.getByRole('textbox', { name: 'Name' }).fill(EDITED_ROLE.name);
|
||||||
|
await page.getByRole('textbox', { name: 'Description' }).fill(EDITED_ROLE.description);
|
||||||
|
|
||||||
|
// Step 3: modify the public permissions for articles
|
||||||
|
await page.getByRole('tab', { name: 'Collection Types' }).click(); // Open permissions tab
|
||||||
|
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Read article' }).uncheck();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Publish article' }).uncheck();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Update article' }).uncheck();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Delete article' }).uncheck();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Publish article' }).uncheck();
|
||||||
|
|
||||||
|
// Step 4: save the updated role
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Save' }));
|
||||||
|
|
||||||
|
// Step 5: verify the changes in the role list
|
||||||
|
// Navigate back to the Roles management page
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
|
||||||
|
const roleLocator = page.getByRole('row', { name: EDITED_ROLE.name });
|
||||||
|
|
||||||
|
await expect(roleLocator).toBeVisible();
|
||||||
|
await expect(
|
||||||
|
roleLocator.getByRole('gridcell', { name: EDITED_ROLE.name, exact: true })
|
||||||
|
).toBeVisible();
|
||||||
|
await expect(
|
||||||
|
roleLocator.getByRole('gridcell', { name: EDITED_ROLE.description, exact: true })
|
||||||
|
).toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
33
tests/e2e/tests/settings/rbac/actions/see-role.spec.ts
Normal file
33
tests/e2e/tests/settings/rbac/actions/see-role.spec.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { test, expect } from '@playwright/test';
|
||||||
|
|
||||||
|
import { sharedSetup } from '../../../../utils/setup';
|
||||||
|
import { navToHeader, clickAndWait } from '../../../../utils/shared';
|
||||||
|
|
||||||
|
test.describe('RBAC - See Roles', () => {
|
||||||
|
// Runs before each test
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// Perform shared setup to reset the database, log in, and prepare the environment
|
||||||
|
await sharedSetup('rbac-see-roles', page, {
|
||||||
|
login: true,
|
||||||
|
resetFiles: true,
|
||||||
|
importData: 'with-admin.tar',
|
||||||
|
skipTour: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to the Roles management page
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Roles']], 'Roles');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test for verifying Super Admin can view details of an existing role
|
||||||
|
test('Super Admin can see an existing role', async ({ page }) => {
|
||||||
|
// Step 1: click the "Editor" role row
|
||||||
|
const editorRowLocator = page.getByRole('row', { name: 'Editor' });
|
||||||
|
await clickAndWait(page, editorRowLocator);
|
||||||
|
|
||||||
|
// Verify the details of the role
|
||||||
|
await expect(page.getByRole('textbox', { name: 'Name' })).toHaveValue('Editor');
|
||||||
|
await expect(page.getByRole('textbox', { name: 'Description' })).toHaveValue(
|
||||||
|
'Editors can manage and publish contents including those of other users.'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
128
tests/e2e/tests/settings/rbac/readme.md
Normal file
128
tests/e2e/tests/settings/rbac/readme.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# Test Suite for Role-Based Access Control
|
||||||
|
|
||||||
|
This test suite focuses on Strapi's Role-Based Access Control (RBAC) feature.
|
||||||
|
|
||||||
|
The tests ensure that administrators or users with appropriate privileges can manage roles and permissions effectively.
|
||||||
|
|
||||||
|
## Test Scenarios
|
||||||
|
|
||||||
|
The test scenarios are organized into two distinct groups: one dedicated to actions (individual tests focusing on
|
||||||
|
specific tasks) and another for scenarios (combinations of multiple actions to simulate real-world workflows).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 1. **Assign Role to Users**
|
||||||
|
|
||||||
|
#### File: [`assign-role-to-user.spec.ts`](./actions/assign-role-to-user.spec.ts)
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
Action
|
||||||
|
|
||||||
|
**Goal:**
|
||||||
|
Ensure that the Super Admin can assign, remove, or update roles for users effectively.
|
||||||
|
|
||||||
|
**Test Steps:**
|
||||||
|
|
||||||
|
- Log in as a Super Admin and navigate to the Users management page.
|
||||||
|
- Select a user (Editor role) from the list and open their edit page.
|
||||||
|
- Remove the current role (`Editor`) and assign a new role (`Author`).
|
||||||
|
- Save the changes and navigate back to the Users management page.
|
||||||
|
- Verify that the user now has the updated role (`Author`) and that the old role (`Editor`) is removed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. **Delete Roles**
|
||||||
|
|
||||||
|
#### File: [`delete-role.spec.ts`](./actions/delete-role.spec.ts)
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
Action
|
||||||
|
|
||||||
|
**Goal:**
|
||||||
|
To validate that the Super Admin can delete an existing role successfully.
|
||||||
|
|
||||||
|
**Test Steps:**
|
||||||
|
|
||||||
|
- Log in as a Super Admin and navigate to the Roles management page.
|
||||||
|
- Identify the role to be deleted (for example, `Author`).
|
||||||
|
- Click on the delete button and confirm the deletion in the alert dialog.
|
||||||
|
- Verify that the role no longer appears in the list of roles.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. **Edit Roles**
|
||||||
|
|
||||||
|
#### File: [`edit-role.spec.ts`](./actions/edit-role.spec.ts)
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
Action
|
||||||
|
|
||||||
|
**Goal:**
|
||||||
|
To verify that the Super Admin can edit the details and permissions of an existing role.
|
||||||
|
|
||||||
|
**Test Steps:**
|
||||||
|
|
||||||
|
- Log in as a Super Admin and navigate to the Roles management page.
|
||||||
|
- Select a role to edit (`Editor`) and modify its name, description, and permissions.
|
||||||
|
- Add or remove specific permissions (for example, disabling 'Update', 'Publish', and 'Delete article' permissions).
|
||||||
|
- Save the modifications and verify the changes by navigating back to the Roles page.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. **See Roles**
|
||||||
|
|
||||||
|
#### File: [`see-role.spec.ts`](./actions/see-role.spec.ts)
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
Action
|
||||||
|
|
||||||
|
**Goal:**
|
||||||
|
To confirm that the Super Admin can view the details of an existing role, including its name, description, and
|
||||||
|
permissions.
|
||||||
|
|
||||||
|
**Test Steps:**
|
||||||
|
|
||||||
|
- Log in as a Super Admin and navigate to the Roles management page.
|
||||||
|
- Select an existing role (for example, `Editor`) to view its details.
|
||||||
|
- Verify that the role's name and description are displayed accurately.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. **Create Roles**
|
||||||
|
|
||||||
|
#### File: [`create-role.spec.ts`](./actions/create-role.spec.ts)
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
Action
|
||||||
|
|
||||||
|
**Goal:**
|
||||||
|
To validate that the Super Admin can create a new role with customized permissions.
|
||||||
|
|
||||||
|
**Test Steps:**
|
||||||
|
|
||||||
|
- Log in as a Super Admin and navigate to the Roles management page.
|
||||||
|
- Click the "Add new role" button to open the role creation form.
|
||||||
|
- Fill in the role's name (for example, `Publisher`) and description.
|
||||||
|
- Assign specific permissions (for example, allow the `Publish article` permission).
|
||||||
|
- Save the newly created role and verify that it appears in the list.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. **Full Role Management Flow**
|
||||||
|
|
||||||
|
#### File: [`create-new-role.scenario.spec.ts`](./scenarios/create-new-role.scenario.spec.ts)
|
||||||
|
|
||||||
|
**Type:**
|
||||||
|
Scenario
|
||||||
|
|
||||||
|
**Goal:**
|
||||||
|
To cover a comprehensive end-to-end flow combining creating, editing, assigning, and deleting roles to ensure the system supports a complete lifecycle of role management.
|
||||||
|
|
||||||
|
**Test Steps:**
|
||||||
|
|
||||||
|
- Create a new role (`Publisher`) and assign permissions.
|
||||||
|
- Verify the new role appears in the Roles list.
|
||||||
|
- Assign the new role to a user.
|
||||||
|
- Edit the role's permissions and verify the changes in the list.
|
||||||
|
- Revert the user to their previously assigned role.
|
||||||
|
- Delete the newly created role and verify that it has been successfully removed.
|
||||||
@ -0,0 +1,154 @@
|
|||||||
|
import { test, expect, type Page, type Locator } from '@playwright/test';
|
||||||
|
|
||||||
|
import { sharedSetup } from '../../../../utils/setup';
|
||||||
|
import { navToHeader, clickAndWait } from '../../../../utils/shared';
|
||||||
|
|
||||||
|
// Constants for the scenario
|
||||||
|
const OLD_ROLE = { name: 'Editor' };
|
||||||
|
const NEW_ROLE = { name: 'Publisher', description: 'Role with publishing capabilities' };
|
||||||
|
const TARGET_USER = { firstName: 'Editor', lastName: 'Testing', email: 'editor@testing.com' };
|
||||||
|
const USER_FULL_NAME = `${TARGET_USER.firstName} ${TARGET_USER.lastName}`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigate to the Roles management settings via the menu
|
||||||
|
*/
|
||||||
|
const goToAdminRolesPage = async (page: Page) => {
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Roles']], 'Roles');
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigate to the Users management page via the menu
|
||||||
|
*/
|
||||||
|
const goToUsersManagementPage = async (page: Page) => {
|
||||||
|
await navToHeader(page, ['Settings', ['Administration Panel', 'Users']], 'Users');
|
||||||
|
};
|
||||||
|
|
||||||
|
test.describe('RBAC - Full Role Management Flow', () => {
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// Perform shared setup to reset the database, log in, and prepare the environment
|
||||||
|
await sharedSetup('rbac-full-role-flow', page, {
|
||||||
|
login: true,
|
||||||
|
resetFiles: true,
|
||||||
|
importData: 'with-admin.tar',
|
||||||
|
skipTour: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Administrator creates, assigns, and edits a role', async ({ page }) => {
|
||||||
|
// Step 1: create a new role
|
||||||
|
await addPublisherRole(page);
|
||||||
|
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
|
||||||
|
// Verify the new role in the list
|
||||||
|
const roleLocator = page.getByRole('row', { name: NEW_ROLE.name });
|
||||||
|
|
||||||
|
await expect(roleLocator).toBeVisible();
|
||||||
|
await expect(roleLocator.getByRole('gridcell', { name: NEW_ROLE.name })).toBeVisible();
|
||||||
|
await expect(roleLocator.getByRole('gridcell', { name: NEW_ROLE.description })).toBeVisible();
|
||||||
|
|
||||||
|
// Step 2: assign the new role to a user
|
||||||
|
await assignRoleToUser(page, USER_FULL_NAME, NEW_ROLE.name);
|
||||||
|
|
||||||
|
// Verify the user has the correct role
|
||||||
|
await goToUsersManagementPage(page);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.getByRole('row', { name: `${USER_FULL_NAME} ${TARGET_USER.email} ${NEW_ROLE.name}` })
|
||||||
|
).toBeVisible();
|
||||||
|
|
||||||
|
// Step 3: edit the permissions of the role
|
||||||
|
await editPublisherRole(page);
|
||||||
|
|
||||||
|
// Verify the updated role in the list
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
|
||||||
|
await expect(page.getByRole('row', { name: NEW_ROLE.name })).toBeVisible();
|
||||||
|
|
||||||
|
// Step 4: revert the roles' assignment for the user
|
||||||
|
await assignRoleToUser(page, USER_FULL_NAME, OLD_ROLE.name);
|
||||||
|
|
||||||
|
// Step 5: delete the created role
|
||||||
|
await deletePublisherRole(page);
|
||||||
|
|
||||||
|
// Verify the role has been deleted
|
||||||
|
await expect(page.getByRole('row', { name: NEW_ROLE.name, exact: true })).not.toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const addPublisherRole = async (page: Page) => {
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Add new role' }).first());
|
||||||
|
|
||||||
|
await page.getByRole('textbox', { name: 'Name' }).fill(NEW_ROLE.name);
|
||||||
|
await page.getByRole('textbox', { name: 'Description' }).fill(NEW_ROLE.description);
|
||||||
|
|
||||||
|
// Assign the "publish" permission for articles initially
|
||||||
|
await page.getByRole('tab', { name: 'Collection Types' }).click();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Publish article' }).check();
|
||||||
|
|
||||||
|
// Save the newly created role
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Save' }));
|
||||||
|
};
|
||||||
|
|
||||||
|
const editPublisherRole = async (page: Page) => {
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
|
||||||
|
// Open the role edit page
|
||||||
|
await clickAndWait(page, page.getByRole('row', { name: NEW_ROLE.name }));
|
||||||
|
|
||||||
|
// Modify permissions
|
||||||
|
await page.getByRole('tab', { name: 'Collection Types' }).click(); // Open permissions tab
|
||||||
|
|
||||||
|
await page.getByRole('checkbox', { name: `Select Read article` }).check();
|
||||||
|
await page.getByRole('checkbox', { name: `Select Update article` }).check();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Create article' }).check();
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Delete article' }).check();
|
||||||
|
|
||||||
|
await page.getByRole('checkbox', { name: 'Select Publish article' }).uncheck();
|
||||||
|
|
||||||
|
// Save the updated role
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Save' }));
|
||||||
|
};
|
||||||
|
|
||||||
|
const deletePublisherRole = async (page: Page) => {
|
||||||
|
await goToAdminRolesPage(page);
|
||||||
|
|
||||||
|
await page
|
||||||
|
.getByRole('row', { name: NEW_ROLE.name })
|
||||||
|
.getByRole('button', { name: 'Delete' })
|
||||||
|
.click();
|
||||||
|
|
||||||
|
// Confirm the deletion in the alert dialog
|
||||||
|
await clickAndWait(page, page.getByRole('alertdialog').getByRole('button', { name: 'Confirm' }));
|
||||||
|
};
|
||||||
|
|
||||||
|
const assignRoleToUser = async (page: Page, userFullName: string, role: string) => {
|
||||||
|
await goToUsersManagementPage(page); // Navigate to Users management page
|
||||||
|
|
||||||
|
// Find the user's row
|
||||||
|
const userRowLocator = page.getByRole('row', { name: userFullName });
|
||||||
|
|
||||||
|
// Go to the user's edit view page
|
||||||
|
await clickAndWait(page, userRowLocator.getByRole('link', { name: `Edit ${userFullName}` }));
|
||||||
|
|
||||||
|
// Update the user's roles
|
||||||
|
await page.getByLabel("User's roles*").locator('svg').last().click(); // Open role selector
|
||||||
|
|
||||||
|
const listBoxLocator = page.getByRole('listbox');
|
||||||
|
|
||||||
|
// Make sure all the roles are unchecked before selecting the new one
|
||||||
|
for (const checkbox of await listBoxLocator.locator('button').all()) {
|
||||||
|
await checkbox.uncheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assign the new role
|
||||||
|
await listBoxLocator.getByLabel(role).locator('button').check();
|
||||||
|
|
||||||
|
// Exit role selection
|
||||||
|
await page.keyboard.press('Escape');
|
||||||
|
|
||||||
|
// Save changes
|
||||||
|
await clickAndWait(page, page.getByRole('button', { name: 'Save' }));
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user