Просмотр исходного кода

RHL-046 feat(overview-cards): implement buildOverviewCards function and corresponding tests

Code_Uwe 1 месяц назад
Родитель
Сommit
53c3328459
2 измененных файлов с 106 добавлено и 0 удалено
  1. 46 0
      lib/frontend/overview/cardsConfig.js
  2. 60 0
      lib/frontend/overview/cardsConfig.test.js

+ 46 - 0
lib/frontend/overview/cardsConfig.js

@@ -0,0 +1,46 @@
+export function buildOverviewCards({
+	explorerHref,
+	searchHref,
+	canManageUsers,
+	disabledHint,
+}) {
+	const cards = [
+		{
+			key: "explorer",
+			title: "Explorer",
+			description: "Lieferscheine nach Datum durchsuchen (Jahr -> Monat -> Tag).",
+			imageSrc: "/overview-cards/explorer.png",
+			href: explorerHref || null,
+			disabledHint: disabledHint || null,
+		},
+		{
+			key: "search",
+			title: "Suche",
+			description: "Schnell finden mit Volltext, Zeitraum und Filtern.",
+			imageSrc: "/overview-cards/search.png",
+			href: searchHref || null,
+			disabledHint: disabledHint || null,
+		},
+		{
+			key: "profile",
+			title: "Profil",
+			description: "Passwort ändern und Support kontaktieren.",
+			imageSrc: "/overview-cards/profile.png",
+			href: "/profile",
+			disabledHint: null,
+		},
+	];
+
+	if (canManageUsers) {
+		cards.push({
+			key: "users",
+			title: "Benutzerverwaltung",
+			description: "Benutzer anlegen, bearbeiten und verwalten.",
+			imageSrc: "/overview-cards/users.png",
+			href: "/admin/users",
+			disabledHint: null,
+		});
+	}
+
+	return cards;
+}

+ 60 - 0
lib/frontend/overview/cardsConfig.test.js

@@ -0,0 +1,60 @@
+/* @vitest-environment node */
+
+import { describe, it, expect } from "vitest";
+import { buildOverviewCards } from "./cardsConfig.js";
+
+describe("lib/frontend/overview/cardsConfig", () => {
+	it("returns 3 cards when user management is not allowed", () => {
+		const cards = buildOverviewCards({
+			explorerHref: "/NL01",
+			searchHref: "/NL01/search",
+			canManageUsers: false,
+			disabledHint: "Bitte zuerst eine gültige Niederlassung wählen.",
+		});
+
+		expect(cards).toHaveLength(3);
+		expect(cards.map((x) => x.key)).toEqual(["explorer", "search", "profile"]);
+	});
+
+	it("returns 4 cards when user management is allowed", () => {
+		const cards = buildOverviewCards({
+			explorerHref: "/NL01",
+			searchHref: "/NL01/search",
+			canManageUsers: true,
+			disabledHint: "Bitte zuerst eine gültige Niederlassung wählen.",
+		});
+
+		expect(cards).toHaveLength(4);
+		expect(cards.map((x) => x.key)).toEqual([
+			"explorer",
+			"search",
+			"profile",
+			"users",
+		]);
+	});
+
+	it("uses explorer/search hrefs and assigns disabledHint only to branch cards", () => {
+		const cards = buildOverviewCards({
+			explorerHref: null,
+			searchHref: null,
+			canManageUsers: true,
+			disabledHint: "Bitte zuerst eine gültige Niederlassung wählen.",
+		});
+
+		const byKey = Object.fromEntries(cards.map((card) => [card.key, card]));
+
+		expect(byKey.explorer.href).toBe(null);
+		expect(byKey.search.href).toBe(null);
+		expect(byKey.profile.href).toBe("/profile");
+		expect(byKey.users.href).toBe("/admin/users");
+
+		expect(byKey.explorer.disabledHint).toBe(
+			"Bitte zuerst eine gültige Niederlassung wählen.",
+		);
+		expect(byKey.search.disabledHint).toBe(
+			"Bitte zuerst eine gültige Niederlassung wählen.",
+		);
+		expect(byKey.profile.disabledHint).toBe(null);
+		expect(byKey.users.disabledHint).toBe(null);
+	});
+});