# Native Android Testmatrix ## Automatisiert | Bereich | Testart | Ausführung | | --- | --- | --- | | Auth, Settings, HTTP-Fehler, Header, Daemon-Parser | JVM + MockWebServer | `./gradlew :app:testLocalDebugUnitTest` | | Room-Migration und verschlüsselte Session nach Store-Neuerzeugung | Instrumentation | `./gradlew :app:connectedLocalDebugAndroidTest` | | Login, Navigation, Home und Vokabel-Lektion | Compose Instrumentation | `./gradlew :app:connectedLocalDebugAndroidTest` | | Realtime | JVM-Parser plus manueller Socket.IO-Testserver-Plan | siehe unten | ### Lokaler Ausfuehrungsstatus - Die JVM-Suite (`:app:testLocalDebugUnitTest`) ist erfolgreich ausgefuehrt. - Die Instrumentation-Suite inklusive Room- und Compose-Tests kompiliert erfolgreich. - Die Ausfuehrung auf diesem Host ist blockiert: Es ist kein ADB-Geraet verbunden und die x86_64-Emulatoren benoetigen KVM-Hardwarebeschleunigung, die hier nicht verfuegbar ist. Das vorhandene ARM64-System-Image kann auf einem x86_64-Host nicht emuliert werden. - Auf einem Host mit KVM oder einem verbundenen Geraet wird die Suite mit `./gradlew :app:connectedLocalDebugAndroidTest` ausgefuehrt. Der CI-Workflow `.github/workflows/android-tests.yml` fuehrt dieselbe Suite auf einem GitHub-Emulator aus. ## Emulator- und Geräte-Matrix | Ziel | Pflichtfälle | | --- | --- | | Kleines Phone, API 34+ | Login, Navigation, Formular, Tastatur, Adult-Screenshotschutz | | Großes Phone, API 34+ | Galerie, Falukant und Vokabel-Lektion | | Tablet, API 34+ | Drawer, Landscape und Listenbreiten | | Reales Android-Gerät, aktuelle API | Push-Berechtigung, OAuth Custom Tab, App Links, Kamera/Dateiauswahl | Die Gradle Managed Devices `mediumPhone` und `mediumTablet` decken die CI-Basis ab. Das lokale Team ergänzt für jeden Release-Lauf die installierten kleinen/großen Emulatoren und mindestens ein reales Gerät. ## Netzwerk, Realtime und Lifecycle 1. Backend und Daemon starten, mit einem Testkonto anmelden und Socket.IO-Verbindung prüfen. 2. Backend stoppen: Offline-Banner, verständlicher Fehler und keine blockierte Navigation prüfen. 3. Backend wieder starten: Screen aktualisieren und Realtime-Verbindung erneut prüfen. 4. App im Hintergrund beenden und über Launcher oder Push erneut öffnen: verschlüsselte Sitzung, Deep-Link-Fortsetzung und Realtime-Reconnect prüfen. 5. Für Socket.IO-Regressionen wird ein isolierter Node-Testserver mit den Ereignissen `friendloginchanged`, `falukantUpdateStatus`, `familychanged` und `reloadmenu` verwendet. Der Android-Test verbindet sich mit dessen URL statt mit Production.