Der Eingang des Spiegels ist die einzige Tuer, die ohne Anmeldung aufgeht. Vier Faelle: ohne Signatur, falsch signiert, zu alt, und der gute Fall — bei dem eine nicht mehr geschickte Belegung auch hier verschwinden muss. Der Testserver bekommt dafuer dasselbe Geheimnis wie der Test. Eine Pruefung, die immer uebersprungen wird, prueft nichts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { expect, type Page } from '@playwright/test'
|
|
|
|
/** Gemeinsames für alle E2E-Tests. */
|
|
|
|
export const EMAIL = process.env.ADMIN_EMAIL ?? ''
|
|
export const PASSWORT = process.env.ADMIN_PASSWORT ?? ''
|
|
export const VERBINDUNG = process.env.DATABASE_URL ?? ''
|
|
|
|
/**
|
|
* Geheimnis fuer den Spiegel im Test.
|
|
*
|
|
* Der Testserver bekommt denselben Wert ueber playwright.config.ts, sonst
|
|
* liesse sich die Tuer gar nicht pruefen — und eine Pruefung, die immer
|
|
* uebersprungen wird, prueft nichts.
|
|
*/
|
|
export const SPIEGEL_GEHEIMNIS =
|
|
process.env.SPIEGEL_GEHEIMNIS ?? 'e2e-spiegel-geheimnis-nur-lokal'
|
|
|
|
/**
|
|
* Meldet das Testkonto mit Passwort an.
|
|
*
|
|
* Der Knopf gehört zu einem Client-Formular. Ein Klick, der vor der
|
|
* Hydratation ankommt, verpufft folgenlos — die Seite bleibt einfach stehen.
|
|
* Deshalb wird so lange nachgefasst, bis die Startseite da ist; hat der erste
|
|
* Klick schon gewirkt, wird nicht noch einmal geklickt.
|
|
*/
|
|
export async function anmelden(
|
|
seite: Page,
|
|
email: string = EMAIL,
|
|
passwort: string = PASSWORT,
|
|
): Promise<void> {
|
|
await seite.goto('/anmelden')
|
|
await seite.getByLabel('E-Mail-Adresse').fill(email)
|
|
await seite.getByLabel('Passwort').fill(passwort)
|
|
|
|
const knopf = seite.getByRole('button', { name: 'Mit Passwort anmelden' })
|
|
const begruessung = seite.getByRole('heading', { name: /Guten Tag/ })
|
|
|
|
await expect(async () => {
|
|
if (new URL(seite.url()).pathname === '/anmelden') {
|
|
await knopf.click({ timeout: 5_000 })
|
|
}
|
|
await expect(begruessung).toBeVisible({ timeout: 5_000 })
|
|
}).toPass({ timeout: 45_000 })
|
|
}
|