mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-27 16:35:57 +00:00
- The JS variant is deprecated, move to the unified package. `[@stylistic/eslint-plugin-js] This package is deprecated in favor of the unified @stylistic/eslint-plugin, please consider migrating to the main package` is logged when running `make lint-frontend`. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8216 Reviewed-by: floss4good <floss4good@noreply.codeberg.org> Reviewed-by: Otto <otto@codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
116 lines
3.7 KiB
TypeScript
116 lines
3.7 KiB
TypeScript
// @watch start
|
|
// templates/org/team/sidebar.tmpl
|
|
// @watch end
|
|
/* eslint playwright/expect-expect: ["error", { "assertFunctionNames": ["assertPermissionsDetails", "assertRestrictedAccess", "assertOwnerPermissions"] }] */
|
|
import {expect, type Page} from '@playwright/test';
|
|
import {test} from './utils_e2e.ts';
|
|
|
|
type Permission = 'No access' | 'Write' | 'Read';
|
|
|
|
const UNIT_VALUES = [
|
|
'Code',
|
|
'Issues',
|
|
'Pull requests',
|
|
'Releases',
|
|
'Wiki',
|
|
'External Wiki',
|
|
'External issues',
|
|
'Projects',
|
|
'Packages',
|
|
'Actions',
|
|
] as const;
|
|
|
|
type Unit = typeof UNIT_VALUES[number];
|
|
|
|
const assertPermission = async (page: Page, name: Unit, permission: Permission) => {
|
|
await expect.soft(page.getByRole('row', {name}).getByRole('cell').nth(1)).toHaveText(permission);
|
|
};
|
|
|
|
const testTeamUrl = '/org/org17/teams/test_team';
|
|
const reviewTeamUrl = '/org/org17/teams/review_team';
|
|
const ownersUrl = '/org/org17/teams/owners';
|
|
const adminUrl = '/org/org17/teams/super-user';
|
|
|
|
const cases: Record<string, {read?: Unit[], write?: Unit[]}> = {
|
|
[testTeamUrl]: {write: ['Issues']},
|
|
[reviewTeamUrl]: {read: ['Code']},
|
|
};
|
|
|
|
const assertOwnerPermissions = async (page: Page, code: number = 200) => {
|
|
const response = await page.goto(ownersUrl);
|
|
expect(response?.status()).toBe(code);
|
|
|
|
await expect(page.getByText('Owners have full access to all repositories and have administrator access to the organization.')).toBeVisible();
|
|
};
|
|
|
|
const assertAdminPermissions = async (page: Page, code: number = 200) => {
|
|
const response = await page.goto(adminUrl);
|
|
expect(response?.status()).toBe(code);
|
|
|
|
await expect(page.getByText('This team grants Administrator access: members can read from, push to and add collaborators to team repositories.')).toBeVisible();
|
|
};
|
|
|
|
const assertRestrictedAccess = async (page: Page, ...urls: string[]) => {
|
|
for (const url of urls) {
|
|
expect((await page.goto(url))?.status(), 'should not see any details').toBe(404);
|
|
}
|
|
};
|
|
|
|
const assertPermissionsDetails = async (page: Page, url: (keyof typeof cases)) => {
|
|
const response = await page.goto(url);
|
|
expect(response?.status()).toBe(200);
|
|
|
|
const per = cases[url];
|
|
|
|
for (const unit of UNIT_VALUES) {
|
|
if (per.read?.includes(unit)) {
|
|
await assertPermission(page, unit, 'Read');
|
|
} else if (per.write?.includes(unit)) {
|
|
await assertPermission(page, unit, 'Write');
|
|
} else {
|
|
await assertPermission(page, unit, 'No access');
|
|
}
|
|
}
|
|
};
|
|
|
|
test.describe('Orga team overview', () => {
|
|
test.describe('admin', () => {
|
|
test.use({user: 'user1'});
|
|
|
|
test('should see all', async ({page}) => {
|
|
await assertPermissionsDetails(page, testTeamUrl);
|
|
await assertPermissionsDetails(page, reviewTeamUrl);
|
|
await assertOwnerPermissions(page);
|
|
await assertAdminPermissions(page);
|
|
});
|
|
});
|
|
|
|
test.describe('owner', () => {
|
|
test.use({user: 'user18'});
|
|
|
|
test('should see all', async ({page}) => {
|
|
await assertPermissionsDetails(page, testTeamUrl);
|
|
await assertPermissionsDetails(page, reviewTeamUrl);
|
|
await assertOwnerPermissions(page);
|
|
await assertAdminPermissions(page);
|
|
});
|
|
});
|
|
|
|
test.describe('reviewer team', () => {
|
|
test.use({user: 'user29'});
|
|
|
|
test('should only see permissions for `reviewer team` and restricted access to other resources', async ({page}) => {
|
|
await assertPermissionsDetails(page, reviewTeamUrl);
|
|
await assertRestrictedAccess(page, ownersUrl, testTeamUrl, adminUrl);
|
|
});
|
|
});
|
|
|
|
test.describe('test_team', () => {
|
|
test.use({user: 'user2'});
|
|
|
|
test('should only see permissions for test_team and restricted access to other resources', async ({page}) => {
|
|
await assertPermissionsDetails(page, testTeamUrl);
|
|
await assertRestrictedAccess(page, ownersUrl, reviewTeamUrl, adminUrl);
|
|
});
|
|
});
|
|
});
|