Die Kachel verwies auf eine Adresse, die die Liste nicht lesen konnte

Die neue Kachel "Aktives Dienstverhaeltnis" verlinkte auf
?status=Aktiv&status=Karenz. Die Mitarbeiterliste liest den Parameter aber
als *eine* Zeichenkette und trennt selbst an Kommas — zweimal uebergeben
macht Next daraus ein Array, und `.split(",")` lief dagegen. Sichtbar war
nur "Diese Ansicht konnte nicht geladen werden".

Die Kachel schreibt jetzt status=Aktiv,Karenz. Dazu glaettet die Seite alle
ihre Parameter: eine Adresse kommt nicht nur aus der eigenen Anwendung, sie
steht in Lesezeichen und in E-Mails, und ?q=a&q=b haette sie genauso
gefaellt.

Zwei Anmerkungen von Max:

  * Die Reihenfolge der Wochentage wurde beim Speichern mitgenommen — "Mo,
    Di" und "Di, Mo" waren zwei Werte fuer dieselbe Aussage. Da
    change_employee_data die Arbeitstage als zusammengefuegte Zeichenkette
    vergleicht, erzeugte jedes Nachsehen und Wiederherstellen eine
    Vertragsaenderung in der Akte und einen Protokolleintrag — ueber nichts.
    Jetzt sortiert gespeichert (lib/wochentage.ts, an einer Stelle statt in
    vier Kopien), auch im Massenimport. Der Bestand richtet sich beim
    naechsten Speichern von selbst.
  * "Beguenstigt behindert" steht jetzt als eingerueckter Unterpunkt des
    Kuendigungsschutzes statt als eigener Block daneben. In der Datenbank
    bleiben es getrennte Felder, und das mit Absicht: eine Kopplung liesse
    jede Korrektur am Personenkreis scheitern, solange der Grad noch
    dransteht.
This commit is contained in:
2026-09-16 22:06:38 +02:00
parent 05d56bf3b9
commit 4dc27bf212
8 changed files with 202 additions and 60 deletions

View File

@@ -0,0 +1,40 @@
import { describe, expect, it } from "vitest";
import { sortiereWochentage, WOCHENTAGE } from "@/lib/wochentage";
// Der Anlass: „Mo, Di" und „Di, Mo" waren zwei verschiedene gespeicherte
// Werte für dieselbe Aussage, weil die Klickreihenfolge mit abgelegt wurde.
// change_employee_data vergleicht die Arbeitstage als zusammengefügte
// Zeichenkette — wer die Tage nur nachsah und wiederherstellte, erzeugte
// damit eine Vertragsänderung in der Personalakte über nichts.
describe("sortiereWochentage", () => {
it("bringt die Tage in Wochenreihenfolge", () => {
expect(sortiereWochentage(["Di", "Mo"])).toEqual(["Mo", "Di"]);
expect(sortiereWochentage(["Fr", "Mi", "Mo"])).toEqual(["Mo", "Mi", "Fr"]);
});
it("liefert für dieselbe Menge immer dasselbe Ergebnis", () => {
// Das ist die eigentliche Zusicherung: die Reihenfolge der Eingabe darf
// am Ergebnis nichts ändern, sonst kommt der Scheinunterschied zurück.
expect(sortiereWochentage(["Di", "Mo", "Fr"])).toEqual(sortiereWochentage(["Fr", "Di", "Mo"]));
});
it("wirft Dubletten weg", () => {
expect(sortiereWochentage(["Mo", "Mo", "Di"])).toEqual(["Mo", "Di"]);
});
it("lässt die volle Woche unverändert", () => {
expect(sortiereWochentage([...WOCHENTAGE])).toEqual([...WOCHENTAGE]);
});
it("verschluckt Unbekanntes nicht, sondern hängt es an", () => {
// Die Spalte ist ein text[] ohne Prüfung. Was der Massenimport einmal
// hineingeschrieben hat, darf eine Sortierung nicht stillschweigend
// löschen — sichtbar falsch ist besser als unsichtbar weg.
expect(sortiereWochentage(["Fr", "Feiertag", "Mo"])).toEqual(["Mo", "Fr", "Feiertag"]);
});
it("kommt mit einer leeren Liste zurecht", () => {
expect(sortiereWochentage([])).toEqual([]);
});
});