feat: Admin section redesign (Concept C) + Persons redesign (Concept A) #160

Merged
marcel merged 11 commits from feat/persons-redesign-concept-a into main 2026-03-30 18:30:25 +02:00
2 changed files with 38 additions and 0 deletions
Showing only changes of commit 09d8fb5f95 - Show all commits

View File

@@ -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' }
];

View File

@@ -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<HTMLInputElement>(
'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<HTMLInputElement>(
'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<HTMLInputElement>(
'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<HTMLInputElement>(
'input[type="checkbox"][name="permissions"][value="ANNOTATE_ALL"]'
);
expect(cb?.checked).toBe(true);
});
});
// ─── Unsaved-changes guard ────────────────────────────────────────────────────