import { describe, expect, it } from "vitest"; import { istPersonalnummer, suchMuster } from "@/lib/employee-search"; // Der Anlass: „Winkler H" gab alle sieben Winkler zurück statt der einen // Hannah. Das „H" wurde als Teilzeichenkette gesucht und traf damit T-h-omas, // Kat-h-arina und CNC-Dre-h-er:in. // // Was hier geprüft wird, ist die Musterbildung. Dass „am Wortanfang" auch // wirklich am Wortanfang trifft, entscheidet das SQL der Seite — und ist // gegen die laufende Datenbank belegt: „winkler h" liefert dort genau Hannah // Winkler, „winkler kat" die beiden Katharinas, „dreher" die CNC-Dreher:innen. describe("istPersonalnummer", () => { it("erkennt reine Ziffern", () => { expect(istPersonalnummer("3038")).toBe(true); expect(istPersonalnummer(" 3038 ")).toBe(true); }); it("hält alles andere für einen Namen", () => { for (const t of ["winkler", "winkler 3038", "3038a", "", " "]) { expect(istPersonalnummer(t)).toBe(false); } }); }); describe("suchMuster", () => { it("macht aus jedem Wort ein Paar: am Anfang, und nach einem Leerzeichen", () => { expect(suchMuster("winkler")).toEqual([["winkler%", "% winkler%"]]); }); it("behandelt jedes Wort einzeln", () => { expect(suchMuster("winkler h")).toEqual([ ["winkler%", "% winkler%"], ["h%", "% h%"], ]); }); it("kennt keinen Platzhalter mitten im Wort", () => { // Das ist der Kern: „h%" trifft Hannah, „%h%" träfe auch Thomas. const [, [amAnfang]] = suchMuster("winkler h"); expect(amAnfang.startsWith("%")).toBe(false); }); it("schreibt klein, damit der Vergleich unabhängig von der Schreibweise ist", () => { expect(suchMuster("WINKLER")).toEqual([["winkler%", "% winkler%"]]); }); it("verträgt beliebig viel Abstand und Rand", () => { expect(suchMuster(" winkler h ")).toHaveLength(2); expect(suchMuster(" ")).toEqual([]); }); it("entschärft die Platzhalter von LIKE", () => { // Sonst wäre „%" eine Suche nach allem und „_" nach beliebigem Zeichen. expect(suchMuster("100%")).toEqual([["100\\%%", "% 100\\%%"]]); expect(suchMuster("a_b")).toEqual([["a\\_b%", "% a\\_b%"]]); expect(suchMuster("a\\b")).toEqual([["a\\\\b%", "% a\\\\b%"]]); }); });