using LehrerApp.Core.Models; using LehrerApp.Desktop.ViewModels; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class GlobalSearchViewModelTests { [Fact] public void LeereSuche_ZeigtSchnellaktionen() { var vm = BuildVm(); Assert.Collection(vm.Results, item => Assert.Equal(GlobalSearchAction.NewTask, item.Action), item => Assert.Equal(GlobalSearchAction.NewReminder, item.Action), item => Assert.Equal(GlobalSearchAction.NewStudent, item.Action)); Assert.Same(vm.Results[0], vm.SelectedResult); } [Fact] public void Suche_FindetSchuelerGruppeKlausurUndAufgabe() { var group = new LearningGroup { Name = "9 Chemie", SchoolYear = "2026/27", GradeLevel = 9 }; var student = new Student { FirstName = "Mia", LastName = "Chemie" }; var exam = new Exam { GroupId = group.Id, Title = "Chemie-Test", Date = new DateOnly(2026, 9, 1) }; var tasks = new FakeWorkTasks(); tasks.Add(new WorkTask { GroupId = group.Id, Title = "Chemie-Klausur korrigieren" }); var vm = BuildVm([student], [group], [exam], tasks); vm.Query = "Chemie"; Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Student && x.EntityId == student.Id); Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Group && x.EntityId == group.Id); Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Exam && x.EntityId == exam.Id); Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Task && x.Title.Contains("korrigieren")); } [Fact] public async Task TrefferAusfuehren_NavigiertUndSchliesstPalette() { var student = new Student { FirstName = "Mia", LastName = "Muster" }; var vm = BuildVm([student]); vm.Query = "Muster"; var result = Assert.Single(vm.Results, x => x.Kind == GlobalSearchResultKind.Student); GlobalSearchResult? navigated = null; var closed = false; vm.OnNavigate = x => navigated = x; vm.OnClose = () => closed = true; await vm.ExecuteCommand.ExecuteAsync(result); Assert.Same(result, navigated); Assert.True(closed); } [Fact] public async Task ErinnerungSchnellErfassen_StartetDialogAlsErinnerung() { var vm = BuildVm(); bool? reminder = null; vm.OnQuickAddTask = value => { reminder = value; return Task.CompletedTask; }; var action = vm.Results.Single(x => x.Action == GlobalSearchAction.NewReminder); await vm.ExecuteCommand.ExecuteAsync(action); Assert.True(reminder); } private static GlobalSearchViewModel BuildVm(List? students = null, List? groups = null, List? exams = null, FakeWorkTasks? tasks = null) => new(new FakeStudents(students ?? []), new FakeGroups(groups ?? []), new FakeExams(exams ?? []), tasks ?? new FakeWorkTasks()); }