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
+78
View File
@@ -40,6 +40,37 @@ public sealed class RepositoryTests
Assert.Equal(2, repo.GetAll(includeInactive: true).Count);
}
[Fact]
public void StudentRepository_Delete_LehntVerknuepfteDatenAb()
{
using var db = NewInMemoryContext();
var repo = new StudentRepository(db);
var student = new Student { FirstName = "Anna", LastName = "Beispiel" };
repo.Save(student);
db.Memberships.Insert(new GroupMembership { StudentId = student.Id, GroupId = Guid.NewGuid() });
db.Grades.Insert(new Grade { StudentId = student.Id, GroupId = Guid.NewGuid(), Value = "2" });
var references = repo.GetReferenceSummary(student.Id);
Assert.Equal(1, references.Memberships);
Assert.Equal(1, references.Grades);
Assert.Throws<InvalidOperationException>(() => repo.Delete(student.Id));
Assert.NotNull(repo.GetById(student.Id));
}
[Fact]
public void StudentRepository_Delete_EntferntUnverknuepftenSchueler()
{
using var db = NewInMemoryContext();
var repo = new StudentRepository(db);
var student = new Student { FirstName = "Anna", LastName = "Beispiel" };
repo.Save(student);
repo.Delete(student.Id);
Assert.Null(repo.GetById(student.Id));
}
// ── GroupRepository ───────────────────────────────────────────────────────
[Fact]
@@ -66,6 +97,53 @@ public sealed class RepositoryTests
Assert.NotNull(groupRepo.GetAll(includeInactive: true).FirstOrDefault(g => g.Name == "Mathe G"));
}
[Fact]
public void ArchivierteGruppe_BlockiertZentraleSchreibvorgaenge()
{
using var db = NewInMemoryContext();
var groupRepo = new GroupRepository(db);
var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26", IsActive = true };
groupRepo.Save(group);
group.IsActive = false;
groupRepo.Save(group);
var membership = new GroupMembership { GroupId = group.Id, StudentId = Guid.NewGuid() };
var exam = new Exam { GroupId = group.Id, Title = "Test" };
Assert.Throws<InvalidOperationException>(() => new GroupMembershipRepository(db).Save(membership));
Assert.Throws<InvalidOperationException>(() => new ExamRepository(db).Save(exam));
Assert.Throws<InvalidOperationException>(() => new GradeRepository(db).Save(
new Grade { GroupId = group.Id, StudentId = Guid.NewGuid(), Value = "2" }));
Assert.Throws<InvalidOperationException>(() => new UnitRepository(db).Save(
new Unit { GroupId = group.Id, Title = "Einheit" }));
Assert.Throws<InvalidOperationException>(() => new TimetableSlotRepository(db).Save(
new TimetableSlot { GroupId = group.Id, Weekday = DayOfWeek.Monday, PeriodNumber = 1 }));
}
[Fact]
public void ArchivierteGruppe_MussVorKorrekturSeparatReaktiviertWerden()
{
using var db = NewInMemoryContext();
var repo = new GroupRepository(db);
var group = new LearningGroup { Name = "8a", SchoolYear = "2025/26", IsActive = true };
repo.Save(group);
group.IsActive = false;
repo.Save(group);
var archived = repo.GetById(group.Id)!;
archived.Name = "Geändert";
Assert.Throws<InvalidOperationException>(() => repo.Save(archived));
archived.IsActive = true;
Assert.Throws<InvalidOperationException>(() => repo.Save(archived));
archived.Name = "8a";
repo.Save(archived);
archived.Name = "8b";
repo.Save(archived);
Assert.Equal("8b", repo.GetById(group.Id)!.Name);
}
[Fact]
public void GroupRepository_Delete_LoeschtAlleAbhaengigenDatensaetzeKaskadierend()
{