HH/e2e/tests/public-pages.spec.ts
2026-04-08 17:13:35 +03:00

70 lines
3.0 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.use({ storageState: { cookies: [], origins: [] } });
test.describe.configure({ mode: 'serial' });
test.describe('Public Pages - No Auth Required', () => {
test('health check endpoint returns OK', async ({ request }) => {
const response = await request.get('/health/');
expect(response.status()).toBe(200);
});
test('public submission landing page loads', async ({ page }) => {
await page.goto('/core/public/submit/');
await page.waitForSelector('.selection-card');
await expect(page.locator('.selection-card')).toHaveCount(3);
await expect(page.locator('.selection-card[data-type="complaint"]')).toBeVisible();
await expect(page.locator('.selection-card[data-type="observation"]')).toBeVisible();
await expect(page.locator('.selection-card[data-type="inquiry"]')).toBeVisible();
});
test('login page loads with form fields', async ({ page }) => {
await page.goto('/accounts/login/');
await page.waitForSelector('#email');
await expect(page.locator('#email')).toBeVisible();
await expect(page.locator('#password')).toBeVisible();
await expect(page.locator('button[type="submit"]')).toBeVisible();
await expect(page.locator('h1')).toContainText('Welcome to PX360');
});
test('password reset page loads', async ({ page }) => {
await page.goto('/accounts/password/reset/');
await page.waitForSelector('#id_email');
await expect(page.locator('#id_email')).toBeVisible();
await expect(page.locator('button[type="submit"]')).toContainText('Send Reset Link');
});
test('public complaint track page loads', async ({ page }) => {
await page.goto('/complaints/public/track/');
await page.waitForSelector('input[name="reference_number"]');
await expect(page.locator('input[name="reference_number"]')).toBeVisible();
await expect(page.locator('button[type="submit"]')).toContainText('Track Status');
});
test('public observation track page loads', async ({ page }) => {
await page.goto('/observations/track/');
await page.waitForSelector('input[name="tracking_code"]');
await expect(page.locator('input[name="tracking_code"]')).toBeVisible();
await expect(page.locator('button[type="submit"]')).toContainText('Track');
});
test('public observation submit page loads', async ({ page }) => {
await page.goto('/observations/new/');
await page.waitForSelector('textarea[name="description"]');
await expect(page.locator('textarea[name="description"]')).toBeVisible();
await expect(page.locator('.severity-option')).toHaveCount(4);
});
test('unauthenticated access redirects to login', async ({ page }) => {
await page.goto('/');
await page.waitForURL(/\/accounts\/login\/?/, { timeout: 10000 });
await expect(page.locator('#email')).toBeVisible();
});
test('API docs page is accessible', async ({ page }) => {
const response = await page.goto('/api/docs/');
expect(response?.status()).toBe(200);
});
});