import { expect, test } from '@playwright/test' /** * Rauchtest der Anmeldung. * * Prüft den Weg, der in M1 wirklich trägt: Wer nicht angemeldet ist, kommt * nirgends hin; mit richtigem Passwort schon; und die Verwaltungsseite bleibt * verschlossen, wenn die Rolle nicht reicht. * * Voraussetzung: "npm run db:seed" ist gelaufen und ADMIN_EMAIL sowie * ADMIN_PASSWORT sind gesetzt. */ const EMAIL = process.env.ADMIN_EMAIL ?? '' const PASSWORT = process.env.ADMIN_PASSWORT ?? '' test.describe('Anmeldung', () => { test.skip( !EMAIL || !PASSWORT, 'ADMIN_EMAIL und ADMIN_PASSWORT sind nicht gesetzt – ohne sie gibt es kein Testkonto.', ) test('leitet nicht Angemeldete zur Anmeldeseite', async ({ page }) => { await page.goto('/') await expect(page).toHaveURL(/\/anmelden/) await expect(page.getByRole('heading', { name: 'Planer' })).toBeVisible() }) test('merkt sich das Ziel und kehrt nach der Anmeldung dorthin zurück', async ({ page, }) => { await page.goto('/bereiche') await expect(page).toHaveURL(/\/anmelden\?weiter=%2Fbereiche/) }) test('weist falsche Zugangsdaten ab, ohne zu verraten warum', async ({ page }) => { await page.goto('/anmelden') await page.getByLabel('E-Mail-Adresse').fill(EMAIL) await page.getByLabel('Passwort').fill('ganz-sicher-falsch-123') await page.getByRole('button', { name: 'Mit Passwort anmelden' }).click() await expect(page.getByText('Anmeldung nicht möglich')).toBeVisible() await expect(page).toHaveURL(/\/anmelden/) }) test('lässt mit richtigem Passwort hinein und wieder hinaus', async ({ page }) => { await page.goto('/anmelden') await page.getByLabel('E-Mail-Adresse').fill(EMAIL) await page.getByLabel('Passwort').fill(PASSWORT) await page.getByRole('button', { name: 'Mit Passwort anmelden' }).click() await expect(page.getByRole('heading', { name: /Guten Tag/ })).toBeVisible() // Alltagspunkte stehen in der Leiste, Einrichtung liegt hinter "Mehr". await expect(page.getByRole('link', { name: 'Aufgaben', exact: true })).toBeVisible() await expect(page.getByRole('link', { name: 'Bereiche', exact: true })).toBeHidden() await page.getByText('Mehr', { exact: true }).click() await expect(page.getByRole('link', { name: 'Bereiche', exact: true })).toBeVisible() await page.getByTitle('Abmelden').click() await expect(page).toHaveURL(/\/anmelden/) }) test('zeigt der Verwaltung das Protokoll', async ({ page }) => { await page.goto('/anmelden') await page.getByLabel('E-Mail-Adresse').fill(EMAIL) await page.getByLabel('Passwort').fill(PASSWORT) await page.getByRole('button', { name: 'Mit Passwort anmelden' }).click() await expect(page.getByRole('heading', { name: /Guten Tag/ })).toBeVisible() // Das Protokoll liegt hinter "Mehr" – aufklappen, dann hin. await page.getByText('Mehr', { exact: true }).click() await page.getByRole('link', { name: 'Protokoll' }).click() await expect(page.getByRole('heading', { name: 'Protokoll' })).toBeVisible() }) }) test('der Health-Endpunkt antwortet ohne Anmeldung', async ({ request }) => { const antwort = await request.get('/api/health') expect(antwort.ok()).toBe(true) const inhalt = (await antwort.json()) as Record expect(inhalt.status).toBe('ok') expect(inhalt.datenbank).toBe('ok') expect(typeof inhalt.version).toBe('string') })