Files
LehrerApp/LehrerApp.Tests/ExamWeekLoadServiceTests.cs
T
adminandClaude Sonnet 5 da4b88c93d
CI / build-and-test (push) Canceled after 0s
Persönliche Klausurlast pro Woche, Mitarbeit-Reset und Sitzplan-Strichliste
- Klausuren: neuer ExamWeekLoadService zählt eigene Klausuren je ISO-Woche
  über alle Kurse hinweg (Klassen-Kollisionen deckt bereits der externe
  Klausurplaner ab). Hinweis direkt im ExamDialog beim Datum, zusätzlich
  neue Dashboard-Karte "Klausurwochen" für die 60-Tage-Vorausschau.
- Mitarbeit: Schnelleingabe-Dialog kann eine Bewertung jetzt per Entf auf
  "nicht bewertet" zurücksetzen (bisher nur im Sitzplatz-Dialog möglich).
- Sitzplan: Strichliste "gemeldet"/"gemeldet und drangekommen" direkt auf
  der Sitzplatz-Kachel (ParticipationEntry.RaisedHandCount/CalledOnCount);
  schlägt im Sitzplatz-Dialog eine Quantitätsbewertung vor (ein Klick zum
  Übernehmen, nie automatisch).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-30 02:11:20 +02:00

87 lines
2.8 KiB
C#

using LehrerApp.Core.Models;
using LehrerApp.Core.Services;
using Xunit;
namespace LehrerApp.Tests;
public class ExamWeekLoadServiceTests
{
private static Exam MakeExam(DateOnly date, ExamStatus status = ExamStatus.Planned) => new()
{
GroupId = Guid.NewGuid(), Title = "Klausur", Status = status, Date = date,
};
[Fact]
public void CountInSameWeek_ZaehltNurKlausurenInDerselbenIsoWoche()
{
// KW 12/2026: Montag 16.03. bis Sonntag 22.03.
var monday = new DateOnly(2026, 3, 16);
var exams = new List<Exam>
{
MakeExam(monday),
MakeExam(monday.AddDays(4)), // Freitag derselben Woche
MakeExam(monday.AddDays(-1)), // Sonntag der Vorwoche
MakeExam(monday.AddDays(7)), // Montag der Folgewoche
};
var count = ExamWeekLoadService.CountInSameWeek(exams, monday.AddDays(2));
Assert.Equal(2, count);
}
[Fact]
public void CountInSameWeek_SchliesstAngegebeneKlausurAus()
{
var monday = new DateOnly(2026, 3, 16);
var editing = MakeExam(monday);
var exams = new List<Exam> { editing, MakeExam(monday.AddDays(1)) };
var count = ExamWeekLoadService.CountInSameWeek(exams, monday, editing.Id);
Assert.Equal(1, count);
}
[Fact]
public void FindOverloadedWeeks_MeldetNurWochenAbDemSchwellenwert()
{
var monday = new DateOnly(2026, 3, 16);
var exams = new List<Exam>
{
MakeExam(monday), MakeExam(monday.AddDays(1)), // KW 12: 2 -> unauffällig
MakeExam(monday.AddDays(7)), MakeExam(monday.AddDays(8)), MakeExam(monday.AddDays(9)), // KW 13: 3 -> Meldung
};
var overloaded = ExamWeekLoadService.FindOverloadedWeeks(exams);
var week = Assert.Single(overloaded);
Assert.Equal(3, week.ExamCount);
Assert.Equal(monday.AddDays(7), week.WeekStart);
}
[Fact]
public void FindOverloadedWeeks_OhneHaeufung_GibtLeereListeZurueck()
{
var monday = new DateOnly(2026, 3, 16);
var exams = new List<Exam> { MakeExam(monday), MakeExam(monday.AddDays(7)) };
Assert.Empty(ExamWeekLoadService.FindOverloadedWeeks(exams));
}
[Fact]
public void FindOverloadedWeeks_SortiertChronologisch()
{
var laterWeek = new DateOnly(2026, 4, 20);
var earlierWeek = new DateOnly(2026, 3, 16);
var exams = new List<Exam>
{
MakeExam(laterWeek), MakeExam(laterWeek.AddDays(1)), MakeExam(laterWeek.AddDays(2)),
MakeExam(earlierWeek), MakeExam(earlierWeek.AddDays(1)), MakeExam(earlierWeek.AddDays(2)),
};
var overloaded = ExamWeekLoadService.FindOverloadedWeeks(exams);
Assert.Equal(2, overloaded.Count);
Assert.True(overloaded[0].WeekStart < overloaded[1].WeekStart);
}
}