54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
/**
|
|
* E2E Test: Admin Dashboard Flow
|
|
* Priority: CRITICAL - Admin functionality
|
|
*
|
|
* Tests the complete admin journey:
|
|
* 1. Admin login
|
|
* 2. View dashboard statistics
|
|
* 3. Manage guests
|
|
* 4. Export data
|
|
* 5. View analytics
|
|
*/
|
|
|
|
import { test, expect, type Page } from '@playwright/test';
|
|
import { loginAsAdmin } from './helpers/auth';
|
|
|
|
test.describe('Admin Dashboard Flow', () => {
|
|
test.beforeEach(async ({ page }: { page: Page }) => {
|
|
await page.goto('/admin');
|
|
});
|
|
|
|
test('complete admin dashboard journey', async ({ page }: { page: Page }) => {
|
|
await loginAsAdmin(page);
|
|
|
|
// Overview stats cards should render.
|
|
await expect(page.getByText(/\b\d+\s+guests\b/i)).toBeVisible({ timeout: 15_000 });
|
|
|
|
// Guests tab
|
|
await page.getByRole('tab', { name: /^guests$/i }).click();
|
|
await expect(page.getByText(/guest management/i)).toBeVisible({ timeout: 15_000 });
|
|
await expect(page.getByRole('button', { name: /add guest/i })).toBeVisible({ timeout: 15_000 });
|
|
|
|
// Photos tab
|
|
await page.getByRole('tab', { name: /^photos$/i }).click();
|
|
await expect(page.getByRole('heading', { name: /^photos$/i })).toBeVisible({ timeout: 15_000 });
|
|
|
|
// Music tab
|
|
await page.getByRole('tab', { name: /^music$/i }).click();
|
|
await expect(page.getByRole('heading', { name: /^music$/i })).toBeVisible({ timeout: 15_000 });
|
|
});
|
|
|
|
test('handles invalid admin credentials', async ({ page }: { page: Page }) => {
|
|
await page.getByLabel(/email or username/i).fill('invalid@example.com');
|
|
await page.getByLabel(/^password$/i).fill('wrong-password');
|
|
await page.getByRole('button', { name: /^login$/i }).click();
|
|
await expect(page.getByRole('alert')).toBeVisible({ timeout: 10_000 });
|
|
});
|
|
|
|
test('requires authentication for admin routes', async ({ page }: { page: Page }) => {
|
|
await page.goto('/admin?tab=guests');
|
|
// Unauthed users see the login card.
|
|
await expect(page.getByText(/admin access/i)).toBeVisible({ timeout: 10_000 });
|
|
});
|
|
});
|