diff --git a/src/components/admin/__tests__/sections.test.tsx b/src/components/admin/__tests__/sections.test.tsx index 324809d7c..85db78dc2 100644 --- a/src/components/admin/__tests__/sections.test.tsx +++ b/src/components/admin/__tests__/sections.test.tsx @@ -92,13 +92,17 @@ describe("admin sections — SSR smoke", () => { it(" renders all four sub-sections", () => { const html = render(); expect(html).toContain("Umami"); - expect(html).toContain("Glitchtip"); + expect(html).toContain("GlitchTip"); expect(html).toContain("Web Push"); }); it(" renders", () => { const html = render(); - expect(html).toContain("Feedback"); + // F-08 dedupe: card no longer carries a duplicate "Feedback" + // header. Anchor on the empty-state copy + status tabs instead. + expect(html).toContain("All caught up"); + expect(html).toContain("Open"); + expect(html).toContain("Resolved"); }); it(" renders", () => { @@ -132,7 +136,10 @@ describe("admin sections — SSR smoke", () => { it(" renders", () => { const html = render(); - expect(html).toContain("Danger Zone"); + // F-08 dedupe: the card no longer carries a "Danger Zone" header + // (the page title already provides it). Assert on the action copy + // instead so the section is still anchored. + expect(html).toContain("Delete all data globally"); }); // v1.4.16 phase B5e — admin AI quality preview. The mocked useQuery diff --git a/src/components/admin/danger-zone-section.tsx b/src/components/admin/danger-zone-section.tsx index c75b77bb6..0f6240a24 100644 --- a/src/components/admin/danger-zone-section.tsx +++ b/src/components/admin/danger-zone-section.tsx @@ -66,11 +66,15 @@ export function DangerZoneSection() { return (
+ {/* v1.4.19 A8 / F-08: page header `admin.section.danger-zone.*` + already names the section, so the card-level title was a + duplicate of the page title. The destructive icon stays so + the card still flags itself as dangerous at a glance. */}
- -
- {t("admin.dangerZone")} -
+

{t("admin.deleteAllData")}