Rollen Chunk 4: Benutzerkonto, Abmelde-Icon und fremde Einstellungen
Docker Image / image (push) Canceled after 0s
Docker Image / test (push) Canceled after 2s

This commit is contained in:
loki committed 2026-10-11 19:14:05 +02:00
1 parent a011ba564e
commit 34cb089406
1 file changed
+67
+67
View File
@@ -0,0 +1,67 @@
import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, test, vi } from "vitest";
import { ApiError } from "@/lib/api-client";
import { AccountSection } from "./AccountSection";
vi.mock("@/lib/auth-client", () => ({
changePassword: vi.fn(),
changeEmail: vi.fn(),
}));
describe("AccountSection", () => {
test("wechselt das Passwort und meldet Erfolg", async () => {
const { changePassword } = await import("@/lib/auth-client");
vi.mocked(changePassword).mockResolvedValue({ status: true });
render(<AccountSection email="alt@example.org" />);
fireEvent.change(screen.getByLabelText(/Aktuelles Passwort/), {
target: { value: "alt-geheim!" },
});
fireEvent.change(screen.getByLabelText(/Neues Passwort/), {
target: { value: "neu-geheim-1!" },
});
fireEvent.click(screen.getByRole("button", { name: "Passwort ändern" }));
await vi.waitFor(() => {
expect(changePassword).toHaveBeenCalledWith(
"alt-geheim!",
"neu-geheim-1!",
);
});
expect(
await screen.findByText("Passwort geändert."),
).toBeInTheDocument();
});
test("zeigt falsches aktuelles Passwort deutsch an", async () => {
const { changePassword } = await import("@/lib/auth-client");
vi.mocked(changePassword).mockRejectedValue(
new ApiError("Invalid password", "INVALID_PASSWORD", 400),
);
render(<AccountSection email="alt@example.org" />);
fireEvent.change(screen.getByLabelText(/Aktuelles Passwort/), {
target: { value: "falsch" },
});
fireEvent.change(screen.getByLabelText(/Neues Passwort/), {
target: { value: "neu-geheim-1!" },
});
fireEvent.click(screen.getByRole("button", { name: "Passwort ändern" }));
expect(await screen.findByRole("alert")).toHaveTextContent(
"Aktuelles Passwort falsch.",
);
});
test("wechselt die E-Mail sofort", async () => {
const { changeEmail } = await import("@/lib/auth-client");
vi.mocked(changeEmail).mockResolvedValue({ status: true });
render(<AccountSection email="alt@example.org" onEmailChanged={() => {}} />);
fireEvent.change(screen.getByLabelText(/Neue E-Mail/), {
target: { value: "neu@example.org" },
});
fireEvent.click(screen.getByRole("button", { name: "E-Mail ändern" }));
await vi.waitFor(() => {
expect(changeEmail).toHaveBeenCalledWith("neu@example.org");
});
expect(
await screen.findByText("E-Mail geändert."),
).toBeInTheDocument();
});
});