using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; /// Tests für den Schnellüberblick im Auswahl-Panel der Gruppenliste (Nutzer-Feedback: /// "oberhalb der Buttonliste ein paar Daten auswerfen. Nächste Stunde, nächste Arbeit, /// wichtige Todos"). public sealed class GroupListViewModelTests { private static GroupListViewModel BuildVm(LearningGroup group, FakeLessons? lessons = null, FakeExams? exams = null, FakeWorkTasks? tasks = null) => new(new FakeGroups([group]), new FakeSubjects([]), new SchoolYearService(), lessons ?? new FakeLessons(), exams ?? new FakeExams([]), tasks ?? new FakeWorkTasks()); [Fact] public void SelectedGroup_OhneDatenZeigtKeinenSchnellueberblick() { var group = new LearningGroup { Name = "9c" }; var vm = BuildVm(group); vm.SelectedGroup = vm.Groups.Count > 0 ? vm.Groups[0] : new GroupListItem(group, ""); Assert.False(vm.QuickHasAnything); } [Fact] public void SelectedGroup_ZeigtNaechsteGeplanteStundeUndKlausur() { var group = new LearningGroup { Name = "9c" }; var today = DateOnly.FromDateTime(DateTime.Today); var lessons = new FakeLessons(); lessons.Add(new Lesson { GroupId = group.Id, Date = today.AddDays(3), Topic = "Redox", Status = LessonStatus.Planned }); var exams = new FakeExams([new Exam { GroupId = group.Id, Date = today.AddDays(10), Title = "Klausur 1" }]); var vm = BuildVm(group, lessons: lessons, exams: exams); vm.SelectedGroup = new GroupListItem(group, ""); Assert.True(vm.QuickHasNextLesson); Assert.Contains("Redox", vm.QuickNextLessonLabel); Assert.True(vm.QuickHasNextExam); Assert.Contains("Klausur 1", vm.QuickNextExamLabel); Assert.True(vm.QuickHasAnything); } [Fact] public void SelectedGroup_ZeigtOffeneAufgabenDieserGruppeSortiertNachFaelligkeit() { var group = new LearningGroup { Name = "9c" }; var today = DateOnly.FromDateTime(DateTime.Today); var tasks = new FakeWorkTasks(); tasks.Add(new WorkTask { GroupId = group.Id, Title = "Bald fällig", DueDate = today.AddDays(1), Status = WorkTaskStatus.Open }); tasks.Add(new WorkTask { GroupId = group.Id, Title = "Erledigt", DueDate = today, Status = WorkTaskStatus.Done }); tasks.Add(new WorkTask { GroupId = Guid.NewGuid(), Title = "Andere Gruppe", DueDate = today, Status = WorkTaskStatus.Open }); var vm = BuildVm(group, tasks: tasks); vm.SelectedGroup = new GroupListItem(group, ""); Assert.True(vm.QuickHasTasks); Assert.Equal("Bald fällig", Assert.Single(vm.QuickTasks).Title); } [Fact] public void SelectedGroup_Zuruecksetzen_LeertSchnellueberblick() { var group = new LearningGroup { Name = "9c" }; var today = DateOnly.FromDateTime(DateTime.Today); var exams = new FakeExams([new Exam { GroupId = group.Id, Date = today.AddDays(10), Title = "Klausur 1" }]); var vm = BuildVm(group, exams: exams); vm.SelectedGroup = new GroupListItem(group, ""); Assert.True(vm.QuickHasAnything); vm.SelectedGroup = null; Assert.False(vm.QuickHasAnything); Assert.Empty(vm.QuickTasks); } }