learning_ai_clock/web/e2e/privacy-terms.spec.ts

37 lines
1.5 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.describe('Privacy Page', () => {
test('renders privacy policy with all sections', async ({ page }) => {
await page.goto('/privacy');
await expect(page.getByText('Privacy Policy')).toBeVisible();
await expect(page.getByText('1. What We Collect')).toBeVisible();
await expect(page.getByText('2. Local Storage')).toBeVisible();
await expect(page.getByText('3. Analytics')).toBeVisible();
await expect(page.getByText('4. Notifications')).toBeVisible();
await expect(page.getByText('5. Cloud Sync (Future)')).toBeVisible();
await expect(page.getByText('6. Third Parties')).toBeVisible();
await expect(page.getByText('7. Contact')).toBeVisible();
});
test('has back link to dashboard', async ({ page }) => {
await page.goto('/privacy');
await expect(page.getByRole('link', { name: /back to chronomind/i })).toBeVisible();
});
});
test.describe('Terms Page', () => {
test('renders terms of service page', async ({ page }) => {
await page.goto('/terms');
await expect(page.locator('h1').first()).toBeVisible();
});
test('page renders without console errors', async ({ page }) => {
const errors: string[] = [];
page.on('pageerror', err => errors.push(err.message));
await page.goto('/terms');
await page.waitForLoadState('domcontentloaded');
const realErrors = errors.filter(e => !e.includes('fetch') && !e.includes('Failed') && !e.includes('Invalid or unexpected token'));
expect(realErrors).toHaveLength(0);
});
});