From 72f278b478eb47656319a2349d0561cf9f18ad16 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 30 Sep 2026 15:27:33 +0000 Subject: [PATCH] =?UTF-8?q?AGB=20=C2=A7=209:=20Zeiterfassung=20in=2015-Min?= =?UTF-8?q?uten-Schritten=20und=20Unterst=C3=BCtzung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- src/pages/AGB.tsx | 7 ++++++ src/test/agb-verguetung.test.tsx | 41 ++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/test/agb-verguetung.test.tsx diff --git a/src/pages/AGB.tsx b/src/pages/AGB.tsx index d4cab6e..d6bf83b 100644 --- a/src/pages/AGB.tsx +++ b/src/pages/AGB.tsx @@ -192,6 +192,13 @@ const AGB = () => {
  1. Die Vergütung ergibt sich aus dem Angebot.
  2. +
  3. + Wird nach Aufwand abgerechnet, erfasst WEBklar die Arbeitszeit je Arbeitsschritt in Schritten von + 15 Minuten; angefangene 15 Minuten werden aufgerundet. Wirkt eine weitere Person unterstützend mit, + rechnet WEBklar für sie die Hälfte der Arbeitszeit des Arbeitsschritts an, aufgerundet auf volle + 15 Minuten; bei mehreren unterstützenden Personen gilt das für jede. Jeder Arbeitsschritt und jede + Unterstützung ist im Kundenportal einsehbar. +
  4. Projektleistungen sind nach Vereinbarung fällig.
  5. Für die Abos gelten die Vertragsbedingungen für die WEBklar-Abos.
diff --git a/src/test/agb-verguetung.test.tsx b/src/test/agb-verguetung.test.tsx new file mode 100644 index 0000000..ba0b5fa --- /dev/null +++ b/src/test/agb-verguetung.test.tsx @@ -0,0 +1,41 @@ +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 die Absätze von § 9 in der angezeigten Reihenfolge. */ +const verguetung = () => { + render( + + + , + ); + const section = screen.getByRole("heading", { name: "9. Vergütung und Zahlung" }).closest("section"); + if (!section) throw new Error("Abschnitt 9. Vergütung und Zahlung fehlt"); + return within(section).getAllByRole("listitem"); +}; + +describe("AGB § 9 Vergütung und Zahlung", () => { + it("hat vier Absätze", () => { + expect(verguetung()).toHaveLength(4); + }); + + it("Absatz 1 bleibt: Vergütung aus dem Angebot", () => { + expect(verguetung()[0]).toHaveTextContent("Die Vergütung ergibt sich aus dem Angebot."); + }); + + it("Absatz 2: 15-Minuten-Schritte und Unterstützung bei Abrechnung nach Aufwand", () => { + expect(verguetung()[1]).toHaveTextContent( + "Wird nach Aufwand abgerechnet, erfasst WEBklar die Arbeitszeit je Arbeitsschritt in Schritten von 15 Minuten; angefangene 15 Minuten werden aufgerundet. Wirkt eine weitere Person unterstützend mit, rechnet WEBklar für sie die Hälfte der Arbeitszeit des Arbeitsschritts an, aufgerundet auf volle 15 Minuten; bei mehreren unterstützenden Personen gilt das für jede. Jeder Arbeitsschritt und jede Unterstützung ist im Kundenportal einsehbar.", + ); + }); + + it("Absatz 3 und 4: Fälligkeit und Abos wie bisher", () => { + const absaetze = verguetung(); + expect(absaetze[2]).toHaveTextContent("Projektleistungen sind nach Vereinbarung fällig."); + expect(absaetze[3]).toHaveTextContent("Für die Abos gelten die Vertragsbedingungen für die WEBklar-Abos."); + }); +});