using LehrerApp.Desktop.Services; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class ClassTeacherViewModelsTests { [Fact] public void GroupByStudentAndDay_FasstFehlstundenProSchuelerUndTagZusammen() { var entries = new[] { new UntisClassAbsenceEntryDto("Muster Max", 1, "6a", 20260824, 1, 45, "HED", "Che", "Absent", "Krank", 1, "24.08.26", true, null, 3, "nicht entsch.", false), new UntisClassAbsenceEntryDto("Muster Max", 1, "6a", 20260824, 1, 45, "PAN", "Kunst", null, "Krank", 2, "24.08.26", true, null, 5, "nicht entsch.", true), new UntisClassAbsenceEntryDto("Andere Schuelerin", 2, "6a", 20260824, 1, 20, "BEN", "Deu", "Verspätung", null, 3, "24.08.26", false, "Zug verpasst", 1, "entsch.", false), }; var rows = ClassAbsenceDaySummaryRow.GroupByStudentAndDay(entries); Assert.Equal(2, rows.Count); var max = rows[1]; Assert.Equal("Muster Max", max.StudentName); Assert.Equal(2, max.TotalAbsentPeriods); Assert.Equal(90, max.TotalAbsentMinutes); Assert.Equal(["Che", "Kunst"], max.Subjects); Assert.Equal([3, 5], max.PeriodNumbers.Order()); Assert.Equal(["nicht entsch."], max.Statuses); Assert.Equal(["Absent"], max.AbsenceReasons); Assert.Equal("Krank", max.Note); Assert.Null(max.ExcuseNote); Assert.True(max.CountsAsFullDay); var andere = rows[0]; Assert.Equal("Andere Schuelerin", andere.StudentName); Assert.Equal(1, andere.TotalAbsentPeriods); Assert.Equal(20, andere.TotalAbsentMinutes); Assert.Equal(["Deu"], andere.Subjects); Assert.Null(andere.Note); Assert.Equal("Zug verpasst", andere.ExcuseNote); Assert.False(andere.CountsAsFullDay); } [Fact] public void GroupByStudentAndDay_TrenntGleichenNamenAnUnterschiedlichenTagen() { var entries = new[] { new UntisClassAbsenceEntryDto("Muster Max", 1, "6a", 20260824, 1, 45, "HED", "Che", null, null, 1, "24.08.26", true, null, 3, "nicht entsch.", false), new UntisClassAbsenceEntryDto("Muster Max", 1, "6a", 20260825, 1, 45, "HED", "Che", null, null, 2, "25.08.26", true, null, 3, "nicht entsch.", false), }; var rows = ClassAbsenceDaySummaryRow.GroupByStudentAndDay(entries); Assert.Equal(2, rows.Count); Assert.Equal(new DateOnly(2026, 8, 25), rows[0].Date); Assert.Equal(new DateOnly(2026, 8, 24), rows[1].Date); } }