Files
familienarchiv/docs/audits/e2e-coverage-report.md
Marcel 20cceefbe1
Some checks failed
CI / Backend Unit Tests (pull_request) Failing after 3m23s
CI / Unit & Component Tests (pull_request) Failing after 3m23s
CI / OCR Service Tests (pull_request) Successful in 37s
CI / Unit & Component Tests (push) Failing after 3m36s
CI / OCR Service Tests (push) Successful in 35s
CI / Backend Unit Tests (push) Failing after 3m27s
test(e2e): add coverage for all 12 critical journeys (TEST-3 #405)
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>
2026-05-05 18:10:17 +02:00

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.


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.