Files
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

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);
});
});