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); } } }