Files
LehrerApp/LehrerApp.Desktop.Tests/RandomStudentPickerViewModelTests.cs
T
admin c79d96c5ec
CI / build-and-test (push) Canceled after 0s
Add intelligent random student picker
2026-09-29 14:02:48 +02:00

90 lines
3.0 KiB
C#

using LehrerApp.Core.Models;
using LehrerApp.Desktop.ViewModels.Groups;
using Xunit;
namespace LehrerApp.Desktop.Tests;
public sealed class RandomStudentPickerViewModelTests
{
private static (RandomStudentPickerViewModel Vm, List<Student> Students, LearningGroup Group) Build(int seed = 17)
{
var group = new LearningGroup { Name = "8a" };
var students = new List<Student>
{
new() { FirstName = "Anna", LastName = "Adler" },
new() { FirstName = "Ben", LastName = "Bauer" },
new() { FirstName = "Cem", LastName = "Can" },
};
var memberships = students.Select(s => new GroupMembership
{
GroupId = group.Id,
StudentId = s.Id,
}).ToList();
var vm = new RandomStudentPickerViewModel(
new FakeStudents(students), new FakeGroups([group]), new FakeMemberships(memberships),
new FakeSessions([]), new FakeEntries(), group.Id, new Random(seed));
return (vm, students, group);
}
[Fact]
public void Vollrunde_ZiehtAlleEinmal_BevorJemandWiederholtWird()
{
var (vm, _, _) = Build();
var names = new List<string>();
for (var i = 0; i < 3; i++)
{
vm.DrawCommand.Execute(null);
names.Add(vm.SelectedStudentName);
}
Assert.Equal(3, names.Distinct().Count());
Assert.Contains("Alle waren dran", vm.StatusText);
}
[Fact]
public void Reset_StartetZiehungOhneAngezeigtenNamenNeu()
{
var (vm, _, _) = Build();
vm.DrawCommand.Execute(null);
vm.ResetCommand.Execute(null);
Assert.False(vm.HasDrawnStudent);
Assert.Equal("Bereit?", vm.SelectedStudentName);
}
[Fact]
public void NurHeuteAktiveMitglieder_StehenZurAuswahl()
{
var group = new LearningGroup { Name = "8a" };
var active = new Student { FirstName = "Aktiv", LastName = "A" };
var former = new Student { FirstName = "Ehemalig", LastName = "E" };
var memberships = new List<GroupMembership>
{
new() { GroupId = group.Id, StudentId = active.Id },
new() { GroupId = group.Id, StudentId = former.Id, LeftAt = DateOnly.FromDateTime(DateTime.Today).AddDays(-1) },
};
var vm = new RandomStudentPickerViewModel(
new FakeStudents([active, former]), new FakeGroups([group]), new FakeMemberships(memberships),
new FakeSessions([]), new FakeEntries(), group.Id, new Random(1));
vm.DrawCommand.Execute(null);
Assert.Equal(active.FullName, vm.SelectedStudentName);
}
[Fact]
public void IntelligenteZiehung_VermeidetDirekteWiederholung()
{
var (vm, _, _) = Build(2);
vm.SelectionModeName = RandomStudentPickerViewModel.IntelligentLabel;
vm.DrawCommand.Execute(null);
var first = vm.SelectedStudentName;
vm.DrawCommand.Execute(null);
Assert.NotEqual(first, vm.SelectedStudentName);
}
}