feat: Stundenplan-Badge für unkontrollierte Hausaufgaben (4.5.4)

Lesson bekommt HomeworkChecked/HomeworkCheckDismissed. Der Stundenplan
(Tagesliste und Wochenraster im "Heute"-Tab) zeigt ein 📓-Badge, wenn die
letzte Stunde einer Gruppe eine Hausaufgabe hatte, die noch nicht
kontrolliert oder bewusst übersprungen wurde. Umschaltbar über zwei sich
gegenseitig ausschließende Checkboxen ("Kontrolliert"/"Nicht
kontrollieren") im Verlaufsplan-Editor, direkt neben dem
Hausaufgabenfeld.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 20:52:22 +02:00
co-authored by Claude Sonnet 5
parent 462080ab92
commit 41bf2c0756
8 changed files with 215 additions and 10 deletions
@@ -179,6 +179,59 @@ public sealed class LessonDialogViewModelTests
Assert.Single(lessons.GetByUnit(unitId));
}
[Fact]
public void HasHomeworkText_OhneHausaufgabe_IstFalse()
{
var vm = BuildVm(Guid.NewGuid(), Guid.NewGuid());
Assert.False(vm.HasHomeworkText);
vm.Homework = " ";
Assert.False(vm.HasHomeworkText);
vm.Homework = "S. 42";
Assert.True(vm.HasHomeworkText);
}
[Fact]
public void Save_UebernimmtHomeworkCheckedUndDismissed()
{
var vm = BuildVm(Guid.NewGuid(), Guid.NewGuid());
vm.Topic = "Brechung"; vm.DateText = "01.09.2025";
vm.Homework = "S. 42"; vm.HomeworkChecked = true;
vm.SaveCommand.Execute(null);
Assert.True(vm.Result!.HomeworkChecked);
Assert.False(vm.Result.HomeworkCheckDismissed);
}
[Fact]
public void HomeworkChecked_UndHomeworkCheckDismissed_SchliessenSichGegenseitigAus()
{
var vm = BuildVm(Guid.NewGuid(), Guid.NewGuid());
vm.HomeworkChecked = true;
Assert.False(vm.HomeworkCheckDismissed);
vm.HomeworkCheckDismissed = true;
Assert.False(vm.HomeworkChecked);
}
[Fact]
public void Bearbeiten_UebernimmtGespeicherteHomeworkFlags()
{
var editing = new Lesson
{
Topic = "Alt", Date = new DateOnly(2025, 9, 1), Homework = "S. 42",
HomeworkCheckDismissed = true,
};
var vm = BuildVm(Guid.NewGuid(), Guid.NewGuid(), editing);
Assert.True(vm.HomeworkCheckDismissed);
Assert.False(vm.HomeworkChecked);
}
[Fact]
public void HasAlternativePath_AngehaktOeffnetZuweisungUndUebernimmtErgebnis()
{