Terminplaner: Einbau-Skript – Nachbesserungen

429 ohne Schleife (Meldung und Erneut-versuchen-Knopf, Formulare bleiben stehen), Schriftfarbe
auf der Betriebsfarbe mit mindestens 4,5 : 1, AGB-Link aus der oeffentlichen Konfiguration
(betrieb.agbUrl), Haken starten bei geaenderter Auswahl ohne Haken, Fehler ohne Feld nicht
verschluckt, Konfiguration fail closed, ladeNeu fuer Neuladen und neu_laden, Tastatur und
Fokus (Modifikatoren, Monatspfeile, Belehrungstext), Aufraeumen. UI-Testserver: Timer,
offene Verbindungen, Hinweis auf sessionCookie.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-03 08:17:44 +00:00
1 parent 5fef7e47f0
commit 4465ac7b94
9 files changed
+501 -88

No files matched your search

+11 -1
View File
@@ -12,6 +12,11 @@
// damit Tage und Uhrzeiten in Screenshots gleich bleiben und Zwischenspeicher, Haltezeiten und Formular-Token trotzdem
// ablaufen. srv.schiebeUhr(ms) verschiebt sie (z. B. +3 h: Formular-Token abgelaufen), srv.setzeUhr(date) setzt sie neu.
//
// Cookies fuer das Portal (Aufgaben 21a/21b): sessionCookie/customerCookie aus test/support/testApp.js und fixtures.js erst NACH dem
// Start dieses Servers dynamisch importieren (testApp.js prueft beim Laden, dass die Umgebung auf die Nachbauten zeigt):
// const srv = await startTermineUiServer()
// const { sessionCookie } = await import('../support/testApp.js')
//
// Seitenherkunft: srv.url ist http://127.0.0.1:PORT, srv.pageOrigin ist http://localhost:PORT (derselbe Server, anderer Host).
// Mit { crossOrigin: true } gilt pageOrigin als Herkunft des Portals (config.publicBaseUrl): Seiten von pageOrigin mit
// data-api=srv.url sind dann echte Cross-Origin-Anfragen (Preflight fuer POST), die der Server erlaubt.
@@ -64,6 +69,7 @@ export function salonEingabe(ueberschreibe = {}) {
websiteUrl: 'https://salon-mueller.example',
impressumUrl: 'https://salon-mueller.example/impressum',
datenschutzUrl: 'https://salon-mueller.example/datenschutz',
agbUrl: 'https://salon-mueller.example/agb',
},
anrede: 'sie',
farbe: '#0f766e',
@@ -259,7 +265,11 @@ export async function startTermineUiServer({ jetzt = JETZT, crossOrigin = false,
async beendeApp() {
if (srv.appBeendet) return
srv.appBeendet = true
await Promise.race([app.close(), new Promise((resolve) => setTimeout(resolve, 3000))])
let frist = null
const geschlossen = app.close()
app.server.closeAllConnections?.() // offene Verbindungen des Browsers (Keep-Alive) halten close() sonst auf
await Promise.race([geschlossen, new Promise((resolve) => { frist = setTimeout(resolve, 3000) })])
clearTimeout(frist)
},
appBeendet: false,
}