feat(seed): mitgelieferte Vorlagen am Schluessel erkennen (#42)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #42.
This commit is contained in:
2026-10-04 14:49:00 +00:00
parent 88d7db8c3d
commit 0fa41b9e08
20 changed files with 316 additions and 36 deletions
+53
View File
@@ -342,6 +342,59 @@ describe.runIf(datenbankVerfuegbar)("Seed gegen die Datenbank", () => {
expect(await testPrisma.vorlagenVersion.count({ where: { vorlageId: erste.vorlageId } })).toBe(2);
});
it("erkennt eine umbenannte Vorlage am Schluessel und legt keine zweite an", async () => {
// Der Fall, fuer den das Feld da ist (#021). Vorher erkannte der Seed seine
// Vorlagen am Namen: wer eine umbenannte, bekam beim naechsten Lauf eine
// zweite - und der Schnellstart stand auf der Geraeteseite doppelt.
const [erste] = await vorlagenSaeen(testPrisma);
if (!erste) throw new Error("Der Seed hat keine Vorlage angelegt.");
await testPrisma.vorlage.update({
where: { id: erste.vorlageId },
data: { name: "Von Hand umbenannt" },
});
const zweit = await vorlagenSaeen(testPrisma);
expect(zweit.every((eintrag) => !eintrag.neu)).toBe(true);
expect(await testPrisma.vorlage.count()).toBe(7);
// Und der Name bleibt der, den jemand gewaehlt hat.
const nachher = await testPrisma.vorlage.findUniqueOrThrow({ where: { id: erste.vorlageId } });
expect(nachher.name).toBe("Von Hand umbenannt");
});
it("legt zu einer umbenannten Vorlage keine zweite Schnellstart-Zeile an", async () => {
const gesaet = await vorlagenSaeen(testPrisma);
await typVorgabenSaeen(testPrisma, gesaet);
const vorher = await testPrisma.geraetetypVorlage.count();
// „PC Neuinstallation“ steht im Schnellstart fuer PC und NOTEBOOK - genau die
// Zeilen, die sich vorher verdoppelt haben.
const pc = gesaet.find((eintrag) => eintrag.name === "PC Neuinstallation");
if (!pc) throw new Error("Die PC-Vorlage fehlt im Seed.");
await testPrisma.vorlage.update({
where: { id: pc.vorlageId },
data: { name: "Arbeitsplatz neu aufsetzen" },
});
const nochmal = await vorlagenSaeen(testPrisma);
expect(await typVorgabenSaeen(testPrisma, nochmal)).toBe(0);
expect(await testPrisma.geraetetypVorlage.count()).toBe(vorher);
});
it("traegt den Schluessel bei einer Installation nach, die ihn noch nicht hat", async () => {
// Eine Installation von vor diesem Feld: die Zeilen stehen, der Schluessel
// fehlt. Ohne den Rueckfall auf den Namen bekaeme sie beim ersten Lauf
// danach genau die Dubletten, die das Feld verhindern soll.
const gesaet = await vorlagenSaeen(testPrisma);
await testPrisma.vorlage.updateMany({ data: { seedSchluessel: null } });
expect(await testPrisma.vorlage.count({ where: { seedSchluessel: null } })).toBe(7);
const zweit = await vorlagenSaeen(testPrisma);
expect(zweit.every((eintrag) => !eintrag.neu)).toBe(true);
expect(await testPrisma.vorlage.count()).toBe(7);
expect(await testPrisma.vorlage.count({ where: { seedSchluessel: null } })).toBe(0);
expect(zweit.map((e) => e.vorlageId).sort()).toEqual(gesaet.map((e) => e.vorlageId).sort());
});
it("verknuepft die Schnellstart-Vorgaben mit den richtigen Vorlagen", async () => {
const gesaet = await vorlagenSaeen(testPrisma);
const angelegt = await typVorgabenSaeen(testPrisma, gesaet);