feat(schnellstart): Kacheln je Geraetetyp in der Oberflaeche pflegen
Welche Vorlagen auf der Geraeteseite als Kachel erscheinen, stand nur im Seed. Wer eine eigene Vorlage dort haben wollte, kam nicht heran; wer eine mitgelieferte loswerden wollte, auch nicht. Neue Seite Verwaltung -> Schnellstart: je Geraetetyp eine Liste, Reihenfolge ueber Hoch und Runter. Kein Drag & Drop -- der Editor braucht dnd-kit fuer hundert Schritte, hier sind es zwei bis vier Kacheln, und zwei Knoepfe sind am Handy verlaesslicher als eine Ziehgeste neben einer scrollenden Seite. Gespeichert wird die ganze Liste; position kommt aus ihrer Reihenfolge, damit es nur eine Wahrheit darueber gibt. Zur Auswahl stehen nur veroeffentlichte, nicht archivierte Vorlagen. Einstellung.schnellstartGepflegt haelt den Seed heraus, sobald jemand gespeichert hat -- auch bei unveraenderter Liste. Eine fehlende Zeile sagt nicht, ob sie noch nie da war oder bewusst entfernt wurde. Das Durchklicken des gebauten Stands fand einen Fehler, den die Suite nicht gesehen haette: die Umsortierung wurde nicht gespeichert. Altdaten tragen mehrere Zeilen auf position 0, und bei gleicher Position ist die Reihenfolge in Postgres nicht festgelegt -- Lesemodell und Dienst gaben sie unterschiedlich zurueck, und der Vergleich hielt die Umsortierung fuer einen Leerlauf. Behoben durch einen eindeutigen Tiebreak in beiden Abfragen, mit Regressionstest. Closes #34
This commit is contained in:
@@ -414,6 +414,36 @@ describe.runIf(datenbankVerfuegbar)("Seed gegen die Datenbank", () => {
|
||||
expect(await typVorgabenSaeen(testPrisma, gesaet)).toBe(0);
|
||||
});
|
||||
|
||||
it("laesst den Schnellstart in Ruhe, sobald er in der Oberflaeche gepflegt wurde", async () => {
|
||||
// Der Fall aus #022: wer eine Kachel entfernt, soll sie nicht beim naechsten
|
||||
// Seed-Lauf zurueckbekommen. Eine fehlende Zeile sagt nicht, ob sie noch nie
|
||||
// da war oder bewusst entfernt wurde — die Marke sagt es.
|
||||
const gesaet = await vorlagenSaeen(testPrisma);
|
||||
expect(await typVorgabenSaeen(testPrisma, gesaet)).toBeGreaterThan(0);
|
||||
|
||||
await testPrisma.geraetetypVorlage.deleteMany({ where: { geraeteTyp: GeraeteTyp.PC } });
|
||||
// upsert, weil dieser Block die Einstellung nicht selbst anlegt - und genau
|
||||
// deshalb belegt der Test auch, dass typVorgabenSaeen ohne sie zurechtkommt.
|
||||
await testPrisma.einstellung.upsert({
|
||||
where: { id: "global" },
|
||||
create: { id: "global", schnellstartGepflegt: true },
|
||||
update: { schnellstartGepflegt: true },
|
||||
});
|
||||
|
||||
expect(await typVorgabenSaeen(testPrisma, gesaet)).toBe(0);
|
||||
expect(await testPrisma.geraetetypVorlage.count({ where: { geraeteTyp: GeraeteTyp.PC } })).toBe(0);
|
||||
});
|
||||
|
||||
it("legt die Vorgaben weiter an, solange niemand sie gepflegt hat", async () => {
|
||||
const gesaet = await vorlagenSaeen(testPrisma);
|
||||
await typVorgabenSaeen(testPrisma, gesaet);
|
||||
const vorher = await testPrisma.geraetetypVorlage.count({ where: { geraeteTyp: GeraeteTyp.PC } });
|
||||
expect(vorher).toBeGreaterThan(0);
|
||||
|
||||
await testPrisma.geraetetypVorlage.deleteMany({ where: { geraeteTyp: GeraeteTyp.PC } });
|
||||
expect(await typVorgabenSaeen(testPrisma, gesaet)).toBe(vorher);
|
||||
});
|
||||
|
||||
it("legt Abteilungen, Personen, Geraete und freie Tags an", async () => {
|
||||
const eigene = await eigeneOrganisation();
|
||||
const bestand = await stammdatenSaeen(testPrisma, eigene.id);
|
||||
|
||||
Reference in New Issue
Block a user