DiveLogix360 – UC00-API-Testvertrag¶
Stand: 09.08.2026 15:43 Branch: main Status: Verbindlich
| Datum, Uhrzeit | Version | Änderung | Autor |
|---|---|---|---|
| 09.08.2026 15:43 | 1.0 | Verbindlichen Testvertrag für alle Operationen des kanonischen UC00-OpenAPI-Vertrags erstellt | Codex |
Zweck: Dieser Vertrag ordnet jeder Operation der kanonischen UC00-OpenAPI-Spezifikation stabile Abnahmetest-IDs und das erwartete Verhalten zu.
Abgrenzung: Die Zuordnung ist verbindliche Testgrundlage. Sie ist noch kein Nachweis einer ausgeführten Implementierung oder eines bestandenen Laufzeittests.
1. Verbindliche Konventionen¶
- Eingehende E-Mail-Adressen werden vor Prüfung und Speicherung durch Entfernen äusserer Leerzeichen und Kleinschreibung normalisiert.
- Authentifizierungsfehler geben keine Auskunft darüber, ob ein Konto, Tenant, Vertrag oder Token existiert, soweit kein fachlich erforderlicher Statusfehler vorgesehen ist.
- Fehler verwenden den strukturierten Fehlervertrag mit stabilem
code, HTTP-Status undrequest_id. - Rollen-, Tenant- und Ressourcenprüfung folgen dem Prinzip der Standardverweigerung. Row-Level Security (RLS, zeilenbasierte Zugriffskontrolle) ist eine zusätzliche Datenbankschutzschicht.
- Token, Passwörter, Wiederherstellungscodes, TOTP-Geheimnisse und vollständige Vertragsdokumente dürfen nicht protokolliert oder per E-Mail übertragen werden.
- Tenant-Admin-Einladungen sind erst nach erfolgreich akzeptiertem Auftragsverarbeitungsvertrag (AVV) zulässig.
2. Testfallzuordnung¶
| Operation | Test-IDs | Verbindliches Abnahmeziel |
|---|---|---|
POST /auth/login |
API-UC00-01, API-UC00-02, API-UC00-03 |
Normalisierte Anmeldung; Zwei-Faktor-Challenge bei aktivierter Zwei-Faktor-Authentifizierung; generische Ablehnung ungültiger Zugangsdaten |
POST /auth/login/2fa |
API-UC00-04, API-UC00-05 |
Vollständige Anmeldung nur mit gültiger Challenge und gültigem zeitbasiertem Einmalpasswort; ungültige oder abgelaufene Challenge wird abgewiesen |
POST /auth/login/recovery |
API-UC00-06, API-UC00-07 |
Einmalige Nutzung eines gehashten Wiederherstellungscodes; Wiederverwendung oder ungültiger Code wird abgewiesen |
POST /auth/token/refresh |
API-UC00-08, API-UC00-09 |
Rotierte Sitzung bei gültigem Refresh-Token; Wiederverwendung oder Widerruf wird erkannt und abgewiesen |
POST /auth/logout |
API-UC00-10 |
Sitzung und Refresh-Token werden kontrolliert widerrufen |
GET /auth/invite/{token} |
API-UC00-11, API-UC00-12 |
Gültige Einladung liefert nur notwendige Metadaten; ungültige, verwendete, widerrufene oder abgelaufene Einladung wird abgewiesen |
POST /auth/invite/{token}/accept |
API-UC00-13, API-UC00-14, API-UC00-15 |
Passwort und Zwei-Faktor-Authentifizierung werden sicher eingerichtet; Benutzer wird erst nach vollständiger Prüfung aktiv; Wiederherstellungscodes werden einmalig ausgegeben |
GET /superadmin/tenants |
API-UC00-16 |
Nur Superadmins erhalten eine paginierte, minimierte Tenant-Übersicht |
POST /superadmin/tenants |
API-UC00-17, API-UC00-18 |
Vorbereitender Tenant wird ohne Benutzer und Einladung angelegt; Slug- oder Fachdatenkonflikte werden strukturiert abgewiesen |
GET /superadmin/tenants/{tenantSlug} |
API-UC00-19 |
Nur Superadmins erhalten den Tenant mit Vertrags-, Einladungs- und Onboardingstatus |
PATCH /superadmin/tenants/{tenantSlug}/contract-party |
API-UC00-20, API-UC00-21 |
Rechtliche Vertragspartei und Vertragskontakt werden getrennt aktualisiert; unvollständige oder ungültige Daten werden abgewiesen |
PATCH /superadmin/tenants/{tenantSlug}/status |
API-UC00-22 |
Nur zulässige Lifecycle-Übergänge werden revisionsfähig ausgeführt |
GET /superadmin/tenants/{tenantSlug}/contracts |
API-UC00-23 |
Versionierte Vertragsnachweise werden ohne unkontrollierten Dokumentzugriff aufgelistet |
POST /superadmin/tenants/{tenantSlug}/contracts/request |
API-UC00-24, API-UC00-25, API-UC00-26 |
Vollständige Vertragspartei erzeugt einen einmaligen, gehashten Sieben-Tage-Token; Alt-Token wird widerrufen; unvollständige Partei ergibt 409 contract_party_incomplete |
GET /contracts/{token} |
API-UC00-27, API-UC00-28 |
Gültiger Vertragstoken liefert den erforderlichen Vertragskontext; ungültiger oder abgelaufener Token wird abgewiesen |
POST /contracts/{token}/accept |
API-UC00-29, API-UC00-30, API-UC00-31 |
Akzeptanz mit Unterzeichner-E-Mail, Funktion und Vertretungsbestätigung wird einmalig und dauerhaft gespeichert; Altversion wird erst danach ersetzt |
POST /superadmin/tenants/{tenantSlug}/contracts/upload |
API-UC00-32, API-UC00-33, API-UC00-34 |
Nur PDF bis 10 MiB wird in Quarantäne angenommen; Hash und Metadaten werden erfasst; falscher Typ oder Grenzüberschreitung wird abgewiesen |
POST /superadmin/tenants/{tenantSlug}/contracts/{contractId}/review |
API-UC00-35, API-UC00-36 |
Nur erfolgreich geprüfte Datei kann akzeptiert werden; Annahme und Ablehnung werden getrennt revisionsfähig erfasst |
POST /superadmin/tenants/{tenantSlug}/admin-invitation |
API-UC00-37, API-UC00-38, API-UC00-39 |
Einladung erfolgt nur nach akzeptiertem Vertrag; fehlender Vertrag ergibt 409 contract_not_accepted; globale E-Mail-Kollision ergibt 409 email_already_in_use |
POST /superadmin/tenants/{tenantSlug}/admin-invitation/resend |
API-UC00-40 |
Neue 72-Stunden-Einladung widerruft die vorherige offene Einladung kontrolliert |
POST /superadmin/users/{userId}/reset-2fa |
API-UC00-41 |
Superadmin kann Zwei-Faktor-Authentifizierung revisionsfähig zurücksetzen, ohne Geheimnisse offenzulegen |
GET /tenants/profile |
API-UC00-42 |
Tenant-Admin liest ausschliesslich das eigene operative Schulprofil |
PATCH /tenants/profile |
API-UC00-43, API-UC00-44 |
Operatives Profil verändert keine Vertragspartei; E-Mail-, Festnetz- und Mobilfreigabe bleiben getrennt und standardmässig deaktiviert |
GET /onboarding/status |
API-UC00-45 |
Persistenter Gesamt- und Schrittstatus wird ausschliesslich für den eigenen Tenant geliefert |
PUT /onboarding/steps/{stepKey} |
API-UC00-46, API-UC00-47, API-UC00-48 |
Nur school_profile, contact_details, first_employee und confirmation sind zulässig; Draft und Abschluss werden typisiert und tenantisoliert gespeichert |
POST /onboarding/complete |
API-UC00-49, API-UC00-50, API-UC00-51 |
Abschluss gelingt nur nach allen Pflichtschritten und aktiviert den Tenant einmalig; unvollständiger oder wiederholter Abschluss wird abgewiesen |
POST /users/invitations |
API-UC00-52, API-UC00-53 |
Tenant-Admin lädt Mitarbeiter nur im eigenen Tenant ein; globale E-Mail-Kollision wird einheitlich abgewiesen |
GET /superadmin/tenants/{tenantSlug}/offboarding |
API-UC00-54 |
Superadmin erhält Fristen, Export- und Löschstatus des Offboardings |
POST /superadmin/tenants/{tenantSlug}/offboarding |
API-UC00-55, API-UC00-56 |
Offboarding setzt 30 Tage Exportzugang und operative Löschung spätestens nach 90 Tagen; unzulässiger Wiederholungsstart wird abgewiesen |
POST /superadmin/tenants/{tenantSlug}/offboarding/cancel |
API-UC00-57 |
Abbruch ist nur vor der irreversiblen Löschgrenze und mit revisionsfähigem Grund zulässig |
POST /tenants/exports |
API-UC00-58 |
Berechtigter Tenant-Admin fordert innerhalb des Exportfensters einen tenantisolierten Export an |
GET /tenants/exports/{exportId} |
API-UC00-59 |
Exportstatus ist nur für den eigenen Tenant und ohne fremde Existenzinformation abrufbar |
GET /tenants/exports/{exportId}/download |
API-UC00-60, API-UC00-61 |
Download erfolgt zeitbegrenzt und backendvermittelt; fremder, abgelaufener oder nicht bereiter Export wird abgewiesen |
3. Erforderliche Prüfebenen¶
| Ebene | Mindestnachweis |
|---|---|
| Vertragsprüfung | OpenAPI 3.1 ist parsebar; interne Verweise, Operation-IDs, Fehlercodes, Schrittwerte und Test-IDs sind vollständig |
| Unit-Tests | Normalisierung, Statusübergänge, Tokenregeln, Berechtigungsentscheidungen und fachliche Sperrbedingungen |
| Integrations-Tests | NestJS, Prisma und PostgreSQL einschliesslich Transaktionen, Constraints, Rollen und Row-Level Security |
| Ende-zu-Ende-Tests | Elektronischer und externer Vertragsweg, Einladung, Erstzugang, Vier-Schritt-Onboarding, Offboarding und Export |
| Sicherheits-Tests | Tenant- und Objektzugriff, Tokenwiederverwendung, Protokollminimierung, Upload-Quarantäne und Standardverweigerung |
4. Nachweisstatus¶
Der Vertrag und seine Zuordnung sind dokumentiert und automatisch strukturell prüfbar. Die fachlichen Schnittstellenkriterien UC00-05-01 bis UC00-05-08 können damit als spezifiziert gelten. Die zugehörigen Implementierungs- und Laufzeitnachweise unter UC00-08-* und UC00-09-* bleiben ausdrücklich offen, bis die Tests implementiert und gegen die Zielumgebung erfolgreich ausgeführt wurden.