Stundenverlaufsplan: Viewer und Alternativpfad-Katalog (Kapitel 4.2 Nachtrag)

Schreibgeschützter LessonViewerDialog (größere Schrift, ohne Bearbeitungs-/Verlängern-/
Verschieben-Funktion) für den Einsatz während des Unterrichtens, erreichbar über "Anzeigen"
im Stunden-Toolbar.

Alternative Unterrichtsabläufe (z.B. Kurzversion bei Zeitmangel) laufen jetzt über einen
echten Katalog (neues Modell AlternativeLessonPath: Name + Beschreibung) statt Freitext direkt
an der Phase: im Verlaufsplan-Editor eine kompakte, farbig unterstützte Checkbox statt einer
durchgehend sichtbaren Eingabespalte, Zuordnung/Neuanlage über einen eigenen Dialog. Der Viewer
gruppiert Phasen entsprechend und zeigt die hinterlegte Beschreibung. Schema-Migration v3→v4
führt bestehende Freitextwerte verlustfrei in Katalogeinträge über.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 01:53:12 +02:00
co-authored by Claude Sonnet 5
parent de6ea001e7
commit ee1a47641e
22 changed files with 904 additions and 33 deletions
+41
View File
@@ -488,4 +488,45 @@ public sealed class RepositoryTests
Assert.Empty(repo.GetAll());
}
// ── AlternativeLessonPathRepository ───────────────────────────────────────
[Fact]
public void AlternativeLessonPathRepository_Save_LehntDuplikatNamenAb()
{
using var db = NewInMemoryContext();
var repo = new AlternativeLessonPathRepository(db);
repo.Save(new AlternativeLessonPath { Name = "Kurzversion" });
Assert.Throws<InvalidOperationException>(() =>
repo.Save(new AlternativeLessonPath { Name = "kurzversion" }));
}
[Fact]
public void AlternativeLessonPathRepository_GetById_FindetGespeichertenEintragMitBeschreibung()
{
using var db = NewInMemoryContext();
var repo = new AlternativeLessonPathRepository(db);
var entry = new AlternativeLessonPath { Name = "Kurzversion", Description = "Bei Zeitmangel." };
repo.Save(entry);
var found = repo.GetById(entry.Id);
Assert.NotNull(found);
Assert.Equal("Kurzversion", found!.Name);
Assert.Equal("Bei Zeitmangel.", found.Description);
}
[Fact]
public void AlternativeLessonPathRepository_Delete_EntferntEintrag()
{
using var db = NewInMemoryContext();
var repo = new AlternativeLessonPathRepository(db);
repo.Save(new AlternativeLessonPath { Name = "Kurzversion" });
var id = repo.GetAll().Single().Id;
repo.Delete(id);
Assert.Empty(repo.GetAll());
}
}