Skip to content

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 5173

Mindestens 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:
    1. Matrix-Authentifizierung
    2. Platform-Token-Exchange
    3. 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 manageUsers einloggen → 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

TeilBereichTests
AAdmin-Dashboard65
BKunden-Portal63
CWeb-Client24
Total152

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)