# Tests der App Unit- und Widget-Tests spiegeln die Struktur von `lib/`. Integration (`integration_test/`) und Web-E2E (Playwright) kommen mit den jeweiligen Feature-Tasks. ```bash flutter test ``` Coverage wird in der CI derzeit nicht erhoben; lokal optional `flutter test --coverage`. ## Helfer (`test/helpers/`) | Datei | Inhalt | |---|---| | `pump_app.dart` | `pumpApp(tester, home: …)` bzw. `router: …`: MaterialApp mit AppTheme, l10n-Delegates, ProviderScope, wählbare `locale` (Standard `de`), `textScale`, `themeMode`. `pumpShuffleApp(tester, deviceLocale: …)` startet die echte `ShuffleApp`. Beide geben den `ProviderContainer` zurück. | | `fakes.dart` | `MockSupabaseClient`, `MockGoTrueClient`, `SupabaseMocks` (Client mit verdrahtetem `auth`), `testAppConfig(…)`, `testOverrides(…)` (feste AppConfig + Supabase-Mock, weitere Overrides anhängbar). | | `router_helpers.dart` | `buildTestRouter`, `FakeRedirectSource`, `currentPath`, `currentUri`. | Regeln: keine echten Netzwerkaufrufe, feste Zeit (`clock`/`fakeAsync`), feste Zufallswerte. Schlägt ein Test wegen eines Produktivcode-Fehlers fehl, wird der Test nicht angepasst, sondern der Fehler an den Entwickler-Agent zurückgegeben. ## Benennung mit Akzeptanzkriterien Tests, die ein Akzeptanzkriterium belegen, tragen die Referenz `KTO-01 Kriterium 3` (Story-ID, Kriterium-Nummer wie im Issue) am Anfang des Namens: ```dart group('KTO-01 Kriterium 3: password policy', () { test('rejects passwords shorter than 10 characters', () { … }); }); testWidgets('KTO-01 Kriterium 7: shows a generic message for wrong credentials', …); ``` - Eine Referenz pro `group`/Test; deckt ein Test mehrere Kriterien ab, alle nennen (`KTO-01 Kriterium 1, 2`). - Konfigurationsabhängige Tests nennen zusätzlich die Konfig-ID (`AUTH-CFG-10`). - Sprache der Testnamen einheitlich Englisch (wie der Code); die Referenz bleibt unverändert. - Suche nach Abdeckung: `grep -rn "KTO-01 Kriterium 3" test integration_test ../supabase/tests ../e2e`. ## Abdeckungsmatrix Jeder PR enthält eine Matrix Akzeptanzkriterium → Test(s). Vorlage: `docs/templates/abdeckungsmatrix.md`.