Vier Befunde, die still falsche Ergebnisse lieferten
C.08 -- die Suche mit Bindestrich fand nichts. Das Feld wird per translate an "-/:.," in Leerzeichen zerlegt, die Eingabe aber nicht: "Mueller-Weiss" erzeugte das Muster mueller-weiss%, waehrend im Heuhaufen "mueller weiss" stand. Ohne Bindestrich fand man dieselbe Person. Die Trennzeichen stehen jetzt einmal in lib/employee-search.ts und werden von beiden Seiten des Vergleichs benutzt. C.09 -- der Einheitenfilter verlor jede Person mit vorgemerktem Austritt. "Laufend" war valid_to is null, aber terminate_employee setzt das Ende schon beim Erfassen, Monate vor dem Tag. Jetzt zaehlt auch, was noch laeuft (valid_to > heute). Bewusst ohne valid_from <= heute: ein geplanter Eintritt gehoert in die Liste, sonst fiele er aus dem Filter, obwohl der Status "Geplant" ihn ausdruecklich fuehrt. E.07 -- nur die Kostenstelle zu aendern war unmoeglich. update_position weist einen Aufruf ohne Aenderung ab, und die Umkontierung lief erst bei dessen Erfolg. Sie wird jetzt uebersprungen, wenn sich an den Stammangaben nichts geaendert hat. H.06 -- jedes Speichern erzeugte zusaetzlich "Wochenstunden 30.0 -> 30". Der Vergleich laeuft ueber Text, die Spalte ist numeric(4,1), und das Formular schickt 30. Der Kommentar an der Zeile nannte die Absicht richtig, nur reicht ::numeric dafuer nicht -- es muss auf die Genauigkeit der Spalte gehen.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { istPersonalnummer, suchMuster } from "@/lib/employee-search";
|
||||
import { istPersonalnummer, suchMuster, TRENNZEICHEN, TRENNZEICHEN_ERSATZ } 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,
|
||||
@@ -35,6 +35,38 @@ describe("suchMuster", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("zerlegt an denselben Zeichen wie das Feld, gegen das verglichen wird", () => {
|
||||
// Das Feld wird per translate an TRENNZEICHEN in Leerzeichen zerlegt. Tat
|
||||
// es nur das Feld, erzeugte „Müller-Weiß" das Muster „müller-weiß%",
|
||||
// während im Heuhaufen „müller weiß" stand: null Treffer, obwohl die
|
||||
// Person da ist. Ohne Bindestrich fand man sie. (C.08, 29.09.)
|
||||
expect(suchMuster("müller-weiß")).toEqual([
|
||||
["müller%", "% müller%"],
|
||||
["weiß%", "% weiß%"],
|
||||
]);
|
||||
});
|
||||
|
||||
it("zerlegt an jedem der Trennzeichen", () => {
|
||||
for (const zeichen of [...TRENNZEICHEN]) {
|
||||
expect(suchMuster(`abc${zeichen}def`), `„${zeichen}" trennt nicht`).toEqual([
|
||||
["abc%", "% abc%"],
|
||||
["def%", "% def%"],
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
it("findet dieselbe Person mit und ohne Bindestrich", () => {
|
||||
expect(suchMuster("müller-weiß")).toEqual(suchMuster("müller weiß"));
|
||||
});
|
||||
|
||||
it("hält Trennzeichen und Ersatz gleich lang", () => {
|
||||
// translate() ordnet Zeichen für Zeichen zu. Wäre der Ersatz kürzer,
|
||||
// fielen die überzähligen Trennzeichen ersatzlos weg und „Müller-Weiß"
|
||||
// würde im Feld zu „müllerweiß" — die Suche fände es dann wieder nicht.
|
||||
expect(TRENNZEICHEN_ERSATZ).toHaveLength(TRENNZEICHEN.length);
|
||||
expect(TRENNZEICHEN_ERSATZ.trim()).toBe("");
|
||||
});
|
||||
|
||||
it("kennt keinen Platzhalter mitten im Wort", () => {
|
||||
// Das ist der Kern: „h%" trifft Hannah, „%h%" träfe auch Thomas.
|
||||
const [, [amAnfang]] = suchMuster("winkler h");
|
||||
|
||||
Reference in New Issue
Block a user