Archived
Website: Abo-Seiten an die Vertragsbedingungen angeglichen (Wechsel, Zusatzspeicher, Sicherheit), AGB-Verweise, Tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
dc27e508dd
commit
2c1a4c150c
5 files changed
+135
-70
No files matched your search
+53
-5
@@ -1,17 +1,27 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import { render, screen, within } from "@testing-library/react";
|
||||
import { MemoryRouter } from "react-router-dom";
|
||||
import HostingAbo from "@/pages/HostingAbo";
|
||||
import WartungsAbo from "@/pages/WartungsAbo";
|
||||
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 };
|
||||
|
||||
// Texte, die auf einer Seite mehrfach vorkommen können, werden mit getAllByText
|
||||
// geprüft (getByText wirft bei mehreren Treffern); Abwesenheit mit queryAllByText.
|
||||
|
||||
/** Liefert den <section>-Abschnitt zu einer Überschrift. */
|
||||
const sectionOf = (name: string | RegExp): HTMLElement => {
|
||||
const section = screen.getByRole("heading", { name }).closest("section");
|
||||
if (!section) throw new Error(`Abschnitt zur Überschrift ${String(name)} fehlt`);
|
||||
return section;
|
||||
};
|
||||
|
||||
describe("Abo-Seiten", () => {
|
||||
it("Hosting-Abo-Seite: Preis, Postfach, Links", () => {
|
||||
render(
|
||||
<MemoryRouter>
|
||||
<MemoryRouter future={routerFuture}>
|
||||
<HostingAbo />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
@@ -27,25 +37,63 @@ describe("Abo-Seiten", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("Hosting-Abo-Seite: Wechsel und Zusatzspeicher nur unter den Bedingungen des Portals", () => {
|
||||
render(
|
||||
<MemoryRouter future={routerFuture}>
|
||||
<HostingAbo />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
// § 9 Abs. 1: Wechsel nur, wenn das Hosting-Abo begonnen hat, nicht gekündigt ist und keine Zahlung offen ist;
|
||||
// mit dem Wechsel beginnt eine neue Mindestlaufzeit.
|
||||
const wechsel = within(sectionOf("Wechsel ins Wartungs-Abo"));
|
||||
expect(wechsel.getAllByText(/begonnen hat/).length).toBeGreaterThan(0);
|
||||
expect(wechsel.getAllByText(/nicht gekündigt/).length).toBeGreaterThan(0);
|
||||
expect(wechsel.getAllByText(/keine Zahlung offen/).length).toBeGreaterThan(0);
|
||||
expect(wechsel.getAllByText(/neue Mindestlaufzeit von 12 Monaten/).length).toBeGreaterThan(0);
|
||||
// § 10 Abs. 1: dieselben Bedingungen für Bestellung und Verringerung des Zusatzspeichers.
|
||||
const speicher = within(sectionOf("E-Mail-Zusatzspeicher"));
|
||||
expect(speicher.getAllByText(/begonnen hat/).length).toBeGreaterThan(0);
|
||||
expect(speicher.getAllByText(/nicht gekündigt/).length).toBeGreaterThan(0);
|
||||
expect(speicher.getAllByText(/keine Zahlung offen/).length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("Wartungs-Abo-Seite: beliebig viele Postfächer, Zusatzspeicher", () => {
|
||||
render(
|
||||
<MemoryRouter>
|
||||
<MemoryRouter future={routerFuture}>
|
||||
<WartungsAbo />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
expect(screen.getAllByText("Beliebig viele Postfächer").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText(/beliebig viele Postfächer/).length).toBeGreaterThan(0);
|
||||
expect(screen.queryAllByText("1 E-Mail-Postfach").length).toBe(0);
|
||||
expect(screen.queryAllByText(/1 E-Mail-Postfach/).length).toBe(0);
|
||||
expect(screen.getAllByText(/1,00 €/).length).toBeGreaterThan(0);
|
||||
// Wechsel und Zusatzspeicher auch hier nur unter den Bedingungen des Portals.
|
||||
const speicher = within(sectionOf("E-Mail-Postfächer und Zusatzspeicher"));
|
||||
expect(speicher.getAllByText(/nicht gekündigt/).length).toBeGreaterThan(0);
|
||||
expect(speicher.getAllByText(/keine Zahlung offen/).length).toBeGreaterThan(0);
|
||||
const hosting = within(sectionOf("Hosting-Abo für statische Websites"));
|
||||
expect(hosting.getAllByText(/nicht gekündigt/).length).toBeGreaterThan(0);
|
||||
expect(hosting.getAllByText(/keine Zahlung offen/).length).toBeGreaterThan(0);
|
||||
expect(hosting.getAllByText(/neue Mindestlaufzeit von 12 Monaten/).length).toBeGreaterThan(0);
|
||||
expect(hosting.getByRole("link", { name: /§ 9 der Vertragsbedingungen/ })).toHaveAttribute(
|
||||
"href",
|
||||
"https://project.webklar.com/abo-bedingungen.html#wechsel",
|
||||
);
|
||||
});
|
||||
|
||||
it("AGB Modul C verweist auf das Hosting-Abo", () => {
|
||||
render(
|
||||
<MemoryRouter>
|
||||
<MemoryRouter future={routerFuture}>
|
||||
<AGB />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
expect(screen.getAllByText(/Hosting-Abo/).length).toBeGreaterThan(0);
|
||||
const modulC = within(sectionOf(/Leistungsmodul C/));
|
||||
expect(modulC.getAllByText(/Hosting-Abo/).length).toBeGreaterThan(0);
|
||||
expect(modulC.getByRole("link", { name: "Vertragsbedingungen für die WEBklar-Abos" })).toHaveAttribute(
|
||||
"href",
|
||||
"https://project.webklar.com/abo-bedingungen.html",
|
||||
);
|
||||
expect(screen.queryAllByText(/verlängern sich automatisch/).length).toBe(0);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user