diff --git a/frontend/src/routes/admin/tags/[id]/page.svelte.test.ts b/frontend/src/routes/admin/tags/[id]/page.svelte.test.ts index 84d21eec..c52053bd 100644 --- a/frontend/src/routes/admin/tags/[id]/page.svelte.test.ts +++ b/frontend/src/routes/admin/tags/[id]/page.svelte.test.ts @@ -118,4 +118,36 @@ describe('admin/tags/[id] page', () => { const banners = document.querySelectorAll('[role="status"]'); expect(banners.length).toBeGreaterThan(0); }); + + it('hides the color picker for child tags (parentId set)', async () => { + render(AdminTagEditPage, { + props: { + data: baseData({ tag: baseTag({ parentId: 't-parent' }) }), + form: undefined + } + }); + + const colorPicker = document.querySelector('[data-testid="color-picker"]'); + expect(colorPicker).toBeNull(); + }); + + it('does not show form-success banner when form is undefined', async () => { + render(AdminTagEditPage, { props: { data: baseData(), form: undefined } }); + + const banners = document.querySelectorAll('.bg-green-50'); + // Some other green elements may exist, but the form-success specifically + // — accept that the banner may not be present + const formSuccessBanner = Array.from(banners).filter((b) => + (b.textContent ?? '').match(/gespeichert|aktualisiert|saved/i) + ); + expect(formSuccessBanner.length).toBe(0); + }); + + it('renders without throwing when mergeSuccess is null', async () => { + expect(() => + render(AdminTagEditPage, { + props: { data: baseData({ mergeSuccess: null }), form: undefined } + }) + ).not.toThrow(); + }); });