Hay-Grade auch in "Daten aendern"
Die Befoerderung konnte ihn schon setzen, "Daten aendern" nicht -- weder das
Formular noch change_employee_data kannten das Feld. Damit war eine Einstufung
nur ueber den Weg "Befoerderung" zu aendern, und eine Richtigstellung ("da
stand von Anfang an die falsche Stufe") ist keine Befoerderung: sie soll keine
Planstelle wechseln und kein Ereignis in der Historie hinterlassen.
Das Feld gehoert zur Gruppe contract und ist damit datiert -- eine Umstufung
gilt ab einem Tag. Es kann also in pending_org_changes landen, und deshalb
steht es auch im Nachtlauf. Genau diese zweite Stelle ist hier schon einmal
vergessen worden: die Gruppe role fehlte dort monatelang, und eine datierte
Aenderung wurde als applied vermerkt, ohne etwas zu tun. Drittens
app_feld_karte, sonst waere der Eintrag in der Historie nicht richtigstellbar.
Alle drei Funktionen werden aus der laufenden Definition gelesen und an genau
einem Anker ergaenzt, nicht aus einer Datei kopiert.
Der Test zur Feldkarte liest jetzt alle Migrationen statt einer bestimmten. Der
feste Dateiname darin trug den Vermerk "die zuletzt gueltige Fassung" und war
schon zwei Migrationen spaeter falsch -- und ein Teil der Feldkarte kommt
inzwischen ohnehin aus einer Punktaenderung statt aus einer vollstaendigen
Fassung.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import { readdirSync, readFileSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { FELD_AUSWAHLEN, auswahlFuer } from "@/lib/historie-felder";
|
||||
@@ -9,15 +9,24 @@ import { FELD_AUSWAHLEN, auswahlFuer } from "@/lib/historie-felder";
|
||||
// landeten wieder in der Spalte. Ein stiller Rückfall auf den Zustand, den
|
||||
// diese Datei beheben soll.
|
||||
//
|
||||
// Geprüft wird gegen die zuletzt gültige Fassung der Feldkarte.
|
||||
const MIGRATION = join(process.cwd(), "db/migrations/20260923120000_firmenemail.sql");
|
||||
// Gelesen werden **alle** Migrationen, nicht eine bestimmte. Hier stand
|
||||
// einmal ein fester Dateiname mit dem Vermerk „die zuletzt gültige Fassung";
|
||||
// der war schon zwei Migrationen später falsch, und ein Teil der Feldkarte
|
||||
// kommt inzwischen ohnehin aus einer Punktänderung an der laufenden
|
||||
// Definition statt aus einer vollständigen Fassung. Eine Bezeichnung, die
|
||||
// irgendwann einmal eingetragen wurde, zählt damit als bekannt — das ist
|
||||
// schwächer als der Stand von heute, aber es ist die Frage, die hier zählt:
|
||||
// ob jemand einen Schlüssel erfunden hat, den es nie gab.
|
||||
const MIGRATIONEN = join(process.cwd(), "db/migrations");
|
||||
|
||||
function bezeichnungenDerFeldkarte(): string[] {
|
||||
const sql = readFileSync(MIGRATION, "utf8");
|
||||
const block = sql.match(/FUNCTION public\.app_feld_karte\(\)[\s\S]*?\$function\$;/)?.[0];
|
||||
expect(block, "app_feld_karte steht nicht mehr in dieser Migration").toBeDefined();
|
||||
// Je Zeile: 'Bezeichnung', jsonb_build_array('spalte', 'typ', 'gruppe'),
|
||||
return [...block!.matchAll(/^\s*'([^']+)',\s+jsonb_build_array\(/gm)].map((m) => m[1]);
|
||||
const muster = /'([^']+)',\s+jsonb_build_array\('[a-z_]+', '[a-z_]+'/g;
|
||||
const gefunden = readdirSync(MIGRATIONEN)
|
||||
.filter((f) => f.endsWith(".sql"))
|
||||
.flatMap((f) => [...readFileSync(join(MIGRATIONEN, f), "utf8").matchAll(muster)].map((m) => m[1]));
|
||||
expect(gefunden.length, "Die Feldkarte steht in keiner Migration mehr").toBeGreaterThan(0);
|
||||
return gefunden;
|
||||
}
|
||||
|
||||
describe("Die Auswahllisten im Dialog „Eintrag berichtigen“", () => {
|
||||
|
||||
Reference in New Issue
Block a user