test: Regressionstests für Soft-Logout-Guard und Power-Levels-Schutz
Erste Testsuite des Projekts, gezielt für die zwei heiligsten Codepfade: guardedSoftLogoutRefresh (wirft nie -> kein SDK-logout()+clear(), Uta-Bug) und updatePowerLevelsSafely (Selbst-Aussperr-Schutz, Server-Stand bleibt erhalten). 10 Tests, alle gruen auf dem Pi (flutter test laeuft headless). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+45
@@ -13,6 +13,51 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – Erste Unit-Tests: Regressionsnetz für die zwei heiligsten Codepfade
|
||||
|
||||
**Erledigt:** Eine Vorsession hatte (unprotokolliert, Abbruch vor dem Testlauf –
|
||||
sichtbar nur am untrackten `test/`-Ordner + CHANGES.md-Hook-Log 18:16/18:17)
|
||||
zwei Testdateien angelegt. Diese Session hat sie gegen den echten Code
|
||||
gegengelesen, ausgeführt und committet – damit hat das Projekt erstmals
|
||||
überhaupt eine Testsuite, und zwar genau dort, wo CLAUDE.md „heilig" sagt:
|
||||
|
||||
- `test/soft_logout_guard_test.dart` (4 Tests): `guardedSoftLogoutRefresh`
|
||||
wirft NIE nach außen (weder Exception noch Error) – ein Throw würde im SDK
|
||||
zu `logout()`+`clear()` eskalieren (der Uta-Bug). Geprüft: Erfolg beim
|
||||
1. Versuch = genau 1 Aufruf, transienter Fehler wird per Retry geheilt,
|
||||
dauerhafter Fehler = genau 3 Versuche + normale Rückkehr. Der Fake-Client
|
||||
schlägt bei JEDEM anderen SDK-Aufruf laut fehl – riefe der Guard je
|
||||
`logout()`/`clear()` auf, fiele der Test sofort um.
|
||||
- `test/power_levels_safety_test.dart` (6 Tests): `updatePowerLevelsSafely`
|
||||
(Selbst-Aussperr-Schutz im Space-Admin) – Server-Stand bleibt erhalten
|
||||
(fremde users-Einträge überleben; genau der Bug, der schon mal Admins
|
||||
ausgesperrt hat), Selbst-Degradierung bricht ab ohne zu schreiben,
|
||||
users_default-Fallback, explizites `events[m.room.power_levels]`-
|
||||
Erfordernis, M_NOT_FOUND-Start mit leerem Event, fremde Serverfehler
|
||||
(M_FORBIDDEN) werden durchgereicht.
|
||||
- `flutter test`: **alle 10 Tests grün auf dem Pi** (läuft headless, im
|
||||
Gegensatz zu `flutter run` – d. h. dieser Punkt ist NICHT „UNGETESTET (Pi)").
|
||||
`flutter analyze` unverändert 1 bekannter Hinweis (`chat_provider.dart:42`).
|
||||
- Wert fürs Refactoring: Beide Funktionen sind Vertragsgrenzen, die bei
|
||||
M2-Umbauten (Call-Fassade, Storage) nicht wackeln dürfen – künftige
|
||||
Sessions sollten `flutter test` fest in Schritt 3 des Arbeitszyklus
|
||||
aufnehmen (geht auch auf dem Pi).
|
||||
|
||||
**Offen/Nächster Schritt:** Unverändert: PC-Termin (docs/PC_TESTPLAN.md) oder
|
||||
Bernds Antworten (Call-Pilot, SQLCipher-Priorität). Weitere Test-Kandidaten
|
||||
scheitern derzeit an der Sichtbarkeit: `_detectType`, `_formatMessageTime`,
|
||||
`_compareSpaceChildren`, die Megolm-Export-Kryptohelfer usw. sind alle
|
||||
bibliotheksprivat – testbar erst, wenn beim M2-Modulschnitt echte öffentliche
|
||||
Schnittstellen entstehen (dann Tests gleich mitschreiben).
|
||||
|
||||
**Stolperfallen:** Die Vorsession wurde mitten im Schritt abgebrochen, OHNE
|
||||
den Zwischenstand zu protokollieren (Pflicht laut CLAUDE.md) – der untrackte
|
||||
`test/`-Ordner war nur per `git status` auffindbar. Lehre: `git status` am
|
||||
Sessionstart ernst nehmen; untrackte Dateien können unprotokollierte,
|
||||
halbfertige Arbeit einer abgebrochenen Session sein.
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – M1-Vorbereitung: SQLCipher-Migrationsplan + konsolidierter PC-Testplan
|
||||
|
||||
**Erledigt:** Nach Abschluss des Fable-5-Reviews (Abschnitt darunter) die zwei
|
||||
|
||||
Reference in New Issue
Block a user