feat: přidání testů – Jest unit testy + Playwright E2E + CI pipeline
Server: - Jest unit testy (88 testů): auth, utils, restaurants, service, voting, pizza - in-memory storage mock pro izolaci testů - oprava race condition při inicializaci Redis (storageReady promise) - dev route dostupná i pro NODE_ENV=test - getStatsMock deterministický (nahrazení Math.random) - exporty interních helperů pro testovatelnost - /api/health endpoint pro Playwright readiness check - tsconfig vylučuje test soubory z produkčního buildu E2E (e2e/): - Playwright s Firefoxem + Chromiem - testy: login, menu, výběr jídla, pizza day životní cyklus, QR/nastavení - trusted-header auth bypass pro testy, video + trace při selhání CI (Woodpecker): - pipeline spouštěna na všech větvích a PR (nejen master) - redis-stack-server service pro E2E – čistý Redis per větev automaticky - kroky: unit testy, build, E2E testy (parallel kde možné) - Docker build zůstává pouze pro master Co-Authored-By: Claude Opus (extra usage) 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import { Page, APIRequestContext } from '@playwright/test';
|
||||
|
||||
/** Přihlásí uživatele přes POST /api/login a uloží JWT do localStorage. */
|
||||
export async function loginViaApi(page: Page, login: string): Promise<void> {
|
||||
const response = await page.request.post('/api/login', {
|
||||
headers: { 'Content-Type': 'application/json', 'remote-user': login },
|
||||
data: {},
|
||||
});
|
||||
const token = await response.json() as string;
|
||||
await page.goto('/');
|
||||
await page.evaluate((t) => localStorage.setItem('token', t), token);
|
||||
}
|
||||
|
||||
/** Vyčistí stav pizza dne pro zadaný dayIndex (0=pondělí…4=pátek) přes dev API. */
|
||||
export async function clearPizzaDay(request: APIRequestContext): Promise<void> {
|
||||
const today = new Date('2025-01-10'); // MOCK_DATA pins to Friday = dayIndex 4
|
||||
await request.post('/api/dev/clear', {
|
||||
headers: { 'Content-Type': 'application/json', 'remote-user': 'e2e-user' },
|
||||
data: { dayIndex: 4 },
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user