import { test, expect } from '@playwright/test'; /** * Visual Regression Tests * Compares implemented components with design specifications */ test.describe('Visual Appearance', () => { test.beforeEach(async ({ page }) => { // Login before each test await page.goto('/'); await page.getByLabel(/username/i).fill('testowner'); await page.getByLabel(/password/i).fill('testpass123'); await page.getByRole('button', { name: /login|sign in/i }).click(); await page.waitForURL(/dashboard|\/$/); }); test('Dashboard should display key metrics', async ({ page }) => { await page.goto('/'); // Check for metric cards const metricCards = page.locator('[class*="metric"], [class*="card"]'); await expect(metricCards.first()).toBeVisible(); // Take screenshot for visual comparison await expect(page).toHaveScreenshot('dashboard.png', { fullPage: true, animations: 'disabled', }); }); test('Sidebar navigation should be visible', async ({ page }) => { await page.goto('/'); // Check for sidebar const sidebar = page.locator('[class*="sidebar"], nav'); await expect(sidebar.first()).toBeVisible(); // Check for navigation links await expect(page.getByRole('link', { name: /dashboard/i })).toBeVisible(); await expect(page.getByRole('link', { name: /scheduler/i })).toBeVisible(); await expect(page.getByRole('link', { name: /customers/i })).toBeVisible(); }); test('Top bar should display business name and user info', async ({ page }) => { await page.goto('/'); // Check for top bar elements const topBar = page.locator('[class*="topbar"], header').first(); await expect(topBar).toBeVisible(); // Business name or logo should be visible await expect(topBar.locator('img, [class*="logo"], h1')).toBeVisible(); // User avatar or menu should be visible await expect(topBar.locator('[class*="avatar"], [class*="user-menu"]')).toBeVisible(); }); test('Customers page should display customer list', async ({ page }) => { await page.goto('/customers'); // Check for page heading await expect(page.getByRole('heading', { name: /customers/i })).toBeVisible(); // Check for customer table or list const customerList = page.locator('table, [class*="customer-list"]'); await expect(customerList.first()).toBeVisible(); // Take screenshot await expect(page).toHaveScreenshot('customers-page.png', { fullPage: true, animations: 'disabled', }); }); test('Scheduler page should display calendar view', async ({ page }) => { await page.goto('/scheduler'); // Check for page heading await expect(page.getByRole('heading', { name: /scheduler|calendar/i })).toBeVisible(); // Check for time slots or calendar grid const scheduler = page.locator('[class*="scheduler"], [class*="calendar"]'); await expect(scheduler.first()).toBeVisible(); // Take screenshot await expect(page).toHaveScreenshot('scheduler-page.png', { fullPage: true, animations: 'disabled', }); }); });