import { describe, it, expect } from "vitest"; import { render, screen, within } from "@testing-library/react"; import { MemoryRouter } from "react-router-dom"; import AGB from "@/pages/AGB"; // Dieselben Future-Flags wie der BrowserRouter in App.tsx, sonst warnt React Router in der Testausgabe. const routerFuture = { v7_startTransition: true, v7_relativeSplatPath: true }; /** Rendert die AGB und liefert § 11 mit seinen Absätzen in der angezeigten Reihenfolge. */ const haftung = () => { render( , ); const section = screen.getByRole("heading", { name: "11. Haftung" }).closest("section"); if (!section) throw new Error("Abschnitt 11. Haftung fehlt"); return { section, absaetze: within(section).getAllByRole("listitem") }; }; describe("AGB § 11 Haftung", () => { it("hat genau vier Absätze, damit der Verweis auf Absatz 1 stimmt", () => { expect(haftung().absaetze).toHaveLength(4); }); it("Absatz 1: unbeschränkte Haftung für Vorsatz, grobe Fahrlässigkeit, Leben/Körper/Gesundheit, ProdHaftG, Garantie", () => { // § 309 Nr. 7 a und b BGB, § 14 ProdHaftG, § 276 Abs. 1 BGB (Garantie). expect(haftung().absaetze[0]).toHaveTextContent( "WEBklar haftet unbeschränkt bei Vorsatz und grober Fahrlässigkeit, bei Verletzung von Leben, Körper oder Gesundheit, nach dem Produkthaftungsgesetz und soweit WEBklar eine Garantie übernommen hat.", ); }); it("Absatz 2: leichte Fahrlässigkeit nur bei wesentlichen Vertragspflichten und nur für den vorhersehbaren Schaden", () => { // § 307 Abs. 2 Nr. 2 BGB: Kardinalpflichten, mit der vom BGH geforderten Erklärung des Begriffs. const absatz = haftung().absaetze[1]; expect(absatz).toHaveTextContent( "Bei leicht fahrlässiger Verletzung einer wesentlichen Vertragspflicht haftet WEBklar nur für den vertragstypischen, vorhersehbaren Schaden.", ); expect(absatz).toHaveTextContent( "Wesentlich sind Pflichten, deren Erfüllung die ordnungsgemäße Durchführung des Vertrags überhaupt erst ermöglicht und auf deren Einhaltung der Kunde regelmäßig vertrauen darf.", ); expect(absatz).toHaveTextContent("Im Übrigen ist die Haftung für leichte Fahrlässigkeit ausgeschlossen."); }); it("Absatz 3: Datenverlust nur in Höhe des Wiederherstellungsaufwands, nie in den Fällen von Absatz 1", () => { const absatz = haftung().absaetze[2]; expect(absatz).toHaveTextContent( "Der Kunde bewahrt Kopien der Inhalte und Daten auf, die er WEBklar übergibt oder selbst einpflegt.", ); expect(absatz).toHaveTextContent( "Für den Verlust solcher Inhalte und Daten haftet WEBklar außer in den Fällen von Absatz 1 nur in Höhe des Aufwands, der für ihre Wiederherstellung nötig gewesen wäre, wenn der Kunde diese Kopien aufbewahrt hätte.", ); }); it("Absatz 4: gilt auch zugunsten der Mitarbeiter und Beauftragten", () => { expect(haftung().absaetze[3]).toHaveTextContent( "Diese Regeln gelten auch zugunsten der Mitarbeiter und Beauftragten von WEBklar.", ); }); it("enthält die unwirksamen Ausschlüsse und die Höchstgrenze der alten Fassung nicht mehr", () => { const { section } = haftung(); for (const alt of [ /nur bei Vorsatz/, /keine Haftung/i, /Umsatzausfälle/, /Systemausfälle/, /externe Dienste/, /Auftragswert/, ]) { expect(section).not.toHaveTextContent(alt); } }); });