AGB § 9: Zeiterfassung in 15-Minuten-Schritten und Unterstützung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 15:27:33 +00:00
1 parent 034892c899
commit 72f278b478
2 files changed
+48

No files matched your search

+7
View File
@@ -192,6 +192,13 @@ const AGB = () => {
</h2>
<ol className="list-decimal list-inside space-y-2 text-muted-foreground leading-relaxed [&>li]:pl-2">
<li>Die Vergütung ergibt sich aus dem Angebot.</li>
<li>
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.
</li>
<li>Projektleistungen sind nach Vereinbarung fällig.</li>
<li>Für die Abos gelten die Vertragsbedingungen für die WEBklar-Abos.</li>
</ol>
+41
View File
@@ -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(
<MemoryRouter future={routerFuture}>
<AGB />
</MemoryRouter>,
);
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.");
});
});