feat(bausteine): Abschnitte, die mehrere Vorlagen teilen (#57)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #57.
This commit is contained in:
2026-10-04 17:07:12 +00:00
parent b688e2ebc8
commit 80870133b8
24 changed files with 2862 additions and 46 deletions
+69
View File
@@ -16,6 +16,8 @@ import {
verwendetePlatzhalter,
type EditorAufbau,
type EditorVariable,
bausteineAnreichern,
neuerBausteinAbschnitt,
} from "@/lib/editor-aufbau";
import { EINGEBAUTE_PLATZHALTER } from "@/lib/platzhalter";
import { StrukturSchema } from "@/lib/vorlagen-format";
@@ -254,3 +256,70 @@ describe("Beispielwerte der Vorschau", () => {
}
});
});
describe("Bausteine im Editor-Aufbau", () => {
const BAUSTEIN = {
bausteinVersionId: "bv-1",
name: "Datensicherung prüfen",
titel: "Datensicherung",
version: 3,
anzahlSchritte: 2,
};
it("schickt die Platzhalter-Schritte eines Baustein-Abschnitts nicht mit", () => {
/*
* Der Fehler, den erst das Durchklicken des gebauten Stands gezeigt hat
* (#030): die Schritte im Zustand sind nur da, damit die Anzahl in der Karte
* stimmt — sie haben keinen Titel. Mitgeschickt wies `SchrittSchema` den
* ganzen Entwurf ab, und das Speichern scheiterte.
*/
const abschnitt = neuerBausteinAbschnitt(BAUSTEIN);
expect(abschnitt.schritte).toHaveLength(2);
expect(abschnitt.schritte.every((schritt) => schritt.titel === "")).toBe(true);
const struktur = alsStruktur({ variablen: [], abschnitte: [abschnitt] });
expect(struktur.abschnitte[0]?.schritte).toEqual([]);
expect(struktur.abschnitte[0]?.bausteinVersionId).toBe("bv-1");
// Und das Ergebnis muss durch das Schema gehen – genau das tat es vorher nicht.
expect(() => StrukturSchema.parse(struktur)).not.toThrow();
});
it("nimmt den Verweis mit und gibt ihn zurück", () => {
const struktur = StrukturSchema.parse({
variablen: [],
abschnitte: [
{ titel: "Eigen", schritte: [{ titel: "Eins" }] },
{ titel: "x", bausteinVersionId: "bv-1", schritte: [] },
],
});
const aufbau = alsEditorAufbau(struktur);
expect(aufbau.abschnitte[0]?.baustein).toBeUndefined();
expect(aufbau.abschnitte[1]?.baustein?.versionId).toBe("bv-1");
expect(alsStruktur(aufbau).abschnitte[1]?.bausteinVersionId).toBe("bv-1");
});
it("trägt Name und Fassung nach und benennt einen Verweis, der nicht mehr gilt", () => {
const struktur = StrukturSchema.parse({
variablen: [],
abschnitte: [
{ titel: "a", bausteinVersionId: "bv-1", schritte: [] },
{ titel: "b", bausteinVersionId: "bv-weg", schritte: [] },
],
});
const aufbau = bausteineAnreichern(alsEditorAufbau(struktur), [BAUSTEIN]);
expect(aufbau.abschnitte[0]?.baustein).toEqual({
versionId: "bv-1",
name: "Datensicherung prüfen",
version: 3,
});
// Ein Verweis, dessen Baustein nicht mehr einsetzbar ist, behält seine
// Kennung – verschwinden darf er nicht, sonst wäre er beim nächsten
// Speichern still weg.
expect(aufbau.abschnitte[1]?.baustein).toEqual({
versionId: "bv-weg",
name: "(nicht mehr verfügbar)",
version: 0,
});
expect(alsStruktur(aufbau).abschnitte[1]?.bausteinVersionId).toBe("bv-weg");
});
});