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:
1 parent
034892c899
commit
72f278b478
2 files changed
+48
No files matched your search
@@ -192,6 +192,13 @@ const AGB = () => {
|
|||||||
</h2>
|
</h2>
|
||||||
<ol className="list-decimal list-inside space-y-2 text-muted-foreground leading-relaxed [&>li]:pl-2">
|
<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>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>Projektleistungen sind nach Vereinbarung fällig.</li>
|
||||||
<li>Für die Abos gelten die Vertragsbedingungen für die WEBklar-Abos.</li>
|
<li>Für die Abos gelten die Vertragsbedingungen für die WEBklar-Abos.</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|||||||
@@ -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.");
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in new issue
Block a user