96 lines
11 KiB
Markdown
96 lines
11 KiB
Markdown
# Abnahmespezifikation und Testzuordnung
|
|
|
|
Knoten `acceptance`, Stand 2026-09-08. Die englischen Feature-Dateien in `gherkin/` sind die kanonische ausführbar anzubindende Spezifikation. Die gleichnamigen Langbeschreibungen im Werkbaum werden synchron gehalten. Stabile WJ-Tags identifizieren Szenarien; IDs bei späteren Ergänzungen nicht neu nummerieren.
|
|
|
|
Dieser Knoten liefert Beispiele und Testzuordnung, nicht die fertigen Step Definitions. Die 13 fachlichen Arbeitszeit-Beispiele (WJ-043 bis WJ-055 mit @service, einschließlich vier Dauer-Beispielen) sind inzwischen mit Cucumber ausgeführt; siehe work-gherkin.md. Zusätzlich sind die sechs fachlichen Habit-Szenarien WJ-002, WJ-003, WJ-004, WJ-009, WJ-056 und WJ-057 ausgeführt; siehe habit-gherkin.md. Die zwölf Push-Service-Beispiele (WJ-028 bis WJ-035 ohne Browser-Szenario WJ-033, plus WJ-060) sind ebenfalls ausgeführt; siehe push-gherkin.md. Auch elf Konten-Service-Beispiele sind ausgeführt (WJ-010 bis WJ-019 ohne WJ-015); siehe identity-gherkin.md. WJ-038, WJ-039, WJ-041, WJ-042, WJ-058 und WJ-059 sind als echte Chromium-Szenarien angebunden; siehe browser-gherkin.md, browser-preferences.md, browser-closed-draft.md, browser-tab-conflict.md und browser-draft-owner.md. WJ-001 und WJ-005 prüfen Habit-Grenzwerte im Chromium-Browser; siehe browser-habit-limits.md. WJ-006 prüft vollständige Kalenderwochen über Monatsgrenzen; siehe browser-habit-month.md. WJ-007 prüft Arbeit am freien Tag inklusive Today-Summen und Erinnerungsunterdrückung; siehe browser-work-dayoff.md. WJ-008 prüft Tracker-Deaktivierung und Datenerhalt im echten Export; siehe browser-disable-work.md. Beide WJ-040-Beispiele prüfen private Monats-/Jahresdateien im Browser; siehe browser-private-export.md. WJ-054 prüft bestätigtes Löschen im Browser; siehe browser-work-delete.md. WJ-048 prüft ausdrückliche Kundenanlage im Arbeitsformular; siehe browser-customer-create.md. WJ-051 prüft Bearbeitungskonflikte zwischen getrennten Geräten; siehe browser-work-conflict.md. Alle übrigen Gherkin-Bindungen bleiben offen. Die folgenden Implementierungsknoten liefern echte fachliche Assertions; keine Platzhalter-Steps, die nur Erfolg zurückgeben. Sobald ein Fachbereich als fertig gilt, müssen alle zugehörigen Szenarien implementiert sein. Ein finales Release darf keine undefinierten oder übersprungenen Pflichtszenarien enthalten.
|
|
|
|
## Testebenen
|
|
|
|
- `service`: Cucumber auf der JVM, echte Anwendungsdienste und H2-Dateidatenbank, kontrollierte Uhr, kontrollierter E-Mail-Versand und Push-Testtransport. Nebenläufigkeit mit separaten Transaktionen und Barrieren prüfen, nicht mit zufälligen Sleeps.
|
|
- `browser`: Cucumber/Playwright gegen die JVM-Anwendung. Anzeigen, Konfliktentwürfe, Browserpersistenz, Sprache und Theme tatsächlich im Browser prüfen. Kontrollierte Test-E-Mails statt externem Mailversand in der CI. Zwei Browserkontexte für zwei Geräte beziehungsweise Benutzer verwenden.
|
|
- `deployment`: Gherkin-gesteuerter Test des wirklichen Shell-/Releaseablaufs in isolierten Verzeichnissen mit kontrollierter Dienst-/Transportgrenze. Änderungen an Dateien, Manifesten und Rückfallständen prüfen. Reale Hostintegration zusätzlich bei Betriebsabnahme verifizieren.
|
|
- `production_smoke`: nur Produktions-JAR-Prozessstart und Bereitschaft prüfen, gemäß vereinbartem CI-Umfang. Keine versteckte Pflicht zur zusätzlichen vollständigen Fachtestsuite.
|
|
- `operator_restore`: ausführbares Restore-Szenario mit vom Betreiber bereitgestellter repräsentativer Sicherung in isolierter Umgebung. Nicht automatisch private Sicherungen auf einen öffentlichen CI-Artefaktserver kopieren.
|
|
|
|
Echte E-Mail-Anmeldung, Android-Installation/Web Push und echte Chrome/Firefox-Abnahme separat dokumentieren. Kein Testcontainers-Docker-Daemon auf Werkdock voraussetzen. Testressourcen und Datenbankdateien je Szenario isolieren; keine Produktionsmutationen.
|
|
|
|
## Offene Details gezielt später klären
|
|
|
|
Die bestätigten Regeln werden umgesetzt. Nicht bestätigte Vorschläge (Namenseindeutigkeit, zukünftige Habit-Tage, Wiederaktivierung von Push nach Tracker-Reaktivierung) werden nicht durch neue Szenarien still als Nutzerentscheidungen festgeschrieben. Vor dem jeweiligen Implementierungsknoten rückfragen und dann wie beauftragt anhalten.
|
|
|
|
## Szenarien
|
|
|
|
| ID | Datei | Szenario | Testebene | Cucumber-Ausführung |
|
|
|---|---|---|---|---|
|
|
| WJ-001 | habit-tests.feature | Count without a configured limit | browser | bestanden (Chromium) |
|
|
| WJ-002 | habit-tests.feature | A habit count cannot become negative | service | bestanden |
|
|
| WJ-003 | habit-tests.feature | Concurrent increments report a conflict | service | bestanden |
|
|
| WJ-004 | habit-tests.feature | Change the allowance for the current week only onward | service | bestanden |
|
|
| WJ-005 | habit-tests.feature | Record a habit above the allowance | browser | bestanden (Chromium) |
|
|
| WJ-006 | habit-tests.feature | Calculate a week spanning two months | browser | bestanden (Chromium) |
|
|
| WJ-007 | habit-tests.feature | Record work on a day off | browser | bestanden (Chromium) |
|
|
| WJ-008 | habit-tests.feature | Disable a tracker without deleting its data | browser | bestanden (Chromium) |
|
|
| WJ-009 | habit-tests.feature | The first allowance does not change earlier weeks | service | bestanden |
|
|
| WJ-010 | identity-tests.feature | Redeem an invitation exactly once | service | bestanden |
|
|
| WJ-011 | identity-tests.feature | Reject unavailable invitations | service | bestanden |
|
|
| WJ-012 | identity-tests.feature | Administrators cannot inspect another user's tracking data | service | bestanden |
|
|
| WJ-013 | identity-tests.feature | Disable an account with existing sessions | service | bestanden |
|
|
| WJ-014 | identity-tests.feature | Expire an inactive login | service | bestanden |
|
|
| WJ-015 | identity-tests.feature | Sign out everywhere | browser | bestanden |
|
|
| WJ-016 | identity-tests.feature | Delete and register again | service | bestanden |
|
|
| WJ-017 | identity-tests.feature | Recover after the last administrator deletes their account | service | bestanden |
|
|
| WJ-018 | identity-tests.feature | Account creation requires an invitation or authorized setup code | service | bestanden |
|
|
| WJ-019 | identity-tests.feature | Deletion requires fresh identity confirmation | service | bestanden |
|
|
| WJ-020 | ops-tests.feature | Production JAR smoke check | production_smoke | bestanden |
|
|
| WJ-021 | ops-tests.feature | Roll back a partially failed migration | deployment | noch nicht angebunden |
|
|
| WJ-022 | ops-tests.feature | Preserve known-good state across two failed releases | deployment | noch nicht angebunden |
|
|
| WJ-023 | ops-tests.feature | Keep maintenance active after a failed rollback | deployment | noch nicht angebunden |
|
|
| WJ-024 | ops-tests.feature | Restore from a Hostsharing backup | operator_restore | noch nicht angebunden |
|
|
| WJ-025 | ops-tests.feature | Upload does not activate an unverified candidate | deployment | noch nicht angebunden |
|
|
| WJ-026 | ops-tests.feature | CI deploys the exact tested artifact | deployment | noch nicht angebunden |
|
|
| WJ-027 | ops-tests.feature | A failed deployment remains failed after successful rollback | deployment | noch nicht angebunden |
|
|
| WJ-028 | push-tests.feature | Remind only an opted-in smartphone | service | bestanden |
|
|
| WJ-029 | push-tests.feature | Suppress an ineligible reminder | service | bestanden |
|
|
| WJ-030 | push-tests.feature | Catch up after maintenance | service | bestanden |
|
|
| WJ-031 | push-tests.feature | Do not catch up after the window closes | service | bestanden |
|
|
| WJ-032 | push-tests.feature | Use the last observed timezone while the app is closed | service | bestanden |
|
|
| WJ-033 | push-tests.feature | Open an old notification | browser | noch nicht angebunden |
|
|
| WJ-034 | push-tests.feature | Do not remind at weekends | service | bestanden |
|
|
| WJ-035 | push-tests.feature | Work recorded on another device suppresses a reminder | service | bestanden |
|
|
| WJ-036 | ux-tests.feature | Keep a work draft across deployment | browser | bestanden |
|
|
| WJ-037 | ux-tests.feature | Show an offline notice without committing work | browser | bestanden |
|
|
| WJ-038 | ux-tests.feature | Initialize and override the language | browser | bestanden (Chromium) |
|
|
| WJ-039 | ux-tests.feature | Keep theme overrides local to the device | browser | bestanden (Chromium) |
|
|
| WJ-040 | ux-tests.feature | Export private tracking data | browser | bestanden (Chromium, beide Beispiele) |
|
|
| WJ-041 | ux-tests.feature | Default to English for an unsupported browser language | browser | bestanden |
|
|
| WJ-042 | ux-tests.feature | A different account cannot recover a private draft | browser | bestanden (Chromium) |
|
|
| WJ-043 | work-tests.feature | Save several entries for one customer on the same day | service | bestanden |
|
|
| WJ-044 | work-tests.feature | Reject invalid work durations | service | bestanden |
|
|
| WJ-045 | work-tests.feature | Enforce the daily limit across concurrent insertions | service | bestanden |
|
|
| WJ-046 | work-tests.feature | Reject a future date in the current device timezone | service | bestanden |
|
|
| WJ-047 | work-tests.feature | Keep calendar dates stable during travel | service | bestanden |
|
|
| WJ-048 | work-tests.feature | Require an explicit catalog creation action | browser | bestanden (Chromium) |
|
|
| WJ-049 | work-tests.feature | Reject a project belonging to a different customer | service | bestanden |
|
|
| WJ-050 | work-tests.feature | Archive and rename catalog entries without losing work | service | bestanden |
|
|
| WJ-051 | work-tests.feature | Detect conflicting work edits | browser | bestanden (Chromium) |
|
|
| WJ-052 | work-tests.feature | Require both customer and project | service | bestanden |
|
|
| WJ-053 | work-tests.feature | Edit a work date without exceeding the destination total | service | bestanden |
|
|
| WJ-054 | work-tests.feature | Delete work only after confirmation | browser | bestanden (Chromium) |
|
|
| WJ-055 | work-tests.feature | Restore an archived project | service | bestanden |
|
|
|
|
| WJ-056 | habit-tests.feature | All four boundaries are advisory | service | bestanden |
|
|
| WJ-057 | habit-tests.feature | Initial habits remain ordinary editable data | service | bestanden |
|
|
| WJ-058 | ux-tests.feature | Preserve a second tab's work draft after saving the first | browser | bestanden (Chromium) |
|
|
| WJ-059 | ux-tests.feature | Recover a work draft from a closed tab | browser | bestanden (Chromium) |
|
|
| WJ-060 | push-tests.feature | Removing a day-off marker restores reminder eligibility | service | bestanden |
|
|
|
|
WJ-015 ist mit getrennten Geräten einschließlich Offline-Wiederverbindung im Browser ausgeführt; siehe browser-logout-all.md. Damit sind alle Identity-Gherkin-Szenarien angebunden und bestanden.
|
|
|
|
WJ-037 prüft die echte Offline-Seite und den weiterhin ungespeicherten Entwurf nach Wiederverbindung; siehe browser-offline.md.
|
|
|
|
WJ-036 prüft Backend-Stopp, öffentliche Wartungsseite und Entwurf nach Neustart an derselben Testdatenbank; siehe browser-deployment-draft.md. Alle UX-Gherkin-Szenarien sind damit angebunden und bestanden.
|
|
|
|
WJ-020 läuft als eigene Produktions-Gherkin-Stufe nach JVM- und Frontendtests vor der Release-Erstellung; siehe production-smoke-gherkin.md.
|
|
|
|
WJ-061 (`work-tests.feature`): exact Today-entry navigation, direct hour controls and distinct close/discard actions passed in Chromium and Firefox; see work-quick-actions.md.
|