53 lines
2.2 KiB
TypeScript
53 lines
2.2 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { login } from './helpers/auth';
|
|
|
|
test.describe('Dashboard', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await login(page);
|
|
});
|
|
|
|
test('dashboard page loads with correct title', async ({ page }) => {
|
|
await expect(page.locator('h1:has-text("Dashboard")')).toBeVisible();
|
|
await expect(page.locator('text=Overview of your ISP operations')).toBeVisible();
|
|
});
|
|
|
|
test('KPI cards render after loading', async ({ page }) => {
|
|
// Wait for skeletons to disappear
|
|
await page.waitForSelector('.skeleton', { state: 'detached', timeout: 15000 }).catch(() => {});
|
|
await expect(page.locator('text=Total Clients')).toBeVisible();
|
|
await expect(page.locator('text=Active Subscriptions')).toBeVisible();
|
|
await expect(page.locator('text=Overdue Invoices')).toBeVisible();
|
|
});
|
|
|
|
test('revenue card and chart only visible to admin', async ({ page }) => {
|
|
// Admin login — revenue card should show
|
|
await page.waitForSelector('.skeleton', { state: 'detached', timeout: 15000 }).catch(() => {});
|
|
await expect(page.locator('text=Monthly Revenue')).toBeVisible();
|
|
await expect(page.locator('text=Revenue Overview')).toBeVisible();
|
|
});
|
|
|
|
test('recent tickets section renders', async ({ page }) => {
|
|
await expect(page.locator('text=Recent Tickets')).toBeVisible();
|
|
await expect(page.locator('text=View all →')).toBeVisible();
|
|
});
|
|
|
|
test('refresh button works without crash', async ({ page }) => {
|
|
await page.click('button:has-text("Refresh")');
|
|
// Should not crash — page still has dashboard title
|
|
await expect(page.locator('h1:has-text("Dashboard")')).toBeVisible();
|
|
});
|
|
|
|
test('New Client button navigates to clients', async ({ page }) => {
|
|
await page.click('button:has-text("+ New Client")');
|
|
await expect(page).toHaveURL(/\/clients/);
|
|
});
|
|
|
|
test('KPI card click navigates correctly', async ({ page }) => {
|
|
await page.waitForSelector('.skeleton', { state: 'detached', timeout: 15000 }).catch(() => {});
|
|
// Click Total Clients card
|
|
const clientsCard = page.locator('text=Total Clients').first();
|
|
await clientsCard.click();
|
|
await expect(page).toHaveURL(/\/clients/);
|
|
});
|
|
});
|