mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-20 22:42:53 -05:00
a596b3aaca
ref https://www.notion.so/AdminX-testing-plan-99b2dab27e794fc893767ccd01c84a63?d=26612fc2b9d84e65bbb269fa3bc5079e&pvs=4#f0089cd4d9f24e93bd7f8e2868987bf6 This pull request renames the end-to-end tests to acceptance tests in the `apps/admin-x-settings` folder. It updates the `ci.yml` file, the `package.json` file, the `playwright.config.ts` file, and the test files to reflect the new naming convention. This change aims to better reflect the purpose and scope of the tests.
95 lines
3.7 KiB
TypeScript
95 lines
3.7 KiB
TypeScript
import {expect, test} from '@playwright/test';
|
|
import {globalDataRequests, mockApi, responseFixtures} from '../../../utils/acceptance';
|
|
|
|
test.describe('User roles', async () => {
|
|
test('Shows users under their role', async ({page}) => {
|
|
await mockApi({page, requests: {
|
|
...globalDataRequests,
|
|
browseUsers: {method: 'GET', path: '/users/?limit=100&include=roles', response: responseFixtures.users}
|
|
}});
|
|
|
|
await page.goto('/');
|
|
|
|
const section = page.getByTestId('users');
|
|
|
|
await expect(section.getByTestId('owner-user')).toHaveText(/owner@test\.com/);
|
|
|
|
await expect(section.getByRole('tab')).toHaveText([
|
|
'Administrators',
|
|
'Editors',
|
|
'Authors',
|
|
'Contributors',
|
|
'Invited'
|
|
]);
|
|
|
|
const activeTab = section.locator('[role=tabpanel]:not(.hidden)');
|
|
|
|
await section.getByRole('tab', {name: 'Administrators'}).click();
|
|
await expect(activeTab.getByTestId('user-list-item')).toHaveText(/administrator@test\.com/);
|
|
|
|
await section.getByRole('tab', {name: 'Editors'}).click();
|
|
await expect(activeTab.getByTestId('user-list-item')).toHaveText(/editor@test\.com/);
|
|
|
|
await section.getByRole('tab', {name: 'Authors'}).click();
|
|
await expect(activeTab.getByTestId('user-list-item')).toHaveText(/author@test\.com/);
|
|
|
|
await section.getByRole('tab', {name: 'Contributors'}).click();
|
|
await expect(activeTab.getByTestId('user-list-item')).toHaveText(/contributor@test\.com/);
|
|
});
|
|
|
|
test('Supports changing user role', async ({page}) => {
|
|
const userToEdit = responseFixtures.users.users.find(user => user.email === 'author@test.com')!;
|
|
|
|
const {lastApiRequests} = await mockApi({page, requests: {
|
|
...globalDataRequests,
|
|
browseUsers: {method: 'GET', path: '/users/?limit=100&include=roles', response: responseFixtures.users},
|
|
browseRoles: {method: 'GET', path: '/roles/?limit=all', response: responseFixtures.roles},
|
|
browseAssignableRoles: {method: 'GET', path: '/roles/?limit=all&permissions=assign', response: responseFixtures.roles},
|
|
editUser: {method: 'PUT', path: `/users/${userToEdit.id}/?include=roles`, response: {
|
|
users: [{
|
|
...userToEdit,
|
|
roles: [responseFixtures.roles.roles.find(role => role.name === 'Editor')!]
|
|
}]
|
|
}}
|
|
}});
|
|
|
|
await page.goto('/');
|
|
|
|
const section = page.getByTestId('users');
|
|
const activeTab = section.locator('[role=tabpanel]:not(.hidden)');
|
|
|
|
await section.getByRole('tab', {name: 'Authors'}).click();
|
|
|
|
const listItem = activeTab.getByTestId('user-list-item').last();
|
|
await listItem.hover();
|
|
await listItem.getByRole('button', {name: 'Edit'}).click();
|
|
|
|
const modal = page.getByTestId('user-detail-modal');
|
|
|
|
await modal.locator('input[value=editor]').check();
|
|
|
|
await modal.getByRole('button', {name: 'Save & close'}).click();
|
|
|
|
await expect(modal.getByRole('button', {name: 'Saved'})).toBeVisible();
|
|
|
|
await expect(activeTab).toHaveText(/No authors found./);
|
|
|
|
await section.getByRole('tab', {name: 'Editors'}).click();
|
|
|
|
await expect(activeTab.getByTestId('user-list-item')).toHaveCount(2);
|
|
|
|
await expect(activeTab.getByTestId('user-list-item')).toHaveText([
|
|
/author@test\.com/,
|
|
/editor@test\.com/
|
|
]);
|
|
|
|
expect(lastApiRequests.editUser?.body).toMatchObject({
|
|
users: [{
|
|
email: 'author@test.com',
|
|
roles: [{
|
|
name: 'Editor'
|
|
}]
|
|
}]
|
|
});
|
|
});
|
|
});
|