test(ui): add e2e and integration tests

This commit is contained in:
Tuan-Dat Tran
2026-02-23 13:48:13 +01:00
parent 00af8862d3
commit 4198b91498
9 changed files with 632 additions and 0 deletions

38
tests/e2e/admin.spec.js Normal file
View File

@@ -0,0 +1,38 @@
import { test, expect } from '@playwright/test';
test.describe('Admin Panel', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/admin');
});
test('displays admin navigation', async ({ page }) => {
await expect(page.getByRole('heading', { name: 'CV Admin' })).toBeVisible();
});
test('navigation links work', async ({ page }) => {
await page.click('text=Erfahrung');
await expect(page).toHaveURL(/.*experience/);
await page.click('text=Skills');
await expect(page).toHaveURL(/.*skills/);
await page.click('text=Persönlich');
await expect(page).toHaveURL(/.*admin$/);
});
test('personal form displays fields', async ({ page }) => {
const form = page.locator('form');
await expect(form.locator('input[name="name"]')).toBeVisible();
await expect(form.locator('input[name="title"]')).toBeVisible();
await expect(form.locator('input[name="email"]')).toBeVisible();
});
test('can navigate to experience section', async ({ page }) => {
await page.click('text=Erfahrung');
await expect(page.getByRole('heading', { name: 'Berufserfahrung' })).toBeVisible();
});
test('export button is present', async ({ page }) => {
await expect(page.getByRole('button', { name: /json export/i })).toBeVisible();
});
});

39
tests/e2e/cv.spec.js Normal file
View File

@@ -0,0 +1,39 @@
import { test, expect } from '@playwright/test';
test.describe('CV Page', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/');
});
test('displays hero section with name', async ({ page }) => {
await expect(page.locator('h1')).toContainText('Tuan-Dat Tran');
});
test('displays job title', async ({ page }) => {
const heroTitle = page.locator('section').first().locator('h2');
await expect(heroTitle).toContainText('DevOps Engineer');
});
test('displays experience section', async ({ page }) => {
await expect(page.getByRole('heading', { name: 'Berufserfahrung' })).toBeVisible();
});
test('displays skills section', async ({ page }) => {
await expect(page.getByRole('heading', { name: 'Skills' })).toBeVisible();
});
test('displays education section', async ({ page }) => {
await expect(page.getByRole('heading', { name: 'Ausbildung' })).toBeVisible();
});
test('displays projects section', async ({ page }) => {
await expect(page.getByRole('heading', { name: 'Projekte' })).toBeVisible();
});
test('contact links are present', async ({ page }) => {
const heroSection = page.locator('section').first();
await expect(heroSection.getByRole('link', { name: 'Email' })).toBeVisible();
await expect(heroSection.getByRole('link', { name: 'GitHub' })).toBeVisible();
await expect(heroSection.getByRole('link', { name: 'LinkedIn' })).toBeVisible();
});
});