import { describe, expect, it } from "vitest"; import { SORTIERUNGEN, STANDARD_SORTIERUNG, parseSortierung, richtung } from "@/lib/employee-sort"; // Die Sortierung steht in der Adresse, und dort kann alles stehen: eine // veraltete Verknüpfung, ein Tippfehler, ein abgeschnittener Wert. Sie darf // die Liste weder leeren noch in einer Reihenfolge zeigen, die niemand // gewählt hat — und schon gar nicht in die Abfrage durchschlagen. describe("parseSortierung", () => { it("nimmt jede angebotene Sortierung", () => { // Aus der Liste abgeleitet, nicht abgeschrieben: käme eine dritte // Sortierung dazu, prüft dieser Test sie mit, ohne dass jemand daran // denken muss. for (const s of SORTIERUNGEN) { expect(parseSortierung(s.value)).toBe(s.value); } }); it("fällt ohne Angabe auf A–Z zurück", () => { expect(parseSortierung(undefined)).toBe(STANDARD_SORTIERUNG); expect(parseSortierung("")).toBe(STANDARD_SORTIERUNG); expect(STANDARD_SORTIERUNG).toBe("az"); }); it("lässt sich nichts unterschieben", () => { expect(parseSortierung("AZ")).toBe(STANDARD_SORTIERUNG); expect(parseSortierung("last_name desc")).toBe(STANDARD_SORTIERUNG); expect(parseSortierung("id; drop table employees")).toBe(STANDARD_SORTIERUNG); }); }); describe("richtung", () => { it("dreht nur bei Z–A", () => { expect(richtung("az")).toBe("asc"); expect(richtung("za")).toBe("desc"); }); it("liefert für jede Sortierung eine gültige Richtung", () => { // Die Richtung geht unmittelbar in die Abfrage. Ein anderer Wert als // asc oder desc wäre dort ein Fehler zur Laufzeit, nicht beim Bauen. for (const s of SORTIERUNGEN) { expect(["asc", "desc"]).toContain(richtung(s.value)); } }); });