From 5bbbdd52091b0eede6da442cd54fae80314735a7 Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Fri, 11 Sep 2026 09:00:20 +0200 Subject: [PATCH] chore: Demo-Daten und Bildaufnahme fuer Benachrichtigungen Die Aufnahme kann jetzt einen einzelnen Ausschnitt statt der ganzen Seite festhalten. Ein Bild der kompletten Einstellungsseite zeigt im Kapitel zu den Benachrichtigungen zu wenig vom Eigentlichen. Co-Authored-By: Claude Opus 5 --- prisma/demo-seed.ts | 35 +++++++++++++++++++++++++++++++++++ screenshots/bilder.spec.ts | 22 ++++++++++++++++++---- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/prisma/demo-seed.ts b/prisma/demo-seed.ts index fee602e..a27b481 100644 --- a/prisma/demo-seed.ts +++ b/prisma/demo-seed.ts @@ -418,6 +418,41 @@ async function main(): Promise { }, }) + // --- Benachrichtigungen --------------------------------------------------- + // Für die Bilder eingeschaltet. Eine leere Karte zeigt nichts von dem, + // was das Kapitel erklärt. + await db.benachrichtigungseinstellung.upsert({ + where: { benutzerId: benutzer.id }, + update: {}, + create: { + benutzerId: benutzer.id, + anlaesse: 'tagesueberblick,faelligkeit,zeitblock', + perPush: true, + perMail: true, + ueberblickUm: 7 * 60, + ruheVon: 20 * 60, + ruheBis: 7 * 60, + ruheAmWochenende: false, + zeitblockVorlaufMinuten: 10, + }, + }) + + await db.pushGeraet.deleteMany({ where: { benutzerId: benutzer.id } }) + await db.pushGeraet.create({ + data: { + benutzerId: benutzer.id, + // Erfunden und unerreichbar. Die Schlüsselfelder halten sonst + // verschlüsselte Werte; hier stehen Platzhalter, weil aus der + // Demo-Instanz ohnehin nichts hinausgeht. + endpunkt: 'https://push.invalid/demo-arbeitsplatz', + p256dh: 'demo', + auth: 'demo', + bezeichnung: 'Firefox auf Windows', + erstelltAm: new Date(Date.UTC(2026, 1, 3, 8, 20)), + zuletztBenutzt: new Date(Date.UTC(2026, 2, 17, 6, 5)), + }, + }) + console.log(`Demo-Daten stehen bereit. Anmeldung: ${DEMO_EMAIL}`) } diff --git a/screenshots/bilder.spec.ts b/screenshots/bilder.spec.ts index 573fa12..15f69a2 100644 --- a/screenshots/bilder.spec.ts +++ b/screenshots/bilder.spec.ts @@ -24,6 +24,13 @@ type Aufnahme = { pfad: string /** Wird vor der Aufnahme ausgeführt, z. B. um ein Formular aufzuklappen. */ vorbereiten?: (seite: Page) => Promise + /** + * Nur diesen Ausschnitt aufnehmen statt der ganzen Seite. + * + * Für Themen, die auf einer gemeinsamen Seite wohnen: ein Bild der ganzen + * Einstellungsseite zeigt im Handbuchkapitel zu wenig vom Eigentlichen. + */ + ausschnitt?: string } const AUFNAHMEN: Aufnahme[] = [ @@ -37,6 +44,11 @@ const AUFNAHMEN: Aufnahme[] = [ { name: 'bereiche', pfad: '/bereiche' }, { name: 'kalenderkonten', pfad: '/kalenderkonten' }, { name: 'einstellungen', pfad: '/einstellungen' }, + { + name: 'benachrichtigungen', + pfad: '/einstellungen', + ausschnitt: '[data-bild="benachrichtigungen"]', + }, { name: 'protokoll', pfad: '/verwaltung/protokoll' }, ] @@ -82,10 +94,12 @@ for (const schema of ['hell', 'dunkel'] as const) { // Der Farbschema-Umschalter und Schriften sollen fertig sein. await seite.waitForTimeout(300) - await seite.screenshot({ - path: `${ZIEL}/${aufnahme.name}-${schema}-${geraet}.png`, - fullPage: true, - }) + const ziel = `${ZIEL}/${aufnahme.name}-${schema}-${geraet}.png` + if (aufnahme.ausschnitt) { + await seite.locator(aufnahme.ausschnitt).screenshot({ path: ziel }) + } else { + await seite.screenshot({ path: ziel, fullPage: true }) + } } await kontext.close()