Files
LehrerApp/LehrerApp.Desktop.Tests/GroupDetailViewModelTests.cs
T
adminandClaude Sonnet 5 7245196689 WIP (unstable): Klassenlehrer-Tab (fremde Klassenbucheinträge + Fehlzeiten der Klasse)
Neuer Tab in der Gruppendetailansicht (LearningGroup.IsClassTeacher-Flag), zeigt
Klassenbucheinträge anderer Lehrkräfte sowie Fehlzeiten der ganzen Klasse über alle
Fächer, pro Schüler*in und Tag zusammengefasst. Beides rein lesend, kein Übernehmen
in lokale Daten. Fehlzeiten-Bericht (AbsencePerStudent) adressiert die Klasse über
"KL"+getKlassen-ID, automatisch aufgelöst - noch nicht mit echtem WebUntis-Zugang
gegengeprüft (siehe TODO.md).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 21:19:39 +02:00

84 lines
3.8 KiB
C#

using LehrerApp.Core.Models;
using LehrerApp.Core.Services;
using LehrerApp.Desktop.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 GroupOverviewViewModel(new FakeLessons(), exams, new FakeSessions([]), new FakeEntries(), students,
new FakeDocumentation(), tasks, new AttendanceBalanceService(), new SchoolYearService()),
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 FakeSessions([])),
new CompetencyOverviewTabViewModel(new FakeUnits(), exams, new FakeResults(),
new FakeCompetencyDomains(), students, new CompetencyAnalysisService()),
new SeatingPlanTabViewModel(new FakeSeatingPlans(), students, memberships,
new FakeSessions([]), new FakeEntries(), new FakeAspects()),
new GroupDocumentationTabViewModel(new FakeDocumentation(), students, groups),
new ClassTeacherTabViewModel(
new WebUntisIntegrationService(new HttpClient(), TestSupport.BuildWebUntisSettingsService()), groups));
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());
}
}