forked from line/centraldogma
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproject-owners.spec.ts
More file actions
55 lines (49 loc) · 2.08 KB
/
project-owners.spec.ts
File metadata and controls
55 lines (49 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { test, expect } from '@playwright/test';
test.beforeEach('Login', async ({ page }) => {
await page.goto('/');
await expect(page.getByText(/Login/)).toBeVisible();
await page.getByPlaceholder('ID').fill('foo');
await page.getByPlaceholder('Password').fill('bar');
const loginResponsePromise = page.waitForResponse((response) => response.url().includes('/api/v1/login'));
await page.getByRole('button', { name: 'Login' }).click();
await loginResponsePromise;
});
test('view project members from list', async ({ page }) => {
await page.goto('/app/projects');
const projectRows = page.locator('tr', { has: page.getByRole('button', { name: 'View members' }) });
await expect(projectRows.first()).toBeVisible();
const rowCount = await projectRows.count();
let projectName = '';
let members: string[] = [];
let targetRowIndex = 0;
for (let i = 0; i < rowCount; i += 1) {
const row = projectRows.nth(i);
const candidateName = (await row.getByRole('link').first().innerText()).trim();
const metadataResponse = await page.request.get(`/api/v1/projects/${encodeURIComponent(candidateName)}`);
if (!metadataResponse.ok()) {
continue;
}
const metadata = await metadataResponse.json();
const candidateMembers = Object.entries(metadata.members).map(
([login, member]: [string, { login?: string }]) => member.login || login,
);
if (candidateMembers.length > 0) {
projectName = candidateName;
members = candidateMembers;
targetRowIndex = i;
break;
}
}
if (!projectName) {
const fallbackRow = projectRows.first();
projectName = (await fallbackRow.getByRole('link').first().innerText()).trim();
}
const projectRow = projectRows.nth(targetRowIndex);
await projectRow.getByRole('button', { name: 'View members' }).click();
const dialog = page.getByRole('dialog');
await expect(dialog).toBeVisible();
await expect(dialog.getByText('Project members')).toBeVisible();
if (members.length > 0) {
await expect(dialog.getByTestId('project-member-login').first()).toBeVisible({ timeout: 15000 });
}
});