veza/veza-desktop/tests/e2e/settings.spec.ts

157 lines
5.1 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.describe('Settings Page', () => {
test.beforeEach(async ({ page }) => {
// Login
await page.goto('http://localhost:5173/login');
await page.fill('input[type="email"]', 'test@example.com');
await page.fill('input[type="password"]', 'Test1234!');
await page.click('button[type="submit"]');
await page.waitForURL('**/dashboard');
});
test('should navigate to settings', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
await expect(page.locator('h1')).toContainText('Settings');
});
test('should have all 5 tabs', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Check all tabs exist
await expect(page.locator('button[role="tab"]:has-text("Profile")')).toBeVisible();
await expect(page.locator('button[role="tab"]:has-text("Security")')).toBeVisible();
await expect(page.locator('button[role="tab"]:has-text("Notifications")')).toBeVisible();
await expect(page.locator('button[role="tab"]:has-text("Appearance")')).toBeVisible();
await expect(page.locator('button[role="tab"]:has-text("Privacy")')).toBeVisible();
});
test('should update profile information', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Make sure we're on Profile tab
await page.click('button[role="tab"]:has-text("Profile")');
// Fill form
await page.fill('input[id="firstName"]', 'John');
await page.fill('input[id="lastName"]', 'Doe');
// Save
await page.click('button:has-text("Save Profile")');
// Verify success message
await expect(page.locator('text=Profile updated')).toBeVisible({ timeout: 5000 });
});
test('should change password', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Go to Security tab
await page.click('button[role="tab"]:has-text("Security")');
// Fill password form
await page.fill('input[id="currentPassword"]', 'OldPassword123!');
await page.fill('input[id="newPassword"]', 'NewPassword123!');
await page.fill('input[id="confirmPassword"]', 'NewPassword123!');
// Submit
await page.click('button:has-text("Change Password")');
// Should show feedback (success or error)
const feedback = page.locator('[role="status"]');
await expect(feedback).toBeVisible({ timeout: 5000 });
});
test('should toggle notification preferences', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Go to Notifications tab
await page.click('button[role="tab"]:has-text("Notifications")');
// Toggle some checkboxes
const checkboxes = page.locator('input[type="checkbox"]');
const count = await checkboxes.count();
if (count > 0) {
await checkboxes.first().click();
// Save
await page.click('button:has-text("Save Preferences")');
// Verify
await expect(page.locator('text=Preferences saved')).toBeVisible({ timeout: 5000 });
}
});
test('should change theme', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Go to Appearance tab
await page.click('button[role="tab"]:has-text("Appearance")');
// Select dark theme
await page.click('button:has-text("dark")');
// Select accent color
await page.click('button:has-text("purple")');
// Save
await page.click('button:has-text("Save Theme")');
// Verify
await expect(page.locator('text=Theme updated')).toBeVisible({ timeout: 5000 });
});
test('should navigate between tabs', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
const tabs = [
'Profile',
'Security',
'Notifications',
'Appearance',
'Privacy'
];
for (const tab of tabs) {
await page.click(`button[role="tab"]:has-text("${tab}")`);
// Verify tab content is visible
await page.waitForTimeout(100);
const tabPanel = page.locator(`[role="tabpanel"]:visible`);
await expect(tabPanel).toBeVisible();
}
});
test('should show 2FA setup option', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Go to Security tab
await page.click('button[role="tab"]:has-text("Security")');
// Check 2FA section exists
await expect(page.locator('text=Two-Factor Authentication')).toBeVisible();
await expect(page.locator('button:has-text("Enable 2FA")')).toBeVisible();
});
test('should update privacy settings', async ({ page }) => {
await page.goto('http://localhost:5173/settings');
// Go to Privacy tab
await page.click('button[role="tab"]:has-text("Privacy")');
// Toggle privacy options
const privacyToggles = page.locator('input[type="checkbox"]');
const count = await privacyToggles.count();
if (count > 0) {
await privacyToggles.first().click();
// Save
await page.click('button:has-text("Save Privacy Settings")');
// Verify
await expect(page.locator('[role="status"]')).toBeVisible({ timeout: 5000 });
}
});
});