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>
34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { MessageListItemDTO } from "./api";
|
|
import { sortMessages } from "./sorting";
|
|
|
|
const messages: MessageListItemDTO[] = [
|
|
{ messageId: "1", subject: "Zebra", sender: "zoe@beispiel.test", mailbox: "posteingang", sentAt: 200 },
|
|
{ messageId: "2", subject: "Anton", sender: "anna@beispiel.test", mailbox: "posteingang", sentAt: 100 },
|
|
{ messageId: "3", subject: "Mitte", sender: "max@beispiel.test", mailbox: "posteingang", sentAt: 300 },
|
|
];
|
|
|
|
describe("sortMessages (Akzeptanzkriterium 2: Datum/Absender/Betreff)", () => {
|
|
it("sortiert nach Datum aufsteigend", () => {
|
|
expect(sortMessages(messages, "sentAt", "asc").map((m) => m.messageId)).toEqual(["2", "1", "3"]);
|
|
});
|
|
|
|
it("sortiert nach Datum absteigend", () => {
|
|
expect(sortMessages(messages, "sentAt", "desc").map((m) => m.messageId)).toEqual(["3", "1", "2"]);
|
|
});
|
|
|
|
it("sortiert nach Absender aufsteigend (alphabetisch)", () => {
|
|
expect(sortMessages(messages, "sender", "asc").map((m) => m.messageId)).toEqual(["2", "3", "1"]);
|
|
});
|
|
|
|
it("sortiert nach Betreff aufsteigend (alphabetisch)", () => {
|
|
expect(sortMessages(messages, "subject", "asc").map((m) => m.messageId)).toEqual(["2", "3", "1"]);
|
|
});
|
|
|
|
it("verändert die Eingabeliste nicht (reine Funktion)", () => {
|
|
const copy = [...messages];
|
|
sortMessages(messages, "subject", "asc");
|
|
expect(messages).toEqual(copy);
|
|
});
|
|
});
|