Files
LehrerApp/LehrerApp.Tests/ExamCoverSheetServiceTests.cs
T
adminandClaude Opus 5.5 dd92128464 Klausur-Deckblätter als Sammel-PDF aus Vorlagen vom Typ exam-cover
Neuer Dialog "Deckblätter…" bei Klausuren, Punktetabelle als Drawing mit
festen Spaltenbreiten, FLOWDRAWBOX-Attribut fit=content, Stapel-Rendering
mit Seitenzahl je Datensatz, Kursbezeichnung und konfigurierbares Kürzel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 10:39:09 +02:00

84 lines
3.2 KiB
C#

using LehrerApp.Core.Models;
using LehrerApp.Core.Services;
using Xunit;
namespace LehrerApp.Tests;
public class ExamCoverSheetServiceTests
{
[Fact]
public void Columns_BonusaufgabeHatKeineNummerUndZaehltNichtMit()
{
List<ExamTask> tasks =
[
new() { Nr = 1, MaxPoints = 5 },
new() { Nr = 2, MaxPoints = 3, IsBonus = true },
new() { Nr = 3, MaxPoints = 12 },
];
var columns = ExamCoverSheetService.Columns(tasks, ExamVariant.A, null);
Assert.Equal(["1", "", "2"], columns.Select(c => c.Number));
Assert.True(columns[1].IsBonus);
Assert.All(columns, c => Assert.Null(c.AchievedPoints));
}
[Fact]
public void Columns_NurAufgabenDerGeschriebenenFassung_MitPunktenAusDerGesamtreihenfolge()
{
List<ExamTask> tasks =
[
new() { Nr = 1, MaxPoints = 5 },
new() { Nr = 2, MaxPoints = 6, Variant = ExamVariant.A },
new() { Nr = 3, MaxPoints = 7, Variant = ExamVariant.B },
new() { Nr = 4, MaxPoints = 4 },
];
var columns = ExamCoverSheetService.Columns(tasks, ExamVariant.B, [4, 0, 6.5, 3]);
Assert.Equal(["1", "2", "3"], columns.Select(c => c.Number));
Assert.Equal([5, 7, 4], columns.Select(c => c.MaxPoints));
Assert.Equal([4, 6.5, 3], columns.Select(c => c.AchievedPoints!.Value));
}
[Fact]
public void IsCorrected_AbwesendOderLeer_GiltNichtAlsKorrigiert()
{
Assert.False(ExamCoverSheetService.IsCorrected(null));
Assert.False(ExamCoverSheetService.IsCorrected(new ExamResult()));
Assert.False(ExamCoverSheetService.IsCorrected(new ExamResult { Absent = true, Points = [1] }));
Assert.True(ExamCoverSheetService.IsCorrected(new ExamResult { Points = [1] }));
Assert.True(ExamCoverSheetService.IsCorrected(new ExamResult { Grade = "2" }));
}
[Fact]
public void Includes_NiveauKlausur_NurPassendesNiveau()
{
var exam = new Exam { Date = new DateOnly(2025, 12, 18), Niveau = Niveau.G };
Assert.True(ExamParticipantService.Includes(exam, new GroupMembership { Niveau = Niveau.G }, false, false));
Assert.False(ExamParticipantService.Includes(exam, new GroupMembership { Niveau = Niveau.E }, false, false));
}
[Fact]
public void Includes_Nachschreibarbeit_OhneErgebnisNurWerDieErsteArbeitVersaeumtHat()
{
var original = new Exam();
var makeUp = new Exam { IsMakeUp = true, RepeatOfExamId = original.Id };
var wrote = Guid.NewGuid();
var missed = Guid.NewGuid();
List<ExamResult> originalResults =
[
new() { ExamId = original.Id, StudentId = wrote, Grade = "3" },
new() { ExamId = original.Id, StudentId = missed, Absent = true },
];
var wroteOriginal = ExamParticipantService.WroteOriginal(makeUp, _ => originalResults);
Assert.Equal([wrote], wroteOriginal);
Assert.False(ExamParticipantService.Includes(makeUp, null, false, wroteOriginal.Contains(wrote)));
Assert.True(ExamParticipantService.Includes(makeUp, null, true, wroteOriginal.Contains(wrote)));
Assert.True(ExamParticipantService.Includes(makeUp, null, false, wroteOriginal.Contains(missed)));
}
}