/** * E2E tests for the Dashboard page. * * Uses pre-authenticated state from auth.setup.ts. * Verifies dashboard loads, displays data, and navigation works. */ import { test, expect } from '../fixtures/base.fixture'; import { DashboardPage } from '../page-objects'; test.describe('Dashboard', () => { let dashboard: DashboardPage; test.beforeEach(async ({ page }) => { dashboard = new DashboardPage(page); await dashboard.goto(); }); test('should load the dashboard page', async ({ page }) => { await dashboard.assertLoaded(); await expect(page).toHaveURL(/\/dashboard/); }); test('should display main content area', async ({ page }) => { // Dashboard should have a visible main content area await expect(page.locator('main')).toBeVisible(); }); test('should have sidebar navigation', async ({ page }) => { // Verify key navigation links are present const nav = page.locator('nav').first(); if (await nav.isVisible({ timeout: 5_000 }).catch(() => false)) { await expect(nav).toBeVisible(); // Check for common navigation items const links = ['Accounts', 'Transactions', 'Budgets']; for (const linkName of links) { const link = nav.getByRole('link', { name: new RegExp(linkName, 'i') }); if (await link.isVisible({ timeout: 2_000 }).catch(() => false)) { await expect(link).toBeVisible(); } } } }); test('should navigate to accounts page', async ({ page }) => { const accountsLink = page.getByRole('link', { name: /accounts/i }).first(); if (await accountsLink.isVisible({ timeout: 5_000 }).catch(() => false)) { await accountsLink.click(); await page.waitForLoadState('networkidle'); await expect(page).toHaveURL(/\/accounts/); } }); }); test.describe('Dashboard with DB verification', () => { test('should reflect database state', async ({ page, db }) => { // Query the database to get expected account count const result = await db.query( `SELECT COUNT(*) as count FROM e2e_test_hoa.accounts`, ).catch(() => ({ rows: [{ count: '0' }] })); const expectedCount = parseInt(result.rows[0].count, 10); // Navigate to dashboard const dashboard = new DashboardPage(page); await dashboard.goto(); await dashboard.assertLoaded(); // If accounts exist, the dashboard should show some financial data if (expectedCount > 0) { // Dashboard should contain some numeric content indicating balances await expect(page.locator('main')).not.toBeEmpty(); } }); });