Neue Funktion Schüler austragen statt aus Kurs löschen.

This commit is contained in:
2026-08-15 23:38:42 +02:00
parent 52bb9c2c2f
commit da8d2bb1da
19 changed files with 473 additions and 114 deletions
+6 -2
View File
@@ -21,8 +21,12 @@ public class FakeMemberships(List<GroupMembership> all) : IGroupMembershipReposi
public List<GroupMembership> GetByGroup(Guid groupId) => all.Where(m => m.GroupId == groupId).ToList();
public GroupMembership? GetByStudentAndGroup(Guid studentId, Guid groupId) =>
all.FirstOrDefault(m => m.StudentId == studentId && m.GroupId == groupId);
public void Save(GroupMembership membership) { }
public void Delete(Guid id) { }
public void Save(GroupMembership membership)
{
all.RemoveAll(m => m.Id == membership.Id);
all.Add(membership);
}
public void Delete(Guid id) => all.RemoveAll(m => m.Id == id);
}
public class FakeSessions(List<ParticipationSession> all) : IParticipationSessionRepository
@@ -22,7 +22,8 @@ public class ReportGradeCalculationTests
var grading = new GradingService();
return new ReportGradeDialogViewModel(grades, exams, results, students, memberships,
schemes, reportGrades, grading, GroupId, GroupType.Class, GradingSystem.Grades1To6, "Testgruppe");
schemes, reportGrades, grading, GroupId, GroupType.Class, GradingSystem.Grades1To6,
"Testgruppe", "2025/26");
}
private static (Exam Exam1, Exam Exam2, FakeExams Exams, FakeResults Results) BuildExams()
@@ -0,0 +1,39 @@
using LehrerApp.Core.Models;
using LehrerApp.Desktop.ViewModels.Groups;
using Xunit;
namespace LehrerApp.Desktop.Tests;
public class WithdrawStudentDialogViewModelTests
{
[Fact]
public void InitialisiertMitHeutigemDatumUndSpeichertAustritt()
{
var membership = new GroupMembership { JoinedAt = new DateOnly(2025, 9, 1) };
var memberships = new FakeMemberships([membership]);
var vm = new WithdrawStudentDialogViewModel(
memberships, membership, "Anna Beispiel", "7a", new DateOnly(2025, 10, 5));
Assert.Equal(new DateOnly(2025, 10, 5), DateOnly.FromDateTime(vm.SelectedDate!.Value.LocalDateTime));
vm.SaveCommand.Execute(null);
Assert.True(vm.WasSaved);
Assert.Equal(new DateOnly(2025, 10, 5), membership.LeftAt);
}
[Fact]
public void VerhindertAustrittVorEintritt()
{
var membership = new GroupMembership { JoinedAt = new DateOnly(2025, 9, 1) };
var vm = new WithdrawStudentDialogViewModel(
new FakeMemberships([membership]), membership, "Anna Beispiel", "7a");
vm.SelectedDate = new DateTimeOffset(2025, 8, 31, 0, 0, 0, TimeSpan.Zero);
vm.SaveCommand.Execute(null);
Assert.False(vm.WasSaved);
Assert.Null(membership.LeftAt);
Assert.NotEmpty(vm.DateError);
}
}