Adds docs/audits/e2e-coverage-report.md mapping all 12 critical journeys to their test files. Fills the 6 coverage gaps with new e2e tests: - J1: Register via invite code (auth.spec.ts) - J3: Edit document tags via TagInput (documents.spec.ts) - J4: Create brand-new tag via TagInput (documents.spec.ts) - J5: Add SPOUSE_OF relationship on person edit page (persons.spec.ts) - J6: Multi-filter search (text + date, text + tagId) (documents.spec.ts) - J10: Notification bell opens dropdown (notification-deep-link.spec.ts) - J11: Non-admin blocked from /admin/* (permissions.spec.ts) - J12: Mass import trigger shows status (admin.spec.ts) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.0 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 + sender 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 creates two documents — one seeded with a known sender — then applies both a text query and a sender filter simultaneously and asserts only matching results appear.
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 seeds a comment, then via the bell button opens the notification dropdown, verifies the unread count badge, clicks a notification to mark it as read, and confirms the badge disappears.
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.