90 lines
3.0 KiB
C#
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);
|
|
}
|
|
}
|