mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +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);
 | |
|     });
 | |
|   });
 | |
| });
 |