Der bislang leere "Übersicht"-Tab je Kurs zeigt jetzt einen kompakten "Was steht an"-Überblick aus bereits vorhandenen Daten mit Klick-Durchsprung in den jeweiligen Tab: nächste Stunde/Klausur, Hinweis auf die letzte Mitarbeitssitzung, offene Hausaufgaben-Kontrolle, offene Entschuldigungen, offene Dokumentations-Entwürfe und auffällige Fehlzeiten. Die Fehlzeiten-Karte ist bewusst kein 1:1-Abbild der Dashboard-Warnung: erst ab einer Mindeststichprobe von 8 erfassten Terminen im Schuljahr gemeldet, damit ein einzelner Fehltag zu Schuljahresbeginn nicht sofort als auffällig gilt. Das Hauptdashboard hat dasselbe Problem noch, wird dort separat nachgezogen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
81 lines
3.6 KiB
C#
81 lines
3.6 KiB
C#
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 GroupOverviewViewModel(new FakeLessons(), exams, new FakeSessions([]), new FakeEntries(), students,
|
|
new FakeDocumentation(), 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));
|
|
|
|
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());
|
|
}
|
|
}
|