diff --git a/src/pages/AGB.tsx b/src/pages/AGB.tsx index 0f5f785..d4cab6e 100644 --- a/src/pages/AGB.tsx +++ b/src/pages/AGB.tsx @@ -222,16 +222,10 @@ const AGB = () => { 11. Haftung
    -
  1. WEBklar haftet nur bei Vorsatz und grober Fahrlässigkeit.
  2. -
  3. Keine Haftung für: - -
  4. -
  5. Die Haftung ist der Höhe nach auf den Auftragswert begrenzt.
  6. +
  7. 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.
  8. +
  9. Bei leicht fahrlässiger Verletzung einer wesentlichen Vertragspflicht haftet WEBklar nur für den vertragstypischen, vorhersehbaren Schaden. 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. Im Übrigen ist die Haftung für leichte Fahrlässigkeit ausgeschlossen.
  10. +
  11. Der Kunde bewahrt Kopien der Inhalte und Daten auf, die er WEBklar übergibt oder selbst einpflegt. 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.
  12. +
  13. Diese Regeln gelten auch zugunsten der Mitarbeiter und Beauftragten von WEBklar.
{contractDivider} diff --git a/src/test/agb-haftung.test.tsx b/src/test/agb-haftung.test.tsx new file mode 100644 index 0000000..1314925 --- /dev/null +++ b/src/test/agb-haftung.test.tsx @@ -0,0 +1,74 @@ +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); + } + }); +});