test(e2e): add coverage for all 12 critical journeys (TEST-3 #405)
Some checks failed
CI / Unit & Component Tests (push) Has been cancelled
CI / OCR Service Tests (push) Has been cancelled
CI / Backend Unit Tests (push) Has been cancelled
CI / Unit & Component Tests (pull_request) Failing after 3m32s
CI / OCR Service Tests (pull_request) Successful in 29s
CI / Backend Unit Tests (pull_request) Failing after 3m3s

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>
This commit is contained in:
Marcel
2026-05-05 17:58:42 +02:00
parent 34bbf64198
commit ed028e793e
7 changed files with 456 additions and 0 deletions

View File

@@ -217,6 +217,32 @@ test.describe('Admin — tag management', () => {
});
});
// ─── System tab — mass import trigger (J12) ───────────────────────────────────
test.describe('Admin system tab — mass import trigger', () => {
test('admin triggers mass import and sees a status response', async ({ page }) => {
test.setTimeout(30_000);
await page.goto('/admin');
await page.waitForSelector('[data-hydrated]');
await page.getByRole('button', { name: /system/i }).click();
// The import button is rendered as [data-import-trigger] in all states.
const importBtn = page.locator('[data-import-trigger]');
await expect(importBtn.first()).toBeVisible({ timeout: 10_000 });
await importBtn.first().click();
// After triggering, either a RUNNING status text appears (job started)
// or a DONE/FAILED result text appears (job finished quickly or was already done).
await expect(
page.locator('text=/Importiert|Dokument|Import|Läuft|DONE|laufend/i').first()
).toBeVisible({ timeout: 15_000 });
await page.screenshot({ path: 'test-results/e2e/admin-mass-import-triggered.png' });
});
});
// ─── System tab — backfill file hashes ────────────────────────────────────────
test.describe('Admin system tab — backfill file hashes', () => {