75 lines
3.3 KiB
C#
75 lines
3.3 KiB
C#
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,
|
|
};
|
|
}
|