Test-Protokoll: Benutzeroberflächen
Systematisches UI-Testprotokoll für alle drei Prilog-Frontends. Jeder Test wird manuell im Browser durchgeführt. Alle Funktionen einmal durchklicken und absegnen.
Stand: März 2026
Voraussetzungen
bash
# Infrastruktur
cd prilog-infra && docker compose -f docker-compose.dev.yml up -d
# Backend
cd prilog-backend-api && npm run dev # Port 3001
# Alle 3 Frontends
cd prilog-admin && npm run dev # Port 3004
cd prilog-portal && npm run dev # Port 3003
cd prilog-web-client && npm run dev # Port 5173Mindestens ein Tenant mit abgeschlossener Installation muss existieren.
Teil A: Admin-Dashboard (http://localhost:3004)
A1. Login & Dashboard
- [ ] A1.1 Login-Seite öffnen → Passwort-Feld sichtbar
- [ ] A1.2 Falsches Passwort eingeben → Fehlermeldung erscheint
- [ ] A1.3 Richtiges Passwort eingeben → Weiterleitung zum Dashboard
- [ ] A1.4 Dashboard: 6 KPI-Cards sichtbar (Orders, aktive Orders, offene Zahlungen, offene Installationen, Connector-Alerts, Umsatz)
- [ ] A1.5 Dashboard: Letzte Orders-Tabelle mit Links zu Details
A2. Orders
- [ ] A2.1
/ordersöffnen → Tabelle mit allen Bestellungen - [ ] A2.2 Suchfeld: Nach Schulname oder Domain filtern → Tabelle filtert sich
- [ ] A2.3 Status-Dropdown: Nach Status filtern (active/pending) → korrekte Filterung
- [ ] A2.4 Zahlungsstatus-Dropdown: Filtern → korrekte Filterung
- [ ] A2.5 Installationsstatus-Dropdown: Filtern → korrekte Filterung
- [ ] A2.6 Pagination: Vor/Zurück-Buttons funktionieren
- [ ] A2.7 Auf eine Order klicken → Detail-Seite öffnet sich
A3. Order-Detail
- [ ] A3.1
/orders/{orderId}→ Order-Zusammenfassung sichtbar - [ ] A3.2 Provisioning-Steps-Tracker: 14 Schritte mit Status-Icons (pending/running/success/error/skipped)
- [ ] A3.3 Schritt-Details mit Zeitstempeln und Dauer sichtbar
- [ ] A3.4 Tenant-Informationen werden angezeigt
A4. Tenants
- [ ] A4.1
/tenantsöffnen → Tabelle aller aktiven Tenants - [ ] A4.2 Suche nach Tenant-Key oder Subdomain → filtert korrekt
- [ ] A4.3 Tenant-Zeile zeigt: Name, Domain, Runtime-Status, Order-Badges, Zähler
- [ ] A4.4 Auf Tenant klicken → Detail-Seite
A5. Tenant-Detail
- [ ] A5.1
/tenants/{id}→ Tenant-Zusammenfassung (Name, Key, Domain) - [ ] A5.2 Runtime-Info sichtbar (Status, IP, Port)
- [ ] A5.3 Rollen-Selector funktioniert (OWNER/ADMIN/MANAGER/MEMBER/GUEST)
- [ ] A5.4 Event-History ist aufklappbar
- [ ] A5.5 Sync-Status-Indikatoren werden angezeigt
A6. Payments
- [ ] A6.1
/paymentsöffnen → Tabelle mit Stripe-Daten - [ ] A6.2 Stat-Cards: Gesamtkunden, bezahlte Kunden, Umsatz
- [ ] A6.3 Tabelle zeigt: Schule, Plan, Preis, Zahlungsstatus, Methode, Stripe-IDs
- [ ] A6.4 Externer Link öffnet Stripe-Dashboard (Icon sichtbar)
A7. Tickets
- [ ] A7.1
/ticketsöffnen → Ticket-Tabelle - [ ] A7.2 Status-Filter funktioniert (offen/in_bearbeitung/geloest/geschlossen)
- [ ] A7.3 Priorität-Filter funktioniert
- [ ] A7.4 Kategorie-Filter funktioniert
- [ ] A7.5 "Neues Ticket"-Button → Modal-Formular öffnet sich
- [ ] A7.6 Ticket erstellen mit Betreff, Kategorie, Priorität, Nachricht → erscheint in der Liste
A8. Ticket-Detail
- [ ] A8.1
/tickets/{id}→ Ticket-Conversation sichtbar - [ ] A8.2 Status/Priorität/Kategorie per Dropdown änderbar
- [ ] A8.3 Antwort schreiben → "Senden" → erscheint als Admin-Bubble
- [ ] A8.4 "Interne Notiz" Checkbox → Notiz wird anders dargestellt
- [ ] A8.5 Anhänge werden angezeigt (falls vorhanden)
A9. Server & Agents
- [ ] A9.1
/serversöffnen → Server-Tiers Tabelle (Preise) - [ ] A9.2 Tier bearbeiten: Werte ändern → Speichern → Werte persistiert
- [ ] A9.3 Neuen Tier hinzufügen → erscheint in der Tabelle
- [ ] A9.4
/agentsöffnen → Live-Dashboard der verbundenen Agents - [ ] A9.5 Agent-Card: Online-Status (grün/grau), Subdomain, Verbindungszeit
- [ ] A9.6 Agent aufklappen → Tabs: Metriken (CPU/RAM/Disk), Commands, Logs, Module
- [ ] A9.7 Logs-Tab: EventSource-Stream wählen (Synapse/Nginx/Agent) → Logs fließen live
A10. Module
- [ ] A10.1
/modulesöffnen → Modul-Katalog nach Kategorie gruppiert - [ ] A10.2 Modul-Card: Name, Version, Kategorie, Status, Preis sichtbar
- [ ] A10.3 "Initialize Defaults" Button funktioniert (falls sichtbar)
A11. Provision Scripts
- [ ] A11.1
/scriptsöffnen → Liste der Cloud-Init Scripts - [ ] A11.2 Script-Status sichtbar (draft/testing/stable), Default-Stern
- [ ] A11.3 Neues Script hinzufügen → Modal → Speichern
- [ ] A11.4 Script-Status ändern per Dropdown
- [ ] A11.5 Script-Inhalt aufklappen → Monospace-Darstellung
- [ ] A11.6 "Als Standard setzen" (nur bei stable) → Stern wechselt
A12. Credentials
- [ ] A12.1
/credentialsöffnen → Tabelle mit API-Keys, Zertifikaten, Abos - [ ] A12.2 Ablaufstatus farbcodiert (grün = ok, gelb = bald, rot = abgelaufen)
- [ ] A12.3 "Hinzufügen" → Modal mit Name, Provider, Kategorie, Ablaufdatum
- [ ] A12.4 Bearbeiten (Stift-Icon) → Werte änderbar
- [ ] A12.5 Löschen (Papierkorb-Icon) → Bestätigung → gelöscht
A13. Gesperrte Subdomains
- [ ] A13.1
/blocked-subdomainsöffnen → Liste mit Grund-Gruppierung - [ ] A13.2 Neue Subdomain sperren: Name + Grund-Dropdown → erscheint in Liste
- [ ] A13.3 Suche funktioniert
- [ ] A13.4 Subdomain entsperren (Löschen) → Bestätigung → entfernt
A14. Logs & Marketing
- [ ] A14.1
/logsöffnen → Installations-Logs Tabelle - [ ] A14.2 Suche nach Order-ID funktioniert
- [ ] A14.3 Status-Filter funktioniert
- [ ] A14.4 JSON-Metadaten aufklappbar
- [ ] A14.5
/marketing-inquiriesöffnen → Testanfragen-Liste - [ ] A14.6 Stat-Cards: Gesamt, Neu, Kontaktiert
- [ ] A14.7 Status ändern per Dropdown (new/contacted/closed)
A15. Preise
- [ ] A15.1
/pricesöffnen → Kunden-Preistabelle - [ ] A15.2 Nutzer-Breakdown sichtbar (Mitarbeiter/Schüler/Eltern)
- [ ] A15.3 Individuellen Preis setzen (Stift-Icon) → Wert eingeben → Stern (★) erscheint
- [ ] A15.4 Individuellen Preis zurücksetzen (X) → Tier-Standard wird verwendet
A16. E-Mails
- [ ] A16.1
/emailsöffnen → Transaktions-E-Mail-Log - [ ] A16.2 Tabelle zeigt: Empfänger, Betreff, Typ, Status, Zeitstempel
A17. Cron-Jobs
- [ ] A17.1
/cronsöffnen → 6 Job-Cards sichtbar - [ ] A17.2 Jede Card zeigt: Name, Beschreibung, Schedule, Status-Icon, letzter Lauf
- [ ] A17.3 "Auslösen"-Button → Spinner → Ergebnis-Nachricht
- [ ] A17.4 Verlauf aufklappen → Letzte Läufe mit Zeitstempel und Dauer
- [ ] A17.5 "Aktualisieren"-Button → Daten werden neu geladen
A18. Sidebar & Theme
- [ ] A18.1 Sidebar: Alle Menüpunkte vorhanden und verlinkt
- [ ] A18.2 Aktiver Menüpunkt ist hervorgehoben
- [ ] A18.3 Alert-Badges bei Tenants/Credentials (falls Alerts vorhanden)
- [ ] A18.4 Theme-Umschalter: Light → System → Dark → Darstellung ändert sich
- [ ] A18.5 Abmelden → Zurück zum Login
Teil B: Kunden-Portal (http://localhost:3003)
B1. Login & Passwort
- [ ] B1.1 Login-Seite öffnen → E-Mail/Passwort-Formular
- [ ] B1.2 Falsches Passwort → Fehlermeldung
- [ ] B1.3 Korrektes Login → Weiterleitung zum Dashboard
- [ ] B1.4 "Passwort vergessen?" → Formular für E-Mail-Eingabe
- [ ] B1.5 Passwort-Reset-Link anfordern → Bestätigungsmeldung
B2. Dashboard
- [ ] B2.1
/dashboard→ Begrüßung mit Nutzername - [ ] B2.2 Quick-Access-Cards sichtbar: Server, Benutzer, Rechnungen, Support
- [ ] B2.3 "Meine Berechtigungen"-Panel: Rolle + Capabilities als Badges
B3. Server
- [ ] B3.1
/server→ Server-Status-Cards (Status, Zahlung, Installation) - [ ] B3.2 Subdomain und Server-IP als Code-Block sichtbar
- [ ] B3.3 Matrix-Domain und Web-App-Domain als Links
- [ ] B3.4 Plan, Monatspreis, Max-Users, Speicherlimit angezeigt
- [ ] B3.5 Admin-Passwort ändern (nur wenn Payment+Installation complete):
- Aktuelles Passwort eingeben
- Neues Passwort + Bestätigung
- Validierung: min 8 Zeichen, Passwörter müssen übereinstimmen
- Speichern → Erfolgsmeldung
B4. Benutzerkonten
- [ ] B4.1
/users/accounts→ Benutzerverzeichnis-Tabelle - [ ] B4.2 Suche nach Name/E-Mail → filtert korrekt
- [ ] B4.3 Nutzer erstellen: Formular mit Name, E-Mail, Telefon, Adresse, Nutzertyp
- [ ] B4.4 Nutzer bearbeiten → Daten ändern → Speichern
- [ ] B4.5 Nutzer aktivieren/deaktivieren
- [ ] B4.6 Passwort zurücksetzen
B5. Nutzertypen
- [ ] B5.1
/users/accounts?view=types→ Nutzertypen-Verwaltung - [ ] B5.2 Neuen Nutzertyp erstellen (z.B. "Lehrkraft", "Schüler")
- [ ] B5.3 Nutzertyp bearbeiten (Label, Beschreibung, Sortierung)
- [ ] B5.4 Nutzertyp deaktivieren
B6. Spaces
- [ ] B6.1
/users/spaces→ Space-Liste - [ ] B6.2 Neuen Space erstellen: Name, Typ, Sichtbarkeit, Parent-Space
- [ ] B6.3 Space bearbeiten: Name, Capabilities (Chat, Dateien, Mitglieder, Moderation, Räume)
- [ ] B6.4 Space-Hierarchie sichtbar (Parent-Child)
- [ ] B6.5 Space-Manager zuweisen (PRIMARY/DEPUTY)
- [ ] B6.6 Nutzertyp-Policies: Default-Rolle pro Nutzertyp setzen
- [ ] B6.7 Mitglieder verwalten: Hinzufügen, Rolle ändern, Status ändern, Entfernen
- [ ] B6.8 Bulk-Operationen: Mehrere Mitglieder → Rolle ändern / Status ändern / Entfernen
B7. Rollenmatrix
- [ ] B7.1
/users/roles→ Rollenmatrix mit Berechtigungen - [ ] B7.2 Standard-Rollen sichtbar (OWNER, ADMIN, SPACE_ADMIN, MEMBER, GUEST)
- [ ] B7.3 Neue Rolle erstellen: Name, Beschreibung, Berechtigungen
- [ ] B7.4 Rolle bearbeiten: Berechtigungen ändern → Speichern
- [ ] B7.5 Rolle löschen (nicht für geschützte Rollen)
B8. Mitglieder & Zuweisungen
- [ ] B8.1
/users/assignments→ Mitglieder- und Space-Zuweisungen - [ ] B8.2 Nutzer einem Space zuweisen
B9. Einladungen & Zugangsanträge
- [ ] B9.1 Einladung erstellen: E-Mail, Name, Nutzertyp, Space, Rolle, Ablaufdatum
- [ ] B9.2 Einladungsliste: Status (pending/claimed/revoked), Aktionen
- [ ] B9.3 Einladung widerrufen
- [ ] B9.4 Zugangsanträge: Liste mit Status (pending/approved/rejected)
- [ ] B9.5 Zugangsantrag genehmigen → Nutzer wird erstellt
- [ ] B9.6 Zugangsantrag ablehnen
B10. Rechnungen
- [ ] B10.1
/invoices→ Rechnungstabelle - [ ] B10.2 Tabelle zeigt: Datum, Betrag, Status-Badge
- [ ] B10.3 PDF-Download-Button funktioniert
- [ ] B10.4 Leerzustand wenn keine Rechnungen vorhanden
B11. Support
- [ ] B11.1
/support→ Ticket-Liste - [ ] B11.2 "Neue Anfrage" → Formular: Betreff, Kategorie, Nachricht
- [ ] B11.3 Ticket erstellen → erscheint in Liste
- [ ] B11.4 Ticket öffnen → Conversation-View
- [ ] B11.5 Antwort schreiben → erscheint als Kunden-Bubble
- [ ] B11.6 Admin-Antworten werden korrekt dargestellt (andere Farbe/Seite)
B12. Kontaktdaten
- [ ] B12.1
/contact→ Organisation (nur lesbar): Firma, Kundennummer - [ ] B12.2 Technischer Kontakt bearbeitbar: Vorname, Nachname, E-Mail, Telefon
- [ ] B12.3 Speichern → Erfolgsmeldung
B13. Module
- [ ] B13.1
/modules→ Instanz-Module (Basis-Module + Erweiterungen) - [ ] B13.2 Modul-Cards: Name, Beschreibung, Preis, Status
- [ ] B13.3 Installieren-Button (falls verfügbar) → Modul wird installiert
- [ ] B13.4 Space-Erweiterungen: Pro-Space Aktivierung/Deaktivierung
- [ ] B13.5 Speicher-Tarife sichtbar (Starter/Standard/Professional)
- [ ] B13.6 Tarif pro Space wählbar → Aktivieren/Deaktivieren-Button
- [ ] B13.7 Erweitertes Aufklappen: Tarif-Auswahl bei erweiterten Optionen
B14. Modul-Store
- [ ] B14.1
/modules/store→ Store-Katalog - [ ] B14.2 Suche → filtert Module
- [ ] B14.3 Kategorie-Buttons → Filterung nach Kategorie
- [ ] B14.4 Modul-Card: Name, Typ-Badge, Beschreibung, Autor, Version, Preis, Rating, Installationszahl
- [ ] B14.5 "Installieren"-Button → Modul wird installiert + aktiviert
- [ ] B14.6 "Deaktivieren"-Button bei aktiven Modulen
B15. Space-Store
- [ ] B15.1
/modules/spaces→ Space-Templates - [ ] B15.2 Template-Auswahl: Klassenzimmer, Kollegium, Elternraum, Projekte
- [ ] B15.3 Space-Baum importieren (Bulk-Erstellung)
- [ ] B15.4 Space-Designer: Capabilities vorauswählen
B16. Einladung annehmen (öffentlich)
- [ ] B16.1
/invitations/{token}→ Einladungsformular - [ ] B16.2 Vorausgefüllte Daten (Name aus Einladung)
- [ ] B16.3 Benutzername + Passwort eingeben
- [ ] B16.4 Annehmen → Erfolgsmeldung mit Nutzerdaten
B17. Sidebar & Navigation
- [ ] B17.1 Sidebar: Alle Menüpunkte vorhanden (Übersicht, Server, Benutzer, Rechnungen, Prilog-Store, Support, Kontaktdaten)
- [ ] B17.2 Benutzer-Gruppe aufklappbar (Benutzerkonten, Mitglieder & Räume, Spaces, Rollenmatrix)
- [ ] B17.3 Prilog-Store-Gruppe aufklappbar (Space-Store, Module, Modul-Store)
- [ ] B17.4 Theme-Umschalter funktioniert
- [ ] B17.5 Abmelden → Login-Seite
- [ ] B17.6 Menüpunkte werden ausgeblendet wenn Capability fehlt
- [ ] B17.7 Server-abhängige Funktionen gesperrt wenn Server nicht bereit
Teil C: Web-Client (http://localhost:5173/web)
C1. Login
- [ ] C1.1
/web/login→ Login-Formular (Benutzername, Passwort) - [ ] C1.2 Falsches Passwort → Fehlermeldung mit Alert-Icon
- [ ] C1.3 Korrektes Login → Drei-Phasen-Flow:
- Matrix-Authentifizierung
- Platform-Token-Exchange
- Bootstrap laden
- [ ] C1.4 Nach Login → Shell-Seite
C2. Shell / Dashboard
- [ ] C2.1
/web→ Begrüßung mit Display-Name - [ ] C2.2 Status-Card: "Aktiv"
- [ ] C2.3 Rollen-Card: Instance-Rolle mit Shield-Icon
- [ ] C2.4 Module-Card: Aktivierte Module als Badges
- [ ] C2.5 Admin-Quick-Actions (nur mit manageUsers-Capability): Benutzer verwalten, Spaces verwalten, Module konfigurieren
C3. Space-View
- [ ] C3.1 Space öffnen → Tabs werden dynamisch aus Module-Registry generiert
- [ ] C3.2 Nur aktivierte Module erscheinen als Tabs
- [ ] C3.3 Tab-Highlighting: Aktiver Tab hat Primary-Border
- [ ] C3.4 Default-Redirect zum ersten verfügbaren Tab
- [ ] C3.5 Loading-Skeleton wird beim ersten Tab-Laden angezeigt (Lazy Loading)
C4. Chat-Modul
- [ ] C4.1 Chat-Tab öffnen → Chat-Thread sichtbar
- [ ] C4.2 Nachrichten-Bubbles korrekt dargestellt (Absender, Zeitstempel)
- [ ] C4.3 Chat-Composer (Eingabefeld) am unteren Rand
- [ ] C4.4 Rechte Seitenleiste mit Aktivitäts-Feed
C5. Dateien-Modul
- [ ] C5.1 Dateien-Tab öffnen → Datei-Explorer
- [ ] C5.2 Ordner-Struktur sichtbar
- [ ] C5.3 Dateityp-Icons (Dokument, Bild, Tabelle)
- [ ] C5.4 Suchfeld vorhanden
- [ ] C5.5 Upload-Button sichtbar (wenn file:upload Berechtigung)
C6. Aufgaben-Modul
- [ ] C6.1 Aufgaben-Tab öffnen → Board-Ansicht
- [ ] C6.2 Aufgaben-Cards mit Titel und Status
- [ ] C6.3 Spalten sichtbar (Todo, In Progress, Review, Done)
C7. Kalender-Modul
- [ ] C7.1 Kalender-Tab öffnen → Kalender-Ansicht
- [ ] C7.2 Termine werden angezeigt
C8. Permission-Gates
- [ ] C8.1 Als User ohne
manageUserseinloggen → Admin-Quick-Actions werden NICHT angezeigt - [ ] C8.2 Space öffnen ohne
file:upload→ Upload-Button ist NICHT sichtbar - [ ] C8.3 Modul deaktivieren (Backend) → Tab verschwindet nach Seiten-Refresh
C9. Responsiveness
- [ ] C9.1 Browser-Fenster auf Mobile-Breite (375px) verkleinern → Layout passt sich an
- [ ] C9.2 Sidebar/Navigation auf Mobile bedienbar
- [ ] C9.3 Space-Tabs sind scrollbar wenn zu viele
Zusammenfassung
| Teil | Bereich | Tests |
|---|---|---|
| A | Admin-Dashboard | 65 |
| B | Kunden-Portal | 63 |
| C | Web-Client | 24 |
| Total | 152 |
Checkliste nach Abschluss
- [ ] Alle 152 UI-Tests bestanden
- [ ] Keine JavaScript-Konsolenfehler in DevTools
- [ ] Keine 500er-Responses im Network-Tab
- [ ] Theme-Wechsel funktioniert in allen 3 Apps
- [ ] Abmelden funktioniert in allen 3 Apps
- [ ] Kein sichtbarer Layout-Bruch auf Desktop (1920px) und Laptop (1366px)