feat(bausteine): Abschnitte, die mehrere Vorlagen teilen (#57)
This commit was merged in pull request #57.
This commit is contained in:
@@ -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");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user