using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; /// Tests für die direkte, einlagige Lerngruppen-Navigation. public sealed class GroupListViewModelTests { private static GroupListViewModel BuildVm(params LearningGroup[] groups) => new(new FakeGroups([.. groups]), new FakeSubjects([]), new SchoolYearService()); [Fact] public void Gruppenkarte_OeffnetDirektDieUebersicht() { var group = CurrentGroup("9c"); var vm = BuildVm(group); Guid? openedId = null; int? openedTab = null; vm.OnNavigateToDetail = (id, tab) => { openedId = id; openedTab = tab; }; Assert.Single(vm.Groups).OpenCommand.Execute(null); Assert.Equal(group.Id, openedId); Assert.Equal(0, openedTab); } [Fact] public async Task Verwaltungsmenue_BearbeitetDieGewaehlteKarteOhneZwischenauswahl() { var first = CurrentGroup("9a"); var second = CurrentGroup("9b"); var vm = BuildVm(first, second); Guid? editedId = null; vm.OnEditGroup = id => { editedId = id; return Task.CompletedTask; }; var secondItem = vm.Groups.Single(x => x.Id == second.Id); await secondItem.EditCommand.ExecuteAsync(null); Assert.Equal(second.Id, editedId); } [Fact] public void Suche_FiltertWeiterhinNachGruppenname() { var vm = BuildVm(CurrentGroup("9 Chemie"), CurrentGroup("10 Mathematik")); vm.SearchText = "Chemie"; Assert.Equal("9 Chemie", Assert.Single(vm.Groups).Name); } [Fact] public void Archivieren_WirktAufDieKarteUndEntferntSieAusDerAktivenListe() { var group = CurrentGroup("9c"); var vm = BuildVm(group); var item = Assert.Single(vm.Groups); item.ToggleArchiveCommand.Execute(null); Assert.False(group.IsActive); Assert.Empty(vm.Groups); } private static LearningGroup CurrentGroup(string name) => new() { Name = name, SchoolYear = new SchoolYearService().CurrentSchoolYear(), IsActive = true, }; }