Kapitel 7 abgeschlossen.

This commit is contained in:
2026-08-16 00:29:01 +02:00
parent da8d2bb1da
commit f9e398b225
47 changed files with 2636 additions and 107 deletions
@@ -0,0 +1,74 @@
using LehrerApp.Core.Models;
using LehrerApp.Core.Services;
using LehrerApp.Desktop.ViewModels.Groups;
using Xunit;
namespace LehrerApp.Desktop.Tests;
public sealed class GroupRolloverDialogViewModelTests
{
[Fact]
public void Vorauswahl_NimmtNurAktiveSchuelerAmSchuljahresende()
{
var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26", GradeLevel = 8 };
var fullYearStudent = Student("Ganzjahr");
var h1Student = Student("Halbjahr");
var withdrawnStudent = Student("Ausgetreten");
var inactiveStudent = Student("Inaktiv", active: false);
var membershipList = new List<GroupMembership>
{
Membership(group, fullYearStudent, MembershipPeriod.FullYear),
Membership(group, h1Student, MembershipPeriod.H1Only),
Membership(group, withdrawnStudent, MembershipPeriod.FullYear, new DateOnly(2026, 5, 1)),
Membership(group, inactiveStudent, MembershipPeriod.FullYear),
};
var groups = new FakeGroups([group]);
var memberships = new FakeMemberships(membershipList);
var schemes = new FakeSchemes();
var schoolYears = new SchoolYearService();
var vm = new GroupRolloverDialogViewModel(group,
new FakeStudents([fullYearStudent, h1Student, withdrawnStudent, inactiveStudent]),
memberships, schemes, schoolYears,
new GroupRolloverService(groups, memberships, schemes, schoolYears));
Assert.True(vm.Students.Single(s => s.FullName.Contains("Ganzjahr")).IsSelected);
Assert.False(vm.Students.Single(s => s.FullName.Contains("Halbjahr")).IsSelected);
Assert.False(vm.Students.Single(s => s.FullName.Contains("Ausgetreten")).IsSelected);
var inactive = vm.Students.Single(s => s.FullName.Contains("Inaktiv"));
Assert.False(inactive.IsSelected);
Assert.False(inactive.CanSelect);
Assert.Equal(1, vm.SelectedCount);
}
[Fact]
public void Dialog_SchlaegtNaechstesSchuljahrUndNaechsteStufeVor()
{
var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26", GradeLevel = 8 };
var student = Student("Ganzjahr");
var membershipList = new List<GroupMembership> { Membership(group, student, MembershipPeriod.FullYear) };
var groups = new FakeGroups([group]);
var memberships = new FakeMemberships(membershipList);
var schemes = new FakeSchemes();
var schoolYears = new SchoolYearService();
var vm = new GroupRolloverDialogViewModel(group, new FakeStudents([student]), memberships,
schemes, schoolYears, new GroupRolloverService(groups, memberships, schemes, schoolYears));
Assert.Equal("2026/27", vm.TargetSchoolYear);
Assert.Equal(9, vm.GradeLevel);
Assert.True(vm.ArchiveSource);
}
private static Student Student(string lastName, bool active = true) =>
new() { FirstName = "Test", LastName = lastName, IsActive = active };
private static GroupMembership Membership(LearningGroup group, Student student,
MembershipPeriod period, DateOnly? leftAt = null) => new()
{
GroupId = group.Id,
StudentId = student.Id,
Period = period,
JoinedAt = new DateOnly(2025, 8, 1),
LeftAt = leftAt,
};
}