Unterrichtsplanung: Serienerzeugung, Stundenraster, Aufsichten & Vertretung (Kapitel 4.2/4.3 Nachtrag)
Stunden serienweise aus dem Stundenplan erzeugen (4.2.5); Stundenraster (Uhrzeiten je Stunde) in den Einstellungen mit Zeitbedarf-Rückmeldung im Verlaufsplan-Editor; wiederkehrende Pausenaufsicht; neuer "Vertretung eintragen"-Dialog für einmalige Vertretungsaufsicht, Vertretungsstunde, Sondereinsätze (Ausflüge, Berufsmessen) und schlichten Stundenausfall. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
using LehrerApp.Core.Services;
|
||||
using Xunit;
|
||||
|
||||
namespace LehrerApp.Tests;
|
||||
|
||||
public sealed class PeriodScheduleServiceTests
|
||||
{
|
||||
[Fact]
|
||||
public void NeueKonfiguration_HatKeineStundenHinterlegt()
|
||||
{
|
||||
using var temp = new TempAppData();
|
||||
var service = new PeriodScheduleService(temp.Path);
|
||||
|
||||
Assert.Empty(service.Periods);
|
||||
Assert.Null(service.GetTimes(1));
|
||||
Assert.Equal(0, service.GetDurationMinutes(1));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetPeriods_WirdUeberNeueInstanzHinwegPersistiert()
|
||||
{
|
||||
using var temp = new TempAppData();
|
||||
new PeriodScheduleService(temp.Path).SetPeriods(
|
||||
[
|
||||
new PeriodTimeEntry { PeriodNumber = 1, Start = new TimeOnly(8, 0), End = new TimeOnly(8, 45) },
|
||||
new PeriodTimeEntry { PeriodNumber = 2, Start = new TimeOnly(8, 45), End = new TimeOnly(9, 30) },
|
||||
]);
|
||||
|
||||
var second = new PeriodScheduleService(temp.Path);
|
||||
|
||||
Assert.Equal(45, second.GetDurationMinutes(1));
|
||||
Assert.Equal((new TimeOnly(8, 45), new TimeOnly(9, 30)), second.GetTimes(2));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetPeriods_ErsetztVorherigeKonfigurationVollstaendig()
|
||||
{
|
||||
using var temp = new TempAppData();
|
||||
var service = new PeriodScheduleService(temp.Path);
|
||||
service.SetPeriods([new PeriodTimeEntry { PeriodNumber = 1, Start = new TimeOnly(8, 0), End = new TimeOnly(8, 45) }]);
|
||||
|
||||
service.SetPeriods([new PeriodTimeEntry { PeriodNumber = 2, Start = new TimeOnly(8, 45), End = new TimeOnly(9, 30) }]);
|
||||
|
||||
Assert.Null(service.GetTimes(1));
|
||||
Assert.NotNull(service.GetTimes(2));
|
||||
}
|
||||
|
||||
private sealed class TempAppData : IDisposable
|
||||
{
|
||||
public string Path { get; } = System.IO.Path.Combine(
|
||||
System.IO.Path.GetTempPath(), $"lehrerapp-periodschedule-tests-{Guid.NewGuid():N}");
|
||||
|
||||
public TempAppData() => Directory.CreateDirectory(Path);
|
||||
public void Dispose() { if (Directory.Exists(Path)) Directory.Delete(Path, recursive: true); }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user