using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class GroupDetailViewModelTests { private static (GroupDetailViewModel Vm, FakeExams Exams, FakeWorkTasks Tasks) Build(LearningGroup group, Exam exam) { var exams = new FakeExams([exam]); var tasks = new FakeWorkTasks(); var groups = new FakeGroups([group]); var students = new FakeStudents([]); var memberships = new FakeMemberships([]); var subjects = new FakeSubjects([]); var grades = new FakeGrades(); var vm = new GroupDetailViewModel(groups, students, memberships, subjects, exams, grades, tasks, new ParticipationTabViewModel(new FakeSessions([]), new FakeEntries(), new FakeAspects(), students, memberships, groups, new FakeCompetencyDomains()), new GradeOverviewTabViewModel(grades, exams, new FakeResults(), students, memberships, new GradingService()), new PlanningTabViewModel(new FakeUnits(), new FakeLessons(), groups, subjects, new FakeCompetencyDomains(), TestSupport.BuildAiSettingsService()), new CompetencyOverviewTabViewModel(new FakeUnits(), exams, new FakeResults(), new FakeCompetencyDomains(), students, new CompetencyAnalysisService())); vm.LoadGroup(group.Id); vm.SelectedExam = vm.Exams.First(e => e.Id == exam.Id); return (vm, exams, tasks); } [Fact] public void SetExamStatus_PlannedZuConducted_ErstelltKorrekturAufgabe() { var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26" }; var exam = new Exam { GroupId = group.Id, Title = "Klausur 1", Date = new DateOnly(2026, 3, 10) }; var (vm, _, tasks) = Build(group, exam); vm.SetExamStatusCommand.Execute(ExamStatus.Conducted); var task = Assert.Single(tasks.GetAll()); Assert.Equal("Klausur korrigieren: Klausur 1", task.Title); Assert.Equal(TaskCategory.Correction, task.Category); Assert.Equal(group.Id, task.GroupId); Assert.Equal(new DateOnly(2026, 3, 24), task.DueDate); } [Fact] public void SetExamStatus_ConductedErneutGesetzt_ErstelltKeineZweiteAufgabe() { var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26" }; var exam = new Exam { GroupId = group.Id, Title = "Klausur 1", Date = new DateOnly(2026, 3, 10) }; var (vm, _, tasks) = Build(group, exam); vm.SetExamStatusCommand.Execute(ExamStatus.Conducted); vm.SelectedExam = vm.Exams.First(e => e.Id == exam.Id); vm.SetExamStatusCommand.Execute(ExamStatus.Conducted); Assert.Single(tasks.GetAll()); } [Fact] public void SetExamStatus_DirektAufGraded_ErstelltKeineAufgabe() { var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26" }; var exam = new Exam { GroupId = group.Id, Title = "Klausur 1", Date = new DateOnly(2026, 3, 10) }; var (vm, _, tasks) = Build(group, exam); vm.SetExamStatusCommand.Execute(ExamStatus.Graded); Assert.Empty(tasks.GetAll()); } }