using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; /// Deckt 1.6.3 (Bulk-Aktion "Rest als abwesend markieren") ab — löst das Nutzer-Feedback, dass /// Schüler, die nie nachschreiben, sonst dauerhaft eine leere, unberührte Zeile hinterlassen. public sealed class ExamGradingDialogViewModelTests { [Fact] public void MarkRemainingAbsent_MarktNurUnberührteZeilenAbwesend() { var group = new LearningGroup { Name = "Q1 Chemie" }; var studentWithPoints = new Student { FirstName = "Anna", LastName = "Bauer" }; var untouchedStudent1 = new Student { FirstName = "Ben", LastName = "Cordes" }; var untouchedStudent2 = new Student { FirstName = "Cara", LastName = "Diehl" }; var students = new FakeStudents([studentWithPoints, untouchedStudent1, untouchedStudent2]); var memberships = new FakeMemberships( [ new GroupMembership { GroupId = group.Id, StudentId = studentWithPoints.Id }, new GroupMembership { GroupId = group.Id, StudentId = untouchedStudent1.Id }, new GroupMembership { GroupId = group.Id, StudentId = untouchedStudent2.Id }, ]); var exam = new Exam { GroupId = group.Id, Title = "Klausur 1", Tasks = [new ExamTask { Nr = 1, MaxPoints = 10 }], GradingKey = GradingService.DefaultKey1To6(), }; var results = new FakeResults(); var vm = new ExamGradingDialogViewModel(results, students, memberships, new GradingService(), exam, group.Id); var rowWithPoints = vm.Rows.Single(r => r.StudentId == studentWithPoints.Id); rowWithPoints.Cells[0].TrySetValue(7); vm.MarkRemainingAbsentCommand.Execute(null); Assert.False(rowWithPoints.Absent); Assert.True(vm.Rows.Single(r => r.StudentId == untouchedStudent1.Id).Absent); Assert.True(vm.Rows.Single(r => r.StudentId == untouchedStudent2.Id).Absent); } [Fact] public void MarkRemainingAbsent_LässtBereitsAbwesendMarkierteUnverändert() { var group = new LearningGroup { Name = "Q1 Chemie" }; var student = new Student { FirstName = "Ben", LastName = "Cordes" }; var students = new FakeStudents([student]); var memberships = new FakeMemberships( [new GroupMembership { GroupId = group.Id, StudentId = student.Id }]); var exam = new Exam { GroupId = group.Id, Title = "Klausur 1", Tasks = [new ExamTask { Nr = 1, MaxPoints = 10 }], GradingKey = GradingService.DefaultKey1To6() }; var vm = new ExamGradingDialogViewModel(new FakeResults(), students, memberships, new GradingService(), exam, group.Id); vm.Rows[0].Absent = true; vm.MarkRemainingAbsentCommand.Execute(null); Assert.True(vm.Rows[0].Absent); } }