2026-07-16 06:19:58 -04:00
|
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
|
import { login } from './helpers/auth';
|
2026-08-10 08:53:18 +00:00
|
|
|
import { testProjects } from './helpers/fixtures';
|
2026-07-16 06:19:58 -04:00
|
|
|
|
2026-07-29 08:03:28 -04:00
|
|
|
test.describe('Projects', () => {
|
2026-07-16 06:19:58 -04:00
|
|
|
test.beforeEach(async ({ page }) => {
|
|
|
|
|
await login(page);
|
|
|
|
|
await page.goto('/projects');
|
|
|
|
|
await expect(page.getByRole('heading', { name: /projects/i })).toBeVisible();
|
|
|
|
|
});
|
|
|
|
|
|
2026-08-10 08:53:18 +00:00
|
|
|
test('creates a project via the New Project dialog', async ({ page }) => {
|
2026-07-29 08:03:28 -04:00
|
|
|
await page.getByRole('button', { name: /new project/i }).click();
|
2026-08-10 08:53:18 +00:00
|
|
|
|
|
|
|
|
const dialog = page.getByRole('dialog');
|
|
|
|
|
await expect(dialog).toBeVisible();
|
|
|
|
|
await expect(dialog.getByRole('heading', { name: 'New Project' })).toBeVisible();
|
|
|
|
|
|
|
|
|
|
await dialog.getByLabel('Name').fill(testProjects.name);
|
|
|
|
|
await dialog.getByLabel('Description').fill(testProjects.description);
|
|
|
|
|
await dialog.getByRole('button', { name: /create project/i }).click();
|
|
|
|
|
|
|
|
|
|
// The dialog closes and the project card appears in the grid.
|
|
|
|
|
await expect(dialog).toBeHidden();
|
|
|
|
|
await expect(page.getByText(testProjects.name, { exact: true })).toBeVisible({
|
|
|
|
|
timeout: 10_000,
|
|
|
|
|
});
|
2026-07-16 06:19:58 -04:00
|
|
|
});
|
|
|
|
|
|
2026-08-10 08:53:18 +00:00
|
|
|
test('opens the project detail page from a project card', async ({ page }) => {
|
|
|
|
|
// Ensure the fixture project exists.
|
|
|
|
|
if (!(await page.getByText(testProjects.name, { exact: true }).isVisible().catch(() => false))) {
|
|
|
|
|
await page.getByRole('button', { name: /new project/i }).click();
|
|
|
|
|
const dialog = page.getByRole('dialog');
|
|
|
|
|
await dialog.getByLabel('Name').fill(testProjects.name);
|
|
|
|
|
await dialog.getByRole('button', { name: /create project/i }).click();
|
|
|
|
|
await expect(page.getByText(testProjects.name, { exact: true })).toBeVisible({ timeout: 10_000 });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await page.getByText(testProjects.name, { exact: true }).first().click();
|
|
|
|
|
|
|
|
|
|
await page.waitForURL('**/projects/*', { timeout: 10_000 });
|
|
|
|
|
await expect(
|
|
|
|
|
page.getByRole('heading', { name: testProjects.name, level: 3 }),
|
|
|
|
|
).toBeVisible({ timeout: 10_000 });
|
2026-07-16 06:19:58 -04:00
|
|
|
});
|
|
|
|
|
});
|