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>
57 lines
2.0 KiB
C#
57 lines
2.0 KiB
C#
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); }
|
|
}
|
|
}
|