using LehrerApp.Core.Models; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class ParticipationSessionEditingTests { [Fact] public void Bearbeitungsdialog_AendertBestehendeSessionOhneVerknuepfungenZuErsetzen() { var session = new ParticipationSession { GroupId = Guid.NewGuid(), Date = new DateOnly(2026, 8, 19), Comment = "Sitzplan", LessonId = Guid.NewGuid(), CompetencyCodes = ["K1"], }; var vm = new AddSessionDialogViewModel(session) { DateText = "20.08.2026", Comment = "Elektrische Stromkreise", }; vm.SaveCommand.Execute(null); Assert.Same(session, vm.Result); Assert.Equal(new DateOnly(2026, 8, 20), session.Date); Assert.Equal("Elektrische Stromkreise", session.Comment); Assert.NotNull(session.LessonId); Assert.Equal(["K1"], session.CompetencyCodes); } [Fact] public async Task BearbeitenBefehl_SpeichertSessionUndAktualisiertAnzeige() { var group = new LearningGroup { Name = "8a", SchoolYear = "2026/27" }; var session = new ParticipationSession { GroupId = group.Id, Date = new DateOnly(2026, 8, 19), Comment = "Sitzplan", }; var sessions = new FakeSessions([session]); var vm = new ParticipationTabViewModel( sessions, new FakeEntries(), new FakeAspects(), new FakeStudents([]), new FakeMemberships([]), new FakeGroups([group]), new FakeCompetencyDomains()); vm.OnEditSession = existing => { existing.Comment = "Nachbesprechung Elektrizität"; return Task.FromResult(existing); }; vm.Initialize(group.Id, group.SchoolYear); await vm.EditSessionCommand.ExecuteAsync(null); Assert.Equal(session.Id, vm.SelectedSession?.Id); Assert.Equal("Nachbesprechung Elektrizität", sessions.GetById(session.Id)?.Comment); Assert.Contains("Nachbesprechung Elektrizität", vm.SelectedSessionDisplay); } [Fact] public async Task LoeschenBefehl_FragtBestaetigungAbUndEntferntSessionMitsamtBewertungen() { var group = new LearningGroup { Name = "8a", SchoolYear = "2026/27" }; var session = new ParticipationSession { GroupId = group.Id, Date = new DateOnly(2026, 8, 19) }; var sessions = new FakeSessions([session]); var entries = new FakeEntries(); entries.Add(new ParticipationEntry { SessionId = session.Id, StudentId = Guid.NewGuid() }); var vm = new ParticipationTabViewModel( sessions, entries, new FakeAspects(), new FakeStudents([]), new FakeMemberships([]), new FakeGroups([group]), new FakeCompetencyDomains()); vm.Initialize(group.Id, group.SchoolYear); vm.SelectedSession = vm.Sessions.Single(s => s.Id == session.Id); int? passedEntryCount = null; vm.OnConfirmDeleteSession = (_, count) => { passedEntryCount = count; return Task.FromResult(true); }; await vm.DeleteSessionCommand.ExecuteAsync(null); Assert.Equal(1, passedEntryCount); Assert.Null(sessions.GetById(session.Id)); } [Fact] public async Task LoeschenBefehl_BrichtBeiAbgelehnterBestaetigungAb() { var group = new LearningGroup { Name = "8a", SchoolYear = "2026/27" }; var session = new ParticipationSession { GroupId = group.Id, Date = new DateOnly(2026, 8, 19) }; var sessions = new FakeSessions([session]); var vm = new ParticipationTabViewModel( sessions, new FakeEntries(), new FakeAspects(), new FakeStudents([]), new FakeMemberships([]), new FakeGroups([group]), new FakeCompetencyDomains()); vm.Initialize(group.Id, group.SchoolYear); vm.SelectedSession = vm.Sessions.Single(s => s.Id == session.Id); vm.OnConfirmDeleteSession = (_, _) => Task.FromResult(false); await vm.DeleteSessionCommand.ExecuteAsync(null); Assert.NotNull(sessions.GetById(session.Id)); } }