151 lines
13 KiB
Markdown
151 lines
13 KiB
Markdown
# Abnahme
|
||
|
||
## Etappe 1
|
||
|
||
| Kriterium | Nachweis | Stand |
|
||
| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
|
||
| Frischer Checkout startet ohne Cloudron | `npm ci` erfolgreich; README-Setup und lokaler Produktionsstart ausgeführt | erfüllt am 21.10.2026 |
|
||
| Typprüfung und Build erfolgreich | `npm run check`, `npm run build` | erfüllt am 21.10.2026 |
|
||
| Theme bleibt nach Neuladen erhalten | Playwright: System auf Hell wechseln, Reload, DOM und Schalterzustand prüfen | erfüllt am 21.10.2026 |
|
||
| Testdaten überleben Neustart | Gebauten Server zweimal gegen `.data/sendewerk.sqlite` gestartet; Fundusdaten und `/healthz` jeweils vorhanden | erfüllt am 21.10.2026 |
|
||
| Migration wiederholt ausführbar | lokal mehrfach ausgeführt; Verhaltenstest führt Migration zweimal in temporärer DB aus | erfüllt am 21.10.2026 |
|
||
| Seed reproduzierbar | lokal und im Verhaltenstest zweimal ausgeführt; danach 4 Pieces, 1 Sendung und 3 Verwendungen | erfüllt am 21.10.2026 |
|
||
| Tests verwenden getrennte Daten | Vitest und Playwright erzeugen je eigene Datenbank im Betriebssystem-Tempdir | erfüllt am 21.10.2026 |
|
||
| Desktop und Smartphone ohne horizontales Scrollen | 8 Playwright-Abläufe bei 390, 768, 960, 1280 und 1440 Pixeln; Screenshots visuell kontrolliert | erfüllt am 21.10.2026 |
|
||
| Kompakte Arbeitsoberfläche in beiden Farbmodi | 390, 768 und 1440 Pixel jeweils in Light/Dark; einspaltige Mobilkarten, lange Titel, Metadatenumbrüche und Leerzustände | erfüllt am 21.10.2026 |
|
||
| Cloudron-Pfade und Healthcheck vorbereitet | Manifestpfad `/app/data/sendewerk.sqlite`, `/healthz`, `start.sh`; JSON-Kernfelder und Bash-Syntax geprüft | vorbereitet; Container offen |
|
||
| Echte Cloudron-Prüfung | Installation, Backup/Restore, Proxy und read-only Laufzeit | offen, kein Serverzugang |
|
||
|
||
## Ausgeführte Prüfungen
|
||
|
||
- `npm ci`: erfolgreich, 190 Pakete geprüft, 0 gemeldete Schwachstellen
|
||
- `npm run setup`, anschließend erneute Migration und erneuter Seed: erfolgreich
|
||
- `npm test`: 2 Verhaltenstests erfolgreich
|
||
- `npm run lint`: erfolgreich
|
||
- `npm run check`: 0 Fehler und 0 Warnungen
|
||
- `npm run build`: erfolgreich mit `@sveltejs/adapter-node`
|
||
- `npm run test:e2e`: 8 von 8 Browsertests erfolgreich; 390, 768 und 1440 Pixel
|
||
jeweils in Light- und Darkmode sowie Tastaturbedienung, feste Navigation,
|
||
einspaltige Funduskarten, lange Inhalte und Überläufe geprüft
|
||
- Zwei getrennte `npm start`-Läufe: Healthcheck und persistente Daten erfolgreich
|
||
- `bash -n start.sh` und programmatische Manifest-Kernfeldprüfung: erfolgreich
|
||
|
||
## Nicht erfolgreich oder nicht ausführbar
|
||
|
||
- `docker build -t sendewerk:local .`: nicht ausgeführt, weil der installierte
|
||
Docker-Client keinen laufenden Daemon unter `/var/run/docker.sock` erreichen
|
||
konnte.
|
||
- Echte Cloudron-Installation: mangels Serverzugang nicht ausgeführt.
|
||
- Ein zusätzlicher Python-Playwright-Lauf: nicht gestartet, weil das optionale
|
||
Python-Modul `playwright` nicht installiert war. Die projektgebundene
|
||
TypeScript-Playwright-Suite lief stattdessen vollständig erfolgreich.
|
||
|
||
## Etappe 2
|
||
|
||
| Kriterium | Nachweis | Stand |
|
||
| ------------------------------- | ----------------------------------------------------------------------------------- | --------------------- |
|
||
| Erstadmin danach geschlossen | Browser-Setup sowie wiederholter Service-Aufruf geprüft; Seed enthält kein Konto | erfüllt am 21.10.2026 |
|
||
| Login, Logout und lokales HTTP | Browserablauf; `HttpOnly`, `SameSite=Lax`, ohne `Secure` bei expliziter HTTP-Origin | erfüllt am 21.10.2026 |
|
||
| Einladung und Reset | lokale Outbox bis Kontoaktivierung und neuem Login im Browser durchlaufen | erfüllt am 21.10.2026 |
|
||
| Einmalige und abgelaufene Links | Verhaltenstests für Wiederverwendung und Ablauf von Einladung und Reset | erfüllt am 21.10.2026 |
|
||
| Direkte Admin-Aktion verweigert | Thekencrew-POST auf Einladungsaction liefert 403 | erfüllt am 21.10.2026 |
|
||
| Sperrung entzieht Zugriff | aktive Thekencrew-Sitzung wird gelöscht und beim nächsten Request abgewiesen | erfüllt am 21.10.2026 |
|
||
| Keine echte Mail ungefragt | Browser- und Verhaltenstests nutzen ausschließlich temporäre lokale Outbox | erfüllt am 21.10.2026 |
|
||
| Echter SMTP-Versand | nicht ausgeführt, keine Zugangsdaten bereitgestellt | offen |
|
||
|
||
## Ausgeführte Prüfungen Etappe 2
|
||
|
||
- `npm run lint`: erfolgreich
|
||
- `npm run check`: 0 Fehler und 0 Warnungen
|
||
- `npm test`: 9 Auth-, Migrations-, Mail- und Dauer-Verhaltenstests erfolgreich
|
||
- `npm run build`: erfolgreich mit `@sveltejs/adapter-node`
|
||
- `npm run test:e2e`: 9 von 9 Browsertests erfolgreich; Erstadmin,
|
||
Login/Logout, fremder Origin, Einladung, direkte Rollenprüfung, Sperrung,
|
||
Reset sowie bestehende responsive Arbeitsansichten geprüft
|
||
- Lokale Outbox in isolierten temporären Verzeichnissen geprüft
|
||
- Lokaler Produktionsserver der Browsertests über HTTP gestartet; Healthcheck
|
||
und Migration vor Start erfolgreich
|
||
- `bash -n start.sh`: erfolgreich
|
||
|
||
## Etappe 3
|
||
|
||
| Kriterium | Nachweis | Stand |
|
||
| ----------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------- |
|
||
| Anlegen, Bearbeiten, Suchen, Filtern und Reload | Browserrundlauf mit Vorlage, Autosave, Quellen, Status, Suche und Neuladen | erfüllt am 21.10.2026 |
|
||
| Taxonomien unabhängig | Format einzeln sowie Themen und Abschnittskategorien mehrfach gespeichert und gefiltert | erfüllt am 21.10.2026 |
|
||
| Sicheres Markdown | Verhaltenstest und Browservorschau entfernen Skript/JavaScript, Formatierung bleibt erhalten | erfüllt am 21.10.2026 |
|
||
| Private Bilder | Signatur-/Größenprüfung; anonymer Direktrequest erhält keinen Dateiinhalt | erfüllt am 21.10.2026 |
|
||
| Sichtbare Speicherfehler | Actionfehler und Autosave-Fehlerstatus bleiben am Formular sichtbar | erfüllt am 21.10.2026 |
|
||
| Konflikterkennung | zwei Browserseiten; veraltete Revision erhält Konflikt und überschreibt die neue Fassung nicht | erfüllt am 21.10.2026 |
|
||
| Archiv und Wiederherstellung | Browserrundlauf blendet Piece aus und stellt den vorherigen Status wieder her | erfüllt am 21.10.2026 |
|
||
| Duplikat | Verhaltenstest und Browser prüfen unabhängige Kopie samt Zuordnungen und Bild | erfüllt am 21.10.2026 |
|
||
|
||
## Ausgeführte Prüfungen Etappe 3
|
||
|
||
- `npm run lint`: erfolgreich
|
||
- `npm run check`: 0 Fehler und 0 Warnungen
|
||
- `npm test`: 13 Tests in 3 Dateien erfolgreich
|
||
- `npm run build`: erfolgreich mit `@sveltejs/adapter-node`
|
||
- `npm run test:e2e`: 10 von 10 Browsertests erfolgreich
|
||
- Browserprüfung bei 390, 768, 960, 1280 und 1440 Pixeln in beiden Themes ohne
|
||
ungewollten horizontalen Überlauf
|
||
- Mobile Darkmode-Aufnahme des Piece-Editors visuell kontrolliert
|
||
- `bash -n start.sh` und `git diff --check`: erfolgreich
|
||
|
||
## Etappe 4
|
||
|
||
| Kriterium | Nachweis | Stand |
|
||
| ----------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------- |
|
||
| Spieleabend und mehrere JC-/Spieleblöcke | persistierte Spieleabend-Vorlage, Seed-Sendung und Browserrundlauf mit Standardablauf | erfüllt am 21.10.2026 |
|
||
| Reihenfolge und Texte bleiben nach Reload | Verhaltenstests sowie Browsertest für Tastatur- und Drag-and-drop-Sortierung | erfüllt am 21.10.2026 |
|
||
| Original bleibt unverändert | Service- und Browsertest planen dasselbe Piece mehrfach mit eigenen Titeln, Notizen, Dauern | erfüllt am 21.10.2026 |
|
||
| Keine doppelte Dauer; Reserve zählt nicht | explizite und summierte Abschnitte sowie Reserve in Verhaltenstest und Browser geprüft | erfüllt am 21.10.2026 |
|
||
| Entfernen betrifft nur Einplanung | Verhaltenstest löscht Verwendung und Abschnittskopie, nicht das Original | erfüllt am 21.10.2026 |
|
||
| Sendungsänderung verändert keine Vorlage | tiefe Vorlagenkopie vor und nach Abschnittsänderung verglichen | erfüllt am 21.10.2026 |
|
||
| Smartphone-Planungsablauf | Abschnittsanlage, Pane-Umschaltung und Überlauf bei 390 Pixeln geprüft | erfüllt am 21.10.2026 |
|
||
| Gleichwertige Bedienwege | Drag-and-drop, Enter auf Verschiebeschaltfläche sowie klick-/touchbare Zielauswahl geprüft | erfüllt am 21.10.2026 |
|
||
| Lokale Planungsaktualisierung | Quelle und Reserve per Drag-and-drop ohne Dokumentreload; lokaler Speicherzustand geprüft | erfüllt am 21.10.2026 |
|
||
| Sichtbare Einfügeposition | Abschnitt, Fundusquelle und Reserve zeigen vor dem Drop Vorschau und transparentes Original | erfüllt am 21.10.2026 |
|
||
| Piece-Dauer in Minuten | Fundus- und Verwendungseditor rechnen Minuten serverseitig in ganze Sekunden um | erfüllt am 21.10.2026 |
|
||
| Gleichzeitige Änderungen | veraltete showweite Revision rollt die gesamte Mutation zurück | erfüllt am 21.10.2026 |
|
||
|
||
## Ausgeführte Prüfungen Etappe 4
|
||
|
||
- `npm run lint`: erfolgreich
|
||
- `npm run check`: 0 Fehler und 0 Warnungen
|
||
- `npm test`: 18 Tests in 4 Dateien erfolgreich
|
||
- `npm run build`: erfolgreich mit `@sveltejs/adapter-node`
|
||
- `npm run test:e2e`: 11 von 11 Browsertests erfolgreich
|
||
- Browserprüfung bei 390, 768, 960, 1280 und 1440 Pixeln in beiden Themes ohne
|
||
ungewollten horizontalen Überlauf
|
||
- Mobile Aufnahme des vollständigen Sendungsbaukastens visuell kontrolliert
|
||
- `bash -n start.sh` und `git diff --check`: erfolgreich
|
||
|
||
## Etappe 5
|
||
|
||
| Kriterium | Nachweis | Stand |
|
||
| ------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------- |
|
||
| Lesbare Moderation | Prompter-Schrift, Einleitung und Überleitung im Browser; Recherche initial geschlossen | erfüllt am 22.10.2026 |
|
||
| Wiederherstellung | Live-Stand, Laufintervalle, Schriftgröße und Leseposition nach Neuladen geprüft | erfüllt am 22.10.2026 |
|
||
| Keine doppelte Zeiterfassung | Verhaltenstest wiederholt dieselbe Befehls-ID und findet genau ein Zeitintervall | erfüllt am 22.10.2026 |
|
||
| Explizite Präsentation | Zweitfenster bleibt nach Start leer und ändert sich erst durch „Präsentieren“ | erfüllt am 22.10.2026 |
|
||
| Getrennte sichere Ausgabe | anonymer Browserkontext prüft Text, Bild, HTML, JSON und fremde Medien ohne private Daten | erfüllt am 22.10.2026 |
|
||
| Reserve und Reihenfolge | Reserve als nächstes Piece eingefügt; offene Reihenfolge und serverseitige Live-Grenze geprüft | erfüllt am 22.10.2026 |
|
||
| Popup- und Verbindungsfehler sichtbar | blockiertes Popup sowie unterbrochenes und wiederhergestelltes State-Polling im Browser geprüft | erfüllt am 22.10.2026 |
|
||
| Reale OBS-Browserquelle | lokale tokenisierte Browserausgabe vorhanden; kein OBS auf der Prüfmaschine | offen |
|
||
|
||
## Ausgeführte Prüfungen Etappe 5
|
||
|
||
- `npm run lint`: erfolgreich
|
||
- `npm run check`: 0 Fehler und 0 Warnungen
|
||
- `npm test`: 20 Tests in 5 Dateien erfolgreich
|
||
- `npm run build`: erfolgreich mit `@sveltejs/adapter-node`
|
||
- `npm run test:e2e`: 11 von 11 Browsertests erfolgreich
|
||
- Anonymer zweiter Chromium-Kontext mit Präsentationstext, Quelle, geschütztem
|
||
Bild und gefiltertem JSON geprüft
|
||
- Mobile Aufnahme der Live-Steuerung bei 390 × 844 Pixeln und Desktopaufnahme
|
||
der heinzlive-Ausgabe visuell kontrolliert
|
||
- Popup-Blockade sowie Verbindungsabbruch und automatische Wiederverbindung im
|
||
Browser geprüft
|
||
- `bash -n start.sh` und `git diff --check`: erfolgreich
|