import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import { SlideOver } from "@/components/ui/SlideOver"; // Das Panel bleibt geschlossen im DOM, damit die Schiebebewegung laufen kann. // Es steht dann per translate-x-full hinter dem rechten Bildschirmrand — die // eigene linke Kante genau auf dem Rand. Ein Schatten reicht von dort noch // ins Bild zurück, und die Protokollseite rendert ein Panel je Zeile: fünfzig // Schatten an derselben Stelle ergaben einen fast schwarzen Streifen neben // der Bildlaufleiste. function panel(container: HTMLElement): HTMLElement { const el = container.querySelector('[role="dialog"]'); expect(el, "Das Panel fehlt").not.toBeNull(); return el as HTMLElement; } describe("SlideOver", () => { it("bleibt geschlossen im DOM", () => { // Ohne das gäbe es keine Schiebebewegung beim Schliessen — und dieser // Test hier hätte keinen Gegenstand. const { container } = render( {}} title="Titel"> Inhalt ); expect(panel(container).className).toContain("translate-x-full"); }); it("trägt geschlossen keinen Schatten", () => { const { container } = render( {}} title="Titel"> Inhalt ); expect(panel(container).className).not.toContain("shadow-"); }); it("trägt geöffnet einen Schatten", () => { const { container } = render( {}} title="Titel"> Inhalt ); expect(panel(container).className).toContain("shadow-[var(--shadow-overlay)]"); expect(panel(container).className).toContain("translate-x-0"); }); it("nimmt das geschlossene Panel aus der Bedienung", () => { // `inert` und nicht aria-hidden: nur das entfernt die Felder auch aus der // Tabulatorreihenfolge und blockiert Klicks. const { container } = render( {}} title="Titel"> Inhalt ); expect(panel(container).closest("[inert]")).not.toBeNull(); }); it("benennt den Dialog nach seiner Überschrift", () => { render( {}} title="Anton Aigner"> Inhalt ); expect(screen.getByRole("dialog", { name: "Anton Aigner" })).toBeInTheDocument(); }); });