From 09d8fb5f9525b70b340e0a4f32c0f24ed6b32db2 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 30 Mar 2026 10:12:48 +0200 Subject: [PATCH] feat(admin): add READ_ALL and ANNOTATE_ALL to groups permission matrix Adds 'Nur lesen' (READ_ALL) and 'Lesen & Annotieren' (ANNOTATE_ALL) as standard permission options alongside the existing 'Lesen & Schreiben' (WRITE_ALL), ordered from least to most access. Co-Authored-By: Claude Sonnet 4.6 --- .../src/routes/admin/groups/[id]/+page.svelte | 2 ++ .../admin/groups/[id]/page.svelte.spec.ts | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/frontend/src/routes/admin/groups/[id]/+page.svelte b/frontend/src/routes/admin/groups/[id]/+page.svelte index 3705ea67..66462616 100644 --- a/frontend/src/routes/admin/groups/[id]/+page.svelte +++ b/frontend/src/routes/admin/groups/[id]/+page.svelte @@ -25,6 +25,8 @@ $effect(() => { }); const STANDARD_PERMISSIONS: { value: string; label: string }[] = [ + { value: 'READ_ALL', label: 'Nur lesen' }, + { value: 'ANNOTATE_ALL', label: 'Lesen & Annotieren' }, { value: 'WRITE_ALL', label: 'Lesen & Schreiben' } ]; diff --git a/frontend/src/routes/admin/groups/[id]/page.svelte.spec.ts b/frontend/src/routes/admin/groups/[id]/page.svelte.spec.ts index 911ecf57..426ca22c 100644 --- a/frontend/src/routes/admin/groups/[id]/page.svelte.spec.ts +++ b/frontend/src/routes/admin/groups/[id]/page.svelte.spec.ts @@ -41,6 +41,42 @@ describe('Admin edit group page – rendering', () => { .element(page.getByRole('link', { name: /Abbrechen/i })) .toHaveAttribute('href', '/admin/groups'); }); + + it('renders a READ_ALL checkbox in the standard permissions section', async () => { + render(Page, { data: baseData, form: null }); + const cb = document.querySelector( + 'input[type="checkbox"][name="permissions"][value="READ_ALL"]' + ); + expect(cb).not.toBeNull(); + }); + + it('renders an ANNOTATE_ALL checkbox in the standard permissions section', async () => { + render(Page, { data: baseData, form: null }); + const cb = document.querySelector( + 'input[type="checkbox"][name="permissions"][value="ANNOTATE_ALL"]' + ); + expect(cb).not.toBeNull(); + }); + + it('pre-checks READ_ALL when group has it', async () => { + const data = { group: { id: 'g2', name: 'Leser', permissions: ['READ_ALL'] } }; + render(Page, { data, form: null }); + const cb = document.querySelector( + 'input[type="checkbox"][name="permissions"][value="READ_ALL"]' + ); + expect(cb?.checked).toBe(true); + }); + + it('pre-checks ANNOTATE_ALL when group has it', async () => { + const data = { + group: { id: 'g3', name: 'Annotatoren', permissions: ['READ_ALL', 'ANNOTATE_ALL'] } + }; + render(Page, { data, form: null }); + const cb = document.querySelector( + 'input[type="checkbox"][name="permissions"][value="ANNOTATE_ALL"]' + ); + expect(cb?.checked).toBe(true); + }); }); // ─── Unsaved-changes guard ────────────────────────────────────────────────────