From 3205fab33ba07264e64ef06a02668c60f59326d6 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 10 May 2026 06:03:22 +0200 Subject: [PATCH] test(admin): expand admin/users/[id] page coverage Adds banner-hidden defaults (success/error), empty groups list, groups field undefined fallback to []. 4 new tests covering ~6 branches. Refs #496. Co-Authored-By: Claude Sonnet 4.6 --- .../admin/users/[id]/page.svelte.test.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/frontend/src/routes/admin/users/[id]/page.svelte.test.ts b/frontend/src/routes/admin/users/[id]/page.svelte.test.ts index c02005c3..861cd86d 100644 --- a/frontend/src/routes/admin/users/[id]/page.svelte.test.ts +++ b/frontend/src/routes/admin/users/[id]/page.svelte.test.ts @@ -84,4 +84,49 @@ describe('admin/users/[id] page', () => { await expect.element(page.getByRole('button', { name: /löschen/i })).toBeVisible(); }); + + it('does not show success banner when form is undefined', async () => { + render(AdminUserEditPage, { props: { data: baseData(), form: undefined } }); + + const banner = document.querySelector('.bg-green-50'); + expect(banner).toBeNull(); + }); + + it('does not show error banner when form.error is undefined', async () => { + render(AdminUserEditPage, { props: { data: baseData(), form: { success: false } } }); + + // The error banner has both border-red-200 AND text-red-700 — the delete button has red-50 + // background but is a button, not a div. Look for the specific error
. + const banner = document.querySelector('div.bg-red-50'); + expect(banner).toBeNull(); + }); + + it('handles a user with empty groups list (selectedGroupIds defaults to [])', async () => { + render(AdminUserEditPage, { + props: { + data: baseData({ editUser: { ...baseEditUser, groups: [] } }), + form: undefined + } + }); + + const checkboxes = Array.from( + document.querySelectorAll('input[name="groupIds"]') + ) as HTMLInputElement[]; + const checked = checkboxes.filter((c) => c.checked); + expect(checked.length).toBe(0); + }); + + it('handles a user with no groups field at all (defaults to [])', async () => { + const editUser = { ...baseEditUser } as typeof baseEditUser & { groups?: undefined }; + delete (editUser as { groups?: unknown }).groups; + render(AdminUserEditPage, { + props: { data: baseData({ editUser }), form: undefined } + }); + + const checkboxes = Array.from( + document.querySelectorAll('input[name="groupIds"]') + ) as HTMLInputElement[]; + const checked = checkboxes.filter((c) => c.checked); + expect(checked.length).toBe(0); + }); });