full upgrade to dev
This commit is contained in:
95
e2e/critical-paths.spec.ts
Normal file
95
e2e/critical-paths.spec.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
/**
|
||||
* Critical Path Tests
|
||||
* Tests the most important user flows
|
||||
*/
|
||||
test.describe('Critical Paths', () => {
|
||||
test('Home page loads and displays correctly', async ({ page }) => {
|
||||
await page.goto('/', { waitUntil: 'networkidle' });
|
||||
|
||||
// Wait for page to be fully loaded
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
|
||||
// Check page title (more flexible)
|
||||
const title = await page.title();
|
||||
expect(title).toMatch(/Portfolio|Dennis|Konkol/i);
|
||||
|
||||
// Check key sections exist
|
||||
await expect(page.locator('header, nav')).toBeVisible({ timeout: 10000 });
|
||||
await expect(page.locator('main')).toBeVisible({ timeout: 10000 });
|
||||
|
||||
// Check for hero section or any content
|
||||
const hero = page.locator('section, [role="banner"], h1, body').first();
|
||||
await expect(hero).toBeVisible({ timeout: 10000 });
|
||||
});
|
||||
|
||||
test('Projects page loads and displays projects', async ({ page }) => {
|
||||
await page.goto('/projects', { waitUntil: 'networkidle' });
|
||||
|
||||
// Wait for projects to load
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
|
||||
// Check page title (more flexible)
|
||||
const title = await page.title();
|
||||
expect(title.length).toBeGreaterThan(0); // Just check title exists
|
||||
|
||||
// Check projects are displayed (at least one project card or content)
|
||||
const projectCards = page.locator('[data-testid="project-card"], article, .project-card, main');
|
||||
const count = await projectCards.count();
|
||||
|
||||
// At minimum, main content should be visible
|
||||
expect(count).toBeGreaterThan(0);
|
||||
await expect(projectCards.first()).toBeVisible({ timeout: 10000 });
|
||||
});
|
||||
|
||||
test('Individual project page loads', async ({ page }) => {
|
||||
// First, get a project slug from the projects page
|
||||
await page.goto('/projects', { waitUntil: 'networkidle' });
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
|
||||
// Try to find a project link
|
||||
const projectLink = page.locator('a[href*="/projects/"]').first();
|
||||
|
||||
if (await projectLink.count() > 0) {
|
||||
const href = await projectLink.getAttribute('href');
|
||||
if (href) {
|
||||
await page.goto(href, { waitUntil: 'networkidle' });
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
|
||||
// Check project content is visible (more flexible)
|
||||
const content = page.locator('h1, h2, main, article, body');
|
||||
await expect(content.first()).toBeVisible({ timeout: 10000 });
|
||||
}
|
||||
} else {
|
||||
// Skip test if no projects exist
|
||||
test.skip();
|
||||
}
|
||||
});
|
||||
|
||||
test('Admin dashboard is accessible', async ({ page }) => {
|
||||
await page.goto('/manage', { waitUntil: 'networkidle' });
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
|
||||
// Should show login form or dashboard or any content
|
||||
const content = page.locator('form, [data-testid="admin-dashboard"], body, main');
|
||||
await expect(content.first()).toBeVisible({ timeout: 10000 });
|
||||
});
|
||||
|
||||
test('API health endpoint works', async ({ request }) => {
|
||||
const response = await request.get('/api/health');
|
||||
expect(response.ok()).toBeTruthy();
|
||||
|
||||
const data = await response.json();
|
||||
expect(data).toHaveProperty('status');
|
||||
});
|
||||
|
||||
test('API projects endpoint returns data', async ({ request }) => {
|
||||
const response = await request.get('/api/projects?published=true');
|
||||
expect(response.ok()).toBeTruthy();
|
||||
|
||||
const data = await response.json();
|
||||
expect(data).toHaveProperty('projects');
|
||||
expect(Array.isArray(data.projects)).toBeTruthy();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user