Files
nexarch/web/mail-postfach/lib/folderTree.test.ts
patrickandClaude Sonnet 5 9b1661d6ff UX-01: postfach-ordneransicht
Postfach- und Ordneransicht fuer archivierte Mails (Next.js/React/TS,
@nexarch/shl). Ordnerbaum (aus der flachen Postfachliste der Mail-API
clientseitig aufgebaut), virtualisierte Nachrichtenliste mit Sortierung
nach Datum/Absender/Betreff, Grundsuche. Aufbau nach etabliertem Muster
(web/mail-search fuer die App-Struktur, web/dms-browser fuer Ordnerbaum/
virtualisierte Liste), bewusst schlicht gehalten (Mailpit/MailHog als
Vorbild, nicht die Komplexitaet eines nativen Mailprogramms).

Automatisierte Tests je Akzeptanzkriterium, inkl. eines echten
Backend-Integrationstests (e2e/ux01.e2e.test.ts) gegen den echten
mailapi.Server (mail/cmd/mailpostfach-fixture) mit zwei Mandanten und
einem gleichnamigen Ordner — keine Mandanten-Isolationslogik wird
gemockt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-16 06:54:40 +00:00

33 lines
1.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildFolderTree, flattenVisible } from "./folderTree";
describe("buildFolderTree (Akzeptanzkriterium 1: Ordnerbaum aus den Postfächern des Mandanten)", () => {
it("baut flache Ordner als Baumwurzeln ohne Verschachtelung", () => {
const tree = buildFolderTree([
{ name: "posteingang", messageCount: 3 },
{ name: "archiv", messageCount: 1 },
]);
expect(tree.map((n) => n.name)).toEqual(["posteingang", "archiv"]);
expect(tree.every((n) => n.children.length === 0)).toBe(true);
});
it("gruppiert '/'-getrennte Namen zu einer Hierarchie", () => {
const tree = buildFolderTree([
{ name: "INBOX/Projekte/Alpha", messageCount: 2 },
{ name: "INBOX/Projekte/Beta", messageCount: 5 },
]);
expect(tree).toHaveLength(1);
expect(tree[0].name).toBe("INBOX");
expect(tree[0].messageCount).toBeNull();
const projekte = tree[0].children[0];
expect(projekte.name).toBe("INBOX/Projekte");
expect(projekte.children.map((c) => c.name)).toEqual(["INBOX/Projekte/Alpha", "INBOX/Projekte/Beta"]);
});
it("flattenVisible zeigt eingeklappte Kinder nicht", () => {
const tree = buildFolderTree([{ name: "INBOX/Projekte", messageCount: 1 }]);
expect(flattenVisible(tree, new Set())).toHaveLength(1);
expect(flattenVisible(tree, new Set(["INBOX"]))).toHaveLength(2);
});
});