using LehrerApp.Desktop.Services; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class WindowSettingsServiceTests { private static string BuildTempPath() { var path = Path.Combine(Path.GetTempPath(), $"lehrerapp-windowsettings-tests-{Guid.NewGuid():N}"); Directory.CreateDirectory(path); return path; } [Fact] public void Load_OhneVorhandeneDatei_LiefertStandardgroesse() { var service = new WindowSettingsService(BuildTempPath()); var settings = service.Load(); Assert.Equal(1280, settings.Width); Assert.Equal(800, settings.Height); Assert.False(settings.IsMaximized); } [Fact] public void SaveUndLoad_PersistiertUeberNeueInstanz() { var path = BuildTempPath(); new WindowSettingsService(path).Save(new WindowSettings { Width = 1600, Height = 950, IsMaximized = true }); var reloaded = new WindowSettingsService(path).Load(); Assert.Equal(1600, reloaded.Width); Assert.Equal(950, reloaded.Height); Assert.True(reloaded.IsMaximized); } /// Eine winzige oder negative Größe (z.B. durch eine beschädigte/manuell editierte Datei) /// darf das Fenster beim nächsten Start nicht unbenutzbar klein machen. [Fact] public void Load_UnplausibelKleineGroesse_FaelltAufStandardgroesseZurueck() { var path = BuildTempPath(); new WindowSettingsService(path).Save(new WindowSettings { Width = 5, Height = 5 }); var reloaded = new WindowSettingsService(path).Load(); Assert.Equal(1280, reloaded.Width); Assert.Equal(800, reloaded.Height); } [Fact] public void Load_BeschaedigteDatei_FaelltAufStandardgroesseZurueck() { var path = BuildTempPath(); File.WriteAllText(Path.Combine(path, "windowsettings.json"), "{ kein json"); var settings = new WindowSettingsService(path).Load(); Assert.Equal(1280, settings.Width); Assert.Equal(800, settings.Height); } }