71 lines
3.6 KiB
C#
71 lines
3.6 KiB
C#
using LehrerApp.Core.Models;
|
|
using LehrerApp.Desktop.ViewModels.Groups;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Desktop.Tests;
|
|
|
|
public sealed class TeachingModeOutstandingHomeworkViewModelTests
|
|
{
|
|
[Fact]
|
|
public void Refresh_ZeigtJungeOffeneNachreichungenUndFiltertAktuellAbwesende()
|
|
{
|
|
var date = new DateOnly(2026, 9, 25);
|
|
var group = new LearningGroup { Name = "10c Chemie" };
|
|
var amelia = new Student { FirstName = "Amelia", LastName = "Gerste" };
|
|
var ben = new Student { FirstName = "Ben", LastName = "Muster" };
|
|
var carl = new Student { FirstName = "Carl", LastName = "Beispiel" };
|
|
var oldMember = new Student { FirstName = "Dana", LastName = "Alt" };
|
|
var previous = new ParticipationSession { GroupId = group.Id, Date = date.AddDays(-5) };
|
|
var older = new ParticipationSession { GroupId = group.Id, Date = date.AddDays(-130) };
|
|
var current = new ParticipationSession { GroupId = group.Id, Date = date };
|
|
var memberships = new FakeMemberships([
|
|
new GroupMembership { StudentId = amelia.Id, GroupId = group.Id },
|
|
new GroupMembership { StudentId = ben.Id, GroupId = group.Id },
|
|
new GroupMembership { StudentId = carl.Id, GroupId = group.Id },
|
|
new GroupMembership { StudentId = oldMember.Id, GroupId = group.Id,
|
|
Period = MembershipPeriod.Custom, JoinedAt = date.AddDays(-30), LeftAt = date.AddDays(-1) },
|
|
]);
|
|
var entries = new FakeEntries();
|
|
entries.Add(new ParticipationEntry { SessionId = previous.Id, StudentId = amelia.Id,
|
|
Homework = HomeworkStatus.MissingOverdue });
|
|
var benEntry = new ParticipationEntry { SessionId = previous.Id, StudentId = ben.Id,
|
|
Homework = HomeworkStatus.MissingOpen };
|
|
entries.Add(benEntry);
|
|
entries.Add(new ParticipationEntry { SessionId = previous.Id, StudentId = carl.Id,
|
|
Homework = HomeworkStatus.SubmittedLate });
|
|
entries.Add(new ParticipationEntry { SessionId = previous.Id, StudentId = oldMember.Id,
|
|
Homework = HomeworkStatus.MissingOverdue });
|
|
entries.Add(new ParticipationEntry { SessionId = older.Id, StudentId = ben.Id,
|
|
Homework = HomeworkStatus.MissingOverdue });
|
|
entries.Add(new ParticipationEntry { SessionId = current.Id, StudentId = ben.Id,
|
|
Attendance = AttendanceStatus.Present });
|
|
entries.Add(new ParticipationEntry { SessionId = current.Id, StudentId = amelia.Id,
|
|
Attendance = AttendanceStatus.ExcusePending });
|
|
|
|
var vm = new TeachingModeOutstandingHomeworkViewModel(group.Id, date,
|
|
new FakeStudents([amelia, ben, carl, oldMember]), memberships,
|
|
new FakeSessions([previous, older, current]), entries);
|
|
vm.SetCurrentSessionId(current.Id);
|
|
vm.IsExpanded = true;
|
|
|
|
Assert.Equal(ben.FullName, Assert.Single(vm.Rows).StudentName);
|
|
Assert.Equal("Offene Nachreichungen (1)", vm.Header);
|
|
vm.IncludeAbsentStudents = true;
|
|
Assert.Equal(2, vm.Rows.Count);
|
|
Assert.Contains(vm.Rows, r => r.StudentName == amelia.FullName &&
|
|
r.Status == HomeworkStatus.MissingOverdue);
|
|
|
|
vm.IncludeAbsentStudents = false;
|
|
var currentAmelia = entries.GetBySessionAndStudent(current.Id, amelia.Id)!;
|
|
currentAmelia.Attendance = AttendanceStatus.Present;
|
|
entries.Save(currentAmelia);
|
|
vm.Refresh();
|
|
Assert.Equal(2, vm.Rows.Count);
|
|
|
|
benEntry.Homework = HomeworkStatus.SubmittedLate;
|
|
entries.Save(benEntry);
|
|
vm.Refresh();
|
|
Assert.Equal(amelia.FullName, Assert.Single(vm.Rows).StudentName);
|
|
}
|
|
}
|