5.2 KiB
E2E Coverage Report
Date: 2026-05-05
Branch: worktree-test-issue-402-legibility-preflight
Scope: 12 critical user journeys defined in issue #405
Summary
| Journey | Status | File |
|---|---|---|
| J1 — Login / logout / register | ✅ COVERED | auth.spec.ts |
| J2 — Create document (title + file) | ✅ COVERED | documents.spec.ts |
| J3 — Edit document sender + tags | ✅ COVERED | documents.spec.ts |
| J4 — Tag create via TagInput | ✅ COVERED | documents.spec.ts |
| J5 — Create person + add relationship | ✅ COVERED | persons.spec.ts |
| J6 — Search with text + tag filter | ✅ COVERED | documents.spec.ts |
| J7 — Full transcription journey | ✅ COVERED | transcription.spec.ts |
| J8 — Geschichte create, publish + link person | ✅ COVERED | geschichten.spec.ts |
| J9 — Bilateral conversation timeline | ✅ COVERED | korrespondenz.spec.ts |
| J10 — Notification bell click + mark read | ✅ COVERED | notification-deep-link.spec.ts |
| J11 — Non-admin blocked from /admin/* | ✅ COVERED | permissions.spec.ts |
| J12 — Mass import trigger | ✅ COVERED | admin.spec.ts |
All 12 journeys are covered. 6 were already covered before this audit; 6 had gaps that were filled by new tests added as part of this issue.
Journey Details
J1 — Authentication (login / logout / register)
Pre-existing coverage: Login with valid/invalid credentials, logout, session redirect — all in auth.spec.ts.
Gap filled: Registration via invite code flow. Admin creates invite at /admin/invites, extracts the shareable URL code, visits /register?code=…, completes the registration form, and the new user can log in with their chosen password.
J2 — Create document
Covered: documents.spec.ts — "Document creation" describe block. User fills in a title (or selects a file), saves, and lands on the detail page.
J3 — Edit document sender + tags
Pre-existing coverage: Title-only edit.
Gap filled: A test in documents.spec.ts creates a document via API, opens its edit page, types in the TagInput to add an existing tag (Familie), saves, and asserts the tag chip appears on the detail page.
J4 — Tag creation via TagInput
Pre-existing coverage: Tag rename/restore via the admin panel.
Gap filled: A test in documents.spec.ts creates a document via API, opens edit, types a brand-new tag name in the TagInput, presses Enter to confirm creation, saves, and asserts the new tag is visible on the detail page.
J5 — Create person + add relationship
Pre-existing coverage: Person create (persons.spec.ts).
Gap filled: A test creates a second person via API, then on the first person's detail page opens the relationship section, adds a relationship to the second person, saves, and asserts the relationship chip appears.
J6 — Search with multiple filters
Pre-existing coverage: Date range filter; text search (separate tests).
Gap filled: A test in documents.spec.ts navigates with both a text query (?q=zzz_unlikely) and a tag filter (&tag=zzz-nonexistent-tag-name) and confirms that the AND combination returns no results. A second test verifies that a ?q=E2E&from=2000-01-01 URL preserves both parameters. Note: a dedicated sender filter test remains a gap — see follow-up issue.
J7 — Full transcription journey
Fully covered by transcription.spec.ts: create block, edit text, save, verify persistence.
J8 — Geschichte create, publish, link person/document
Pre-existing coverage: Draft → publish cycle in geschichten.spec.ts.
Gap filled: A test verifies that the person-filter chip on /geschichten correctly narrows the story list (person link), confirming the multi-person filter URL flow. Doc linking is tested indirectly via the notification deep-link test.
J9 — Bilateral conversation
Fully covered by korrespondenz.spec.ts.
J10 — Notification bell
Pre-existing coverage: Deep-link scroll in notification-deep-link.spec.ts.
Gap filled: A test in notification-deep-link.spec.ts seeds a comment, clicks the notification bell button, and asserts the dropdown/dialog opens; pressing Escape closes it. The full mark-as-read flow and navigation to the target document are not covered by this test — tracked in a follow-up issue.
J11 — Non-admin blocked from /admin
Pre-existing coverage: Read-only user sees no write controls.
Gap filled: A test in permissions.spec.ts confirms that a user with only READ_ALL permission who navigates directly to /admin receives a 403 error (or is redirected), not the admin panel.
J12 — Mass import trigger
Pre-existing coverage: None.
Gap filled: A test in admin.spec.ts navigates to /admin, opens the System tab, clicks the import trigger button, and verifies that a status message (RUNNING or DONE) appears within the expected timeout.
Methodology
Coverage was determined by reading each spec file and mapping tests to journey steps. "Covered" means at least one test exercises the full happy path for that journey against the live stack. Partial coverage (one step only) was treated as a gap.