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>
33 lines
1.4 KiB
TypeScript
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);
|
|
});
|
|
});
|