feat(pages): Complete p05-page-migrations with all pages and navigation tests
- Create Team Members page with DataTable, search, and filters - Create Projects page with status badges and workflow - Create placeholder pages for Allocations, Actuals, Reports, Settings, Master Data - Fix navigation config: change /team to /team-members - Remove old Navigation.svelte component - Add comprehensive navigation link E2E tests (16 tests) - Add Team Members and Projects page E2E tests All 16 navigation link tests passing: - Dashboard, Team Members, Projects, Allocations, Actuals - All 5 Reports pages (Forecast, Utilization, Costs, Variance, Allocation) - Admin pages (Settings, Master Data) - Authentication preservation across pages Refs: openspec/changes/p05-page-migrations Closes: p05-page-migrations
This commit is contained in:
46
frontend/tests/e2e/team-members.spec.ts
Normal file
46
frontend/tests/e2e/team-members.spec.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('Team Members Page', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
// Login first
|
||||
await page.goto('/login');
|
||||
await page.fill('input[type="email"]', 'superuser@headroom.test');
|
||||
await page.fill('input[type="password"]', 'password');
|
||||
await page.click('button[type="submit"]');
|
||||
await page.waitForURL('/dashboard');
|
||||
|
||||
// Navigate to team members
|
||||
await page.goto('/team-members');
|
||||
});
|
||||
|
||||
test('page renders with title and table', async ({ page }) => {
|
||||
await expect(page).toHaveTitle(/Team Members/);
|
||||
await expect(page.getByRole('heading', { name: 'Team Members' })).toBeVisible();
|
||||
await expect(page.getByText('Manage your team roster')).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Add Member/i })).toBeVisible();
|
||||
});
|
||||
|
||||
test('search filters team members', async ({ page }) => {
|
||||
// Wait for data to load
|
||||
await page.waitForTimeout(500);
|
||||
|
||||
// Search for specific member
|
||||
await page.fill('input[placeholder="Search team members..."]', 'Alice');
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
// Should show matching results
|
||||
await expect(page.getByText('Alice Johnson')).toBeVisible();
|
||||
});
|
||||
|
||||
test('status filter works', async ({ page }) => {
|
||||
// Wait for data to load
|
||||
await page.waitForTimeout(500);
|
||||
|
||||
// Select active filter
|
||||
await page.selectOption('select', 'active');
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
// Should show only active members
|
||||
await expect(page.getByText('Active')).toBeVisible();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user